web-dev-qa-db-ja.com

個別のトレーニングと評価の要約にテンソルボードでsummary.mergeを使用できません

畳み込みニューラルネットの学習を監視するためにテンソルボードを使用しようとしています。 tf.summary.merge_all関数を使用して、マージされた要約を作成しています。ただし、トレーニングデータとテストデータの両方の精度と損失を追跡したいと思います。この投稿は役に立ちます: テンソルボードでのロギングトレーニングと検証の損失

扱いやすくするために、要約を2つの要約にマージしたいと思います。1つはトレーニング用、もう1つは検証用です(画像の重みなど、最終的にはさらに追加します)テンソルボードの説明に従おうとしました- tf.summary.merge 。私はそれを機能させることができず、どこが間違っているのかを理解するのに役立つ実用的な例を見つけることができません。

with tf.name_scope('accuracy'):
    correct_prediction = tf.equal(tf.argmax(y_logits, 1), tf.argmax(y, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float'))
    tf.summary.scalar('accuracy', accuracy)
    tf.summary.scalar('train_accuracy', accuracy)

with tf.name_scope('Cost'):
    cross_entropy = tf.reduce_mean(
        tf.nn.softmax_cross_entropy_with_logits(logits=y_logits, labels=y))
    opt = tf.train.AdamOptimizer()
    optimizer = opt.minimize(cross_entropy)
    grads = opt.compute_gradients(cross_entropy, [b_fc_loc2])
    tf.summary.scalar('cost', cross_entropy)
    tf.summary.scalar('train_cost', cross_entropy)


with tf.Session() as sess:
    writer = tf.summary.FileWriter('./logs/mnistlogs/1f', sess.graph)
    sess.run(tf.global_variables_initializer())
    merged = tf.summary.merge([cost, accuracy])

これにより、次のエラーが発生します。

InvalidArgumentError(トレースバックについては上記を参照):サマリー入力の1つを解析できませんでした[[ノード:Merge/MergeSummary = MergeSummary [N = 2、_device = "/ job:localhost/Replica:0/task:0/cpu:0" ](Merge/MergeSummary/input_0、Merge/MergeSummary/input_1)]]

これが機能しない理由と、解決策を見つける方法を知りたいのですが、実際の例をいただければ幸いです。

10
Kristin H

私はそれを考え出した。マージする前に、要約に名前を付ける必要があります。以下のコードは問題を解決します:

with tf.name_scope('Cost'):
    cross_entropy = tf.reduce_mean(
            tf.nn.softmax_cross_entropy_with_logits(logits=y_logits, labels=y))
    opt = tf.train.AdamOptimizer(learning_rate=0.000003)
    optimizer = opt.minimize(cross_entropy)
    grads = opt.compute_gradients(cross_entropy, [b_fc_loc2])
    cost_sum = tf.summary.scalar('val_cost', cross_entropy)
    training_cost_sum = tf.summary.scalar('train_cost', cross_entropy)


with tf.name_scope('accuracy'):
    correct_prediction = tf.equal(tf.argmax(y_logits, 1), tf.argmax(y, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float'))
    train_accuracy = accuracy
    accuracy_sum = tf.summary.scalar('val_accuracy', accuracy)
    training_accuracy_sum = tf.summary.scalar('train_accuracy', accuracy)


with tf.Session() as sess:
    writer = tf.summary.FileWriter('./logs/{}/{}'.format(session_name, run_num), sess.graph)
    sess.run(tf.global_variables_initializer())
    train_merged = tf.summary.merge([training_accuracy_sum, training_cost_sum])
15
Kristin H