Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow-ValueError:无法将NumPy数组转换为Tensor(不支持的对象类型float)_Python_Tensorflow_Keras_Lstm - Fatal编程技术网

Python Tensorflow-ValueError:无法将NumPy数组转换为Tensor(不支持的对象类型float)

Python Tensorflow-ValueError:无法将NumPy数组转换为Tensor(不支持的对象类型float),python,tensorflow,keras,lstm,Python,Tensorflow,Keras,Lstm,继续上一个问题: 我的训练数据是一个列表,每个列表由1000个浮动组成。例如,x\u列车[0]= [0.0, 0.0, 0.1, 0.25, 0.5, ...] 这是我的模型: model = Sequential() model.add(LSTM(128, activation='relu', input_shape=(1000, 1), return_sequences=True)) model.add(Dropout(0.2)) model.add(LST

继续上一个问题:

我的训练数据是一个列表,每个列表由1000个浮动组成。例如,
x\u列车[0]=

[0.0, 0.0, 0.1, 0.25, 0.5, ...]
这是我的模型:

model = Sequential()

model.add(LSTM(128, activation='relu',
               input_shape=(1000, 1), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))

opt = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))
下面是我得到的错误:

Traceback (most recent call last):
      File "C:\Users\bencu\Desktop\ProjectFiles\Code\Program.py", line 88, in FitModel
        model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 728, in fit
        use_multiprocessing=use_multiprocessing)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 224, in fit
        distribution_strategy=strategy)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 547, in _process_training_inputs
        use_multiprocessing=use_multiprocessing)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 606, in _process_inputs
        use_multiprocessing=use_multiprocessing)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\data_adapter.py", line 479, in __init__
        batch_size=batch_size, shuffle=shuffle, **kwargs)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\data_adapter.py", line 321, in __init__
        dataset_ops.DatasetV2.from_tensors(inputs).repeat()
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\data\ops\dataset_ops.py", line 414, in from_tensors
        return TensorDataset(tensors)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\data\ops\dataset_ops.py", line 2335, in __init__
        element = structure.normalize_element(element)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\data\util\structure.py", line 111, in normalize_element
        ops.convert_to_tensor(t, name="component_%d" % i))
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1184, in convert_to_tensor
        return convert_to_tensor_v2(value, dtype, preferred_dtype, name)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1242, in convert_to_tensor_v2
        as_ref=False)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1296, in internal_convert_to_tensor
        ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\tensor_conversion_registry.py", line 52, in _default_conversion_function
        return constant_op.constant(value, dtype, name=name)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\constant_op.py", line 227, in constant
        allow_broadcast=True)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\constant_op.py", line 235, in _constant_impl
        t = convert_to_eager_tensor(value, ctx, dtype)
      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\constant_op.py", line 96, in convert_to_eager_tensor
        return ops.EagerTensor(value, ctx.device_name, dtype)
    ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type float).
我自己也试过用谷歌搜索错误,我发现了一些关于使用
tf.convert\u to\u tensor
函数的东西。我试着通过这个函数传递我的培训和测试列表,但函数不会接受它们


任何帮助都将不胜感激。

TL;DR几个可能的错误,大多数错误通过
x=np.asarray(x).astype('float32')
修复

其他可能是错误的数据预处理;确保所有内容的格式正确(分类、NAN、字符串等)。下面显示了模型的期望值:

[打印(i.shape,i.dtype)模型中的i.input]
[模型中o的打印(o.shape,o.dtype)输出]
[model.layers中l的打印(l.name、l.input_shape、l.dtype)]

问题的根源在于使用列表作为输入,而不是Numpy数组;Keras/TF不支持前者。一个简单的转换是:
x\u数组=np.asarray(x\u列表)

下一步是确保以预期格式提供数据;对于LSTM,这将是一个三维张量,其尺寸为
(批量大小、时间步、特征)
,或者等效为
(num\u样本、时间步、通道)
。最后,作为调试专业提示,打印数据的所有形状。完成上述所有工作的代码,如下所示:

Sequences=np.asarray(序列)
目标=np.asarray(目标)
显示形状()
序列=np。展开(序列,-1)
目标=np。展开尺寸(目标,-1)
显示形状()
#输出
预期:(num_样本、时间步、通道)
序列:(2001000)
目标:(200)
预期:(num_样本、时间步、通道)
顺序:(200、1000、1)
目标:(200,1)

