我正在尝试在Tensorflow 2.0中重新实现Multi-View CNN (MVCNN)。但是,从我的角度来看,keras图层没有tf.layers那样的选项reuse = True | False。有什么方法可以定义使用新API共享参数的图层?还是我需要以TFv1的方式构建模型?
非常感谢您!
答案 0 :(得分:2)
要共享模型的参数,只需使用相同的模型。这是TensorFlow 2.0中引入的新范例;
在TF 1.xt中,我们使用了一种面向图的方法,在该方法中,我们需要重复使用同一图来共享变量,但是现在我们可以使用不同的输入来重复使用同一tf.keras.Model
对象。 / p>
是带有自己变量的对象。
使用Keras模型和tf.GradientTape
,您可以训练一个共享变量的模型,如下例所示。
# This is your model definition
model = tf.keras.Sequential(...)
#input_1,2 are model different inputs
with tf.GradientTape() as tape:
a = model(input_1)
b = model(input_2)
# you can just copute the loss
loss = a + b
# Use the tape to compute the gradients of the loss
# w.r.t. the model trainable variables
grads = tape.gradient(loss, model.trainable_varibles)
# Opt in an optimizer object, like tf.optimizers.Adam
# and you can use it to apply the update rule, following the gradient direction
opt.apply_gradients(zip(grads, model.trainable_variables))