Pytorch-预训练网络

article/2025/10/6 15:03:25

预训练网络

我们可以把预训练的神经网络看作一个接收输入并生成输出的程序,该程序的行为是由神经网络的结构以及它在训练过程中所看到的样本所决定的,即期望的输入-输出对,或者期望输出应该满足的特性。我们可以在Pytorch中加载和运行这些预训练好的模型。

一个识别图像主题的预训练网络

获取预训练网络

TorchVision项目中包含一些表现优异的神经网络架构,如AlexNet、ResNet等。在torchvison.models中可以找到预定义的模型。

form torchvision import models
print(dir(models))输出结果
['AlexNet', 'DenseNet', 'GoogLeNet',...'resnet', 'resnet101', 'resnet152', 'resnet18'...]

首字母大写的名称指的是实现了许多流行模型的Python类,它们的体系结构不同,即输入和输出之间操作的编排不同。首字母小写的名称指的是一些便捷函数,它们返回这些类实例化的模型,有时使用不同的参数集。例如,resnet101表示返回一个有101层网络的ResNet实例,resnet18表示返回一个有18层网络的ResNet实例。

AlexNet

为了使用AlexNet模型产生一个输出图片,我们可以创建一个AlexNet类的实例。

alexnet=models.AlexNet()

此时,alexnet是一个可以运行AlexNet架构的对象。通过向alexnet提供一些精确的输入数据,我们将在网络中运行一个正向传播(forward pass)。也就是说,输入将经过一组神经元,其输出将被传递给下一组神经元,直到得到最后的输出。
实际上,如果我们有一个真实类型的input对象,我们可以使用output=alexnet(input)运行正向传播。但这样做产生的知识一些垃圾数据!因为网络没有初始化,它的权重还没有经过任何训练。网络本身就是一块白板,或者是随机的白板,我们要做的就是要么从头训练它,要么加载之前训练好的网络。

ResNet

使用resnet101来实例化一个具有101层的卷积神经网络。传递一个参数,指示函数下载resnet101在ImageNet数据集上训练好的权重

resnet=models.resnet101(pretrained=True)

准备运行

可以像调用函数一样调用resnet变量,将一幅或多幅图像作为输入,并为1000个ImageNet类生成对等数量的分数。然而,在此之前我们必须对输入的图像进行预处理,使其大小合适,使其颜色大致处于相同的数值范围。为此,TorchVision模块提供了transforms模块,它允许我们快速定义具有基本预处理功能的管道。

from torchvision import transforms
preprocess=transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])])

我们定义了一个预处理函数,将输入图像缩放到256×256个像素,围绕中心将图像裁剪为224×224个像素,并将其转换为一个张量,对其RGB分量进行归一化处理,使其具有定义的均值和标准差。
现在从网上下载一张狗的图片,对其进行预处理,然后就可以运行模型了。
请添加图片描述

from PIL import Image
img=Image.open("/home/user1/QinRui/learn-dataset/dog.jpg")
img_t=preprocess(img)
import torch
batch_t=torch.unsqueeze(img_t,0)

运行模型

在深度学习中,在新数据上运行训练过的模型的过程被称为推理(inference)。为了进行推理,我们需要将网络置于eval模式。

resnet.eval()

如果不这么做,那么一些预训练的过的模型,如批量归一化(Batch Normalization)和丢弃法(Dropout)将不会产生有意义的答案,仅仅是因为它们内部工作的方式。现在进行推理。

out=resnet(batch_t)
print(out)

最终产生了一个拥有1000个分数的向量,每个类对应一个分数,现在我们需要找到得分高的类的标签,这将告诉我们模型从图像中得到了什么。在这里插入图片描述
要查看预测标签的列表,我们需要加载一个文本文件,按照训练中呈现给网络的顺序列出标签,然后我们从网络中产生最高得分的索引出挑选出标签。

