tensorflow 2 中的 InvalidArgumentError 是什么意思?

What does InvalidArgumentError in tensorflow 2 mean?

我是张量流新手。我正在尝试通过自定义训练实现线性回归,遵循此 tutorial

但是当我尝试计算 W*x + b 我收到此错误

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

InvalidArgumentError: cannot compute Add as input #1(zero-based) was expected to be a double tensor but is a float tensor [Op:Add]

我初始化了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))

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

np.random.rand(1,9)(和其他初始化)的结果是 np.float64 类型。将其与 tf.Variable 一起使用可得到类型为 tf.float64.

的张量

Tensorflow 的 add 的参数必须是同一类型。 matmul 的结果是 tf.float64 类型,btf.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))