张量流2中的InvalidArgumentError是什么意思?

时间:2020-06-07 10:53:40

标签: python-3.6 tensorflow2.0

我是新的张量流。我尝试按照tutorial的要求通过自定义训练来实现线性回归。

但是当我尝试计算> "What’s the complete name of Sachin Tendulkar ?": > "Sachin Ramya Tendulkar": > - False > "Sachin Ramesh Tendulkar": > - True > "Sachin Tendehar": > - False > " Sachin 10dulkar": > - False > "Hint": > - "biscuit & cookies" 时 我收到此错误

W*x + b

InvalidArgumentError:无法计算添加为输入#1(从零开始)的加法运算是双张量,但是浮点张量[Op:Add]

我初始化了W和b

tf.add(tf.matmul(W,x),b)

W = tf.Variable(np.random.rand(1,9))

b = tf.Variable([1],dtype = tf.float32)

但是当我将b的初始化更改为

x = tf.Variable(np.random.rand(9,100))

我没有收到任何错误。是什么原因呢?

1 个答案:

答案 0 :(得分:1)

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))