找不到可以处理输入的数据适配器:<;类别'__主数据发生器&x27>&书信电报;类别';非类型'&燃气轮机;在Keras python中

找不到可以处理输入的数据适配器:<;类别'__主数据发生器&x27>&书信电报;类别';非类型'&燃气轮机;在Keras python中,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,我试图训练一个有2个输入(图像和元数据)和1个输出的模型。为了实现这一点,我制作了一个定制的生成器。我按照中的教程制作了上述生成器 但是,当我尝试训练它(上面的代码)时,会发生以下错误: ValueError Traceback (most recent call last) <ipython-input-14-29dc0c5178b4> in <module>() 1 model.compile(

我试图训练一个有2个输入(图像和元数据)和1个输出的模型。为了实现这一点,我制作了一个定制的生成器。我按照中的教程制作了上述生成器

但是,当我尝试训练它(上面的代码)时,会发生以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-14-29dc0c5178b4> in <module>()
      1 model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
----> 2 History= model.fit_generator(train_generator,epochs=10).history

4 frames
/usr/local/lib/python3.7/dist-packages/keras/engine/data_adapter.py in select_data_adapter(x, y)
    976         "Failed to find data adapter that can handle "
    977         "input: {}, {}".format(
--> 978             _type_name(x), _type_name(y)))
    979   elif len(adapter_cls) > 1:
    980     raise RuntimeError(

ValueError: Failed to find data adapter that can handle input: <class '__main__.DataGenerator_train'>, <class 'NoneType'>
编辑:这些是我的导入和我制作的模型

import numpy as np
from numpy import array
import pandas as pd
import tensorflow as tf
from tensorflow import keras
from matplotlib import pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator

from tensorflow.keras.applications.resnet import ResNet50
from tensorflow.keras.applications.resnet import ResNet101
from tensorflow.keras.applications.densenet import DenseNet121
from tensorflow.keras.applications import Xception
from tensorflow.keras.applications import EfficientNetB0
from keras.models import Model
from tensorflow.keras.utils import Sequence

from tensorflow.keras import layers
from keras.layers import Dense
from tensorflow.keras.layers import concatenate, Input
import cv2

from random import randrange
import random

resnet = ResNet101(include_top=False, weights='imagenet', input_shape=(224, 224, 3))
inp = Input((224,224,3))
x = resnet(inp)
first_dense = layers.GlobalAveragePooling2D()(x)

## Metadata part ##
second_input = Input(shape=(28)) 
second_dense = Dense(500,activation='relu')(second_input)

## Fusion part ##
merge = concatenate([first_dense, second_dense])

# merge_dense= Dense(100, activation='relu')(merge)
softmax= Dense(8,activation='softmax')(merge)

model = Model(inputs=[inp, second_input], outputs=softmax)
model.summary()

您正在混合tf.keras和不受支持的keras导入。我在哪里混合它们?tf.keras.utils.Sequence vs/usr/local/lib/python3.7/dist-packages/keras/engine/data_adapter.py,这就是证据,问题在于您的代码中没有显示的导入。因此,我不应该使用
tf.keras.utils.Sequence
什么?不,现在您发布了导入,我清楚地看到tf.keras和keras之间的导入混合,您需要修复所有导入,只使用其中一个库。
class DataGenerator(tf.keras.utils.Sequence):
    def __init__(self, list_IDs, labels,metadata,batch_size=32, dim=(224,224), n_channels=3,
     n_classes=8, shuffle=True):
         #Initialization
         self.dim = dim
         self.batch_size = batch_size
         self.labels = labels
         self.metadata = metadata
         self.list_IDs = list_IDs
         self.n_channels = n_channels
         self.n_classes = n_classes
         self.shuffle = shuffle
         self.on_epoch_end()
         
    def on_epoch_end(self):
      self.indexes = np.arange(len(self.list_IDs))
      if self.shuffle == True:
        np.random.shuffle(self.indexes)

    def __len__(self):
     return int(np.floor(len(self.list_IDs) / self.batch_size))
 
    def __data_generation(self, list_IDs_temp):
     #Generates data containing batch_size samples’ # X : (n_samples, *dim, n_channels)
     # Initialization
     X = np.empty((self.batch_size, *self.dim, self.n_channels))
     y = np.empty((self.batch_size), dtype=int)
     xMetadata = np.empty((self.batch_size, 28), dtype=int)
    # Generate data
     for i, ID in enumerate(list_IDs_temp):
     # Store sample
        auxImg = (cv2.imread("train/"+ ID,cv2.IMREAD_COLOR))
        auxImg = cv2.cvtColor(auxImg,cv2.COLOR_BGR2RGB)      
        auxImg=auxImg/255
        
        X[i,] = np.array(auxImg)
        y[i] = np.array(self.labels[ID])
        aux_meta=np.array(self.metadata[ID])
        xMetadata[i,] =np.array(aux_meta)

     return [X,xMetadata], tf.keras.utils.to_categorical(y, num_classes=self.n_classes)
    
    def __getitem__(self, index):
     #Generate one batch of data’
     # Generate indexes of the batch
     indexes = self.indexes[index*self.batch_size:(index+1)*self.batch_size]
    # Find list of IDs
     list_IDs_temp = [self.list_IDs[k] for k in indexes]
    # Generate data
     [X,xMetadata], y = self.__data_generation(list_IDs_temp)
     return [X,xMetadata], y

import numpy as np
from numpy import array
import pandas as pd
import tensorflow as tf
from tensorflow import keras
from matplotlib import pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator

from tensorflow.keras.applications.resnet import ResNet50
from tensorflow.keras.applications.resnet import ResNet101
from tensorflow.keras.applications.densenet import DenseNet121
from tensorflow.keras.applications import Xception
from tensorflow.keras.applications import EfficientNetB0
from keras.models import Model
from tensorflow.keras.utils import Sequence

from tensorflow.keras import layers
from keras.layers import Dense
from tensorflow.keras.layers import concatenate, Input
import cv2

from random import randrange
import random

resnet = ResNet101(include_top=False, weights='imagenet', input_shape=(224, 224, 3))
inp = Input((224,224,3))
x = resnet(inp)
first_dense = layers.GlobalAveragePooling2D()(x)

## Metadata part ##
second_input = Input(shape=(28)) 
second_dense = Dense(500,activation='relu')(second_input)

## Fusion part ##
merge = concatenate([first_dense, second_dense])

# merge_dense= Dense(100, activation='relu')(merge)
softmax= Dense(8,activation='softmax')(merge)

model = Model(inputs=[inp, second_input], outputs=softmax)
model.summary()