Matlab:数据集读取 imageDatastore() 的用法

在做机器学习时经常要分类读取数据,自己写还是有点繁琐的,MATLAB已经内嵌的imageDatastore使用起来很方便。
imageDatastore()函数用于读取指定路径下的所有文件
使用语法:
ImageDatastore(path,Name,Value)
输入参数为文件(夹)路径,以及一些键值对,输出为一个ImageDatastore对象。
直接看例子吧,现在要读取下图MNIST的训练集
在这里插入图片描述

path_train = 'F:\手写体识别\新建文件夹\train';
imds_train = imageDatastore(path_train,'IncludeSubfolders',true,'FileExtensions','.jpg',...
                            'LabelSource','foldernames');
                            
path_train = 'F:\手写体识别\新建文件夹\train';
folders_train = fullfile(path_train,{'0' '1' '2' '3' '4' '5' '6' '7' '8' '9'});
imds_train = imageDatastore(folders_train, 'FileExtensions','.jpg',...
                            'LabelSource','foldernames');

两种输出结果是一样的,区别在于imageDatastore的输入路径,如果只输入上级目录(上图的train),则需要加上’IncludeSubfolders’,true键值对输入。上面代码已经涵盖了常用的三个键值对。Fullfile也是很好用的函数。
‘IncludeSubfolders’ :是否包含子文件夹
‘FileExtensions’ :文件扩展名
‘LabelSource’ :Label来源
此外,‘ReadSize’:使用read()函数每次读取多少文件
输出结果如下:

imds_train = 

  ImageDatastore - 属性:

                       Files: {
                              'F:\手写体识别\新建文件夹\train\0\0_1.jpg';
                              'F:\手写体识别\新建文件夹\train\0\0_10.jpg';
                              'F:\手写体识别\新建文件夹\train\0\0_100.jpg'
                               ... and 59997 more
                              }
                     Folders: {
                              'F:\手写体识别\新建文件夹\train'
                              }
                      Labels: [0; 0; 0 ... and 59997 more categorical]
    AlternateFileSystemRoots: {}
                    ReadSize: 1
      SupportedOutputFormats: [1×5 string]
         DefaultOutputFormat: "png"
                     ReadFcn: [function_handle]

已经读取到60000个训练数据的文件路径和对应的label,注意这里只读取了文件路径,并没有读入数据,而且也不需要专门读出来。

最后介绍ImageDatastore对象的几个常用对象函数

  • countEachLabel
    作用:对每种标签的数据进行计数
    用法:countEachLabel(imdsn)
    注:imds为ImageDatastore对象,下同
  • preview
    作用:读取一个数据,经过测试好像就是读取第一个,像是一个预览的功能
    用法:preview(imds)
  • read
    作用:从ImageDatastore对象中读出数据,注意这里直接是数据了,一次读取ReadSize个,而且是顺序读取,比如我第一次使用read(imds),返回前ReadSize个数据,再使用read(imds),返回的是ReadSize+1~2*ReadSize的数据,像是batchsize
    用法:read(imds)
  • readall
    作用:读取所有数据
    用法:readall(imds)
  • readimage
    作用:按索引读取图像
    用法:readimage(imds,i),i代表第i个数据
  • hasdata
    作用:判断是否有数据可读,如果ImageDatastore里的数据不够一个ReadSize了,则为hasdata(imds)会返回0
    用法:hasdata(imds)
  • reset
    作用:将数据存储重置为初始状态,相当于重置了read函数,从头开始读
    用法:reset(imds)
  • shuffle
    作用:打乱数据顺序
    用法:shuffle(imds)
  • splitEachLabel
    作用:按比例拆分数据,每个标签都拆分相同比例
    用法:splitEachLabel(imds,0.8,0.2)
  • combine
    作用:合并数据集
    用法:combine(imds1,imds2,…,imsdN)
  • 29
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
要使用 MATLAB 完成 CIFAR-10 数据集的分类处理,可以按照以下步骤进行操作: 1. 下载 CIFAR-10 数据集。可以从官方网站下载,也可以使用 MATLAB 自带的数据集下载工具下载。 2. 加载数据集。使用 MATLAB 的 `imds = imageDatastore(folder)` 函数将数据集加载到内存中。这个函数会返回一个 imageDatastore 对象,可以用来访问数据集中的图像和标签。 3. 数据预处理。在训练之前,需要对数据进行一些预处理,例如将图像大小调整为固定大小、将图像转换为灰度图像等。可以使用 MATLAB 的 `augmentedImageDatastore` 函数创建一个增强的 imageDatastore 对象,然后使用 `read` 方法读取图像并进行预处理。 4. 设计模型。可以使用 MATLAB 的深度学习工具箱中的函数创建一个卷积神经网络模型。例如,可以使用 `convolution2dLayer` 函数创建卷积层,使用 `maxPooling2dLayer` 函数创建池化层,使用 `fullyConnectedLayer` 函数创建全连接层等等。 5. 训练模型。使用 MATLAB 的 `trainNetwork` 函数对模型进行训练。可以指定训练数据、验证数据、学习率、迭代次数等参数。 6. 评估模型。使用 MATLAB 的 `classify` 函数对测试数据进行分类,然后计算分类准确率和混淆矩阵等指标,评估模型的性能。 下面是一个简单的示例代码,用于加载 CIFAR-10 数据集并训练一个简单的卷积神经网络模型: ```matlab % 加载数据集 imds = imageDatastore('cifar10','IncludeSubfolders',true,'LabelSource','foldernames'); % 数据预处理 inputSize = [32 32 3]; augimds = augmentedImageDatastore(inputSize,imds); % 创建模型 layers = [ convolution2dLayer(5,32,'Padding',2,'InputSize',inputSize) reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(5,64,'Padding',2) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer]; % 训练模型 options = trainingOptions('sgdm','MaxEpochs',10,'ValidationData',imds,'ValidationFrequency',30,'Verbose',false); net = trainNetwork(augimds,layers,options); % 评估模型 imdsTest = imageDatastore('cifar10_test','IncludeSubfolders',true,'LabelSource','foldernames'); augimdsTest = augmentedImageDatastore(inputSize,imdsTest); YTest = classify(net,augimdsTest); accuracy = mean(YTest == imdsTest.Labels) cm = confusionchart(imdsTest.Labels,YTest) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值