tensorflow中我们需要同一组变量去计算不同的数据,这就需要共享变量。比如下:一张相同的图片,如果不共享变量的话,经过两次相同的计算会得到不同的值,这是因为每一次计算,其权重都会重新随机生成。如果变量共享的话,第二次计算时,会发现变量以经存在,不会再随机生成了。
import tensorflow as tf
image = tf.ones(shape=[1,8,8,1])
def my_image_filter(input_images):
conv1_weights = tf.Variable(tf.random_normal([5, 5, 1, 1]),
name="conv1_weights")
conv1 = tf.nn.conv2d(input_images, conv1_weights,
strides=[1, 1, 1, 1], padding='VALID')
return conv1
d1 = my_image_filter(image)
d2 = my_image_filter(image)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
print(sess.run(d1))
print(sess.run(d2))
##########################################################################
##########################################################################
def my_image_filter(input_images):
with tf.variable_scope(name_or_scope='v1',reuse=tf.AUTO_REUSE):
conv1_weights = tf.get_variable('conv1_weights',initializer=tf.random_normal([5, 5, 1, 1]))
conv1 = tf.nn.conv2d(input_images, conv1_weights,
strides=[1, 1, 1, 1], padding='VALID')
return conv1
d1 = my_image_filter(image)
d2 = my_image_filter(image)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
print(sess.run(d1))
print(sess.run(d2))