我是新来的。我试图实现线性回归与自定义培训,遵循这个教程。
但是当我试图计算W*x + b时,我得到了这个错误
tf.add(tf.matmul(W,x),b)InvalidArgumentError:无法将Add计算为输入#1(以零为基础)是一个双张量,但它是一个浮动张量
I初始化W和b
W = tf.Variable(np.random.rand(1,9))
b = tf.Variable([1],dtype = tf.float32)
x = tf.Variable(np.random.rand(9,100))
但是当我把b的初始化改为
b = tf.Variable(np.random.rand(1))
我没有发现任何错误。原因是什么?
发布于 2020-06-07 16:06:13
np.random.rand(1,9) (和其他初始化)的结果是np.float64类型。与tf.Variable一起使用它可以得到一个类型为tf.float64的张量。
Tensorflow的add的参数必须是相同类型的。matmul结果为tf.float64型,b为tf.float32型。你需要把其中一个投给另一个类型。
在Tensorflow中,您可以这样做(按惯例推荐):
# Can be done in a single line too
matmul_result = tf.matmul(W,x)
matmul_result = tf.cast(matmul_result, tf.float32)
tf.add(matmul_result, b)或者你可以这么做:
tf.add(tf.matmul(W,x), tf.cast(b, tf.float64))还可以直接更改numpy数组的类型:
W = tf.Variable(np.random.rand(1,9).astype(np.float32))https://stackoverflow.com/questions/62244261
复制相似问题