我的网络只预测一个班级

时间:2017-12-18 23:42:00

标签: machine-learning neural-network deep-learning keras conv-neural-network

我正在尝试使用CNN进行六级分类。我遇到的第一个问题是验证损失和准确性开始很高。似乎直到它达到较低的值,既没有训练,也没有计算验证准确度,因为它被卡在相同的值

(training start)

然后,当它开始计算准确度时,它变得非常糟糕:

half training。我使用以下网:

inp = Input(shape=input_shape)
out = Conv2D(16, (5, 5),activation = 'relu', kernel_initializer='glorot_normal', kernel_regularizer=regularizers.l2(0.01), padding='same')(inp)
out = MaxPooling2D(pool_size=(2, 2))(out)
out = Dropout(0.5)(out)

out = Conv2D(32, (3, 3),activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)
out = MaxPooling2D(pool_size=(2, 2))(out)
out = Dropout(0.5)(out)

out = Conv2D(32, (3, 3),activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)
out = Dropout(0.5)(out)

out = Conv2D(64, (3, 3), activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)
out = Conv2D(64, (3, 3),activation = 'relu', kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)
out = MaxPooling2D(pool_size=(2, 2))(out)

out = Conv2D(128, (3, 3), activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)
out = Conv2D(128, (3, 3),activation = 'relu', kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)
out = MaxPooling2D(pool_size=(2, 2))(out)
out = Conv2D(256, (3, 3), activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)
out = MaxPooling2D(pool_size=(2, 2))(out)
out = Conv2D(256, (3, 3), activation = 'relu',kernel_initializer='glorot_normal', kernel_regularizer=regularizers.l2(0.01), padding='same')(out)
out = MaxPooling2D(pool_size=(2, 2))(out)
out = Flatten()(out)
out = Dropout(0.5)(out)
dense1 = Dense(6, activation="softmax")(out)
model = Model(inputs = inp, outputs = dense1)

我已经检查过标签是否正确,图像也很好。网络的输出始终是同一个类(顺便说一句,类是图像较少的类)。

我正在使用带有lr = 1e-5

的Adam优化器

1 个答案:

答案 0 :(得分:1)

代码似乎适用于6级分类。但是,我认为你的网络有太多的辍学层。而且大多数信号都没有达到目的。您是否在数据集上尝试过更简单的网络?

尝试这是第一种培训方法: https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py