我正在构建一个模型,我想在其中提供 no_of_dense_layers 作为参数,并期望函数在循环中创建密集层。
在循环中创建密集层不是问题,我的问题是如何在 Keras 的密集层堆栈中传递值?
假设我想要 3 个密集层:
def get_layers(no_of_dense_layers , dense_size):
return [tf.keras.layers.Dense(dense_size[i], activation = 'elu',
kernel_initializer=tf.keras.initializers.glorot_uniform(seed=200)) for i in range(no_of_dense_layers)]
现在,如果我想使用 Sequential API,我可以这样做:
perceptron = tf.keras.Sequential(get_layers(3,[1000,500,300]))
但是如果我想使用函数式API,如何实现相同的功能?
像这样的东西:
input_layer = tf.keras.Input(shape=(1024), dtype='float32', name='embedding_input')
## This layer should pass input of first denselayer >> dense_layer2 >> dense_layer3
dense_layers = get_layers(3,[1000,500,300])
# Above layer should be equal to :
# x = tf.keras.layers.Dense(1000)
# x = tf.keras.layers.Dense(500)
# x = tf.keras.layers.Dense(300)
# Then simply pass the output of all three dense layers to classification last layer
# classification_layer
cls_layer = tf.keras.layers.Dense(1, activation= 'elu')(dense_layers)
我尝试过的:
first_layer = dense_layers[0](input_layer)
for k in dense_layers[1:]:
print(k(first_layer))
有没有其他方法?
谢谢!
这里有一个可能性:
def get_layers(inp, no_of_dense_layers, dense_size):
for i in range(no_of_dense_layers):
x = Dense(dense_size[i])(inp)
inp = x
return x
inp = Input((1024,))
x = get_layers(inp, 3, [1000,500,300])
out = Dense(1)(x)
m = Model(inp, out)
m.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_45 (InputLayer) [(None, 1024)] 0
_________________________________________________________________
dense_88 (Dense) (None, 1000) 1025000
_________________________________________________________________
dense_89 (Dense) (None, 500) 500500
_________________________________________________________________
dense_90 (Dense) (None, 300) 150300
_________________________________________________________________
dense_91 (Dense) (None, 1) 301
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句