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
类型,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))
我是张量流新手。我正在尝试通过自定义训练实现线性回归,遵循此 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
类型,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))