如何解决没有验证准确性的问题?

Posted

技术标签:

【中文标题】如何解决没有验证准确性的问题?【英文标题】:How to fix no validation accuracy? 【发布时间】:2022-01-05 21:59:28 【问题描述】:

我正在研究一个神经网络,我最近一直在训练它,它在训练数据上的准确率约为 93%,在验证数据上的准确率为 0%。我的第一个想法是过度拟合,但是模型在训练之间没有保存,我在第一个 Epoch 中得到了这些结果。我在 python 中使用带有以下模型代码的 keras:

model = Sequential(
    [
        Conv1D(320, 8, input_shape=(560, 560), activation="relu"),
        # Conv1D(320, 8, activation="relu"),
        # Conv1D(320, 8, activation="relu"),
        # Dense(750, activation="relu"),
        # Dropout(0.6),
        Dense(1500, activation="relu"),
        Dropout(0.6),
        Dense(750, activation="relu"),
        Dropout(0.6),
        GlobalMaxPooling1D(keepdims=True),
        Dense(1, activation='softmax')
    ]
)

model.compile(optimizer=Adam(learning_rate=0.00001), loss="binary_crossentropy", metrics=['accuracy'])
earlystopping = callbacks.EarlyStopping(monitor="val_accuracy",
                                        mode="max", patience=2,
                                        restore_best_weights=True)
model1 = model.fit(x=training_x, y=training_y, batch_size=150, epochs=5, shuffle=True, verbose=1, callbacks=[earlystopping], validation_data=(val_x, val_y))

我得到的结果如下所示:

纪元 1/5 167/167 [===============================] - 1266s 8s/步 - 损失:6.4154 - 准确度:0.9262 - val_loss : 0.0054 - val_accuracy: 0.0000e+00

我已经尝试更改几乎所有的超参数并更改模型的架构,但我不断得到类似的结果。这和数据有关系吗?我使用的数据是一个 3d NumPy 数组,其中包含来自一堆图像的像素数据。在这里的任何帮助将不胜感激。

【问题讨论】:

想一想,一个神经元的 softmax 激活会产生什么输出值? @Dr.Snoopy 我不太熟悉它的具体作用,但有人向我推荐了它,它有什么作用以及我应该改用什么? 你不能对一个神经元使用 softmax,它没有任何意义,因为它是一类(意味着没有分类),它会产生一个恒定的 1.0 输出。 @Dr.Snoopy 我把它改成了 2 但我还是遇到了同样的问题 我不是说这是唯一的问题,只是最明显的一个,你需要根据你的标签调整输出激活(可能是sigmoid激活),我也猜你的数据很重对正类不平衡,这也可能是一个问题。 【参考方案1】:

您需要使用activation='sigmoid'optimizers.RMSprop(lr=1e-4) 进行二元分类。

【讨论】:

以上是关于如何解决没有验证准确性的问题?的主要内容,如果未能解决你的问题,请参考以下文章

Magnolia验证字段

如何解决 v-autocomplete 菜单没有隐藏在移动键盘后面? (验证)

如何在错误轨道“警告:299 Elasticsearch 内置安全功能未启用。如果没有身份验证,您的集群可以...”中解决此问题

如何算出memo或richedit文本中某行的准确位置(像素坐标值)?解决问题者

浅谈如何做好Bug回归验证?

如何解决 Angular 应用程序中“消失”的 jQuery 验证问题?