1. 參數列表
2. 作用
- 可以把任意的一個表達式作爲一個“Layer”對象
- Lambda層之所以存在是因爲它可以在構建Squential時使用任意的函數或者說tensorflow 函數。
- 在我們需要完成一些簡單的操作(例如VAE中的重採樣)的情況下,Lambda層再適合不過了。
3. 舉個栗子(VAE)
- 可以看到通過在encoder和decoder中間加入一個Lambda層使得encoder和decoder連接起來,很方便
def sampling(agrs):
mean,logvar = agrs[0],agrs[1]
eps = tf.random.normal(tf.shape(mean))
return mean + eps*tf.exp(logvar * 0.5)
# 編碼階段
x = layers.Input(shape=(784,)) # 輸入層
h1 = layers.Dense(200,activation='softplus')(x)
h2 = layers.Dense(200,activation='softplus')(h1)
# 均值和方差層不需要激活函數
mean = layers.Dense(latent_dimension)(h2)
log_var = layers.Dense(latent_dimension)(h2)
# 將採樣過程看成一個Lambda層,這裏利用自定義的sampling函數
z = layers.Lambda(sampling,output_shape=(latent_dimension,))([mean,log_var])
# 解碼階段
h3 = layers.Dense(200,activation='softplus')
h4 = layers.Dense(200,activation='softplus')
h5 = layers.Dense(200,activation='softplus')
# No activation
end = layers.Dense(784)
z1 = h3(z)
z2 = h4(z1)
z3 = h5(z2)
out = end(z3)
# 建立模型
model = tf.keras.Model(x,out)
4. Lambda層的缺點
- Lambda層雖然很好用,但是它不能去更新我們模型的配置信息,就是不能重寫’model.get_config()'方法
- 所以tensorflow提議,儘量使用自定義層(即tf.keras.layers的子類)
- 關於自定義層,我的博客有一期會專門講
總結
當網絡需要完成一些簡單的操作時,可以考慮使用Lambda層。