Tensorflow Data Adapter Error: ValueError: Failed to find data adapter that can handle input

PythonTensorflowKerasLstm

Python Problem Overview


While running a sentdex tutorial script of a cryptocurrency RNN, link here

YouTube Tutorial: Cryptocurrency-predicting RNN Model,

but have encountered an error when attempting to train the model. My tensorflow version is 2.0.0 and I'm running python 3.6. When attempting to train the model I receive the following error:

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'>"})

Any advice would be greatly appreciated!

Python Solutions


Solution 1 - Python

Have you checked whether your training/testing data and training/testing labels are all numpy arrays? It might be that you're mixing numpy arrays with lists.

Solution 2 - Python

You can avoid this error by converting your labels to arrays before calling 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)

Solution 3 - Python

If you encounter this problem while dealing with a custom generator inheriting from the keras.utils.Sequence class, you might have to make sure that you do not mix a Keras or a tensorflow - Keras-import.
This might especially happen when you have to switch to a previous tensorflow version for compatibility (like with cuDNN).

If you for example use this with a 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 ...

... but you actually try to fit this generator in a tensorflow-version < 2, you have to make sure to import the Sequence-class from this version like:

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

class generatorClass(Sequence):

    ...

Solution 4 - Python

I had a similar problem. In my case it was a problem that I was using a tf.keras.Sequential model but a keras generator.

Wrong:

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

Correct:

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

Solution 5 - Python

This error occured when I updated tensorflow from 1.x to 2.x It was solved after changing my import from

import keras 

to

import tensorflow.keras as keras

Solution 6 - Python

For some reason I also experienced this problem when I passed my custom generator function directly to model.fit(), rather than creating an instance of it first.

I.e, given:

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

I called model.fit(batch_generator,...), rather than:

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

Solution 7 - Python

may be it will help someone. First check your data type if it is numpy array & possibly ur algo required a DF.

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

convert your numpy array into Pandas DF

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJonathan EView Question on Stackoverflow
Solution 1 - PythonForranView Answer on Stackoverflow
Solution 2 - PythonRameez Ahmad DarView Answer on Stackoverflow
Solution 3 - PythonMarkusView Answer on Stackoverflow
Solution 4 - PythonAndreas GyrView Answer on Stackoverflow
Solution 5 - PythonPatView Answer on Stackoverflow
Solution 6 - Pythonmayowa_osiboduView Answer on Stackoverflow
Solution 7 - PythonCathrineView Answer on Stackoverflow