# 加载一个包含1000个标签的文件
with open('/home/user1/QinRui/learn-dataset/imagenet_classes.txt') as f:labels=[line.strip() for line in f.readlines()]# 确定out张量中最高得分对应的索引
_, index=torch.max(out,1)# 使用index[0]获得实际的数字作为标签列表的索引,并用softmax使输出归一化
percentage=torch.nn.functional.softmax(out,dim=1)[0]*100
print(labels[index[0]],percentage[index[0]].item())# 输出结果
Pembroke, Pembroke Welsh corgi 75.87240600585938

在本例中,模型有约75%的把握认为它看到的是彭布罗克威尔士柯基。


http://chatgpt.dhexx.cn/article/gL76dlgd.shtml

相关文章

基于ResNet-101深度学习网络的图像目标识别算法matlab仿真

目录 1.算法理论概述 1.1、ResNet-101的基本原理 1.2、基于深度学习框架的ResNet-101实现 1.3网络训练与测试 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 介绍ResNet-101的基本原理和数学模型,并解释其在图…

【深度学习】ResNet网络详解

文章目录 ResNet参考结构概况conv1与池化层残差结构Batch Normalization总结 ResNet 参考 ResNet论文: https://arxiv.org/abs/1512.03385 本文主要参考视频:https://www.bilibili.com/video/BV1T7411T7wa https://www.bilibili.com/video/BV14E411H7U…

【使用Pytorch实现ResNet网络模型:ResNet50、ResNet101和ResNet152】

使用Pytorch实现Resnet网络模型:ResNet50、ResNet101和ResNet152 介绍什么是 ResNet?ResNet 的架构使用Pytorch构建 ResNet网络 介绍 在深度学习和计算机视觉领域取得了一系列突破。尤其是随着非常深的卷积神经网络的引入,这些模型有助于在图…

使用PyTorch搭建ResNet101、ResNet152网络

ResNet18的搭建请移步:使用PyTorch搭建ResNet18网络并使用CIFAR10数据集训练测试 ResNet34的搭建请移步:使用PyTorch搭建ResNet34网络 ResNet34的搭建请移步:使用PyTorch搭建ResNet50网络 参照我的ResNet50的搭建,由于50层以上几…

Java中的数组

数组 1.什么是数组 数组就是存储相同数据类型的一组数据,且长度固定 基本数据类型4类8种:byte/char/short/int/long/float/double/boolean 数组,是由同一种数据类型按照一定的顺序排序的集合,给这个数组起一个名字。是一种数据类型&#…

java输出数组(java输出数组)

