为什么我的神经网络不学习?

数据挖掘 喀拉斯
2021-10-10 23:42:16

我正在使用 Keras 库(使用 Python 3.6)来创建神经网络。

我的网络在 16 个训练样本中保持 62.5% 的恒定总体最大准确率。

我可以通过哪些方式提高这种准确性?

我应该增加训练样本的数量,还是限制训练样本中的一些数据有帮助?还是我可能不知道的其他事情?

任何帮助是极大的赞赏。

这是我的神经网络的层:

# Build neural network
# Neural net with multiple layers
model = Sequential()

model.add(Dense(32, input_dim=17, init='uniform', activation='sigmoid'))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(32, init='uniform', activation='relu'))
model.add(Dense(16, init='uniform', activation='sigmoid'))
model.add(Dense(4, init='uniform', activation='sigmoid'))
model.add(Dense(1, init='uniform', activation='sigmoid'))

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Fit model
history = model.fit(X, Y, validation_split=0.46, nb_epoch=150, batch_size=3)
3个回答

对于小训练集的问题,神经网络是错误的方法。即使您只有 2 个非常能代表您的功能的功能,那么 16 个功能也是不够的。

作为一个非常普遍的经验法则,我为数据集中的每个特征使用 100 个示例。然后,这会随着您期望的每个不同类别而呈指数增长。16 个实例不足以训练一个神经网络。在测试集上应用模型时,总会有巨大的误差范围。更成问题的是您使用的是非常深的神经网络。这将需要更多的训练实例才能正确学习该功能。

我建议您使用通用机器学习技术,例如SVM这可能会导致更好的结果。试试这些技术,看看你会得到什么结果:k-NN、内核 SVM、k-means 聚类。

但是,请注意 16 个训练实例仍然很少。

首先,如果您的目标是使用 softmax 进行分类更改最后一个 sigmoid。

如果您正在执行回归,请添加一些 dropout 层,增加训练示例的数量,更改优化器,尝试使用 sigmoid 或 tanh 更改 ReLus,为您的输入数据尝试不同的归一化技术。

您可以制作一个包含可以调用的变量的表格,因此您还可以删除一个变量并将其替换为新变量。所以你的程序将有一个有组织的表格系统,其大小可以是无限的。

使用您的库,它可能会反复调用:

model = Sequential()

model.add(Dense(32, input_dim=17, init='uniform', activation='sigmoid'))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(32, init='uniform', activation='relu'))
model.add(Dense(16, init='uniform', activation='sigmoid'))
model.add(Dense(4, init='uniform', activation='sigmoid'))
model.add(Dense(1, init='uniform', activation='sigmoid'))

你检查过吗?或者库可能需要更多变量才能运行。您是否尝试过为备份每层创建一个变量?