我正在尝试将Tensorflow 1.x中编写的代码更新为Tensorflow 2.1.0中的代码。我一直在使用Tensorflow 2.1.0文档转换代码,直到有了这段代码我才没有问题。
loss = tf.losses.softmax_cross_entropy(one_hot_labels, logits)
上面的代码是Tensorflow 1.x版本,我认为根据Tensorflow 2.1.0文档,正确更新的代码是
loss = tf.nn.softmax_cross_entropy_with_logits(one_hot_labels, logits)
那我跑的时候
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)
我收到以下错误。
Loss must be scalar, given: Tensor("softmax_cross_entropy_with_logits/Reshape_2:0", shape=(512,), dtype=float32)**
所以,我猜在Tensorflow 1.x版本中,损失作为'张量'传递给tf.estimator.EstimatorSpec,但是在Tensorflow 2.1.0中,损失必须传递scalar
给tf.estimator.EstimatorSpec
?如果我没记错的话,Tensorflow 1.x和2.1.0中的损失(此处定义的方式)都是张量。
那么,有谁知道如何将张量转换为标量(我认为在构建CNN模型方面不够充分或有效),或者更好的方法是如何解决这一难题?
还是我以错误的方式转换了原始代码?
如果compat.v1,我将不胜感激。除非绝对必要(除非使用compat.v1,否则在Tensorflow 2.1.0中没有其他使用代码的方式),否则不使用。
您可以对结果进行平均(tf.losses.softmax_cross_entropy
无论如何都是这样tf.losses.compute_weighted_loss
):
loss = tf.math.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(one_hot_labels, logits))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句