MATLAB 中的 classify
函数用于对输入数据进行分类预测,适用于图像、序列或特征数据,基于已训练好的深度神经网络。尽管该函数目前不再推荐使用(从 R2024a 起),它依然广泛存在于旧版模型和项目中,并被用于通过 SeriesNetwork
或 DAGNetwork
对象对数据进行快速推理。
一、函数用途概述
Y = classify(net, data)
[Y, scores] = classify(___)
net
:已训练的网络对象(SeriesNetwork
或DAGNetwork
)。data
:图像(如imageDatastore
)、序列或特征数据。Y
:分类预测结果(分类向量或元胞数组)。scores
:每一类的预测概率得分。
二、推荐替代方案(R2024a 起)
为了更好的性能与灵活性,推荐使用:
scores = minibatchpredict(net, data);
Y = scores2label(scores, classNames);
适用于 dlnetwork
对象,并支持更多网络结构和自定义功能。
三、典型用法示例
1. 图像分类(使用预训练网络)
net = squeezenet;
img = imread('peppers.png');
img = imresize(img, net.Layers(1).InputSize(1:2));
Y = classify(net, img);
2. 批量图像分类
imds = imageDatastore('images', 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
Y = classify(net, imds);
3. 获取分类得分(softmax 概率)
[Y, scores] = classify(net, img);
bar(scores)
4. 序列分类
Y = classify(net, sequenceData);
四、输入类型支持
- 图像数据:
numeric array
、imageDatastore
、augmentedImageDatastore
。 - 序列数据:
cell array
或numeric array
(适用于 LSTM、GRU)。 - 特征数据:
table
、numeric array
。 - 多输入网络:
X1, X2, ..., XN
或CombinedDatastore
。
五、常用参数(Name-Value)
参数 | 说明 |
---|---|
MiniBatchSize | 每次推理处理的样本数(默认 128) |
ExecutionEnvironment | "auto" 、"gpu" 、"cpu" 等 |
SequenceLength | 用于序列填充方式:"longest" 、"shortest" 、定长 |
SequencePaddingValue | 用于序列填充的默认值(如 0) |
SequencePaddingDirection | "left" 或 "right" |
六、输出解释
-
Y
:预测的分类结果。- 图像/特征分类:N×1 分类向量。
- 序列分类:“序列到序列”返回元胞数组。
-
scores
:对应每个类别的概率,或得分矩阵。- 图像/特征分类:N×K 矩阵(N 个样本,K 个类)。
- 序列分类:cell 数组(每个元素为 T×K)。
七、替代 classify
的优势(dlnetwork
)
- 更灵活的训练和预测(支持动态图)。
- 支持多输出网络和定制损失函数。
- 与
trainnet
配合使用更高效。 - 示例:
scores = minibatchpredict(dlnet, XTest);
Y = scores2label(scores, classNames);
八、总结
特性 | classify | 推荐替代方案 |
---|---|---|
支持模型 | SeriesNetwork / DAGNetwork | dlnetwork |
推理能力 | 固定结构 | 支持动态图、自定义输出 |
分类方法 | 一步返回分类结果 | 返回得分后自行解码 |
状态 | 已不推荐使用 | 推荐 |
如你有现成的 trainNetwork
训练的模型,还可以用 dag2dlnetwork
进行转换:
dlnet = dag2dlnetwork(net);
MATLAB 中的 montage
函数用于显示多张图像的拼接画面,即将多张图像组合成一个矩形拼图。这个函数支持多种输入类型,如图像、图像数据存储、彩色图像和灰度图像等。
主要功能:
-
基本语法:
montage(imagelist) montage(imds) montage(I) montage(imagelist, map) montage(___, Name=Value)
-
参数说明:
imagelist
:图像列表,通常是一个包含图像的单元格数组或文件路径的字符串数组。imds
:图像数据存储对象(ImageDatastore
),用于从磁盘加载图像。I
:多帧图像,通常是一个 3D 数组,表示多张图像(例如,多个图像帧)。map
:对于灰度或二值图像,map
用于指定图像的颜色映射(colormap)。Name=Value
:使用名称-值对参数来定制显示效果,如设置背景颜色、调整边框大小等。
输入示例:
-
显示不同类型和大小的图像:
imRGB = imread("peppers.png"); imGray = imread("coins.png"); montage({imRGB, imGray, "cameraman.tif"})
-
从图像数据存储中创建拼图:
fileFolder = fullfile(matlabroot,"toolbox","images","imdata"); imds = imageDatastore(fullfile(fileFolder,"AT3*")); montage(imds)
-
创建多帧图像拼图(例如MRI数据集):
load mristack montage(mristack)
-
从图像文件创建拼图:
fileNames = ["image1.jpg", "image2.jpg", "image3.jpg"]; montage(fileNames, "Size", [2, 2]) % 将图像排列为 2 行 2 列
可选的名称-值参数:
BackgroundColor
:设置背景颜色,默认为黑色。可以使用 RGB 三元组或颜色名称(如'red'
,'blue'
)。BorderSize
:每个图像的边框大小,以像素为单位。DisplayRange
:设置灰度图像的显示范围,指定最小和最大像素值的范围。Indices
:指定要显示的图像帧或索引。Interpolation
:设置插值方法,"nearest"
或"bilinear"
,用于调整图像大小时的插值方式。ThumbnailSize
:指定每个缩略图的大小。
输出:
img
:返回一个图像对象,表示拼接后的图像。
常见应用:
- 医学图像处理:查看 MRI 数据的不同切片。
- 视频数据:查看视频的各个帧。
- 图像集的快速查看:查看图像数据集的不同图像或创建样本数据集的拼图。