首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确训练2级多层感知器

正确训练2级多层感知器
EN

Stack Overflow用户
提问于 2017-12-17 05:35:57
回答 1查看 58关注 0票数 0

我对神经网络世界非常陌生,我学习了一些教程,并且能够实现一个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发挥作用?

EN

回答 1

Stack Overflow用户

发布于 2017-12-17 06:18:57

我喜欢的是得到每个2^Nbinary表示,并训练学习率为0.01和Sigmoid激活函数的2^N

很难生成精确的2、4、8小数,可能会发生溢出,您的输出将转到nan。相反,为所有y生成相同长度的二进制表示,并为此培训您的网络。

代码语言:javascript
复制
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)

这是你得到的。

代码语言:javascript
复制
(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]]))

我们的责任是不让溢流发生。因此,激活函数是必要的。您可以在激活函数的范围内提供自己的中间表示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47852505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档