Tensorflow数据适配器错误:ValueError:未能找到可以处理输入的数据适配器

时间:2019-09-10 15:58:29

标签: python tensorflow keras lstm

在运行加密货币RNN的senddex教程脚本时,请在此处链接

YouTube Tutorial: Cryptocurrency-predicting RNN Model

,但是在尝试训练模型时遇到错误。我的tensorflow版本是2.0.0,我正在运行python 3.6。尝试训练模型时,出现以下错误:

File "C:\python36-64\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 734, in fit
    use_multiprocessing=use_multiprocessing)

File "C:\python36-64\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 224, in fit
    distribution_strategy=strategy)

File "C:\python36-64\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 497, in _process_training_inputs
    adapter_cls = data_adapter.select_data_adapter(x, y)

File "C:\python36-64\lib\site-packages\tensorflow_core\python\keras\engine\data_adapter.py", line 628, in select_data_adapter
    _type_name(x), _type_name(y)))

ValueError: Failed to find data adapter that can handle input: <class 'numpy.ndarray'>, (<class 'list'> containing values of types {"<class 'numpy.float64'>"})

任何建议将不胜感激!

6 个答案:

答案 0 :(得分:11)

您是否检查过您的训练/测试数据和训练/测试标签是否都是numpy数组?可能是您将numpy数组与列表混合在一起。

答案 1 :(得分:5)

如果在处理从keras.utils.Sequence类继承的自定义生成器时遇到此问题,则可能必须确保不要混用Kerastensorflow - Keras-导入。
当您必须切换到先前的tensorflow版本以实现兼容性时(例如与cuDNN兼容),这种情况尤其可能发生。

例如,如果您将其用于tensorflow-version> 2 ...

from keras.utils import Sequence

class generatorClass(Sequence):

    def __init__(self, x_set, y_set, batch_size):
        ...

    def __len__(self):
        ...

    def __getitem__(self, idx):
        return ...

...但是您实际上尝试将这个生成器安装在tensorflow版本的<2中,您必须确保从该版本导入Sequence类,例如:

keras = tf.compat.v1.keras
Sequence = keras.utils.Sequence

class generatorClass(Sequence):

    ...

答案 2 :(得分:3)

是,将代码添加到model.fit()函数之前 train_y= np.asarray(train_y) validation_y= np.asarray(validation_y)

答案 3 :(得分:2)

我有类似的问题。就我而言,我使用的是tf.keras.Sequential模型,但使用的是keras生成器。

错误:

from keras.preprocessing.sequence import TimeseriesGenerator
gen = TimeseriesGenerator(...)

正确:

gen = tf.keras.preprocessing.sequence.TimeseriesGenerator(...)

答案 4 :(得分:1)

当我将 tensorflow 从 1.x 更新到 2.x 时出现此错误 更改我的导入后解决了

import keras 

import tensorflow.keras as keras

答案 5 :(得分:0)

也许会帮助某人。 首先检查您的数据类型是否为numpy数组,并且您可能需要使用DF。

print(X.shape, X.dtype)
print(y.shape, y.dtype)

将您的numpy数组转换为Pandas DF

train_x = pd.DataFrame(train_x)
train_y = pd.DataFrame(train_y)