2
複数のGPUでテンソルフローを実践しています。 各GPUによって計算された平均勾配。しかし、私のオプティマイザがAdamOptimizerの場合は動作しません。 GradientDescentを使用しているときは常に動作します。テンソルフローの複数のgpusとAdamOptimizer
32 tf.get_variable_scope().reuse_variables()
33 average_grad = average_gradients_layer(replica_grads)
---> 34 grad_step = optimizer.apply_gradients(average_grad)
35 train_step = tf.group(grad_step)
36 init = tf.global_variables_initializer()
Variable conv1_1/weight/Adam/ does not exist, or was not created with
tf.get_variable(). Did you mean to set reuse=None in VarScope?
AdamOptimizerは私の変数名の後に追加された '/アダム/' 求めているようだ:
G = tf.Graph()
with G.as_default(), tf.device('/cpu:0'):
full_data_dims = [batch_size*num_gpus] + data_dims
data = tf.placeholder(dtype=tf.float32, shape=full_data_dims, name='data')
labels = tf.placeholder(dtype=tf.int32, shape=[batch_size*num_gpus], name='labels')
split_data = tf.split(data, num_gpus, axis=0)
split_labels = tf.split(labels, num_gpus, axis=0)
optimizer = tf.train.AdamOptimizer(learning_rate)
replica_grads = []
for i in range(num_gpus):
with tf.name_scope('tower_{}'.format(i)), tf.device('/gpu:{}'.format(i)):
model = build_model(split_data[i], split_labels[i])
loss = model['loss']
grads = optimizer.compute_gradients(loss)
replica_grads.append(grads)
tf.get_variable_scope().reuse_variables()
tf.get_variable_scope().reuse_variables()
average_grad = average_gradients_layer(replica_grads)
grad_step = optimizer.apply_gradients(average_grad)
train_step = tf.group(grad_step)
init = tf.global_variables_initializer()
# Part3
config_proto = tf.ConfigProto(allow_soft_placement=True)
sess = tf.Session(graph=G, config=config_proto)
sess.run(init)
tf.train.start_queue_runners(sess=sess)
with sess.as_default():
for step in range(num_steps):
data_batch, label_batch = batch_maker(X_ok, y_ok, X_ng, y_ng, batch_size*num_gpus)
results = sess.run([train_step, loss], feed_dict={data : data_batch, labels : label_batch})
if step % flag == 0:
print('\n')
print('step : %s loss : %s' % (step, results[1]))
sys.stdout.write('\r'+str(step)+'/'+str(num_steps))
はここに私のエラーメッセージです:ここで
はコードです。誰でもそれを修正できますか?
エラーの完全なスタックトレースを追加できますか?これはバグかもしれない(あるいは、より良いドキュメンテーションが必要かもしれない)ようですが、 'get_variable()'がどのような呼び出しによって問題を引き起こしているかはすぐには分かりません.... – mrry