2つのconvレイヤーを同じウェイトで共有しようとしていますが、APIが動作しないようです。tf.layers.conv2dでTensorFlowを再利用する変数
import tensorflow as tf
x = tf.random_normal(shape=[10, 32, 32, 3])
with tf.variable_scope('foo') as scope:
conv1 = tf.contrib.layers.conv2d(x, 3, [2, 2], padding='SAME', reuse=True, scope=scope)
print(conv1.name)
conv2 = tf.contrib.layers.conv2d(x, 3, [2, 2], padding='SAME', reuse=True, scope=scope)
print(conv2.name)
それは問題を解決していませんtf.contrib.layers.conv2d
からtf.layers.conv2d
に変更
foo/foo/Relu:0
foo/foo_1/Relu:0
出力します。
それはtf.layers.conv2d
と同じ問題を抱えている:
import tensorflow as tf
x = tf.random_normal(shape=[10, 32, 32, 3])
conv1 = tf.layers.conv2d(x, 3, [2, 2], padding='SAME', reuse=None, name='conv')
print(conv1.name)
conv2 = tf.layers.conv2d(x, 3, [2, 2], padding='SAME', reuse=True, name='conv')
print(conv2.name)
は、あなたが書いたコードでは
conv/BiasAdd:0
conv_2/BiasAdd:0
最初の例ではなぜ最初のconvでも本当に再利用されますか? – Steven
@Steven私はreuse = Trueを入れるためにすべての組み合わせを試しましたが、どれも有効ではありませんでした。 tf.layers.conv2dを使用してウェイトをどのように共有するかの簡単な例を教えてください。 – Xingdong
私は通常、手で行います。つまり、ウエイトを作成して渡します。次に、同じ変数を使用するだけで再利用できるウエイト変数があります。私はそれの例を示すことができますか? – Steven