【发布时间】:2016-07-06 08:55:32
【问题描述】:
我要做的是让神经网络“学习”函数 f(x) = x^2。我将这里的代码基于this 源代码。如果有帮助(使用双打),神经网络是用 c# 手工编码的。
我的想法是我向网络输入实数对(例如 (1,1)、(2, 4)、(3,9)),然后让网络在给定看不见的实数时输出正确的平方.输入由 1 个具有实数值的输入神经元给出,输出由输出层的输出(也是 1 个神经元)给出。隐藏层有4个神经元。
我的问题是输出神经元的输出在 0 到 1 之间(我使用的是 sigmoid 函数)。我从this 源学习了神经网络,它们输出离散值(手写图像代表 0、1 .. 或 9)。我解决这个问题的方法是使用函数 tan((pi * (2x - 1))/2 及其逆。这将 (0,1) 映射到实数。然后我将其逆应用于训练集. 所以当我给它输入数据时,我给它 x,以及应用于 x^2 的映射函数的逆。
这似乎在 (0,1) 的上端数字(例如 0.999999996)映射到巨大的实数时存在真正的问题(我认为双精度数不够精确)。这是做事的标准方式,还是有更好的方式?另一个想法是使用大量的输出和输入神经元并给它们一个二进制向量(例如 4 个输入神经元,(0, 0, 0, 1) 是 1 的输入)。另一个想法是使用比双精度更精确的小数。
这个任务是不是很好地利用了神经网络,还是有些不太合适?
【问题讨论】:
-
双精度比十进制更精确。使用 tan 函数会产生新问题,因为您发现它会迅速接近无穷大。通常使用 tan 设置一个限制,因此当数字高于/低于某个值时,结果将被强制为 0 或 1。
标签: c# neural-network