TensorFlow: varscope.reuse_variables()と同様の問題があります。テンソルフローの変数がループ内でエラーを生成します
私はデータセットに対してクロスバリデーションを行っています。
関数を呼び出すたびに、 myFunctionInFile1())に新しいデータを追加しました(現在はスペースが限られているため、データの割り当ての詳細は省略しています)。この関数は同じpythonファイルではありません。そのため私はメインのpythonファイル(file2)のファイルからこの関数をインポートします。この機能は完全なCNNとトレーニングを作成し、与えられた訓練と新しく初期化され、訓練されたパラメータでテストデータのモデルをテストします。
メインファイル(file2)から、最初の検証でmyFunctionInFile1が呼び出され、CNNモデルがテストして結果をメインファイル(file2)に返します。ただし、コードに続く新しいデータで2回目の繰り返し、中:
ValueError: Variable BatchNorm_2/beta does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=tf.AUTO_REUSE in VarScope?
C/C++/Javaでプログラミングの場合のように、一般的に、問題は何ですか:
def myFunctionInFile1():
# Nodes for the input variables
x = tf.placeholder("float", shape=[None, D], name='Input_data')
y_ = tf.placeholder(tf.int64, shape=[None], name='Ground_truth')
keep_prob = tf.placeholder("float")
bn_train = tf.placeholder(tf.bool) # Boolean value to guide batchnorm
def bias_variable(shape, name):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial, name=name)
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1], padding='SAME')
with tf.name_scope("Reshaping_data") as scope:
x_image = tf.reshape(x, [-1, D, 1, 1])
initializer = tf.contrib.layers.xavier_initializer()
"""Build the graph"""
# ewma is the decay for which we update the moving average of the
# mean and variance in the batch-norm layers
with tf.name_scope("Conv1") as scope:
# reuse = tf.AUTO_REUSE
W_conv1 = tf.get_variable("Conv_Layer_1", shape=[5, 1, 1, num_filt_1], initializer=initializer)
b_conv1 = bias_variable([num_filt_1], 'bias_for_Conv_Layer_1')
a_conv1 = conv2d(x_image, W_conv1) + b_conv1
with tf.name_scope('Batch_norm_conv1') as scope:
a_conv1 = tf.contrib.layers.batch_norm(a_conv1,is_training=bn_train,updates_collections=None)
することは私に次のエラーを与えます関数を終了すると、呼び出された関数のローカル変数は戻り時に自動的に削除されます。新しい呼び出しのたびに新しいパラメータセットを作成する必要があります。なぜこのエラーが出るのかよりも。これをどうすれば解決できますか?
問題を診断するのに十分なコードがありません。投稿した行はうまくいくはずですが、なぜここでname_scopeを使用しているのかわかりません。 –
@MadWombat私はコードと質問を更新しました。親切にチェックしてください。 – khan