从零开始构建CNN模型

news2025/1/14 18:23:27

猫狗分类问题——从零开始构建CNN

        我们将使用相同的体系结构,并进行一些小的更改,如下所示。

  • 第一个线性层的输入尺寸发生变化,因为猫和狗的图像尺寸是(256,256)。
  • 添加了另一个线性层来为模型学习提供更多的灵活性。

        让我们来看看实现网络架构的代码:

class Net(nn.Module):
    def _init_(self):
        super_()._init_()
        self.conv1 = nn.Conv2d(3, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(56180, 500)
        self.fc2 = nn.Linear(500, 0)
        self.fc3 = nn.Linear(50, 2)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(x.size(0), -1)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training = self.training)
        x = F.relu(self.fc2(x))
        x = F.dropout(x, training = self.training)
        x = self.fc3(x)
        return F.log_softmax(x, dim=1)

        我们将使用与 MNIST示例相同的training函数。所以,这里不再包含代码。但是让我们看一下模型训练20次迭代后生成的结果图。
        训练和验证数据集的损失值如图5.16所示。

        训练和验证数据集的准确率如图5.17所示。

        从图中可以清楚地看出,对于每次迭代,训练集的损失都在减少,而验证集的损失却变得更糟。在训练过程中,准确率也增加,但在75%时几乎饱和。显而易见,这是一个模型没有泛化的例子。我们将研究另一种称为迁移学习的技术,它可以帮助我们训练更准确的模型,以及加快训练的速度。

利用迁移学习对猫狗分类

        迁移学习是指在类似的数据集上使用训练好的算法,而无须从头开始训练。人类并不是通过分析数千个相似的图像来识别新的图像。作为人类,我们只是通过了解不同特征来区分特定动物的,比如狐狸和狗。我们不需要了解线条、眼睛和其他较小的特征来识别狐狸。因此,我们将学习如何使用预训练好的模型来构建只需要很少数据的最先进的图像分类器。
        CNN 架构的前几层专注于较小的特征,例如线条或曲线的外观。CNN架构的随后几层中的滤波器识别更高级别的特征,例如眼睛和手指,最后几层学习识别确切的类别。预训练模型是在相似的数据集上训练的算法。大多数流行的算法都在流行的ImageNet数据集上进行了预训练,以识别1000种不同的类别。这样的预训练模型具有可以识别多种模式的调整好的滤波器权重。所以来了解一下如何利用这些预先训练的权重。我们将研究一种名为 VGG16 的算法,它是在ImageNet竞赛中获得成功的最早的算法之一。虽然有更多的现代算法,但该算法仍然很受欢迎,因为它简单易懂并可用于迁移学习。下面来看看 VGG16模型的架构(见图5.18),然后尝试理解架构以及使用它来训练我们的图像分类器。

        VGG16架构包含5个VGG块。每个VGG块是一组卷积层、一个非线性激活函数和一个最大池化函数。所有算法参数都是调整好的,可以达到识别1,000个类别的最先进的结果。该算法以批量的形式获取输入数据,这些数据通过ImageNet数据集的均值和标准差进行归一化。在迁移学习中,我们尝试通过冻结架构的大部分层的学习参数来捕获算法的学习内容。通用实践是仅微调网络的最后几层。在这个例子中,我们只训练最后几个线性层并保持卷积层不变,因为卷积学习的特征主要用于具有类似属性的各种图像相关的问题。下面使用迁移学习训练VGG16模型来对狗和猫进行分类。我们看看实现这一目的所需要的不同步骤。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1858272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卷积的通俗解释

以时间和空间两个维度分别理解卷积,先用文字来描述: 时间上,任何当前信号状态都是迄至当前所有信号状态的叠加;时间上,任何当前记忆状态都是迄至当前所有记忆状态的叠加;空间上,任何位置状态都…

如何将视频里的语音转成文字?5种方法轻松解决

这个信息爆炸的时代,视频内容如同潮水般涌来,而我们经常需要从这些海量的视频资源中提取关键信息。无论是为了学习、工作还是娱乐,将视频里的语音转换成文字都是一种高效的方法。这不仅可以帮助我们更好地理解内容,还能方便我们进…

【自然语言处理系列】Python 字符串操作技巧:清理、替换与合并

在编写Python程序时,字符串处理是一项常见的任务。了解如何有效地清理、修改和合并字符串对于数据预处理、文本分析和日常编程都至关重要。本文将引导您通过一系列实用的示例来掌握Python中字符串的核心操作,包括去除不需要的空格和特殊字符、替换文本中…

轻松搞定数据可视化配色,这份指南助你一臂之力!

配色是数据可视化图表的主要因素。一组合适的配色可以表达数据的重点和趋势,而不良的配色会削弱可视化表达的有效性。在本文中,我将梳理数据可视化中使用的配色板类型,通过案例揭示数据可视化配色技巧,并介绍可生成配色板的插件&a…

手撕RPC——前言