作为一个额外提示,我注意到您正在通过
main()
运行,因此您的IDE可能缺少类似Jupyter的基于单元的执行;我强烈推荐这本书。只需在[]中添加
#
,然后按下面的
Ctrl+Enter即可:


使用的功能

def show_shapes():#可以让您的用户接受输入;这将使用局部变量值
打印(“预期:(num_样本、时间步、通道)”)
打印(“序列:{}”.format(Sequences.shape))
打印(“目标:{}”.format(Targets.shape))

由于版本不同,也可能发生这种情况(为了解决这个问题,我不得不从tensorflow 2.1.0移回2.0.0.beta1)。

在尝试了上述所有操作但没有成功后,我发现我的问题是数据中的一列具有
布尔值。将所有内容转换为
np.float32
解决了这个问题

import numpy as np

X = np.asarray(X).astype(np.float32)

我有许多不同的输入和目标变量,不知道是哪一个导致了问题

要找出它在哪个变量上中断,可以使用堆栈策略中指定的路径在库包中添加打印值:

      File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\constant_op.py", line 96, in convert_to_eager_tensor
        return ops.EagerTensor(value, ctx.device_name, 
在代码的这一部分中添加
print
语句可以让我看到是哪个输入导致了问题:

常数p.py

。。。。
dtype=dtype.as\u数据类型\u枚举
除属性错误外:
dtype=dtypes.as\u dtype(dtype).as\u datatype\u enum
ctx.确保_已初始化()

print(value)#你最好用这个,因为keras的版本不可兼容

from keras import backend as K
X_train1 = K.cast_to_floatx(X_train)
y_train1 = K.cast_to_floatx(y_train)

这是一个高度误导性的错误,因为这基本上是一个一般性错误,可能与浮点无关

例如,在我的例子中,它是由pandas数据帧的一个字符串列中包含一些
np.NaN
值引起的。算了吧

通过将其替换为空字符串修复:

df.fillna(value='', inplace=True)
或者更具体地说,仅对字符串(例如“对象”)列执行此操作:


您可能需要检查输入数据集或数组中的数据类型,然后将其转换为
float32

train_X[:2, :].view()
#array([[4.6, 3.1, 1.5, 0.2],
#       [5.9, 3.0, 5.1, 1.8]], dtype=object)
train_X = train_X.astype(np.float32)
#array([[4.6, 3.1, 1.5, 0.2],
#       [5.9, 3. , 5.1, 1.8]], dtype=float32)

这应该可以做到:

x_train = np.asarray(x_train).astype(np.float32)
y_train = np.asarray(y_train).astype(np.float32)

如果您使用的是DataFrame并且有多个列类型,请使用此选项:

numeric_list = df.select_dtypes(include=[np.number]).columns
df[numeric_list] = df[numeric_list].astype(np.float32)

尝试将np.float32转换为tf.float32(读取keras和tensorflow的数据类型):


tf.convert_to_tensor(X_train,dtype=tf.float32)

对于以下内容,您会得到什么输出?:(1)
print(len(X_train))
;(2)
打印(len(x_列[0]))
;(3)
打印(x_列形状)
;(4)
打印(x列[0]。形状)
。如果出现错误,只需跳过数字。更重要的是,查看完整代码会有所帮助,因为我无法用提供的信息再现问题。我怀疑您正在使用可变的输入大小,或者您的
x\u train
列表维度不一致;x_序列中的seq的
输出是什么:print(np.array(seq.shape)
?@OverLordGoldDragon-
打印(len(x_列))
输出
13520
打印(len(x_列[0])
输出
1000
,for循环输出
(1000,)
针对
x_列中的每个值。以下输出是什么<代码>导入系统;导入tensorflow作为tf;进口干酪;打印(系统版本);打印(tf.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;打印(keras.uuu版本)#python版本、tf版本、keras版本
此外,您是否能够通过共享数据子集,例如?您的问题被夸大了;看起来列表很受欢迎。@不客气;别忘了@OverlordGoldDragon我在将3D numpy数组插入熊猫数据帧,然后从数据帧获取numpy数组以创建tensor对象时遇到了这个问题。为了解决这个问题,我直接传递numpy数组来创建tensor对象。如果我的ytrain是一个多标签类数组,我该如何解决这个问题?(1000,20)1000张唱片,每张唱片有20个标签?是的,这个简短的答案是所有需要的,非常感谢!)这应该是这个伟大答案的认可答案,我的数据是对象而不是浮动的
numeric_list = df.select_dtypes(include=[np.number]).columns
df[numeric_list] = df[numeric_list].astype(np.float32)