0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MATLAB残差神经网络设计

冬至子 来源:matlab学习之家 作者:matlab学习之家 2023-06-02 16:39 次阅读

我们都知道在CNN网络中,输入的是图片的矩阵,也是最基本的特征,整个CNN网络就是一个信息提取的过程,从底层的特征逐渐抽取到高度抽象的特征,网络的层数越多也就意味这能够提取到的不同级别的抽象特征更加丰富,并且越深的网络提取的特征越抽象,就越具有语义信息。但神经网络越深真的越好吗?我们可以看下面一张图片,图中描述了不同深度的传统神经网络效果对比图,显然神经网络越深效果不一定好。

图片

对于传统CNN网络,网络深度的增加,容易导致梯度消失和爆炸。针对梯度消失和爆炸的解决方法一般是正则初始化和中间的正则化层,但是这会导致另一个问题,退化问题,随着网络层数的增加,在训练集上的准确率却饱和甚至下降了。为此,残差神经网络应运而生。

一、算法原理

残差网络通过加入 shortcut connections,变得更加容易被优化。包含一个 shortcut connection 的几层网络被称为一个残差块(residual block),如下图所示。

图片

普通的平原网络与深度残差网络的最大区别在于,深度残差网络有很多旁路的支线将输入直接连到后面的层,使得后面的层可以直接学习残差,这些支路就叫做shortcut。传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet 在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。

二、代码实战

构建19层ResNet网络,以负荷预测为例
%%
clc
clear


close all
load Train.mat
% load Test.mat
Train.weekend = dummyvar(Train.weekend);
Train.month = dummyvar(Train.month);
Train = movevars(Train,{'weekend','month'},'After','demandLag');
Train.ts = [];




Train(1,:) =[];
y = Train.demand;
x = Train{:,2:5};
[xnorm,xopt] = mapminmax(x',0,1);
[ynorm,yopt] = mapminmax(y',0,1);


xnorm = xnorm(:,1:1000);
ynorm = ynorm(1:1000);


k = 24;           % 滞后长度


% 转换成2-D image
for i = 1:length(ynorm)-k


    Train_xNorm{:,i} = xnorm(:,i:i+k-1);
    Train_yNorm(i) = ynorm(i+k-1);
    Train_y{i} = y(i+k-1);
end
Train_x = Train_xNorm';


ytest = Train.demand(1001:1170);
xtest = Train{1001:1170,2:5};
[xtestnorm] = mapminmax('apply', xtest',xopt);
[ytestnorm] = mapminmax('apply',ytest',yopt);
% xtestnorm = [xtestnorm; Train.weekend(1001:1170,:)'; Train.month(1001:1170,:)'];
xtest = xtest';
for i = 1:length(ytestnorm)-k
    Test_xNorm{:,i} = xtestnorm(:,i:i+k-1);
    Test_yNorm(i) = ytestnorm(i+k-1);
    Test_y(i) = ytest(i+k-1);
end
Test_x = Test_xNorm';
x_train = table(Train_x,Train_y');
x_test = table(Test_x);
%% 训练集和验证集划分
% TrainSampleLength = length(Train_yNorm);
% validatasize = floor(TrainSampleLength * 0.1);
% Validata_xNorm = Train_xNorm(:,end - validatasize:end,:);
% Validata_yNorm = Train_yNorm(:,TrainSampleLength-validatasize:end);
% Validata_y = Train_y(TrainSampleLength-validatasize:end);
% 
% Train_xNorm = Train_xNorm(:,1:end-validatasize,:);
% Train_yNorm = Train_yNorm(:,1:end-validatasize);
% Train_y = Train_y(1:end-validatasize);
%% 构建残差神经网络
lgraph = layerGraph();
tempLayers = [
    imageInputLayer([4 24],"Name","imageinput")
    convolution2dLayer([3 3],32,"Name","conv","Padding","same")];
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    batchNormalizationLayer("Name","batchnorm")
    reluLayer("Name","relu")];
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    additionLayer(2,"Name","addition")
    convolution2dLayer([3 3],32,"Name","conv_1","Padding","same")];
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    batchNormalizationLayer("Name","batchnorm_1")
    reluLayer("Name","relu_1")];
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    additionLayer(2,"Name","addition_1")
    convolution2dLayer([3 3],32,"Name","conv_2","Padding","same")];
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    batchNormalizationLayer("Name","batchnorm_2")
    reluLayer("Name","relu_2")];
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    additionLayer(2,"Name","addition_2")
    convolution2dLayer([3 3],32,"Name","conv_3","Padding","same")];
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    batchNormalizationLayer("Name","batchnorm_3")
    reluLayer("Name","relu_3")];
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    additionLayer(2,"Name","addition_3")
    fullyConnectedLayer(1,"Name","fc")
    regressionLayer("Name","regressionoutput")];
lgraph = addLayers(lgraph,tempLayers);


% 清理辅助变量
clear tempLayers;


