Недопустимый аргумент: В[0] несоответствие В[1] форме: 1 против 3: [22500,1] [3,1] 0 0 [Op:МатМул]

#python #tensorflow #keras

Вопрос:

Я новичок в машинном обучении, и я хочу знать, почему появляется эта ошибка. Цель этой программы-ввести изображения rgb, затем преобразовать их в оттенки серого, и CNN изучит изображения в оттенках серого.

 from tensorflow.keras.preprocessing.image import ImageDataGenerator

def to_grayscale_then_rgb(image): # this function is to take rgb image input and convert to grayscale
    image = tf.image.rgb_to_grayscale(image)
    image = tf.image.grayscale_to_rgb(image)
    return image

trainDataGen = ImageDataGenerator(
    rescale = 1./255,
    rotation_range = 30,
    shear_range = 0.2,
    horizontal_flip = True,
    zoom_range = 0.3,
    fill_mode = 'nearest',preprocessing_function=to_grayscale_then_rgb,
    validation_split = 0.4
    
)

valDataGen = ImageDataGenerator(
    rescale = 1./255,
    validation_split = 0.4
)

train_generator = trainDataGen.flow_from_directory(
    base_dir,
    target_size = (150, 150),
    color_mode = 'grayscale',
    batch_size = 4,
    class_mode = 'categorical',
    subset = 'training'
)
validation_generator = trainDataGen.flow_from_directory(
    base_dir,
    target_size = (150, 150),
    color_mode = 'grayscale',
    batch_size = 4,
    class_mode = 'categorical',
    subset = 'validation'
)
 

Си-эн-эн выглядит так. Размер используемых изображений составляет 150 пикселей x 150 пикселей.

 from keras import models
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu', input_shape = (150, 150, 3)),
    tf.keras.layers.Conv2D(32, (3,3), activation = 'relu'),
    tf.keras.layers.MaxPooling2D(2, 2),

    tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu'),
    tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu'),
    tf.keras.layers.MaxPooling2D(2, 2),

    tf.keras.layers.Conv2D(128, (3, 3), activation = 'relu'),
    tf.keras.layers.Conv2D(128, (3, 3), activation = 'relu'),
    tf.keras.layers.MaxPooling2D(2, 2),


    tf.keras.layers.Conv2D(256, (3, 3), activation = 'relu'),
    tf.keras.layers.MaxPooling2D(2, 2),

    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(512, activation = 'relu'),
    tf.keras.layers.Dense(3, activation = 'softmax')
])

model.compile(loss='categorical_crossentropy',
              optimizer=tf.optimizers.Adam(),
              metrics=['accuracy'])

history = model.fit(
          train_generator,
          steps_per_epoch = 35,
          epochs = 25,
          validation_data = validation_generator,
          validation_steps = 5,
          callbacks = [callb()],
          verbose = 2
)
 

и когда я его запускаю. Это показывает что-то вроде этого
изображения ошибки