【问题标题】:What does InvalidArgumentError in tensorflow 2 mean?张量流 2 中的 InvalidArgumentError 是什么意思?
【发布时间】:2020-06-07 10:53:40
【问题描述】:

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

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

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

InvalidArgumentError:无法计算 Add as input #1(从零开始)应该是双张量,但它是浮点张量 [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))

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

【问题讨论】:

    标签: python-3.6 tensorflow2.0


    【解决方案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))
    

    【讨论】:

    • 所以在张量流中为了进行数学运算,张量类型应该相同。我的理解正确吗?
    • 在大多数情况下,是的。有关详细信息,请参阅有关您使用的函数的 tensorflow 文档。
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2018-02-18
    • 1970-01-01
    • 2023-03-19
    • 2018-02-18
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    相关资源
    最近更新 更多