首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用神经网络近似正弦函数

无法使用神经网络近似正弦函数
EN

Stack Overflow用户
提问于 2009-10-14 09:07:47
回答 4查看 24K关注 0票数 22

我正在尝试使用自己编写的神经网络来近似sine()函数。我已经在一个简单的OCR问题上测试了我的神经网络,它起作用了,但我在应用它来近似sine()时遇到了麻烦。我的问题是,在训练过程中,我的误差恰好收敛到50%,所以我猜这完全是随机的。

我使用一个输入神经元作为输入(0到PI),并使用一个输出神经元作为结果。我有一个单一的隐藏层,我可以在其中改变神经元的数量,但我目前正在尝试大约6-10个。

我有一种感觉,问题是因为我使用的是sigmoid传递函数(这是我的应用程序中的一个要求),它的输出仅在0和1之间,而sine()的输出在-1和1之间。为了纠正这个问题,我尝试将输出乘以2,然后减去1,但这并没有解决问题。我在想,我必须在某个地方做一些转换,才能让它工作。

有什么想法吗?

EN

回答 4

Stack Overflow用户

发布于 2009-10-14 09:23:46

使用线性输出单元。

下面是一个使用R的简单示例

代码语言:javascript
复制
set.seed(1405)
x <- sort(10*runif(50))
y <- sin(x) + 0.2*rnorm(x)

library(nnet)
nn <- nnet(x, y, size=6, maxit=40, linout=TRUE)
plot(x, y)
plot(sin, 0, 10, add=TRUE)
x1 <- seq(0, 10, by=0.1)
lines(x1, predict(nn, data.frame(x=x1)), col="green")

票数 16
EN

Stack Overflow用户

发布于 2009-10-15 22:41:11

当你训练网络时,你应该将目标(正弦函数)归一化到范围0,1,然后你就可以保持sigmoid传递函数。

代码语言:javascript
复制
sin(x) in [-1,1]  =>  0.5*(sin(x)+1) in [0,1]

Train data:
    input    target    target_normalized
    ------------------------------------
    0         0          0.5
    pi/4      0.70711    0.85355
    pi/2      1           1
    ...

请注意,我们在训练之前映射了目标。一旦你训练和模拟了网络,你就可以映射回网络的输出。

下面是一个用于说明的MATLAB代码:

代码语言:javascript
复制
%% input and target
input = linspace(0,4*pi,200);
target = sin(input) + 0.2*randn(size(input));

% mapping
[targetMinMax,mapping] = mapminmax(target,0,1);

%% create network (one hidden layer with 6 nodes)
net = newfit(input, targetMinMax, [6], {'tansig' 'tansig'});
net.trainParam.epochs = 50;
view(net)

%% training
net = init(net);                            % init
[net,tr] = train(net, input, targetMinMax); % train
output = sim(net, input);                   % predict

%% view prediction
plot(input, mapminmax('reverse', output, mapping), 'r', 'linewidth',2), hold on
plot(input, target, 'o')
plot(input, sin(input), 'g')
hold off
legend({'predicted' 'target' 'sin()'})

票数 12
EN

Stack Overflow用户

发布于 2009-10-21 17:30:47

你的网络没有理由不能工作,尽管6对于近似正弦波来说绝对是偏低的。我至少会尝试10次,甚至20次。

如果这不起作用,那么我认为你需要提供更多关于你的系统的细节。即学习算法(反向传播?)、学习率等。

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

https://stackoverflow.com/questions/1565115

复制
相关文章

相似问题

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