CNN架构预测总是相同的类

时间:2018-10-03 19:41:03

标签: python keras conv-neural-network

我正在使用这种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仍然会保留坏的东西

0 个答案:

没有答案