lgraph = connectLayers(lgraph,"conv","batchnorm");
lgraph = connectLayers(lgraph,"conv","addition/in2");
lgraph = connectLayers(lgraph,"relu","addition/in1");
lgraph = connectLayers(lgraph,"conv_1","batchnorm_1");
lgraph = connectLayers(lgraph,"conv_1","addition_1/in2");
lgraph = connectLayers(lgraph,"relu_1","addition_1/in1");
lgraph = connectLayers(lgraph,"conv_2","batchnorm_2");
lgraph = connectLayers(lgraph,"conv_2","addition_2/in2");
lgraph = connectLayers(lgraph,"relu_2","addition_2/in1");
lgraph = connectLayers(lgraph,"conv_3","batchnorm_3");
lgraph = connectLayers(lgraph,"conv_3","addition_3/in2");
lgraph = connectLayers(lgraph,"relu_3","addition_3/in1");


plot(lgraph);
analyzeNetwork(lgraph);
%% 设置网络参数
maxEpochs = 60;
miniBatchSize = 20;
options = trainingOptions('adam', ...
 'MaxEpochs',maxEpochs, ...
 'MiniBatchSize',miniBatchSize, ...
 'InitialLearnRate',0.01, ...
 'GradientThreshold',1, ...
 'Shuffle','never', ...
 'Plots','training-progress',...
 'Verbose',0);


net = trainNetwork(x_train,lgraph ,options);


Predict_yNorm = predict(net,x_test);
Predict_y = double(Predict_yNorm)
plot(Test_y)
hold on 
plot(Predict_y)
legend('真实值','预测值')

网络框架:

图片

网络分析:

图片

网络训练:

图片

预测结果:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4732

    浏览量

    100373
  • MATLAB仿真
    +关注

    关注

    4

    文章

    175

    浏览量

    19885
  • cnn
    cnn
    +关注

    关注

    3

    文章

    350

    浏览量

    22115
  • resnet
    +关注

    关注

    0

    文章

    12

    浏览量

    3154
收藏 人收藏

    评论

    相关推荐

    matlab 神经网络 数学建模数值分析

    matlab神经网络 数学建模数值分析 精通的可以讨论下
    发表于 09-18 15:14

    神经网络Matlab程序

    神经网络Matlab程序
    发表于 09-15 12:52

    matlab小波神经网络源程序下载

    基于MATLAB的有关小波与神经网络紧致结合的源程序[hide] [/hide]
    发表于 02-22 15:50

    matlab神经网络30个案例分析源码

    matlab神经网络30个案例分析源码
    发表于 12-19 14:51

    MATLAB神经网络

    MATLAB神经网络
    发表于 07-08 15:17

    什么是深度收缩网络

    。  在一定程度上,深度收缩网络的工作原理,可以理解为:通过注意力机制注意到不重要的特征,然后通过软阈值化将它们置为零;或者说,通过注意力机制注意到重要的特征,将它们保留下来,从而加强深度
    发表于 11-26 06:33

    Matlab神经网络工具箱是什么? 它在同步中的应用有哪些?

    Matlab神经网络工具箱是什么?Matlab神经网络工具箱在同步中的应用有哪些?
    发表于 04-26 06:42

    卷积神经网络模型发展及应用

    地介绍了卷积 神经网络的发展历史,然后分析了典型的卷积神经 网络模型通过堆叠结构、网中网结构、结构以及 注意力机制提升模型性能的方法,并
    发表于 08-02 10:39

    matlab神经网络应用设计

    matlab神经网络应用设计详细的介绍了matlab神经网络的结合
    发表于 02-23 10:47 0次下载

    matlab神经网络应用设计》pdf下载

    matlab神经网络应用设计》电子资料下载
    发表于 01-13 10:07 0次下载

    基于深度神经网络的远程监督关系抽取模型

    基于卷积神经网络的远程监督关系抽取方法提取的特征单一,且标准交叉熵损失函数未能较好处理数据集中正负样本比例不均衡的情况。为此,提出一种基于深度神经网络的远程监督关系抽取模型,通过改
    发表于 05-24 17:06 3次下载

    基于神经网络的微型电机转子焊点图像检测

    基于神经网络的微型电机转子焊点图像检测
    发表于 07-02 14:56 23次下载

    如何使用MATLAB神经网络工具箱

    神经网络是一种模拟人脑神经元网络的计算模型,广泛应用于各种领域,如图像识别、语音识别、自然语言处理等。在MATLAB中,可以使用神经网络工具箱(Neural Network Toolb
    的头像 发表于 07-03 10:34 1928次阅读

    如何利用Matlab进行神经网络训练

    Matlab作为一款强大的数学计算软件,广泛应用于科学计算、数据分析、算法开发等领域。其中,Matlab神经网络工具箱(Neural Network Toolbox)为用户提供了丰富的函数和工具
    的头像 发表于 07-08 18:26 1504次阅读

    网络是深度神经网络

    网络(Residual Network,通常简称为ResNet) 是深度神经网络的一种 ,其独特的结构设计在解决深层网络训练中的梯度消失
    的头像 发表于 07-11 18:13 900次阅读