我正在使用Sigmoid
激活功能执行神经网络任务。我的网络输入是图像(MNIST
数据集),因为每个图像的维度是28*28
,当我必须将它们转换为向量时,我将有N*784
矩阵。这个大矩阵与权重矩阵的乘法产生权重的大的正数和负数,我必须将它们传递给Sigmoid
函数。我使用expit()
作为sigmoid函数,我的问题是:
数字直到30,结果在expit()
中接近1。例如expit(28)
结果0.99999999
和expit(29)
结果1.0
,而29
结果1
也是30
。但是我的新作品是1
,因为有些人在第一轮学习中得到Sigmoid's
和0,实际上根本就没有任何学习。
我该怎么办? 29
上限是{{1}}?我不能改变它?我必须改变我的图像尺寸来克服这个问题?
答案 0 :(得分:1)
正如评论部分所讨论的,真正的问题是使用sigmoid
本身,这不适合这种情况。在任何有限精度计算中,将面临所描述的问题,一个系统具有29个,另一个系统具有38个。
解决问题的一种方法是使用softmax
激活功能,它不易受此类问题的影响。请注意,使用成本函数可能会遇到类似的挑战。
稍微偏离主题,你可能想要检查如何解决问题,例如tensorflow。它为初学者提供了一些很好的教程。