如何解决如何在TensorFlow 2中使用tf.summary和Keras记录内部损失项
我希望能够在损失计算期间记录到张量板一些中间结果。对我来说,这似乎是一件非常基本的事情,因为例如在某些检测CNN中,损失是由一个置信度分量和一个本地化分量构成的,监视它们中的每个分量可能很重要。
对于我搜索的内容,我认为应该使用tf.summary
来完成。在this中,他们提出了其他问题,但这对我不起作用。
下面是一个玩具示例,我尝试在其中使用tf.summary
。重点是监视tf.reduce_mean(sign)
(只是为了能够记录某些内容)。
import tensorflow as tf
file_writer = tf.summary.create_file_writer('./logs')
file_writer.set_as_default()
def huber_loss(y_true,y_pred):
diff = tf.subtract(y_true,y_pred)
sign = tf.cast(tf.less(tf.abs(diff),1.0),tf.float32)
tf.summary.scalar('mean sign',tf.reduce_mean(sign))
loss = 0.5 * diff * diff * sign + (tf.abs(diff) - 0.5) * (1.0 - sign)
return tf.reduce_sum(loss)
x = tf.random.uniform(minval=0,maxval=1,shape=(1000,4),dtype=tf.float32)
y = tf.multiply(tf.reduce_sum(x,axis=-1),5)
model = tf.keras.Sequential([
tf.keras.layers.Dense(16,input_shape=[4],activation='relu'),tf.keras.layers.Dense(32,tf.keras.layers.Dense(1)
])
model.compile(loss=huber_loss,optimizer='adam')
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='./logs',update_freq='batch')
history = model.fit(x,y,epochs=10,callbacks=[tensorboard_callback])
当我运行该代码时,在张量板上为mean sign
创建的图在第0步只有一个值:Plotted loss has only one value at step 0。 (但是,总损失的图很好,但这不是我感兴趣的。)
所以有人可以告诉我上面代码中的问题是什么,或者如何实现?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。