PyTorch 深度学习实战
方远
LINE China 数据科学家
10381 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 32 讲
开篇词 (1讲)
PyTorch 深度学习实战
15
15
1.0x
00:00/00:00
登录|注册

08 | Torchvision(下):其他有趣的功能

你好,我是方远。
在前面的课程中,我们已经学习了 Torchvision 的数据读取与常用的图像变换方法。其实,Torchvision 除了帮我们封装好了常用的数据集,还为我们提供了深度学习中各种经典的网络结构以及训练好的模型,只要直接将这些经典模型的类实例化出来,就可以进行训练或使用了。
我们可以利用这些训练好的模型来实现图片分类、物体检测、视频分类等一系列应用。
今天,我们就来学习一下经典网络模型的实例化与 Torchvision 中其他有趣的功能。

常见网络模型

Torchvision 中的各种经典网络结构以及训练好的模型,都放在了torchvision.models模块中,下面我们来看一看torchvision.models 具体为我们提供了什么支持,以及这些功能如何使用。

torchvision.models 模块

torchvision.models 模块中包含了常见网络模型结构的定义,这些网络模型可以解决以下四大类问题:图像分类、图像分割、物体检测和视频分类。图像分类、物体检测与图像分割的示意图如下图所示。
图像分类,指的是单纯把一张图片判断为某一类,例如将上图左侧第一张判断为 cat。目标检测则是说,首先检测出物体的位置,还要识别出对应物体的类别。如上图中间的那张图,不仅仅要找到猫、鸭子、狗的位置,还有给出给定物体的类别信息。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Torchvision(下):其他有趣的功能 本文介绍了Torchvision中的一些有趣功能,主要包括对经典网络模型的实例化和使用,以及模型微调的方法。文章首先详细介绍了Torchvision中的`torchvision.models`模块,该模块包含了常见的网络模型结构的定义,可以解决图像分类、图像分割、物体检测和视频分类等问题。作者以GoogLeNet网络为例,讲解了如何实例化一个网络模型,并介绍了使用预训练好的模型以及模型微调的方法。此外,文章还介绍了Torchvision提供的其他常用函数,如make_grid和save_img,展示了它们的有趣功能。通过简洁清晰的语言,为读者提供了对Torchvision中有趣功能的快速了解,使读者能够快速掌握相关技术特点。文章内容涵盖了实际代码示例,帮助读者更好地理解和应用所介绍的功能。 总的来说,本文通过介绍Torchvision中的有趣功能,使读者能够快速了解如何利用Torchvision进行模型实例化、微调以及其他常用函数的应用,为读者提供了丰富的实际操作经验和技术指导。文章内容丰富,涵盖了实际代码示例,帮助读者更好地理解和应用所介绍的功能。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《PyTorch 深度学习实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • autiplex
    import torch import torchvision.models as models # 加载预训练模型 googlenet = models.googlenet(pretrained=True) # 提取分类层的输入参数 fc_in_features = googlenet.fc.in_features print("fc_in_features:", fc_in_features) # 查看分类层的输出参数 fc_out_features = googlenet.fc.out_features print("fc_out_features:", fc_out_features) # 修改预训练模型的输出分类数(在图像分类原理中会具体介绍torch.nn.Linear) googlenet.fc = torch.nn.Linear(fc_in_features, 10) ''' 输出: fc_in_features: 1024 fc_out_features: 1000 ''' 老师这段代码里 torch.nn.Linear里是不是应该是fc_out_features,因为不是要转换输出分类数为10么

    作者回复: 你好,autiplex。谢谢你的留言。 fc_out_features 是原来googlenet最后一层(fc层)的输出,10是我们期望的输出,现在是要将fc_out_features(1000)替换成10。 因此,googlenet.fc = torch.nn.Linear(fc_in_features, 10),这里表示最后一层的输出改为10。 torch.nn.Linear的参数是:(网络输入特征数,网络输出特征数),所以第一个参数应该是fc_in_features。

    2021-11-11
    16
  • AstrHan
    老师,微调的原理是什么啊?image net训练出来的倒数第二层应该是包含1000个类型的特征,那微调训练之后这层输出的会全部变成狗相关的特征吗?如果这样,那训练过程感觉反而会更慢啊。还是说微调训练最多的是输出层,降低倒数第二层里非狗的特征权重?

    作者回复: 你好,AstrHan。感谢你的留言。 首先,不使用预训练模型的话,我们的模型是从随机初始化的参数开始训练。这个训练过程会非常慢。 使用预训练模型话,相当于在预训练模型的基础上进行训练。 举个例子,把模型训练比作从山顶走向山脚的过程,山脚就是我们模型收敛的状态。 不使用预训练模型的话,就相当于从山顶开始一步步向下走。 使用预训练模型的话,相当于从一个接近山脚的位置向下走。 有两种微调方式。第一种就是这节课中提到的微调,也就是固定卷积层的参数,只训练全连接层。 这也可以理解为Embedding。ImageNet上有很多丰富的数据,现在有一个在ImageNet上训练很好的模型,然后将我们例子中的图片(狗)用ImageNet上训练的模型进行特征提取(ImageNet模型倒数第二层的输出)。 提取后的数据相当于是原始图片(狗)的另一种表示。 这个过程相当于,原始的数据就是狗的图片。 经过ImageNet提取后的特征变为有有耳朵、四条腿、爱吃骨头、跑得快、会汪汪叫之类的特征。 然后用提取后的特征作为新模型的输入,这里的新模型就是修改后的全连接层。 还有一种微调,会在14节中讲到,就是使用在ImageNet上训练好的模型的参数,作为我们模型的初始化参数进行训练。这种方式是训练所有的参数,而不是固定全连接层前面的参数。

    2021-10-28
    2
    15
  • vcjmhg
    vgg16 = models.vgg16(pretrained=True)

    作者回复: 你好,谢谢留言。每次都非常正确👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻。^^

    2021-10-27
    6
  • ..................
    老师请问这句话“tensor:类型是 Tensor 或列表,如果输入类型是 Tensor,其形状应是 (B x C x H x W);”中的B,C,H,W分别是什么意思?实在想不明白

    作者回复: 你好,感谢你的留言。 B是指batch_size,就是一次处理多少张图片。 C是指channel,图片的通道数,通常来说是3。 H和W就是只图片的高与宽了。

    2022-04-23
    4
  • 徐洲更
    老师您好,请教一个可能跟计算机视觉相关的深度学习的问题。假如一款3D的赛车类游戏,我在里面做了一系列操作,从起点开到了终点,我能否让神经网络根据我的操作和对应的录屏学会我的操作,并大致重复出来呢?这需要什么样的深度学习模型呢?

    作者回复: 你好,徐洲更。 可以学习一下强化学习(Reinforcement Learning)相关的内容。^^

    2021-12-02
    2
    3
  • 奔跑的火龙果
    iter(tensor_dataloader)和next()分别是什么意思呢?

    作者回复: 你好,感谢留言。 iter()函数用来生成迭代器。 next()函数用来获取迭代器的元素。 具体可以参见Python迭代器的创建和使用。 https://www.w3school.com.cn/python/ref_func_iter.asp

    2022-08-23归属地:北京
    1
  • John(易筋)
    解决 AttributeError: module 'torchvision.models' has no attribute 'googlenet' 运行以下命令报错 googlenet = models.googlenet() 解决方法 google_net = torchvision.models.inception_v3(pretrained=True) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-3-0e4152b595be> in <module> 1 import torchvision.models as models ----> 2 googlenet = models.googlenet() AttributeError: module 'torchvision.models' has no attribute 'googlenet' ref: https://stackoverflow.com/questions/55762706/how-to-load-pretrained-googlenet-model-in-pytorch

    作者回复: 👍🏻👍🏻👍🏻^^

    2022-07-30归属地:北京
    1
  • googlenet.fc = torch.nn.Linear(fc_in_features, 10) print("fc_out_features:", fc_out_features) 老师,我更改后得到的输出特征数还是 fc_out_features: 1000 这个结果。请赐教!

    作者回复: hello。print(googlenet.fc.out_features)试试呢? fc_out_features变量并没有赋新值,所以不会改变呀

    2021-11-16
    1
  • clee
    vgg16 = models.vgg16(pretrained=True)

    作者回复: 你好,clee。谢谢你的留言。 👍🏻👍🏻👍🏻👍🏻,完全正确^^。

    2021-11-07
    1
  • 夏阳
    老师,这段段代码会报错 torchvision.utils.save_image(grid_tensor, 'grid.jpg') ValueError: unknown file extension: 搞不清楚什么状况,请帮忙指教

    作者回复: 你好,夏阳,感谢你的留言。能新开一个留言提供一下你的代码吗?或者在发到微信群里。

    2021-10-30
    4
    1
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部