% 构建cnn网络进行训练 trainingSetup = load("C:\Users\Administrator\Desktop\MATLAB基于卷积神经网络的手势识别\代码\cnn.mat"); imdsTrain = trainingSetup.imdsTrain; [imdsTrain, imdsValidation] = splitEachLabel(imdsTrain,0.7);% 70%用于训练 % 调整图像大小以匹配网络输入层。 augimdsTrain = augmentedImageDatastore([28 28 1],imdsTrain); augimdsValidation = augmentedImageDatastore([28 28 1],imdsValidation); layers = [ imageInputLayer([28 28 1],"Name","imageinput") convolution2dLayer([3 3],32,"Name","conv_1","Padding","same") batchNormalizationLayer("Name","batchnorm_1") reluLayer("Name","relu_1") maxPooling2dLayer([3 3],"Name","maxpool_1","Padding","same") convolution2dLayer([3 3],32,"Name","conv_2","Padding","same") batchNormalizationLayer("Name","batchnorm_2") reluLayer("Name","relu_2") maxPooling2dLayer([3 3],"Name","maxpool_2","Padding","same") fullyConnectedLayer(10,"Name","fc") softmaxLayer("Name","softmax") classificationLayer("Name","classoutput")]; figure('Visible','on'); plot(layerGraph(layers)) % 显示网络结构图 opts = trainingOptions("sgdm",... "ExecutionEnvironment","auto",... "InitialLearnRate",0.01,... "Shuffle","every-epoch",... "MaxEpochs",15, ... % 最大学习整个数据集的次数,训练15轮 "MiniBatchSize",130, ... % 一个batch有130个样本 "Plots","training-progress",... % 画出整个训练过程 "ValidationData",augimdsValidation); % MaxEpochsy:训练轮数;MiniBatchSize:每轮迭代次数 = 训练样本数 / MiniBatchSize [net, traininfo] = trainNetwork(augimdsTrain,layers,opts); % 保存当前网络 save('cnn.mat','net')
时间: 2023-07-24 14:14:52 浏览: 161
这段代码是用于构建一个CNN网络进行训练的过程。下面是对代码的分析:
1. 加载预训练的CNN模型文件 "cnn.mat"。
2. 使用 `splitEachLabel` 函数将训练数据集 `imdsTrain` 分割为训练集和验证集,其中训练集占 70%。
3. 使用 `augmentedImageDatastore` 函数调整图像大小,以匹配网络的输入层。这里将图像大小调整为 28x28x1。
4. 定义了一个包含多个层的CNN模型,包括输入层、卷积层、批归一化层、ReLU激活层、池化层、全连接层、Softmax层和分类输出层。
5. 使用 `plot` 函数绘制网络结构图。
6. 定义了训练选项 `trainingOptions`,包括使用随机梯度下降法("sgdm")进行优化,设置学习率、数据混洗方式、最大训练轮数、每个迭代批次的大小等。
7. 使用 `trainNetwork` 函数进行模型训练,传入训练数据集、网络结构和训练选项,并返回训练后的网络和训练信息。
8. 最后使用 `save` 函数保存训练后的网络模型到 "cnn.mat" 文件。
这段代码实现了一个基于卷积神经网络的手势识别模型的训练过程,并将训练后的模型保存到 "cnn.mat" 文件中。
阅读全文