我正在使用这种CNN架构:
def createModel():
model = Sequential()
model.add(Conv2D(96, (11, 11), strides=(4,4), padding='same', activation='relu', input_shape=(224,224,3))) #, input_shape=input_shape
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2,2), padding='same'))
model.add(Conv2D(256, (5, 5), strides=(1,1), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2,2), padding='same'))
model.add(Conv2D(384, (3, 3), strides=(1,1), padding='same', activation='relu'))
model.add(Conv2D(384, (3, 3), strides=(1,1), padding='same', activation='relu'))
model.add(Conv2D(256, (3, 3), strides=(1,1), padding='same', activation='relu'))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
return model
总共使226,065,795个可训练参数...我在一个非常小的数据集上训练我的模型。确实,我有3个类别,每个类别包含1000张图像,分别在训练和验证集之间划分。我使用了OneHotEncoding。
但是,当我训练模型时,总体准确性往往会非常低:32%。我正在使用categorical_crossentropy
损失函数。从更深的角度看,该模型似乎总能预测1,0,0
向量,即第一类,而永远不会预测其他向量,即使对于这样显示给模型的训练数据也是如此。
那里是什么问题?为什么我的成绩不好?我的数据集很平衡。是因为我的参数数量与数据量相比过高吗?我不明白...
编辑:删除Dropout仍然会保留坏的东西