如何解决没有验证准确性的问题?
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)
进行二元分类。
【讨论】:
以上是关于如何解决没有验证准确性的问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 v-autocomplete 菜单没有隐藏在移动键盘后面? (验证)
如何在错误轨道“警告:299 Elasticsearch 内置安全功能未启用。如果没有身份验证,您的集群可以...”中解决此问题