请注意每个人,这是“多标签”问题,而不是“多类”问题。这是一个多标签,多类别的问题。我试图通过仅阅读图像就按类型对电影海报进行分类。我总共有22000张图像。我对Keas模型的一种流派进行了热编码,以预测电影的多种流派(在最终的密集层激活中使用了S形)。我需要推荐合适的批处理大小和纪元数。我正在使用VGG16。我也想知道如何选择要冻结的图层。
我使用VGG16尝试了25个纪元。该模型往往过拟合。批次大小为10。
这是我按类型划分的训练图像(注意:电影可能不止一种类型,这种情况经常发生)
{“操作”:2226.0, 惊悚片:2788.0, '戏剧':9283.0, '浪漫':2184.0, '恐怖':2517.0, '科幻':756.0, '神秘':918.0, '冒险':1105.0, '动画':583.0, “犯罪”:1369.0, '喜剧':5524.0, ``幻想'':735.0, “家庭”:991.0, “音乐”:319.0, “历史记录”:359.0, ``战争'':177.0, '音乐':191.0, '传记':484.0, “运动”:190.0}
conv_base = VGG16(weights = 'imagenet', include_top = False, input_shape = (224,224,3))
for layer in conv_base.layers[6:]:
layer.trainable = False
early = EarlyStopping(monitor='acc', patience=7, mode='auto')
classifier = Sequential()
classifier.add(conv_base)
from keras.layers import Dropout
classifier.add(Dense(units = 128, activation = "relu"))
classifier.add(Dropout(0.2))
classifier.add(Dense(units = 128, activation = "relu"))
classifier.add(Dropout(0.1))
classifier.add(Dense(units = 19, activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ["accuracy"])
classifier.fit(X_train, y_train, epochs=15, batch_size=10, callbacks = [early])