当前位置: 首页 > news >正文

迁移学习代码复现

一、前言

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

二、数据导入

将蚂蚁蜜蜂数据集进行一些(增强)图形处理,如随机从原始图像中切下来一块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为2self.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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 详讲C#中如何存储当前项目的设置-超级简单省事
  • CSS详知识点——CSS变形
  • 设计模式 - 创建者模式(第四章)
  • MySQL列表分区分区表
  • 什么是零拷贝?以及数据在内存中的流动途径
  • 十三、OpenCVSharp的目标检测
  • 「入选文章」腾讯云AI代码助手 | AI助力,从零基础开发一个vscode插件
  • NGINX 之 location 匹配优先级
  • cdr工具介绍之刻刀工具
  • 重磅!RISC-V+OpenHarmony平板电脑发布
  • MySQL——高级查询(3)分组查询
  • 敲桌子游戏
  • Java OkHttp使用(二)
  • Java数组05:Arrays类
  • 多商户小程序审核存在商户入口无法通过
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Android 控件背景颜色处理
  • CSS 提示工具(Tooltip)
  • CSS魔法堂:Absolute Positioning就这个样
  • HTML-表单
  • javascript从右向左截取指定位数字符的3种方法
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • php ci框架整合银盛支付
  • React+TypeScript入门
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring Boot快速入门(一):Hello Spring Boot
  • Tornado学习笔记(1)
  • ucore操作系统实验笔记 - 重新理解中断
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 判断客户端类型,Android,iOS,PC
  • 前端临床手札——文件上传
  • 前端性能优化——回流与重绘
  • 浅谈Golang中select的用法
  • 如何解决微信端直接跳WAP端
  • 如何在GitHub上创建个人博客
  • 小程序 setData 学问多
  • 译自由幺半群
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 自定义函数
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #define
  • #在 README.md 中生成项目目录结构
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (六)DockerCompose安装与配置
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)全文检索技术学习(三)——Lucene支持中文分词