在学习一个matlab跑深度学习的例子时,出现下面函数的调用:

% Load data
ds = imageDatastore('notMNIST_large/','LabelSource','foldernames','IncludeSubfolders',true);

% Prepare data
[trainDigitData,valDigitData,testData]=ds.splitEachLabel(0.5,0.3,0.2,'Randomize');

下面接说说这两个函数的作用(参数些许不同)

1、 imageDatastore()

我们当前有如下目录结构的图像数据集(用于图像分类):
Matlab中 imageDatastore函数及splitEachLabel函数_Matlab

imageDatastore:imds = imageDatastore('./images', 'IncludeSubfolders', true, 'labelsource', 'foldernames') 
  • 第一个参数./images表示文件所在的路径;
  • 后续参数都是键值对(key-value)的形式
    • includesubfolders:是否继续读取子文件夹中的图像数据;
    • labelsource:图像 label 的来源是什么;

此时的imds已包含了原始数据集丰富的信息;

  • tbl = countEachLabel(imds) ⇒ 见名知意,创建一个表格,某一label图像,及其对应的图像个数;
  • categories = tbl.Label;( tbl 是一个 table,tbl.Label 索引的是表中的列)
  • imds.Files:全部文件名构成的 cell 集合;
2. splitEachLabel:拆分数据集

[imds1,imds2] = splitEachLabel(imds, p);

  • p 可以是一个小数,表示百分比,根据百分比划分;
  • 也可以是一个整数,根据这一整数进行划分;
% Prepare data 拆分数据集
[trainDigitData,valDigitData,testData]=ds.splitEachLabel(0.5,0.3,0.2,'Randomize');

即表示将ds的数据拆分,比例是0.5:0.3:0.2