2016-11-26 56 views
1

我使用Sigmoid激活函数执行神经网络任务。我的网络输入是图像(MNIST数据集),因为每个图像的尺寸是28*28,当我必须将它们转换为矢量时,我将有​​矩阵。这个大矩阵与权重矩阵的乘法会产生较大的正负数字,我必须将它们传递给Sigmoid函数。我用expit()作为sigmoid函数,我的问题是:Python中大数字的Sigmoid函数

数字,直到30导致接近1在expit()。例如expit(28)结果0.99999999expit(29)结果1.0和上面的29也得到1。但是我的新衣服上30,因为其中一些获得1和第一轮学习中的一些0,实际上根本没有任何学习。

我该怎么办?​​3210上限为29?我不能改变它?我必须改变我的形象维度来克服这一点?

+0

您正在使用哪一个版本的scipy? expit是数值不稳定的,直到0.14(https://github.com/scipy/scipy/issues/3385) –

+0

我不知道,两天前我通过pip安装它。 – Fcoder

+0

检查python -c'导入scipy;打印(scipy .__ version__)'我假设你使用scipy的expit,对吧? –

回答

1

正如评论部分所述,真正的问题竟然是使用sigmoid本身,它不适合这种情况。在任何有限精度计算中,都将面临所描述的问题,一个系统有29个,另一个系统有38个。

解决该问题的一种方法是使用softmax激活函数,该函数不易受此类问题影响。请注意,使用成本函数您可能会遇到类似的挑战。

稍微偏离主题,您可能想要检查问题是如何解决的。 tensorflow。它为初学者提供了一些很好的教程。