我一直在用自己添加的一些层来训练一个ResNet50模型,但是每一个时代都有一个更高的val_loss和相同的val_accuracy。我想这套模式有点过火了,但我不知道该如何解决这个问题。我使用FER2013 .jpg数据集来测试和训练模型。
代码:
base_model = tf.keras.applications.ResNet50(input_shape=(48,48,3), include_top=False, weights='imagenet')
#ResNet model with additional convolutional layers.
model = Sequential()
model.add(base_model)
model.add(Conv2D(32, kernel_size=(3,3), activation='relu', padding='same', input_shape=(48,48,3), data_format='channels_last'))
model.add(Conv2D(64,kernel_size=(3,3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),padding='same'))
model.add(Dropout(0.25))
model.add(Conv2D(128,kernel_size=(3,3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), padding='same'))
model.add(Conv2D(128,kernel_size=(3,3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), padding='same'))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(7, activation='softmax'))
adam = tf.keras.optimizers.Adam(learning_rate=0.0001)
model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
model_info = model.fit(traindata,epochs=100,validation_data=testdata)
#base_model.compile(loss='categorical_crossentrophy', optimizer='adam', metrics=['accuracy'])
#model_info = base_model.fit(traindata, steps_per_epoch=449,epochs=100,validation_data=testdata,validation_steps=112)我用的是128号的batch_size,任何帮助都是很好的。
第一个时代的结果:
历元1/100 98/98 ============================== -276 s 3s/步进损失: 1.6894 -精度: 0.3039 - val_loss: 3.2897 - val_accuracy: 0.1737
历元2/100 98/98 ============================== -342 s 4s/步进损失: 1.4305 -精度: 0.3630 - val_loss: 13.5700 - val_accuracy: 0.1737
发布于 2022-04-20 07:58:59
ResNet模型的输出形状似乎是(2,2,2048),因此对其应用Conv2D层是没有意义的:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
resnet50 (Functional) (None, 2, 2, 2048) 23587712
conv2d (Conv2D) (None, 2, 2, 32) 589856
conv2d_1 (Conv2D) (None, 2, 2, 64) 18496
max_pooling2d (MaxPooling2D (None, 1, 1, 64) 0
)
dropout (Dropout) (None, 1, 1, 64) 0
conv2d_2 (Conv2D) (None, 1, 1, 128) 73856
max_pooling2d_1 (MaxPooling (None, 1, 1, 128) 0
2D)
conv2d_3 (Conv2D) (None, 1, 1, 128) 147584
max_pooling2d_2 (MaxPooling (None, 1, 1, 128) 0
2D)
dropout_1 (Dropout) (None, 1, 1, 128) 0
flatten (Flatten) (None, 128) 0
dense (Dense) (None, 1024) 132096
dropout_2 (Dropout) (None, 1024) 0
dense_1 (Dense) (None, 7) 7175
=================================================================
Total params: 24,556,775
Trainable params: 24,503,655
Non-trainable params: 53,120https://stackoverflow.com/questions/71935777
复制相似问题