这是我的代码:
import tensorflow as tf
loss = tf.keras.losses.MeanSquaredError()
a = loss(y_true=tf.constant([1.0, 2.0, 3.0]), y_pred=tf.constant([2.0, 2.0, 4.0]))
print(a)
b = tf.constant([2.0, 2.0, 4.0])[0]
a = loss(y_true=tf.constant([1.0], dtype=tf.float32), y_pred=tf.constant([b], dtype=tf.float32)) #error occurs here
print(a)
这是错误:
追溯(最近一次通话最近):文件“ test.py”,第9行,位于=丢失(y_true = tf.constant([1.0],dtype = tf.float32),y_pred = tf.constant([b], dtype = tf.float32))文件“ D:\ documenten \ programs \ Python \ 3.6.2 \ lib \ site-packages \ tensorflow_core \ python \ framework \ constant_op.py”,第227行,以常量allow_broadcast = True)文件“ D:\ documenten \ programs \ Python \ 3.6.2 \ lib \ site-packages \ tensorflow_core \ python \ framework \ constant_op.py“,第235行,在_constant_impl中t = convert_to_eager_tensor(value,ctx,dtype)文件” D:\ documenten \ programs \ Python \ 3.6.2 \ lib \ site-packages \ tensorflow_core \ python \ framework \ constant_op.py“,第96行,在convert_to_eager_tensor中返回ops.EagerTensor(value,ctx.device_name,dtype)ValueError:TypeError:Scalar张量没有len()
在这个例子中,我不能使用'b'来放置另一个张量,但是常规的float很好用。有没有一种方法可以将tf.float32更改为常规python float?
要获得一个简单的python float:float(b)
虽然,我认为您的错误之所以发生,主要是因为您尝试制作b一个tf.constant已经是的错误tf.constant。
要转换张量的数据类型,可以使用tf.cast。
因此,您的上述代码在以下情况下也适用:
loss = tf.keras.losses.MeanSquaredError()
a = loss(y_true=tf.constant([1.0, 2.0, 3.0]), y_pred=tf.constant([2.0, 2.0, 4.0]))
print(a)
b = tf.constant([2.0, 2.0, 4.0])[0]
b = tf.cast(b, dtype=tf.float32)
a = loss(y_true=tf.constant([1.0], dtype=tf.float32), y_pred=[b])
print(a)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。