【CNN回归预测】卷积神经网络CNN数据回归预测【含Matlab源码 2003期】

本文介绍了Matlab中卷积神经网络(CNN)的基础概念,包括CNN的定义、组成部分(输入层、卷积层、池化层、全连接层和Softmax层),以及部分源代码示例。文章涵盖了CNN在图像处理中的应用和Matlab版本2014a的使用情况。
摘要由CSDN通过智能技术生成

⛄一、运行结果

在这里插入图片描述
在这里插入图片描述

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄二、 CNN简介

1 卷积神经网络(CNN)定义
卷积神经网络(convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。卷积网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。

2 CNN神经网络图
在这里插入图片描述
CNN是一种通过卷积计算的前馈神经网络,其是受生物学上的感受野机制提出的,具有平移不变性,使用卷积核,最大的应用了局部信息,保留了平面结构信息。

3 CNN五种结构组成
3.1 输入层

在处理图像的CNN中,输入层一般代表了一张图片的像素矩阵。可以用三维矩阵代表一张图片。三维矩阵的长和宽代表了图像的大小,而三维矩阵的深度代表了图像的色彩通道。比如黑白图片的深度为1,而在RGB色彩模式下,图像的深度为3。

3.2 卷积层(Convolution Layer)
卷积层是CNN最重要的部分。它与传统全连接层不同,卷积层中每一个节点的输入只是上一层神经网络的一小块。卷积层被称为过滤器(filter)或者内核(kernel),Tensorflow的官方文档中称这个部分为过滤器(filter)。
【注意】在一个卷积层中,过滤器(filter)所处理的节点矩阵的长和宽都是由人工指定的,这个节点矩阵的尺寸也被称为过滤器尺寸。常用的尺寸有3x3或5x5,而过滤层处理的矩阵深度和当前处理的神经层网络节点矩阵的深度一致。
下图为卷积层过滤器(filter)结构示意图
在这里插入图片描述
下图为卷积过程
在这里插入图片描述
详细过程如下,Input矩阵是像素点矩阵,Kernel矩阵是过滤器(filter)
在这里插入图片描述
3.3 池化层(Pooling Layer)
池化层不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络参数的目的。使用池化层既可以加快计算速度也可以防止过拟合。池化层filter的计算不是节点的加权和,而是采用最大值或者平均值计算。使用最大值操作的池化层被称之为最大池化层(max pooling)(最大池化层是使用的最多的磁化层结构)。使用平均值操作的池化层被称之为平均池化层(mean pooling)。
下图分别表示不重叠的4个2x2区域的最大池化层(max pooling)、平均池化层(mean pooling)
在这里插入图片描述
在这里插入图片描述
3.4 全连接层
在经过多轮卷积层和池化层的处理之后,在CNN的最后一般会由1到2个全连接层来给出最后的分类结果。经过几轮卷积层和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动图像特征提取的过程。在提取完成之后,仍然需要使用全连接层来完成分类任务。

3.5 Softmax层
通过Softmax层,可以得到当前样例属于不同种类的概率分布问题。

⛄三、部分源代码

load([ ‘test_input_xdata.mat’])
load([ ‘test_input_ydata.mat’])

save_directory = ‘’;
summary_file_name = ‘Crossval_results_summary_table’;

%Network settings:
augment_training_data = 1; %Randomly augment training dataset
normalize_training_input = 1; %Normalize training data based on predictor distribution
overwrite_crossval_results_table = 1; %1: create new cross validation results table, 0: add lines to existing table

%Input data pre-processing:
xdata = permute(xdata,[1,2,4,3]); %input needs to be [X, Y, nchannel, nslice]

n_images = size(ydata,1); %For random splitting of input into training/testing groups
img_number = 1:n_images;
rng(20211013);
idx = randperm(n_images);

%Training/testing data split:
n_test_images = 28; %Number of images to kept for independent test set
n_crossval_folds = 8; %Number of training cross-validation folds
n_train_images = n_images-n_test_images;

idx_test = find(ismember(img_number, idx(end-(n_test_images-1):end)));
XTest = xdata(:,:,:,idx_test);
YTest = ydata(idx_test);
xdata(:,:,:,idx_test) = [];
ydata(idx_test) = [];
img_number(idx_test) = [];
idx(end-(n_test_images-1):end) = [];

%Network parameters (can iterate over by moving into for loop):
%params.optimizer = {‘sgdm’,‘adam’}; %‘sgdm’ | ‘adam’
params.batch_size = 8;
%params.max_epochs = [4,6,8];
params.learn_rate = 0.001;
params.learn_rate_drop_factor = 0.1;
params.learn_rate_drop_period = 20;
params.learn_rate_schedule = ‘none’; %‘none’, ‘piecewise’
params.shuffle = ‘every-epoch’;
params.momentum = 0.9; %for sgdm optimizer
params.L2_reg = 0.01;
params.conv_features = [16, 16, 32]; %Number of feature channels in convolutional layers
params.conv_filter_size = 3;
params.conv_padding = ‘same’;
params.pooling_size = 2;
params.pooling_stride = 1;
params.dropout_factor = 0.2;

params.duplication_factor = 3; %Duplicate training set by N times
show_plots = 0; %1: show plots of training progress

tic
iter = 1;
disp(‘Performing cross validation evaluation over all network iterations:’)
for var1 = {‘sgdm’,‘adam’}
params.optimizer = var1;
for var2 = [4,6,8]
params.max_epochs = var2;
%for var3 = X:Y
%params.example = var3;
%etc.

%Splitting training data into k-folds
for k = 1:n_crossval_folds
images_per_fold = floor(n_train_images/n_crossval_folds);
idx_val = find(ismember(img_number, idx(1+(k-1)*images_per_fold:images_per_fold+(k-1)*images_per_fold)));

YValidation = ydata(idx_val);
XValidation = xdata(:,:,:,idx_val);

XTrain = xdata;
XTrain(:,:,:,idx_val) = [];
YTrain = ydata;
YTrain(idx_val) = [];

%ROS input normalization:
if normalize_training_input == 1
[XTrain, YTrain] = ROS(XTrain, YTrain, params.duplication_factor);
else
XTrain = repmat(XTrain,1,1,1,params.duplication_factor);
YTrain = repmat(YTrain,params.duplication_factor,1);
end

%Random geometric image augmenation:
%Augmentation parameters
aug_params.rot = [-90,90]; %Image rotation range
aug_params.trans_x = [-5 5]; %Image translation in X direction range
aug_params.trans_y = [-5 5]; %Image translation in Y direction range
aug_params.refl_x = 1; %Image reflection across X axis
aug_params.refl_y = 1; %Image reflection across Y axis
aug_params.scale = [0.7,1.3]; %Imaging scaling range
aug_params.shear_x = [-30,50]; %Image shearing in X direction range
aug_params.shear_y = [-30,50]; %Image shearing in Y direction range
aug_params.add_gauss_noise = 0; %Add Gaussian noise
aug_params.gauss_noise_var = 0.0005; %Gaussian noise variance

if augment_training_data == 1
XTrain = image_augmentation(XTrain,aug_params);
else
aug_params = structfun(@(x) [], aug_params, ‘UniformOutput’, false);
end

%Network structure:
layers = [
imageInputLayer([size(XTrain,1),size(XTrain,2),size(XTrain,3)])

convolution2dLayer(params.conv_filter_size,params.conv_features(1),'Padding',params.conv_padding)
%batchNormalizationLayer
reluLayer

averagePooling2dLayer(params.pooling_size,'Stride',params.pooling_stride)

convolution2dLayer(params.conv_filter_size,params.conv_features(2),'Padding',params.conv_padding)
%batchNormalizationLayer
reluLayer

averagePooling2dLayer(params.pooling_size,'Stride',params.pooling_stride)

convolution2dLayer(params.conv_filter_size,params.conv_features(3),'Padding',params.conv_padding)
%batchNormalizationLayer
reluLayer

dropoutLayer(params.dropout_factor)
fullyConnectedLayer(1)
regressionLayer];

params.validationFrequency = floor(numel(YTrain)/params.batch_size);

options = network_options(params,XValidation,YValidation,show_plots);
net = trainNetwork(XTrain,YTrain,layers,options);

%Network results:
accuracy_threshold = 0.1; %Predictions within 10% will be considered ‘accurate’

predicted_train = predict(net,XTrain);
predictionError_train = YTrain - predicted_train;
numCorrect_train = sum(abs(predictionError_train) < accuracy_threshold);
accuracy_train(k) = numCorrect_train/numel(YTrain);
error_abs_train(k) = mean(abs(predictionError_train));
rmse_train(k) = sqrt(mean(predictionError_train.^2));

predicted_val = predict(net,XValidation);
predictionError_val = YValidation - predicted_val;
numCorrect_val = sum(abs(predictionError_val) < accuracy_threshold);
accuracy_val(k) = numCorrect_val/numel(YValidation);
error_abs_val(k) = mean(abs(predictionError_val));
rmse_val(k) = sqrt(mean(predictionError_val.^2));

if k == 1
predicted_val_table(1:numel(YValidation),1) = predict(net,XValidation);
if iter == 1
YValidation_table(1:numel(YValidation),1) = YValidation;
end

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]何庆富,迟重然,臧述升.几何损伤导致涡轮静叶气动衰减的CNN预测[J].工程热物理学报. 2022,43(12)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值