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

hgtggwj0  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(221)

input_data的数据类型是一个numpy.float64数组,但代码在tensorflow库中仍然失败,因为它不是“double”。不知道如何补救。

import tensorflow as tf
import numpy as np

input_data = np.random.uniform(low=0.0, high=1.0, size=100)
print("type(input_data):", type(input_data), "type(input_data[0]):", type(input_data[0]))

class ArtificialNeuron(tf.Module):
    def __init__(self):
        self.w = tf.Variable(tf.random.normal(shape=(1, 1)))
        self.b = tf.Variable(tf.zeros(shape=(1,)))

    def __call__(self, x):
        return tf.sigmoid(tf.matmul(x, self.w) + self.b)

neuron = ArtificialNeuron()

# Fails here: InvalidArgumentError: cannot compute MatMul as input #1(zero-based) was expected to be a double tensor but is a float tensor [Op:MatMul] name: 
output_data = neuron(input_data)

字符串

6yjfywim

6yjfywim1#

抛出错误是因为您混合了float32float64Tensor而没有进行转换。默认情况下,numpy使用float64,而TensorFlow使用float32。通常情况下,高级模块执行转换,但我认为您使用的是低级构建块,因此您必须自己进行转换。
你可以简单地测试一下:

import numpy as np
import tensorflow as tf

x = np.array([[1.0]], dtype=np.float64)
w = tf.zeros(shape=(1,1))
tf.matmul(x, w)

# => InvalidArgumentError: cannot compute MatMul as input #1(zero-based) was expected to be a double tensor but is a float tensor [Op:MatMul]
# Changing np.float32 to np.float64 above the code works...

字符串
因此,您必须使用np.float32(input_data)将输入转换为float32,或者在任何地方使用float64Tensor。您还可以将TensorFlow的默认精度更改为float64,如下所述:TensorFlow default precision mode?
简而言之,要修复代码,请将最后一行中的input_data替换为np.float32(input_data),并将input_data定义中的size=100替换为size=(100,1)

相关问题