from keras.engine import input_layer
from keras.models import Sequential
from keras.layers import Dense , Activation , Dropout ,Flatten, BatchNormalization
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
# The model is as follows...
face_model = Sequential()
input_shape_face = (48, 48, 1)
face_model.add(Conv2D(8, kernel_size= (3, 3), input_shape = input_shape_face, padding= 'same', activation = 'LeakyReLU'))
face_model.add(MaxPooling2D(pool_size = (2, 2), padding= 'same'))
face_model.add(Conv2D(16, kernel_size= (3, 3), padding= 'same', activation = 'LeakyReLU'))
face_model.add(MaxPooling2D(pool_size = (2, 2), padding= 'same'))
face_model.add(Conv2D(32, kernel_size= (3, 3), padding= 'same', activation = 'LeakyReLU'))
face_model.add(MaxPooling2D(pool_size = (2, 2), padding= 'same'))
face_model.add(Conv2D(64, kernel_size= (3, 3), padding= 'same', activation = 'LeakyReLU'))
face_model.add(Flatten())
face_model.add(Dense(128, activation = 'LeakyReLU'))
face_model.add(Dense(6, activation = 'softmax'))
face_model.summary()
Model: "sequential_34"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_92 (Conv2D) (None, 48, 48, 8) 80
max_pooling2d_69 (MaxPoolin (None, 24, 24, 8) 0
g2D)
conv2d_93 (Conv2D) (None, 24, 24, 16) 1168
max_pooling2d_70 (MaxPoolin (None, 12, 12, 16) 0
g2D)
conv2d_94 (Conv2D) (None, 12, 12, 32) 4640
max_pooling2d_71 (MaxPoolin (None, 6, 6, 32) 0
g2D)
conv2d_95 (Conv2D) (None, 6, 6, 64) 18496
flatten_8 (Flatten) (None, 2304) 0
dense_57 (Dense) (None, 128) 295040
dense_58 (Dense) (None, 6) 774
=================================================================
Total params: 320,198
Trainable params: 320,198
Non-trainable params: 0
_________________________________________________________________
# Compiling the model
face_model.compile(loss= 'categorical_crossentropy', optimizer= 'adam', metrics= ['accuracy'])
face_model.fit(facial_training_set, batch_size= batch_size, epochs= epochs, verbose= 1, validation_data= facial_testing_set)
/usr/local/lib/python3.9/dist-packages/keras/engine/training.py 中 tf__train_function(迭代器) 13 尝试: 14 do_return = 真 ---> 15 retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(迭代器)), 无, fscope) 16 除了: 17 do_return = 假
ValueError:在用户代码中:
File "/usr/local/lib/python3.9/dist-packages/keras/engine/training.py",
第 1284 行,在 train_function * 返回 step_function(自我,迭代器) 文件“/usr/local/lib/python3.9/dist-packages/keras/engine/training.py”, 第 1268 行,在 step_function ** 输出 = model.distribute_strategy.run(run_step, args=(data,)) 文件“/usr/local/lib/python3.9/dist-packages/keras/engine/training.py”, 第 1249 行,在 run_step ** outputs = model.train_step(数据) 文件“/usr/local/lib/python3.9/dist-packages/keras/engine/training.py”, 第 1050 行,在 train_step 中 y_pred = self(x, training=True) 文件“/usr/local/lib/python3.9/dist-packages/keras/utils/traceback_utils.py”, 第 70 行,在 error_handler 中 从 None 提高 e.with_traceback(filtered_tb) 文件“/usr/local/lib/python3.9/dist-packages/keras/engine/input_spec.py”, 第 280 行,在 assert_input_compatibility 中 提高 ValueError(
ValueError: Exception encountered when calling layer 'sequential_34' (type Sequential). Input 0 of layer "dense_57" is incompatible with the layer: expected axis -1 of input shape to have value 2304, but received input
形状 (48, 384)
Call arguments received by layer 'sequential_34' (type Sequential): • inputs=tf.Tensor(shape=(48, 48, 1), dtype=float32) • training=True • mask=None
face_model = Sequential()
input_shape_face = (48, 48, 1)
face_model.add(input_layer.Input(shape=input_shape_face))
face_model.add(Conv2D(8, kernel_size=(3, 3), padding='same', activation='LeakyReLU'))
face_model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
face_model.add(Conv2D(16, kernel_size=(3, 3), padding='same', activation='LeakyReLU'))
face_model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
face_model.add(Conv2D(32, kernel_size=(3, 3), padding='same', activation='LeakyReLU'))
face_model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
face_model.add(Conv2D(64, kernel_size=(3, 3), padding='same', activation='LeakyReLU'))
face_model.add(Flatten())
face_model.add(Dense(128, activation='LeakyReLU'))
face_model.add(Dense(6, activation='softmax'))
face_model.summary()
如果有效,试试这个!我猜输入的形状不兼容。
你试过重塑输入数据吗?
facial_training_set = np.array(facial_training_set).reshape((-1, 48, 48, 1))
facial_testing_set = np.array(facial_testing_set).reshape((-1, 48, 48, 1))