例如:
inp = keras.Input(shape=s)
D = keras.layers.Dense(d)(inp)
L = keras.layers.Lambda(lambda x: myFunc(x))(D)
outp = keras.layers.Dense(...)(L)
model = keras.model(inp,outp)
對比
inp = keras.Input(shape=s)
D = keras.layers.Dense(d)(inp)
L = myFunc(D)
outp = keras.layers.Dense(...)(L)
model = keras.model(inp,outp)
其中myFunc由張量流函陣列成。
后一個版本似乎作業得很好。將東西包裝成層有什么特殊價值嗎?我知道當有可學習的引數時可能需要它,但在這種情況下我會使用自定義層,而不是 lambda。
uj5u.com熱心網友回復:
我認為從功能上講,使用tf.keras.layers.Lambda. 但有幾個我能想到的。
可讀性
我喜歡將它們主要用于一致性和描述能力。當層完全與原始 TF 操作一起使用時,我發現它有點混亂。
例如,我可以輕松做到,
tf.keras.layers.Lambda(lambda x: do_cool(x), name="cool_thing")
這將反映在model.summary()
掩蔽
使用Lambdalayer 你可以傳入mask引數來處理屏蔽,而使用 TF ops,你的代碼很容易因為屏蔽而變得混亂。
重要筆記
- 不建議對
Lambda涉及tf.Variable物件的操作使用層。它們不會作為模型中的可訓練變數傳遞。 Lambda操作是無狀態的。所以對于任何有狀態的操作,Lambda都是不行的。- 我不是 100% 確定這一點,但我假設 TF 在模型中使用它們時會將 TF 操作作為 Lambda 層進行一些隱式包裝(與
TFOpLambdaI see when printing一起使用model.summary())。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/518437.html
標籤:张量流喀拉斯
