【视频】少样本图像分类?迁移学习、自监督学习理论和R语言CNN深度学习卷积神经网络实例

简介: 【视频】少样本图像分类?迁移学习、自监督学习理论和R语言CNN深度学习卷积神经网络实例

全文链接:http://tecdat.cn/?p=30793


您想构建一个没有太多训练数据的机器学习模型吗?众所周知,机器学习需要大量数据,而收集和注释数据需要时间且成本高昂点击文末“阅读原文”获取完整代码数据


本文介绍了一些在没有太多数据或标记数据的情况下进行图像分类的方法。我将介绍迁移学习、自监督学习的最重要方面。


利用未标记的数据


与标记数据相比,未标记的数据通常更容易访问。不利用这一点就是一种浪费!

自我监督学习

自监督学习解决了从未标记的数据中学习深度特征的问题。训练自监督模型后,特征提取器可以像在迁移学习中一样使用,因此您仍然需要一些带注释的数据来进行微调。

那么,如何从未标记的数据中训练深度特征提取器呢?总而言之,您需要一个足够困难的代理任务(Pretext Task),使您能够学习分类任务的有趣特征。

如果你想在不玩实际比赛的情况下赢得足球比赛,例如,你可以尽可能多地训练杂技球。杂技球将提高您的控球技术,这在玩游戏时会派上用场。

代理任务的一个例子是预测图像的旋转角度。基本上,对于每个图像,您应用旋转 z 来获取旋转的图像 x。然后,你训练一个神经网络来预测 x 中的 z 此转换预测任务会强制您的网络深入了解您的数据。事实上,要预测狗图像的旋转,您的网络首先需要了解图像中有一只狗,并且狗应该以特定的方式定向。

根据特定目标,代理任务可能会有很大差异。常用的代理任务包括:

  • 转换预测:数据集中的样本由转换修改,您的网络将学习预测转换。
  • 屏蔽预测:输入图像的随机方块被屏蔽,网络必须预测图像的屏蔽部分。
  • 实例区分:了解区分所有数据样本的表示形式。例如,每个数据点都可以被视为一个类,并且可以在此任务上训练分类器。

迁移学习


当您从头开始训练深度神经网络时,您通常会随机初始化权重。这是初始化神经网络的最佳方法吗?答案通常是否定的。

首先,深度学习是关于表征的。在经典机器学习中,特征需要手动制作。深度学习背后的想法是,你让你的神经网络在训练时自己学习特征表示。

在神经网络的每一层之间,您有一个输入数据的表示形式。你越深入你的神经网络,你的表示应该越全局化。通常,已知分类器神经网络的第一层能够检测颜色和形状。中间层将第一层表示作为输入,以计算比第一层更复杂的概念。例如,他们可能会检测到苹果叶或枝干的存在。最后一层给出了图像来自每个类的概率。

迁移学习背后的想法是,从另一个分类任务中学习的一些表示可能对您的任务有用。迁移学习是关于在另一项任务上获取预训练网络的第一层,在其上添加新层,并在感兴趣的数据集上微调整个网络。


点击标题查阅往期内容


【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享


01

02

03

04


作为比较,如果你的目标是学习赢得足球比赛,那么迁移学习将包括先学习打篮球,习惯移动你的身体,锻炼你的耐力等,然后再开始玩足球比赛。

它将如何影响最终网络的性能?您应该在哪里切断预先训练的网络?这些问题在中得到了广泛的解决。

总结最重要的想法:

  • 神经网络的第一层是非常通用的,而最深的层是预训练任务中最专业的。因此,您可以预期,如果您的预训练任务接近目标任务,那么保留更多层将更有益。
  • 在中间层切割通常会导致性能不佳。这是由于通过微调在中间层中达到的脆弱平衡。
  • 使用预先训练的权重总是比使用随机初始化的权重更好。这是因为通过先训练另一个任务,你的模型学会了它本来不会学到的特征。
  • 当重新训练这些预先训练的权重时,可以获得更好的表现——最终对它们使用较低的学习率。


R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化

本文演示了训练一个简单的卷积神经网络 (CNN) 来对 CIFAR 图像进行分类。由于本教程使用 Keras Sequential API,因此创建和训练我们的模型只需几行代码。


设置

library(keras)


下载并准备 CIFAR10 数据集

CIFAR10 数据集包含 10 个类别的 60,000 张彩色图像,每个类别有 6,000 张图像。数据集分为 50,000 张训练图像和 10,000 张测试图像。这些类是互斥的,它们之间没有重叠。

验证数据

为了验证数据集看起来是否正确,让我们绘制训练集中的前 25 张图像并在每张图像下方显示类别名称。

train %>%

 map(as.rater, max = 255) %>%

创建卷积基

下面的6行代码使用一种常见的模式定义了卷积基础:Conv2D和MaxPooling2D层的堆叠。

作为输入,CNN接受形状的张量(image\_height, image\_width, color\_channels),忽略了批次大小。如果你是第一次接触这些维度,color\_channels指的是(R,G,B)。在这个例子中,你将配置我们的CNN来处理形状为(32,32,3)的输入,这是CIFAR图像的格式。你可以通过将参数input_shape传递给我们的第一层来做到这一点。

