簡體   English   中英

張量流中的日志和摘要不正確

[英]Incorrect logging and summaries in tensorflow

我正在使用tensorflow v0.11.0。 我正在訓練兩個網絡: DG 基本問題是我無法記錄正在顯示的值,這導致混亂。 dg損失的印刷價值與我所記錄的完全不同。

#Defining Losses
loss_d1 = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(out_1, 0.9*tf.ones_like(in_1)))
loss_d2 = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(out_2, tf.zeros_like(in_2)))
loss_g = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(out_2, tf.ones_like(in_2)))

#combining losses
loss_d = loss_d1 + loss_d2

#creating summaries
loss_d1_sum = tf.scalar_summary("loss_d1", loss_d1)
loss_d2_sum = tf.scalar_summary("loss_d2", loss_d2)
loss_d_sum = tf.scalar_summary("loss_d", loss_d)
loss_g_sum = tf.scalar_summary("loss_g", loss_g)

#defining the optimizers
op_g = tf.train.AdamOptimizer(learning_rate).minimize(loss_g, var_list=vars_g)
op_d = tf.train.AdamOptimizer(learning_rate).minimize(loss_d, var_list=vars_d)

#merging summaries
self.g_sum = tf.merge_summary([loss_g])
self.d_sum = tf.merge_summary([loss_d, loss_d1, loss_d2])
self.writer = tf.train.SummaryWriter('./logs', sess.graph)

我一次更新D ,兩次更新G

# Update D network
_, summary_str = self.sess.run([op_d, d_sum], feed_dict= fd)
self.writer.add_summary(summary_str, counter)

# Update G network
_, summary_str = self.sess.run([op_g, g_sum], feed_dict= fd)
self.writer.add_summary(summary_str, counter)

# Update G network again
_, summary_str = self.sess.run([op_g, g_sum], feed_dict= fd)
self.writer.add_summary(summary_str, counter)

我正在運行以下2次。 每次迭代都有1 D更新和2 G更新。

# Printing stats to stdout
[loss_d, loss_g] = sess.run([loss_d, loss_g], feed_dict = fd)
print 'd_loss:{}, g_loss:{}'.format(loss_d, loss_g)

這給了我輸出:

d_loss: 1.43663359, g_loss: 0.68026298
d_loss: 1.72329867, g_loss: 0.55464995

我現在使用以下代碼提取值以使用matplotlib進行繪制。

for entry in tf.train.summary_iterator(log_file)
    for v in entry.summary.value:
        if v.tag == 'loss_d'
            g.append(v.simple_value)
        elif v.tag == 'loss_g'
            d.append(v.simple_value)

print len(d), len(d)       # 2 4
print 'd_loss', d          # d_loss [2.196472406387329, 1.200419545173645]
print 'g_loss', g          # g_loss [6.2136077880859375, 2.953800678253174, 5.429494857788086, 2.6036014556884766]

我是否正確實施了日志記錄方案? 我認為loss_dloss_g的值可能已更改,因為我在登錄后運行了ops。 但這意味着最后一個op必須保存值,並且在執行sess.run不得更改。 fd在整個迭代過程中保持不變。

您沒有正確使用摘要。

Summary op產生張量,該張量包含Summary協議緩沖區; 合並摘要將多個摘要操作組合到一個目標中,該目標將一起產生所有摘要協議。

您創建了一些標量摘要操作,但從未對其進行評估。 相反,您是將非匯總張量(loss_g等)傳遞到merge_summary中,這是未定義的行為,因為這些操作僅應采用匯總操作。 如果要手動創建合並的摘要目標,則應將tf.summary.scalar(x)的輸出傳遞到merge_summary。

您可能還需要查看文檔本教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM