从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);

- % 转换数据 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 源码 才意识到。