使用神经网络进行文本分类

我对机器学习和神经网络是新手。我正在尝试从头开始使用神经网络进行文本分类。我的数据集中有7500个文档,每个文档标注了七个类别之一。数据集中大约有5800个独特的词。我使用了一个包含4000个神经元的隐藏层。使用sigmoid作为激活函数。学习率为0.1,没有使用dropout。

在训练过程中,大约2到3个周期后,会显示一个警告:

RuntimeWarning: 在exp中遇到溢出。结果输出列表显示为:

[  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00   4.11701866e-10]  对于除了4.11701866e-10之外的所有输入。

sigmoid函数:

def sigmoid(x):       output = 1/(1+np.exp(-x))   return outputdef sigmoid_output_to_derivative(output):   return output*(1-output)

如何解决这个问题?我可以使用不同的激活函数吗?

这是我的完整代码:https://gist.github.com/coding37/a5705142fe1943b93a8cef4988b3ba5f


回答:

给出一个精确的答案并不容易,因为问题可能是多方面的,且很难重现,但我会试着回答:

看起来你遇到了下溢问题,这意味着你的神经元权重将输入向量x缩放到在sigmoid函数中导致零值的值。一个简单的建议是将精度从float32增加到float64,但我猜你已经使用了这种精度。

你是否尝试过调整学习率和/或使用自适应学习率?(参见https://towardsdatascience.com/learning-rate-schedules-and-adaptive-learning-rate-methods-for-deep-learning-2c8f433990d1 以获取一些示例)。你可以先尝试使用更低的学习率进行更多迭代。

另外:你在输出层使用sigmoid函数吗?增加的非线性可能会使你的神经元饱和,即你的问题所在。

你检查过你的梯度吗?这有时也有助于追踪错误(参见http://ufldl.stanford.edu/wiki/index.php/Gradient_checking_and_advanced_optimization)。

或者,你可以尝试使用其他激活函数,看看训练是否有所改善,例如先尝试使用线性函数。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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