为啥我的神经网络总是预测同一个类别?

Posted

技术标签:

【中文标题】为啥我的神经网络总是预测同一个类别?【英文标题】:Why my neural network always predicts the same class?为什么我的神经网络总是预测同一个类别? 【发布时间】:2021-11-08 11:22:40 【问题描述】:

我有以下用于二元分类的神经网络。问题是它总是预测相同的类别(类别 1,或正类别)。我尝试对负类进行过采样,使正类的比率约为 43%,但模型仍然产生 1。基本上,它没有进行任何训练。

tf.reset_default_graph()
sess = tf.InteractiveSession()
input1 = Input(shape=(10,100)) #number of time steps and number of features
lstm1 = LSTM(units=10)(input1)
dense_1 = Dense(8, activation='relu')(lstm1)
dense_2 = Dense(4, activation='relu')(dense_1)
dense_3 = Dense(1, activation='softmax')(dense_2)
model = Model(inputs=[input1],outputs=[dense_3])
# compile the model
opt = Adam(lr=1e-06)
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])
model.summary()

batch_size = 32
epochs = 100

callbacks = [ModelCheckpoint(filepath='best_Doc2Vec_LSTM.h5', monitor='val_loss', save_best_only=True)]

train_history = model.fit([Data_x_train], 
          [Data_y_train], batch_size=batch_size, epochs=epochs, validation_data=(Data_x_val, Data_y_val), callbacks = callbacks, verbose = 2)

【问题讨论】:

这个问题很模糊,考虑改写和添加细节。我个人认为这个问题在datascience.stackexchange.com上会更好 模型仍然产生 1,您正在使用带有 1 个神经元的 softmax。 @Luke,我想知道网络结构是否有问题。哪一部分是模糊的?我可以添加哪些信息? @MRM softmax 创建一个概率之和为 1 的输出分布。因此,如果您有 1 个神经元,则它始终为 1。请尝试使用 sigmoid,或最后更改使用softmax 将神经元分层为 2,并更改您的损失函数。 @MRM 如果是这样,那么是的,尝试在隐藏层中添加更多神经元,因为 8 和 4 对于您的模型而言相对较低。 【参考方案1】:

可能的问题可能是您的数据集,如果您用于训练的数据集不平衡,则测试误差会增加。因此,您需要有一个平衡的数据集。它有助于提高泛化并避免过度拟合

另一种可能的解决方案是进行网格搜索以调整模型的超参数,包括批量大小、时期、激活函数、学习率、优化器和损失函数,并找到最佳的。

【讨论】:

以上是关于为啥我的神经网络总是预测同一个类别?的主要内容,如果未能解决你的问题,请参考以下文章

Python,为啥我的概率神经网络(PNN)总是预测零?

为啥带有 Dropout 的 DNN 总是预测一个?

分类:类中的数据偏斜

为啥RNN总是输出1

python做BP神经网络,进行数据预测,训练的输入和输出值都存在负数,为啥预测值永远为正数?

Keras LSTM 网络预测所有信号属于同一类别(在 3 个不同的类别中)