Python 中大数的 S 形函数
Sigmoid function for large numbers in Python
我正在使用 Sigmoid
激活函数执行神经网络任务。我的网络输入是图像(MNIST
数据集),因为每个图像的维度是 28*28
,当我必须将它们转换为矢量时,我将有 N*784
矩阵。这个大矩阵与权重矩阵相乘会产生很大的权重正数和负数,我必须将它们传递给 Sigmoid
函数。我使用 expit()
作为 sigmoid 函数,我的问题是:
30 之前的数字在 expit()
中接近 1。例如 expit(28)
结果 0.99999999
和 expit(29)
结果 1.0
和上 29
也得到 1
。但是我的新权重更高 30
并且因此他们中的一些人在第一个学习周期中得到 1
和一些 0 实际上根本没有任何学习。
我必须做什么? Sigmoid's
上限是29
?我不能改变它吗?我必须改变我的图像尺寸来克服这个问题吗?
正如评论部分所讨论的那样,真正的问题原来是使用 sigmoid
本身,它不适合这种情况。在任何有限精度计算中都会遇到所描述的问题,一个系统有 29 个系统,另一个系统有 38 个系统。
解决该问题的一种方法是使用 softmax
激活函数,它不太容易受到此类问题的影响。请注意,对于成本函数,您可能会遇到类似的挑战。
稍微偏离主题,但您可能想检查问题是如何解决的,例如tensorflow。它为初学者提供了一些不错的教程。
我正在使用 Sigmoid
激活函数执行神经网络任务。我的网络输入是图像(MNIST
数据集),因为每个图像的维度是 28*28
,当我必须将它们转换为矢量时,我将有 N*784
矩阵。这个大矩阵与权重矩阵相乘会产生很大的权重正数和负数,我必须将它们传递给 Sigmoid
函数。我使用 expit()
作为 sigmoid 函数,我的问题是:
30 之前的数字在 expit()
中接近 1。例如 expit(28)
结果 0.99999999
和 expit(29)
结果 1.0
和上 29
也得到 1
。但是我的新权重更高 30
并且因此他们中的一些人在第一个学习周期中得到 1
和一些 0 实际上根本没有任何学习。
我必须做什么? Sigmoid's
上限是29
?我不能改变它吗?我必须改变我的图像尺寸来克服这个问题吗?
正如评论部分所讨论的那样,真正的问题原来是使用 sigmoid
本身,它不适合这种情况。在任何有限精度计算中都会遇到所描述的问题,一个系统有 29 个系统,另一个系统有 38 个系统。
解决该问题的一种方法是使用 softmax
激活函数,它不太容易受到此类问题的影响。请注意,对于成本函数,您可能会遇到类似的挑战。
稍微偏离主题,但您可能想检查问题是如何解决的,例如tensorflow。它为初学者提供了一些不错的教程。