如何获取训练过程中一些Tensor的值

自定义了一个损失函数


怎么在模型训练的过程中,

每训练一个批次,打印出自定义损失函数里面红圈中Tensor的值。方便调试

@snowkylin :grin:

可能的两种方式:

我很少用 model.fit 训练模型,一般都是自己构建训练流程,所以对这块其实不甚清楚。

1 Like

非常感谢!

可以使用 model.fit,但是怎么把想打印Tensor的参数,加到自己的callback里面, Writing your own callbacks | TensorFlow Core这个参考里面好像只有一个叫logs 字典的东西( logs 字典包含损失值,以及批次或周期结束时的所有指标)。这些指标好像并不是想要打印的Tensor

1 Like

我想到可以这样:定义一个函数

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。

2 Likes

确实是个不错的方案

1 Like