多维数组在Java里如何创建多维数组? 这从第四个例子可以看出,它向我们演示了用花括号收集多个new表达式的能力: Integer[][] a4 { { new Integer (1), new Integer (2)}, { new Integer (3), new Integer (4)}, { new Integer (5), new…

java怎么输出数组(Java怎么给数组赋值)

Java中数组输出的三种方式。第一种方式,传统的for循环方式,第二种方式,for each循环,  第三种方式,利用Array类中的toString方法. 定义一个int类型数组,用于输出 int[] array={1,2,3,4,5}; 第一种方式,传统的for循环方式 for(int i=0;i {System.out.println(a[i]); } 第…

数组的输入与输出

前言: 我们知道对一个字符数组进行输入与输出时会用到: 输入:scanf,getchar,gets 输出:printf,putchar,puts 然而可能还有很多的朋友对这些还不是很了解,今天让我们共同学习数组的输入与输出吧。 %c格式是用于输入…

Java二维数组的输出

1. Java二维数组的输出<1> (1) 输出结果右对齐"%5d" public class HelloWorld {public static void main(String[] args){int myArray[ ][ ] { {1,2}, {7,2}, {3,4} };for(int i0; i<3; i){for (int j0; j<2; j)System.out.printf("%5d",my…

Java中数组的输入输出

数组的输入 首先声明一个int型数组 int[] a 或者 int a[] 给数组分配空间 anew int[10]; 和声明连起来就是int[] anew int[10]; 或者是 int a[]new int[10]; 给数组赋值 a[0]1;//0代表的是数组的第1个元素 ,元素下标为0 a[1]1;//1代表的是数组的第2个元素 ,元素下标为0 …

Java 数组的输入输出

Java中要对控制台进行输入操作的话要调用Scanner类&#xff0c;定义一个扫描的对象&#xff0c;例&#xff1a; //要导入java.util.Scanner; Scanner scanner new Scanner(System.in); 这样便打开了输入流&#xff0c;接下来定义数组&#xff1a; int[] n new int[4];//使…

Java中字符串数组的输入与输出

今天刷题遇到一个坑&#xff0c;老是接收不到字符串数组。即用str[i]sc.nextLine();这样的方式去接收数组的话&#xff0c;打印的时候总是会少一个。 import java.util.Scanner;public class test {public static void main(String[] args) {Scanner sc new Scanner(System.i…

java中打印输出数组内容的三种方式

今天输出数组遇到问题&#xff0c;学习一下打印输出数组内容的几种方式 错误示范&#xff1a;System.out.println(array);  //这样输出的是数组的首地址&#xff0c;而不能打印出数组数据。&#xff08;唉&#xff0c;我开始就是这么写的。。。&#xff09; 一维数组&#…

NTP协议之旅

NTP协议之旅 What---啥是NTPWhy---为什么需要NTPHow---NTP实现原理Do---NTP实战使用HCL 华三模拟器进行NTP配置抓包分析 What—啥是NTP NTP是在分布式网络中&#xff0c;进行时钟同步的协议&#xff0c;其具有较高的时间同步精度。所使用的传输层协议为UDP&#xff0c;使用端口…

ntrip协议

https://blog.csdn.net/wandersky0822/article/details/88558456这篇介绍的是RTK精确定位的原理&#xff0c;及影响精确定位的各种条件。 这一篇介绍的就比较细&#xff0c;仅仅介绍RTK 差分信息的 产生 申请与分发。 最近要做一个GPS RTK基站&#xff0c;也就是为RTK客户端提…

Ntrip协议简介

Ntrip通讯协议1.0 1 什么是Ntrip&#xff1f; CORS&#xff08;Continuously Operating Reference Stations&#xff09;就是网络基准站&#xff0c;通过网络收发GPS差分数据。用户访问CORS后&#xff0c;不用单独架设GPS基准站&#xff0c;即可实现GPS流动站的差分定位。 访问…

NTP技术介绍

NTP 简介 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是由RFC 1305定义的时间同步协议&#xff0c;用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输&#xff0c;使用的UDP端口号为123。 使用NTP的目的是对网络内所…

NTPv4协议解析

前言 本文的撰写基于RFC5905.NTP 是时间网络控制协议&#xff0c;V4版本相交V3版本&#xff0c;修复了V3存在的一些问题。尤其是NTPV4的拓展时间戳鼓励使用浮动双数据类型&#xff0c;这样使得NTP能够更好的支持1ns的场景&#xff0c;轮询间隔也从上一代的最多1024s拓展到了36…

NTP 网络时间协议

目录 基本原理 结构 工作模式 单播C/S模式 对等体模式 广播模式 组播模式 多播模式 NTP访问控制 访问权限 KOD 认证功能 配置 NTP用于在一系列分布式时间服务器与客户端之间同步时钟。基于IP和UDP。NTP报文通过UDP传输&#xff0c;端口号是123. NTP主要应用于网络中…

NTP协议简介

NTP协议简介 一. datec dates分析1. 同步流程2. 缺陷 二. NTP(**Network Time Protocol**)1. NTP概述 [1、2、3、7]2. NTP的时钟同步原理与授时精度分析 [3、1、10]NTP的时钟同步原理NTP的授时精度分析 3. NTP中其它的提高授时精度的措施[1、6]参考资料 三. 对NTP改进以获得更高…