验证准确率毫无意义

我的数据集如下:训练集:5589张图像验证集:1398张图像测试集:1996张图像尺寸:1156,256,1这是一个二元分类问题。我使用独热编码的目标数组[0,1],[1,0]获得了一些结果(在测试集上达到约83%的准确率)。意识到这种做法有多愚蠢后,我将目标数组改成了二进制形式[0]或1,并将分类交叉熵改成了二元交叉熵。

采用这种方法后,无论我使用什么学习率,验证准确率都卡在了82.05%,训练准确率则卡在了25.80%。当然,这毫无意义,测试集上的准确率大约在30%左右。

为什么会发生这种情况?我检查了训练数据和元数据,它们都是正确的。我在下面发布了我的代码。

inp = Input(shape=input_shape)out = Conv2D(16, (5, 5),activation = 'relu', kernel_initializer='glorot_uniform', 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_uniform',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_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)out = Dropout(0.5)(out)out = Conv2D(64, (3, 3), activation = 'relu',kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)out = Conv2D(64, (3, 3),activation = 'relu', kernel_initializer='glorot_uniform',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_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)out = Conv2D(128, (3, 3),activation = 'relu', kernel_initializer='glorot_uniform',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_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)out = Conv2D(256, (3, 3), activation = 'relu',kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out)out = MaxPooling2D(pool_size=(2, 2))(out)out = Conv2D(512, (3, 3), activation = 'relu',kernel_initializer='glorot_uniform', 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(1, activation="softmax")(out)model = Model(inputs = inp, outputs = dense1)

而训练的历程看起来像这样:历程


回答:

将你最后的激活函数从softmax改为sigmoid,像这样

dense1 = Dense(1, activation="sigmoid")(out)

并尝试降低你的学习率

model.compile(optimizer=Adam(lr=0.0001), loss='binary_crossentropy',  metrics=['accuracy'])  

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注