如果我在将keras作为TensorFlow的接口时在函数中定义模型,keras会重用权重吗?

时间:2017-03-18 10:40:33

标签: tensorflow keras keras-layer

如果我在函数中定义层并在外面调用它,我不确定是否可以重用层的权重,例如

def forward(x):
    y = Dense(128, activation='tanh')(x)
    y = Dense(1, activation='sigmoid')(y)
    return y

我在函数forward中定义模型。然后将它用作tensorflow的接口,如:

y1 = forward(x1)
y2 = forward(x2)

将图层'体重可以重复使用吗?

1 个答案:

答案 0 :(得分:1)

重量不一样。在函数内部编写y = Dense(128,...)(x)时,每次调用函数时都会创建一个新的实例层。所以y1和y2不会在你的例子中共享权重。

但是如果你想让它们共享权重,你可以在函数之外创建图层实例,该函数只会重用同一层。因此权重将被共享。这适用于您的情况:

layer_dense1 = Dense(128, activation='tanh')
layer_dense2 = Dense(1, activation='sigmoid')

def forward(x):
    y = layer_dense1(x)
    y = layer_dense2(y)
    return y

y1 = forward(x1)
y2 = forward(x2)

仅当x1x2形状相同时才会有效。实际上,当您在第一次转发时首次链接layer_dense1时,会将layer_dense1.input_shape设置为x1的形状。如果你在一个具有不同形状的图层上调用它,它会在你的脸上抛出错误: - )