无需手动创建变量。这同样有效:
import tensorflow as tf
inputs_1 = tf.placeholder(tf.float32, (None, 512, 512, 3), name='inputs_1')
inputs_2 = tf.placeholder(tf.float32, (None, 512, 512, 3), name='inputs_2')
with tf.variable_scope('conv'):
out_1 = tf.layers.conv2d(inputs_1, 32, [3, 3], name='conv_1')
with tf.variable_scope('conv', reuse=True):
out_2 = tf.layers.conv2d(inputs_2, 32, [3, 3], name='conv_1')
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(tf.trainable_variables())
如果您给出tf.layers.conv2d
相同的名称,它将使用相同的权重(假设reuse=True
,否则将有 a ValueError
)。
在 Tesorflow 2.0 中: tf.layers
被 keras 层替换,其中变量通过使用相同的层对象被重用:
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(32, 3, activation='relu',
input_shape=(512, 512, 3)),
])
@tf.function
def f1(x):
return model(x)
@tf.function
def f2(x):
return model(x)
两者都f1
将f2
使用具有相同变量的层