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)
字符串
1条答案
按热度按时间6yjfywim1#
抛出错误是因为您混合了
float32
和float64
Tensor而没有进行转换。默认情况下,numpy
使用float64
,而TensorFlow使用float32
。通常情况下,高级模块执行转换,但我认为您使用的是低级构建块,因此您必须自己进行转换。你可以简单地测试一下:
字符串
因此,您必须使用
np.float32(input_data)
将输入转换为float32
,或者在任何地方使用float64
Tensor。您还可以将TensorFlow的默认精度更改为float64
,如下所述:TensorFlow default precision mode?简而言之,要修复代码,请将最后一行中的
input_data
替换为np.float32(input_data)
,并将input_data
定义中的size=100
替换为size=(100,1)
。