CNN不兼容层的问题

问题描述 投票:0回答:2

我正在尝试 fit() 我的 CNN 模型,但我在层协同工作时遇到问题。

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
tensorflow machine-learning deep-learning neural-network conv-neural-network
2个回答
0
投票
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()

如果有效,试试这个!我猜输入的形状不兼容。


0
投票

你试过重塑输入数据吗?

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))

© www.soinside.com 2019 - 2024. All rights reserved.