ValueError:找不到可以处理输入的数据适配器:<类'numpy.ndarray'><



X_train和y_train是不同的数据类型。在使用Onehotencoder转换dtype时遇到此错误。尝试使用asarray((,但可以通过找到方法

这是代码:

X_train, X_test , y_train , y_test  = train_test_split(data, labels ,test_size = 0.3, random_state  = 1 )
print(X_train.shape , y_train.shape , X_test.shape , y_test.shape)
y_train = OneHotEncoder(y_train , dtype = 'float64')
epochs = 15 
Net = model.fit(X_train , y_train , batch_size = 32 , epochs = epochs , validation_data = (X_test , y_test))

错误如下:

ValueError Traceback (most recent call last)
<ipython-input-13-59f0001da0f5> in <module>
1 epochs = 15
----> 2 Net = model.fit(X_train , y_train , batch_size = 32 , epochs = epochs ,        validation_data = (X_test , y_test))
~AppDataRoamingPythonPython38site-packagestensorflowpythonkerasenginetraining.py in       _method_wrapper(self, *args, **kwargs)
106   def _method_wrapper(self, *args, **kwargs):
107     if not self._in_multi_worker_mode():  # pylint: disable=protected-access
--> 108       return method(self, *args, **kwargs)
109 
110     # Running inside `run_distribute_coordinator` already.
~AppDataRoamingPythonPython38site-packagestensorflowpythonkerasenginetraining.py in     fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle,    class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps,       validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
1047          training_utils.RespectCompiledTrainableState(self):
1048       # Creates a `tf.data.Dataset` and handles batch and epoch iteration.
-> 1049       data_handler = data_adapter.DataHandler(
1050           x=x,
1051           y=y,
~AppDataRoamingPythonPython38site-packagestensorflowpythonkerasenginedata_adapter.py in __init__(self, x, y, sample_weight, batch_size, steps_per_epoch, initial_epoch, epochs, shuffle, class_weight, max_queue_size, workers, use_multiprocessing, model, steps_per_execution)
1102       self._steps_per_execution_value = steps_per_execution.numpy().item()
1103 
-> 1104     adapter_cls = select_data_adapter(x, y)
1105     self._adapter = adapter_cls(
1106         x,
~AppDataRoamingPythonPython38site-packagestensorflowpythonkerasenginedata_adapter.py in select_data_adapter(x, y)
966   if not adapter_cls:
967     # TODO(scottzhu): This should be a less implementation-specific error.
--> 968     raise ValueError(
969         "Failed to find data adapter that can handle "
970         "input: {}, {}".format(
ValueError: Failed to find data adapter that can handle input: <class 'numpy.ndarray'>, <class 'sklearn.preprocessing._encoders.OneHotEncoder'>

​ '''

您的错误来自于如何使用OneHotEncoder。你的神经网络需要两个张量对象,但OneHotEncoder是另一种用于更改张量的对象。根据sklearn的文档:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

您可以看到,您首先需要实例化对象OneHotEncoder,然后使用.fit((函数将数字切换到一个热编码。

此外,您的代码不会将y_test编码为一个热点。最好的方法是在train_testrongplit函数之前转换标签。

#Create the instance object and directly fit the labels
labels = OneHotEncoder(handle_unknown='ignore').fit(labels)
X_train, X_test , y_train , y_test  = train_test_split(data, labels, test_size = 0.3, random_state  = 1 )
print(X_train.shape , y_train.shape , X_test.shape , y_test.shape)
epochs = 15 
Net = model.fit(X_train , y_train , batch_size = 32 , epochs = epochs , validation_data = (X_test , y_test))