为啥我的神经网络总是预测同一个类别?
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,我想知道网络结构是否有问题。哪一部分是模糊的?我可以添加哪些信息? @MRMsoftmax
创建一个概率之和为 1 的输出分布。因此,如果您有 1 个神经元,则它始终为 1。请尝试使用 sigmoid
,或最后更改使用softmax
将神经元分层为 2,并更改您的损失函数。
@MRM 如果是这样,那么是的,尝试在隐藏层中添加更多神经元,因为 8 和 4 对于您的模型而言相对较低。
【参考方案1】:
可能的问题可能是您的数据集,如果您用于训练的数据集不平衡,则测试误差会增加。因此,您需要有一个平衡的数据集。它有助于提高泛化并避免过度拟合。
另一种可能的解决方案是进行网格搜索以调整模型的超参数,包括批量大小、时期、激活函数、学习率、优化器和损失函数,并找到最佳的。
【讨论】:
以上是关于为啥我的神经网络总是预测同一个类别?的主要内容,如果未能解决你的问题,请参考以下文章