将4D数组划分为CNN(回归)的训练集和验证集
35次观看(过去30天)
显示旧注释
大家好,我正在试图设计一个CNN回归以下
这个Matlab示例
.它使用4D阵列存储图像和矢量存储与每张图片相关的值。我正在使用这个代码创建一个4D数组称为“数据库”,包含我的图像和一个矢量“标签”,包含的值。
K = 1;
% 2厘米
为I = 1:1000
STR = sprintf(“图像/ 2厘米/ % d.jpg”,我);
Image_to_store = imread(str);
数据库(:,:,1,k) = (image_to_store(:,:));%的图像是灰度的
标签(k) = 2;
K = K +1;
结束
% 20厘米
为I = 1:1000
STR = sprintf(“图像/ 20厘米/ % d.jpg”,我);
Image_to_store = imread(str);
数据库(:,:,1,k) = (image_to_store(:,:));
标签(k) = 20;
K = K +1;
结束
%……
现在,我有了我的4D数组和向量,所以我试图将它们分为训练集和验证集,如链接的例子所建议的。有人能帮我理解一下我该怎么做吗?
谢谢
淡水河谷
接受的答案
Jakub Sikorowski
2019年3月9日
嗨,淡水河谷,
希望这是你想要的:
%您的数据集:
%前1000项标签2cm,
%第二1000项标签20cm,
数据库= rand(28,28,1,2000);
%百分比训练点= 70%,验证= 30%,测试= 0%
p = 0.7;
%划分2000个数据库条目的一种方法
[trainInd,valInd,testInd] = dividerand(2000,p,1-p,0);
trainDatabaseBad =数据库(:,:,:,trainInd);
valDatabaseBad =数据库(:,:,:,valInd);
大小(trainDatabaseBad)%输出:28 28 1 1400
大小(valDatabaseBad)%输出:28 28 1 600
更好的分割方式,确保
%有同等比例的2cm至20cm的样品
训练集、验证集和整个集合。
[trainInd1,valInd1,testInd1] = dividerand(1000,p,1-p,0);
[trainInd2,valInd2,testInd2] = dividerand(1000,p,1-p,0);
trainDatabase = cat(4,数据库(:,:,:,trainInd1),数据库(:,:,:,trainInd2));
valDatabase =猫(4、数据库(:,:,:,valInd1),数据库(:,:,:,valInd2));
大小(trainDatabase)%输出:28 28 1 1400
大小(valDatabase)%输出:28 28 1 600
只是要提醒一下,如果数据集很大,那么在内存中保存数据集可能不是最佳的。如果是这种情况,可以使用数据存储,例如。
图像数据存储。
他们使用splitEachLabel函数使上述工作变得更加简单,并帮助完成数据扩充等工作。
希望这能有所帮助,
Jakub