Machine learning 精度提高,但在许多时代保持不变

Machine learning 精度提高,但在许多时代保持不变,machine-learning,neural-network,deep-learning,classification,keras,Machine Learning,Neural Network,Deep Learning,Classification,Keras,我的模型准确率迅速提高到94.3%,但在余下的时间里一直保持不变。 以下是我的模型和代码: model = Sequential() model.add(Conv2D(5, (3,3), strides=(2,2), kernel_initializer='normal', activation='sigmoid', input_shape=(dim, dim, 3))) model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2))) mode

我的模型准确率迅速提高到94.3%,但在余下的时间里一直保持不变。 以下是我的模型和代码:

model = Sequential()
model.add(Conv2D(5, (3,3),  strides=(2,2), kernel_initializer='normal', activation='sigmoid', input_shape=(dim, dim, 3)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(Conv2D(5, (3,3),  strides=(2,2), activation='sigmoid'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))

# Create the feature vector
model.add(Flatten())
model.add(Dense(12288, activation='sigmoid'))
model.add(Dropout(0.2))
model.add(Dense(1536, activation='sigmoid'))
model.add(Dropout(0.3))
model.add(Dense(384, activation='sigmoid'))
model.add(Dropout(0.4))
model.add(Dense(1, activation='sigmoid'))

sgd = SGD(lr=0.001, momentum=0.9)
model.compile(loss="binary_crossentropy", optimizer="sgd", metrics=["accuracy"])
model.fit(data, labels, epochs=20, batch_size=100, callbacks=callbacks_list, verbose=1)
CNN_output = model.predict(data)
培训结果如下所示:

检查CNN的输出(根据预测),我得到以下结果(注意,这只是一个示例):


您的数据集非常不平衡/倾斜。您有94%的标签0和6%的标签1。神经网络只是了解到,如果它对所有事情都预测0,那么它的性能会非常好

要避免这种情况,您可以将数据集更改为标签1的50%和标签0的50%,或者可以使用fit函数的“class_weight”参数:

class_weight:将类映射到权重值的字典,用于缩放损失函数(仅在培训期间)

在你的情况下,我会使用

fit(..., class_weight = {0:1, 1:15.5})
因为类0中的样本数是1的15.5倍。这里的数字只是说,当你错分为0时,你的损失乘以1,当你错分为1时,损失乘以15.5。。。更多信息

另外,在您的案例中,我不会使用准确度指标来真正评估结果,但可以看到f1分数指标,它更适合此类数据集


我希望这能有所帮助?

我并没有过多地关注准确度分数,我查看了文件中的输出,然后计算了你提到的f_分数。我添加了类的权重,但检查了输出后,我可以看到,对于任何输入,预测几乎保持不变。有什么建议吗?正如我告诉你的,每个样本的训练数据标签几乎都是不变的。。。模型了解到这一点是很正常的:-)好的,我现在对它有了更好的理解,我只是在输出中添加了一个阈值来对最终预测进行上下取整,到目前为止,它似乎工作得很好。非常感谢你!
fit(..., class_weight = {0:1, 1:15.5})