迁移学习代码复现

news2024/9/20 6:40:17

一、前言

说来可能令人难以置信,迁移学习技术在实践中是非常简单的,我们仅需要保留训练好的神经网络整体或者部分网络,再在使用迁移学习的情况下把保留的模型重新加载到内存中,就完成了迁移的过程。之后,我们就可以像训练普通神经网络那样训练迁移过来的神经网络了。
我们使用已经训练好的大型图像分类卷积神经网络来做一个分类任务:区分画面上的动物是蚂蚁还是蜜蜂

二、数据导入

将蚂蚁蜜蜂数据集进行一些(增强)图形处理,如随机从原始图像中切下来一块224×224大小的区域,随机水平翻转图像,将图像的色彩数值标准化等等。数据增强的目的是:增强模型的鲁棒性,提高模型的泛化能力和性能。

1、导入相应的函数库

# 加载程序所需要的包
#import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import numpy as np
import torchvision
from torchvision import datasets, models, transforms
import matplotlib.pyplot as plt
import time
import copy
import os

导入蚂蚁蜜蜂数据集,并将这些照片进行一定的照片增强处理,最后以data_loader的形式存储。注:该代码是在kaggle上进行训练,所以data_dir是kaggle中input存储的位置,运行时,需根据具体情况修改文件路径。

# 数据存储总路径
data_dir = '/kaggle/input/bees-and-ants/蚂蚁蜜蜂数据集'
# 图像的大小为224×224
image_size = 224
# 加载的过程将会对图像进行如下增强操作:
# 1. 随机从原始图像中切下来一块224×224大小的区域
# 2. 随机水平翻转图像
# 3. 将图像的色彩数值标准化
train_dataset = datasets.ImageFolder(os.path.join(data_dir, 'train'),
                                     transforms.Compose([
                                         transforms.RandomResizedCrop(image_size),
                                         transforms.RandomHorizontalFlip(),
                                         transforms.ToTensor(),
                                         transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
                                         ])
                                     )

# 加载校验数据集,对每个加载的数据进行如下处理:
# 1. 放大到256×256
# 2. 从中心区域切割下224×224大小的区域
# 3. 将图像的色彩数值标准化
val_dataset = datasets.ImageFolder(os.path.join(data_dir, 'val'),
                                   transforms.Compose([
                                       transforms.Resize(256),
                                       transforms.CenterCrop(image_size),
                                       transforms.ToTensor(),
                                       transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
                                       ])
                                   )
# 创建相应的数据加载器
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size = 4, shuffle = True, num_workers=4)
val_loader = torch.utils.data.DataLoader(val_dataset, batch_size = 4, shuffle = True, num_workers=4)
# 读取得出数据中的分类类别数
num_classes = len(train_dataset.classes)

2、展示部分照片

数据存储在train_loader(val_loader)的迭代器中,其中imgs是以数字的形式展示。在 PyTorch 中,图像数据通常以 (C, H, W) 的顺序存储,其中 C 是颜色通道数(例如 RGB 的 3 个通道),H 是图像的高度,W 是图像的宽度。然而,matplotlib 的 imshow 函数期望的图像数据是 (H, W, C) 顺序的,即高度和宽度作为前两个维度,颜色通道作为最后一个维度。所以img_np是通过通道转换后的照片(同时也通过Normalize标准化后的照片),imgs[0][0]是灰度的照片。

imgs,label=next(iter(train_loader))
fig,ax=plt.subplots(1,2,figsize=(12,6))
# 展示标准化后的照片
img_np = imgs[0].permute(1, 2, 0).numpy()
ax[0].imshow(img_np)
# 展示标准化后的照片
ax[1].imshow(imgs[0][0])
plt.show()

原图如下:
在这里插入图片描述
图如下:
在这里插入图片描述

三、使用自定义的模型进行训练

1、定义模型

自定义卷积神经网络模型,并确定前向传播每层之间的连接方式。

# 使用自定义的CNN模型
depth = [4, 8]
class ConvNet(nn.Module):
    def __init__(self):
        super(ConvNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 4, 5, padding = 2) #输入通道为3,输出通道为4,窗口大小为5,padding为2
        self.pool = nn.MaxPool2d(2, 2) #一个窗口为2*2的pooling运算
        self.conv2 = nn.Conv2d(depth[0], depth[1], 5, padding = 2) #第二层卷积,输入通道为depth[0], 输出通道为depth[1],窗口为15,padding为2

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

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

相关文章

浅谈SIMD、向量化处理及其在StarRocks中的应用

前言 单指令流多数据流(SIMD)及其衍生出来的向量化处理技术已经有了相当的历史,并且也是高性能数据库、计算引擎、多媒体库等组件的标配利器。笔者在两年多前曾经做过一次有关该主题的内部Geek分享,但可能是由于这个topic离实际研发场景比较远&#xff0…

使用大模型从政府公文中抽取指标数据

文章目录 介绍流程结构介绍相关文本筛选大模型 few-shot大模型抽取结果 介绍 本文使用LangChain 结合 Ollama的qwen2:7b模型,抽取出全国市级单位每一年预期生产总值指标。 Ollama的qwen2:7b,显存占用只有5G左右,适合大多数消费级显卡运行。…

华为云Api调用怎么生成Authorization鉴权信息,StringToSign拼接流程

请求示例 Authorization 为了安全,华为云的 Api 调用都是需要在请求的 Header 中携带 Authorization 鉴权的,这个鉴权15分钟内有效,超过15分钟就不能用了,而且是需要调用方自己手动拼接的。 Authorization的格式为 OBS 用户AK:…

zabbix agent 可用性 为 灰色

解决zabbix可用性为灰色状态 配置–》模板–》选择模板, 之后正常。

