我对神经网络世界很陌生,我遵循了一些教程并且能够实现MLP,但激活函数是双曲正切,其范围是[-1:1]。
我写了一个像这样的培训文件:1 2 3 4 ... n
并且目标输出文件是2的幂:2 4 8 16 ... 2^n
我希望网络模拟此功能,但我不知道如何调整学习率,势头和激活功能< / strong>为了正确模拟。
我尝试了激活函数f(x) = x
(使用派生1)来克服范围问题(-1和1之间的输出),但是我的输出和错误随之快速增长,即使我降低了学习率,所以我对如何修改这些参数以模拟f(x) = 2^x
或如何正确训练网络感到困惑。
我应该怎样做才能使MLP发挥作用?
答案 0 :(得分:0)
我更喜欢的是获得每个binary
的{{1}}表示,并训练学习率为0.01和Sigmoid激活函数。
很难准确生成小数位的2,4,8,可能会发生溢出,输出将为2^N
。而是为所有nan
生成相同长度的二进制表示,并为此训练您的网络。
y
这是你得到的。
import numpy as np
x = np.arange(5)
y = np.power(2, x)
x = x.reshape((-1, 1))
lr = 0.01
o = list(map(lambda x:int(np.binary_repr(x)), y))
o = list(map(lambda x:"{:010d}".format(x), o))
y = np.array(list(map(lambda x: [int(i) for i in x], o)))
print(y, x)
我们有责任不让溢出发生。因此激活功能是必要的。您可以在激活函数范围内使用自己的中间表示。