1 问题
从2018版开始用深度学习功能,matlab的函数在不断的演化,老程序就不能用了。
net = trainNetwork(XTrain,YTrain,layers,options);
原来Xtrain 可以为4d数据,Ytrain 为数据标签。
现在xtrain需要为2dcell数据
Ytrain 没有变化
如果在新版本使用,可以有2种方法
1 转为图片;
2 使用aug
%test
imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain);
2 使用方法
转为cell数组
% 转换数据 20220930
% imageSize = [28 28 1];
% augimds = augmentedImageDatastore(imageSize,train,train_label);
%转为cell 数组
Xtrain=cell(size(train,4),1);
Xval=cell(size(Vali,4),1);
Xtest=cell(size(test,4),1);
%赋值
for i=1:size(train,4)
Xtrain{i}=train(:,:,1,i);
end
for i=1:size(Vali,4)
Xval{i}=Vali(:,:,1,i);
end
for i=1:size(test,4)
Xtest{i}=test(:,:,1,i);
end
问题发现在于 option设置不对
原来的option为这个。。
miniBatchSize = 64;
validationFrequency = floor(numel(train_label)/miniBatchSize);
%修改为adam
options = trainingOptions('sgdm', ...
'InitialLearnRate',0.005, ...
'MaxEpochs',15, ...
'Shuffle','every-epoch', ...
'ValidationData',{Xval,Vali_label}, ...
'ValidationFrequency',validationFrequency, ...
'Verbose',false, ...
'Plots','training-progress');
简化的option可以运行
options = trainingOptions('sgdm', 'Plots', 'training-progress');
% train the network
Anet = trainNetwork(train,train_label,layers,options);
是修改程序 导致 验证集的 大小不匹配。看了trainnetwork 源码 才意识到。