自定义了一个损失函数
怎么在模型训练的过程中,
每训练一个批次,打印出自定义损失函数里面红圈中Tensor的值。方便调试
可能的两种方式:
model.fit
。参考 https://tf.wiki/zh_hans/basic/models.html 自己构建训练流程。tf.print
,参考 如何获取训练过程中一些Tensor的值 - #6 by snowkylin
on_train_batch_end
。在这里面计算你想要的tensor并输出。我很少用 model.fit
训练模型,一般都是自己构建训练流程,所以对这块其实不甚清楚。
非常感谢!
可以使用 model.fit
,但是怎么把想打印Tensor的参数,加到自己的callback里面, Writing your own callbacks | TensorFlow Core这个参考里面好像只有一个叫logs
字典的东西( logs
字典包含损失值,以及批次或周期结束时的所有指标)。这些指标好像并不是想要打印的Tensor
我想到可以这样:定义一个函数
def print_tensor(x):
tf.print(x)
return x
然后用keras的Lambda层:
first_frequence_position = tf.keras.layers.Lambda(print_tensor)(first_frequence_position)
这样可以强制把tf.print
放到训练流程中,我试了下是可行的。
tf.print
的使用方式参考 tf.print | TensorFlow v2.11.0 ,可以加入参数summarize=-1
打印完整的Tensor。
确实是个不错的方案