手撕RPC——前言 一、RPC是什么?二、为什么会出现RPC三、RPC的原理3.1 RPC是如何做到透明化远程服务调用?3.2 如何实现传输消息的编解码? 一、RPC是什么? RPC(Remote Procedure Call,远程过程调用&#xff…

Python笔记 文件的读取操作

1.open()打开函数 再Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下 open(name,mode,encoding) name:是要打开的文件名的字符串(可以包含文件所在的具体路径) mode&…

[FreeRTOS 基础知识] 信号量 概念

文章目录 信号量定义信号量特性 信号量定义 信号量是一个抽象的数据类型,通常包含一个整数值以及一个等待该值变为正数的任务列表(也称为等待队列)。信号量的整数值代表了系统中某种资源的可用数量。 在操作系统中信号量用于控制对共享资源访…

【Solr 学习笔记】Solr 源码启动教程

Solr 源码启动教程 本教程记录了如何通过 IDEA 启动并调试 Solr 源码,从 Solr9 开始 Solr 项目已由 ant 方式改成了 gradle 构建方式,本教程将以 Solr 9 为例进行演示,IDE 选择使用 IntelliJ IDEA。 Solr github 地址:https://gi…

技术干货|使用机器学习进行大数据信用评分实战演练

利用数据进行客户分类是当前金融信用风险、电商精准营销等的主流方法。那么,如何实现轻松实现客户分类呢?下面就为您介绍RapidMiner是如何快速实现客户分类的数据处理和可视化的。 例如,我们手上有某银行8000多名客户的贷款还款记录&#xff…

保姆级 | Windows 复古风格终端样式设置

0x00 前言 前段时间有朋友询问我 Windows 终端的样式是如何设置的,我也进行了一些简单的回复。在之前的 Windows 11 版本中,系统提供了一个界面按钮,可以直接将终端样式设置为复古风格。然而,系统更新之后,这个按钮好像…

对比A100和4090:两者的区别以及适用点

自2022年年末英伟达发布4090芯片以来,这款产品凭借着其优异的性能迅速在科技界占据了一席之地。现如今,不论是在游戏体验、内容创作能力方面还是模型精度提升方面,4090都是一个绕不过去的名字。而A100作为早些发布的产品,其优异的…

LLama 3的各种微调:拿我司七月的paper-review数据集微调LLama 3

前言 llama 3出来后,为了通过paper-review的数据集微调3,有以下各种方式 不用任何框架 工具 技术,直接微调原生的llama 3,毕竟也有8k长度了 效果不期望有多高,纯作为baseline通过PI,把llama 3的8K长度扩展…

标准立项 | 温室气体排放核算与报告要求 废油资源化企业

国内由于现有的废油再生企业规模较小,承担社会责任能力不强,在技术创新尤其是需要通过工程基础研究解决关键科技问题的创新积极性不高,由于经济成本的原因,多采用较落后的加工工艺,没有对废油中的特征污染物及毒害组分…

Vue和React总结

数据的更改更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作 (5)虚拟dom 不再使用原生的dom操作节点,极大解放dom操作,但具体操作的还是dom不过是换了另一种方式 (6)各种指令;过滤器 v-text主要用来更新textContent,可以等同于JS的text属性。 v-…

browerify介绍和简单实用,github的这个作者运用的太妙了

官方代码仓库:https://github.com/browserify/browserify 在github闲逛的时候,发现了一个很神奇的项目,这个项目的特点就是实用纯vue和js代码实现了直播间消息的获取,获取的方式就是建立websocket连接,然后接收消息&a…

Redis队列自研组件

背景 年初的时候设计实践过一个课题:SpringBootRedis实现不重复消费的队列,并用它开发了一个年夜饭下单和制作的服务。不知道大家还有没有印象。完成这个课题后,我兴致勃勃的把它运用到了项目里面,可谁曾想,运行不久后…

1992-2019年全球实际国内生产总值数据集

国内生产总值(GDP),可以有效评价居民的经济状况和生活水平,在各项研究中都非常常用!然而目前在全球不少国家中,对GDP统计存在着统计方法不当、蓄意操纵的行为,导致官方GDP统计数据难以真正反映出真实的经济发展水平。 …

推荐三款必备软件,个个五星好评,你一定不要错过

WiseCare365 WiseCare365是一款由WiseCleaner推出的综合性Windows系统优化和加速工具。它集成了多种功能,旨在帮助用户清理、优化和维护电脑系统,提升电脑性能和安全性。 WiseCare365的主要功能包括: 系统清理:它可以清理各种缓存…

【多模态】BEIT: BERT Pre-Training of Image Transformers

论文:BEIT: BERT Pre-Training of Image Transformers 链接:https://arxiv.org/pdf/2301.00184 Introduction BEIT(Bidirectional Encoder representation from Image Transformers)Motivation: 启发于BERT的自编码方式&#xf…

【网络协议】精讲TCP通信原理!图解超赞超详细!!!

亲爱的用户,打开微信,搜索公众号:“风云说通信”,即可免费阅读该文章~~ 目录 1. 建立连接 2. 数据传输 3. 断开连接 4. 抓包分析 前言 TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种端…