kers\_moe\_etl %>% 
  laer\_c\_2d(fles = 32, ene_sz = c(3,3), acan = "relu", 
  lye\_apoi\_2d(posize = c(2,2)) %>% 
  lae\_cv\_2d(filrs = 64, relze = c(3,3), ctitio = "reu")

到目前为止,让我们展示一下我们模型的架构。

summary(model)


点击标题查阅往期内容


【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析


01

02

03

04


在上面,你可以看到每个Conv2D和MaxPooling2D层的输出是一个三维形状的张量(高度、宽度、通道)。当你深入到网络中时,宽度和高度维度往往会缩小。每个Conv2D层的输出通道的数量由第一个参数控制(例如32或64)。通常情况下,随着宽度和高度的缩小,你可以承受(计算上)在每个Conv2D层中增加更多的输出通道。


在顶部添加密集层

为了完成我们的模型,您需要将卷积基(形状为 (3, 3, 64))的最后一个输出张量输入一个或多个 Dense 层以执行分类。密集层将向量作为输入(1D),而当前输出是 3D 张量。首先,您将 3D 输出展平(或展开)为 1D,然后在顶部添加一个或多个 Dense 层。CIFAR 有 10 个输出类,因此您使用具有 10 个输出和 softmax 激活的最终 Dense 层。

model %>%
  leree(unis = 64, aciaion = "relu") %>%
  ayedese(unis = 10, acivin = "sftax")

这是我们模型的完整架构。

注意 Keras 模型是可变对象,您不需要在上面的 chubnk 中重新分配模型。

summary(modl)

如您所见,我们的 (3, 3, 64) 输出在经过两个 Dense 层之前被展平为形状为 (576) 的向量。


编译和训练模型

moel %>% comle(
  optier = "adam",
  lss = "specatialosnopy",
  mecs = "accray"
)

评估模型

plot(hsy)


ealte(oel, x,y, erbe = 0)

我们简单的 CNN 已经实现了超过 70% 的测试准确率。

相关文章
|
23天前
|
机器学习/深度学习 计算机视觉 异构计算
【YOLOv8改进 - Backbone主干】ShuffleNet V2:卷积神经网络(CNN)架构
【YOLOv8改进 - Backbone主干】ShuffleNet V2:卷积神经网络(CNN)架构
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
卷积神经网络(CNN):视觉识别的革命先锋
卷积神经网络(CNN)作为人工智能领域的一颗璀璨明珠,在计算机视觉中发挥着核心作用。CNN的发展历程展现了从生物学灵感到技术创新的转变,历经LeNet-5至AlexNet、VGGNet、ResNet等里程碑式的进步。其独特结构包括卷积层、池化层及全连接层,能够层层递进地提取特征并作出决策。CNN不仅在图像分类、目标检测等领域表现卓越,还在人脸识别、医学影像分析等方面展现出巨大潜力。尽管存在局限性,如对序列数据处理能力有限及解释性问题,但通过引入注意力机制、自监督学习等方法,CNN将持续演进,引领人工智能技术走向更加精彩的未来。
18 2
|
24天前
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络的步态识别matlab仿真,数据库采用CASIA库
**核心程序**: 完整版代码附中文注释,确保清晰理解。 **理论概述**: 利用CNN从视频中学习步态时空特征。 **系统框架**: 1. 数据预处理 2. CNN特征提取 3. 构建CNN模型 4. 训练与优化 5. 识别测试 **CNN原理**: 卷积、池化、激活功能强大特征学习。 **CASIA数据库**: 高质量数据集促进模型鲁棒性。 **结论**: CNN驱动的步态识别展现高精度,潜力巨大,适用于监控和安全领域。
|
23天前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进 - 注意力机制】c2f结合CBAM:针对卷积神经网络(CNN)设计的新型注意力机制
【YOLOv8改进 - 注意力机制】c2f结合CBAM:针对卷积神经网络(CNN)设计的新型注意力机制
|
4天前
|
机器学习/深度学习 自然语言处理 算法
基于卷积神经网络(CNN)的垃圾邮件过滤方法
传统的垃圾邮件过滤手段如规则匹配常因垃圾邮件的多变而失效。基于深度学习的方法,特别是卷积神经网络(CNN),能自动学习邮件中的复杂特征,有效识别垃圾邮件的新形态。CNN通过特征学习、处理复杂结构、良好的泛化能力和适应性,以及高效处理大数据的能力,显著提升了过滤精度。在文本分类任务中,CNN通过卷积层提取局部特征,池化层减少维度,全连接层进行分类,特别适合捕捉文本的局部模式和顺序信息,从而构建高效的垃圾邮件过滤系统。
21 0
|
26天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于CNN卷积神经网络的MQAM调制识别matlab仿真
**理论**: 利用CNN自动识别MQAM调制信号,通过学习星座图特征区分16QAM, 64QAM等。CNN从原始数据提取高级特征,优于传统方法。 - **CNN结构**: 自动特征学习机制,适配多种MQAM类型。 - **优化**: 损失函数指导网络参数调整,提升识别准确度。 - **流程**: 大量样本训练+独立测试评估,确保模型泛化能力。 - **展望**: CNN强化无线通信信号处理,未来应用前景广阔。
|
13天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于CNN卷积神经网络的MPSK调制识别matlab仿真
本项目展示一种基于CNN的MPSK调制识别算法,可在Matlab 2022a上运行。该算法能自动区分BPSK、QPSK及8PSK信号,利用卷积层捕捉相位特征并通过全连接层分类。训练过程涉及调整网络权重以最小化预测误差,最终实现对未知信号的有效识别。附带完整代码与说明视频。
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
13天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。