matlab神经网络模拟参数,机器学习 – 尝试自己在Matlab中模拟神经网络

本文详细解释了神经网络如何默认使用[-1,1]范围进行输入和输出处理,通过mapminmax函数实现数据预处理,并强调了在手动模拟网络时需要注意的数据映射和复现性问题。作者提供了实际代码示例来演示调整输入和输出的正确步骤,以及如何保持训练结果的一致性。
摘要由CSDN通过智能技术生成

你是正确的缩放.正如在

linked answer中提到的,神经网络默认将输入和输出缩放到范围[-1,1].这可以在网络处理功能配置中看到:

>> net = fitnet(2);

>> net.inputs{1}.processFcns

ans =

'removeconstantrows' 'mapminmax'

>> net.outputs{2}.processFcns

ans =

'removeconstantrows' 'mapminmax'

应用于输入/输出的第二个预处理功能是mapminmax,带有以下参数:

>> net.inputs{1}.processParams{2}

ans =

ymin: -1

ymax: 1

>> net.outputs{2}.processParams{2}

ans =

ymin: -1

ymax: 1

将两者都映射到[-1,1]范围内(训练前).

这意味着经过训练的网络需要此范围内的输入值,并且输出值也在相同范围内.如果要手动将输入提供给网络,并自行计算输出,则必须在输入处缩放数据,并在输出处反转映射.

最后要记住的是,每次训练人工神经网络时,你都会得到不同的权重.如果需要可重复的结果,则需要修复随机数生成器的状态(每次使用相同的种子初始化它).阅读有关rng和RandStream等函数的文档.

您还必须注意,如果要将数据划分为训练/测试/验证集,则每次必须使用相同的拆分(可能还受到我提到的随机性方面的影响).

这是一个例子来说明这个想法(改编自我的另一个post):

%%# data

x = linspace(-71,71,200); %# 1D input

y_model = x.^2; %# model

y = y_model + 10*randn(size(x)).*x; %# add some noise

%%# create ANN, train, simulate

net = fitnet(2); %# one hidden layer with 2 nodes

net.divideFcn = 'dividerand';

net.trainParam.epochs = 50;

net = train(net,x,y);

y_hat = net(x);

%%# plot

plot(x, y, 'b.'), hold on

plot(x, x.^2, 'Color','g', 'LineWidth',2)

plot(x, y_hat, 'Color','r', 'LineWidth',2)

legend({'data (noisy)','model (x^2)','fitted'})

hold off, grid on

%%# manually simulate network

%# map input to [-1,1] range

[~,inMap] = mapminmax(x, -1, 1);

in = mapminmax('apply', x, inMap);

%# propagate values to get output (scaled to [-1,1])

hid = tansig( bsxfun(@plus, net.IW{1}*in, net.b{1}) ); %# hidden layer

outLayerOut = purelin( net.LW{2}*hid + net.b{2} ); %# output layer

%# reverse mapping from [-1,1] to original data scale

[~,outMap] = mapminmax(y, -1, 1);

out = mapminmax('reverse', outLayerOut, outMap);

%# compare against MATLAB output

max( abs(out - y_hat) ) %# this should be zero (or in the order of `eps`)

我选择使用mapminmax函数,但您也可以手动完成.该公式是一个非常简单的线性映射:

y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值