排序: 插入\希尔\选择\归并\冒泡\快速\堆排序实现

1.排序的概念及应用 1.1概念 排序:所谓排序,就是一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 1.2运用 购物筛选排序: 1.3常见排序算法 2.实现常见的排序算法 int a[ {5,3,9,6,2,4,7,1,8}; 2…

MySQL数据库专栏(三)数据库服务维护操作

1、界面维护,打开服务窗口找到MySQL服务,右键单击可对服务进行启动、停止、重启等操作。 选择属性,还可以设置启动类型为自动、手动、禁用。 2、指令维护 卸载服务:sc delete [服务名称] 例如:sc delete MySQL 启动服…

嵌入式软件开发学习一:软件安装(保姆级教程)

资源下载: 江协科技提供: 资料下载 一、安装Keil5 MDK 1、双击.EXE文件,开始安装 2、 3、 4、此处尽量不要安装在C盘,安装路径选择纯英文,防止后续开发报错 5、 6、 7、弹出来的窗口全部关闭,进入下一步&a…

STM32(一):新建工程

stm32f10x.h文件:描述stm32有哪些寄存器(外围)和它对应的地址。stm32由内核和内核外围的设备组成的,内核寄存器描述和外围寄存器描述文件存储位置不在一起core_cm3.h core_cm3.c内核寄存器描述文件。mic.c内核库函数 stm32f10x_co…

【初阶数据结构】通讯录项目(可用作课程设计)

文章目录 概述1. 通讯录的效果2. SeqList.h3. Contact.h4. SeqList.c5. Contact.c6. test.c 概述 通讯录项目是基于顺序表这个数据结构来实现的。如果说数组是苍蝇小馆,顺序表是米其林的话,那么通讯录就是国宴。 换句话说,通讯录就是顺序表…

pycharm windows/mac 指定多版本python

一、背景 工作中经常会使用不同版本的包,如同时需要tf2和tf1,比较新的tf2需要更高的python版本才能安装,而像tf1.5 需要低版本的python 才能安装(如 python3.6),所以需要同时安装多个版本。 二、安装多版本python py…

会员系统开发,检测按钮位置,按钮坐标,弹出指定位置对话框-SAAS 本地化及未来之窗行业应用跨平台架构

一 获取元素坐标 var 按钮_obj document.querySelector(#未来之窗玄武id);var 按钮_rect 按钮_obj.getBoundingClientRect()console.log(按钮_rect);输出结果 bottom : 35 height : 21 left : 219.921875 right : 339.921875 top : 14 width : 120 x : 219.921875 y…

R语言统计分析——组间差异的非参数检验

参考资料:R语言实战【第2版】 如果数据无法满足t检验或ANOVA的参数假设,可以转而使用非参数检验。举例来说,若结果变量在本质上就严重偏倚或呈现有序关系,那么可以考虑非参数检验。 1、两组的比较 若两组数据独立,可以…

大厂进阶五:React源码解析之Diff算法

本文主要针对React源码进行解析,内容有: 1、Diff算法原理、两次遍历 一、Diff源码解析 以下是关于 React Diff 算法的详细解析及实例: 1、React Diff 算法的基本概念和重要性 1.1 概念 React Diff 算法是 React 用于比较虚拟 DOM 树之间…

初识C++ · 类型转换

目录 前言: 1 C中的类型转换 1.1 static_cast 1.2 reinterpret_cast 1.3 const_cast 1.4 dynamic_cast 前言: C可以说是恨死了隐式类型转换,你可能会疑问了,为什么?不是单参数隐式类型转换为自定义类型的时候人…

苹果笔记本电脑可以玩steam游戏吗 MacBook支持玩steam游戏吗 在Steam上玩黑神话悟空3A大作 苹果Mac怎么下载steam

游戏是生活的润滑剂,越来越多的用户开始关注Mac平台上可玩的游戏。幸运的是,Steam作为最大的数字发行平台之一,提供了大量适用于Mac操作系统的游戏。无论你是喜欢策略、冒险还是射击类游戏,都能在Steam上找到适合自己Mac设备玩耍的…

ESP32CAM人工智能教学18

ESP32CAM人工智能教学18 获取数据并显示 如果我们给ESP32Cam外挂一些传感器(比如温湿度传感器、超声波测距传感器、红外人体传感器等),我们怎么把ESP32Cam捕获到的数据,传递到客户端的浏览器,并在网页index.html中显示…

WordPress网站速度优化

提升网站速度对用户体验和搜索引擎排名至关重要。无论你是新手博主,还是经验丰富的网站开发人员,要想优化WordPress网站,需要长时间的努力和坚持。以下是按入门、中级和专家级别介绍的12个实用方法,帮助你提升WordPress网站的整体…

zabbix监控进程,日志,主从状态和主从延迟

自定义监控进程 使用httpd服务为例,监控httpd的进程 在zabbix-agent上安装httpd yum -y install httpd 重启httpd systemctl restart httpd systemtctl enable httpd 查看httpd的进程 [rootzabbix-agent ~]# ps -ef | grep httpd root 2407458 1 0 16:…

soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证

1.环境信息 开发工具:idea 接口测试工具:soapui 编程语言:java 项目环境:jdk1.8 webservice:jdk自带的jws 处理xml:jdk自带的jaxb 2.涉及代码 package org.example.webdemo;import javax.jws.WebMethod; i…

Python,Spire.Doc模块,处理word、docx文件,极致丝滑

Python处理word文件,一般都是推荐的Python-docx,但是只写出一个,一句话的文件,也没有什么样式,就是36K。 再打开word在另存一下,就可以到7-8k,我想一定是python-docx的问题,但一直没…