正确训练多层感知器的功率为2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正确训练多层感知器的功率为2相关的知识,希望对你有一定的参考价值。

我对神经网络世界很陌生,我遵循了一些教程并且能够实现MLP,但激活函数是双曲正切,其范围是[-1:1]。

我写了一个像这样的培训文件:1 2 3 4 ... n

目标输出文件是2的幂:2 4 8 16 ... 2^n

我希望网络能够模拟这个功能,但我不知道如何调整学习速度,动量和激活功能以便正确模拟。

我尝试了激活函数f(x) = x(带有导数1)来克服范围问题(-1和1之间的输出),但是我的输出和误差随之快速增长,即使我降低了学习率,所以我很困惑如何修改这些参数,以模拟f(x) = 2^x或如何正确训练网络。

我应该怎样做才能使MLP工作?

答案

我更喜欢的是获得每个binary2^N表示并训练学习率为0.01和Sigmoid激活函数。

很难准确生成小数点后的2,4,8,溢出可能会发生,你的输出将变为nan。而是为所有ys生成相同长度的二进制表示,并为此训练您的网络。

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)

这是你得到的。

(array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
        [0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
        [0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
        [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
        [0, 0, 0, 0, 0, 1, 0, 0, 0, 0]]), array([[0],
        [1],
        [2],
        [3],
        [4]]))

我们有责任不让溢出发生。因此激活功能是必要的。您可以在激活功能的范围内使用您自己的中间表示。

以上是关于正确训练多层感知器的功率为2的主要内容,如果未能解决你的问题,请参考以下文章

Keras 为多层感知器正确输入形状

多层感知器 - 找到“分离”曲线

深度学习6. 多层感知机及PyTorch实现

深度学习6. 多层感知机及PyTorch实现

批量学习和在线学习的区别

深度学习6. 多层感知机及PyTorch实现