大家好,我是深度学习的新手,目前正在尝试实现一个图像分类器,但在运行包含fit方法的单元格时,出现了以下错误。我不知道如何解决这个错误,我还查看了关于这个错误的各种类似帖子,但没有找到解决方法。如果你知道如何解决这个问题,请帮助我,并且简要说明一下为什么会出现这种问题。
无效参数错误:重塑输入的张量有7872512个值,但请求的形状需要6400的倍数 [[节点sequential_7/flatten_6/Reshape (在:1定义)]][操作:__inference_train_function_5120]
函数调用堆栈:train_function
import pandas as pdimport numpy as npimport cv2import tensorflow as tffrom keras.preprocessing.image import ImageDataGeneratortrain_datagen = ImageDataGenerator(rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)training_set = train_datagen.flow_from_directory('drive/MyDrive/EmotionDetectionDataset/dataset/train')test_datagen = ImageDataGenerator(rescale=1. / 255)validation_generator = test_datagen.flow_from_directory('drive/MyDrive/EmotionDetectionDataset/dataset/test',target_size=(48,48),batch_size=32,class_mode='categorical')test_set = validation_generatorcnn = tf.keras.models.Sequential()cnn.add(tf.keras.layers.Conv2D(filters=32,kernel_size = 3,activation='relu',input_shape=[48,48,3]))cnn.add(tf.keras.layers.MaxPool2D(pool_size=(2,2),strides=2))cnn.add(tf.keras.layers.Conv2D(filters=64,kernel_size = 3,activation='relu'))cnn.add(tf.keras.layers.MaxPool2D(pool_size=(2,2),strides=2))cnn.add(tf.keras.layers.Flatten())cnn.add(tf.keras.layers.Dense(units=128,activation='relu'))cnn.add(tf.keras.layers.Dense(units=7,activation='relu'))cnn.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])cnn.fit(x=training_set,validation_data=test_set,epochs=25)
回答:
你忘记为训练集指定目标尺寸,使用的默认值是(256,256)
,但你使用的是(48,48)
:
training_set = train_datagen.flow_from_directory('drive/MyDrive/EmotionDetectionDataset/dataset/train', target_size=(48,48),batch_size=32,class_mode='categorical')validation_generator = test_datagen.flow_from_directory('drive/MyDrive/EmotionDetectionDataset/dataset/test',target_size=(48,48),batch_size=32,class_mode='categorical')