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



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

YouTube教程:加密货币预测RNN模型,

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

File "C:python36-64libsite-packagestensorflow_corepythonkerasenginetraining.py", line 734, in fit
use_multiprocessing=use_multiprocessing)
File "C:python36-64libsite-packagestensorflow_corepythonkerasenginetraining_v2.py", line 224, in fit
distribution_strategy=strategy)
File "C:python36-64libsite-packagestensorflow_corepythonkerasenginetraining_v2.py", line 497, in _process_training_inputs
adapter_cls = data_adapter.select_data_adapter(x, y)
File "C:python36-64libsite-packagestensorflow_corepythonkerasenginedata_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'>"})

如有任何建议,我们将不胜感激!

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

您可以通过在调用model.fit():之前将标签转换为数组来避免此错误

train_x = np.asarray(train_x)
train_y = np.asarray(train_y)
validation_x = np.asarray(validation_x)
validation_y = np.asarray(validation_y)

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

例如,如果您将其与tensorflow-版本>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):
...

我也遇到了类似的问题。在我的情况下,问题是我使用的是tf.keras.Sequential模型,而不是keras生成器。

错误:

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

正确:

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

将tensorflow从1.x更新为2.x时发生此错误在更改了我从的导入后,它被解决了

import keras 

import tensorflow.keras as keras

由于某种原因,当我将自定义生成器函数直接传递给model.fit(),而不是先创建它的实例时,我也遇到了这个问题。

I.e,给定:

def batch_generator(...):
...
yield(...)

我调用了model.fit(batch_generator,...),而不是:

generator_instance = batch_generator(...)
model.fit(generator_instance, ...)

可能会对某人有所帮助。首先检查您的数据类型是否为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)

最新更新