matlab cnn工具箱如何预测模型,有做过CNN预测的吗

在论坛上下的代码 做的是基于卷积神经网络的风电预测,是不是训练的子程序不用打乱顺序,batch_x 中x1是一个三维矩阵 batchy中y是个一维矩阵

function net = cnntrain(net, x1, y, opts)

m = size(x1, 3);% m 保存的是训练样本个数 本次应用100个训练样本

numbatches = m / opts.batchsize; % 本次应用batchsize为10,numbatches =10

% rem: Remainder after division. rem(x,y) is x - n.*y 相当于求余

% rem(numbatches, 1) 就相当于取其小数部分,如果为0,就是整数

if rem(numbatches, 1) ~= 0

error('numbatches not integer');

end

net.rL = [];

for i = 1 : opts.numepochs

% disp(X) 打印数组元素。如果X是个字符串,那就打印这个字符串

disp(['epoch ' num2str(i) '/' num2str(opts.numepochs)]);

% tic 和 toc 是用来计时的,计算这两条语句之间所耗的时间

tic;

% P = randperm(N) 返回[1, N]之间所有整数的一个随机的序列,例如

% randperm(6) 可能会返回 [2 4 5 6 1 3]

% 这样就相当于把原来的样本排列打乱,再挑出一些样本来训练

kk = randperm(numbatches);%每一轮epoch都要将所有训练集进行随机打乱  ??????

for l = 1 : numbatches %每个batch训练后更新一次网络参数 numbatches 182

disp(['batch ' num2str(l) '/' num2str(numbatches)]);  %进展打印,当前运行到第l个batch

batch_x = x1(:, :, kk((l - 1) * opts.batchsize + 1 : l * opts.batchsize));

batch_y = y(:,    kk((l - 1) * opts.batchsize + 1 : l * opts.batchsize));

% 在当前的网络权值和网络输入下计算网络的输出

net = cnnff(net, batch_x);%前向传导

% 得到上面的网络输出后,通过对应的样本标签用bp算法来得到误差对网络权值

%(也就是那些卷积核的元素)的导数

net = cnnbp(net, batch_y);%后项调参

% 得到误差对权值的导数后,就通过权值更新方法去更新权值

net = cnnapplygrads(net, opts);%更新权值

if isempty(net.rL)% 代价函数值,也就是误差值

net.rL(1) = net.L;

end

net.rL(end + 1) = 0.99 * net.rL(end) + 0.01 * net.L;% 保存历史的误差值,以便画图分析

end

toc;

end

end

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值