我试图计算两个矩阵的差异,以便定义我的损失函数。模型非常简单,我有一个输入矩阵和一个输出矩阵。
定义 X 为输入矩阵
定义 Y 为输出矩阵
通常我会使用 tf.reduce_mean(tf.abs(X-Y))
,但这不可行,因为矩阵 X 包含 nan 值。
所以我想做的是在 tf.is_nan(X)
返回 False
的位置上对 X 进行求和,然后在相同索引上对 Y 进行求和。接着我会这样定义我的损失函数 loss = tf.abs(reduce_nan_sum(X)-reduce_nan_sum(Y))
with tf.Session() as sess: sess.run(init) print(sess.run(tf.is_nan(X), feed_dict={X: vals}))[[False, False, True], [False, True, False]]
X 和 Y 的样本值
X = [[0., 1., nan], [2., nan, 0.5]]Y = [[0.002, 0.967, 0,2], [1.956, 0.3, 0.487]]
回答:
NaN 值可以用零替换。对于操作,可以使用与 在 Tensorflow 张量中替换 NaN 值 相同的方法
sess.run(tf.reduce_mean(tf.abs(tf.where(tf.is_nan(x), tf.zeros_like(x), x)-y)))