Tensorflow初學者在這裏。如何避免在Tensorflow中添加重複集合?
我有一段代碼在一組圖像上進行訓練和驗證(一起)。每隔一段時間,在訓練循環中,我都會執行驗證並從驗證數據集中獲取損失。我總結了結果並使用張量板來查看我的可視化。
我的問題是,我數了兩次我的損失,我不應該。我的代碼會清楚發生了什麼
找那些已經分割爲訓練和驗證集的一些圖片,還建立了神經網絡:
images, labels = (
self._input_pipeline(filenames, self.model_config.BATCH_SIZE))
v_images, v_labels = (
self._input_pipeline(v_filenames, self.model_config.BATCH_SIZE))
logits = self.build_nets(images)
tf.get_variable_scope().reuse_variables()
v_logits = self.build_nets(v_images)
將損失函數:
_ = self.set_loss(logits, labels)
validation_step = self.set_loss(v_logits, v_labels)
這是set_loss樣子:
def set_loss(self, y, y_):
cross_entropy_sum = (
tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=y_)))
tf.add_to_collection('cross_entropy_loss', cross_entropy_sum)
return tf.losses.get_losses()
是happenin問題克是cross_entropy_loss加入兩次到集合從而給我交叉熵損失的2倍輸出
「cross_entropy_loss」用於回主程序計算cross_entropy_total收集:
get_cross_entropy = tf.get_collection('cross_entropy_loss')
cross_entropy_total = tf.add_n(get_cross_entropy, name='cross_entropy_loss_across_all_gpus')
tf.summary.scalar("cross entropy loss", cross_entropy_total)
甲單個彙總運算生成摘要:
summary_op = tf.summary.merge_all()
訓練步驟看起來像這樣:
train_step = (
tf.train.GradientDescentOptimizer(model_config.INITIAL_LEARNING_RATE).minimize(cross_entropy_total))
這裏是最後一塊,運行培訓片和驗證件,寫出總結
_, cross_entropy = sess.run([train_step, cross_entropy_total])
if step % self.model_config.SUMMARY_EVERY == 0:
summary_str = sess.run(summary_op)
summary_writer.add_summary(summary_str, step)
#validation
_, cross_entropy = sess.run([validation_step, cross_entropy_total])
v_summary_str = sess.run(summary_op)
v_summary_writer.add_summary(v_summary_str, step)
所以有人可以幫助我如何避免計數cross_entropy_total兩次? 例如,如果不進行驗證的損失是100,如果我插入所示的驗證片以上就變成200
我回答了你的問題嗎? – MaxB
我想知道爲什麼你應該將驗證損失添加到cross_entropy_loss集合,然後通過它更新權重。如果該步驟用於驗證,則不應跳過該損失添加到僅包含訓練損失的集合中。 – lerner