如果我在函数中定义层并在外面调用它,我不确定是否可以重用层的权重,例如
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)
将图层'体重可以重复使用吗?
答案 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)
仅当x1
和x2
形状相同时才会有效。实际上,当您在第一次转发时首次链接layer_dense1
时,会将layer_dense1.input_shape
设置为x1的形状。如果你在一个具有不同形状的图层上调用它,它会在你的脸上抛出错误: - )