将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数组和向量,所以我试图将它们分为训练集和验证集,如链接的例子所建议的。有人能帮我理解一下我该怎么做吗?
谢谢
淡水河谷
1评论
默罕默德瓦里斯-
默罕默德瓦里斯- 2021年3月31日
你好,图片的大小是多少?我正在尝试做类似的工作,制作4Darraydata,并将其划分为培训和测试。但当我开始训练这个代码时 https://ch.mathworks.com/help/deeplearning/ug/train-a-convolutional-neural-network-for-regression.html 我遇到了一个错误" 等号右侧输出数量不足,无法满足分配”。

登录发表评论。

接受的答案

Jakub Sikorowski
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
1评论
Valerio格洛丽亚
Valerio格洛丽亚 2019年3月11日
谢谢你,Jakub,你的代码很好。然而,我决定听从你的建议,使用图像数据存储(这 必须转换成回归问题的表格 ):它工作得非常好,而且相当容易。
再次感谢!
V

登录发表评论。

更多答案(0)