当前位置:   article > 正文

P25 现有网络模型的使用及修改_pretrained=true改为什么

pretrained=true改为什么

模型的默认下载位置:
在这里插入图片描述

一、看文档

在这里插入图片描述
在这里插入图片描述
找到这个数据集 在torch.datasets
在这里插入图片描述
在这里插入图片描述

二、Imagnet数据集与VGG16模型下载

1、先安装下scipy

2、下载数据集

import torch
import torchvision

train_data=torchvision.datasets.ImageNet("./P25_ImageNet_datasets",split='train',
                                         transform=torchvision.transforms.ToTensor()
                                 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

报错了:数据集未公开,让自己去下载

在这里插入图片描述

3、可以去百度搜索数据集名字,一般会有下载渠道,但是这玩意100多个G。。顶不住。

4、按住ctrl+左键点击ImageNet
在这里插入图片描述

5、看下VGG16 预训练分别为True和False有什么区别吧:
飘过一条弹幕,感觉应该挺重要

弹幕说:
最新版默认是没有预训练,需要使用预训练设置weights=‘DEFAULT’
在这里插入图片描述
pretrained=False 改为weight=None pretrained=True改weights=‘DEFAULT’

我们来看下:最新文档。要想用训练好的,这里需要输入 VGG16_Weights.DEFAULT或者weights=‘DEFAULT’ or weights=‘IMAGENET1K_V1’.
在这里插入图片描述可以看到设置为Default时,会下载这些权重,他们就相当于我们之前写模型里的conv卷积数据,maxpool池化数据等等。
在这里插入图片描述

6、debug一下
在这里插入图片描述
来看参数:
未训练:
在这里插入图片描述
训练好的:
在这里插入图片描述
还是有差别的。

6、看下其训练好的结构

import torch
import torchvision

# train_data=torchvision.datasets.ImageNet("./P25_ImageNet_datasets",split='train',
#                                          transform=torchvision.transforms.ToTensor()
#                                         )

vgg16_false=torchvision.models.vgg16(weights=None)
vgg16_true=torchvision.models.vgg16(weights='DEFAULT')

print(vgg16_true)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

步骤挺多的

  (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): ReLU(inplace=True)
    (2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (3): ReLU(inplace=True)
    (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (6): ReLU(inplace=True)
    (7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (8): ReLU(inplace=True)
    (9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (11): ReLU(inplace=True)
    (12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (13): ReLU(inplace=True)
    (14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (15): ReLU(inplace=True)
    (16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (18): ReLU(inplace=True)
    (19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (20): ReLU(inplace=True)
    (21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (22): ReLU(inplace=True)
    (23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (25): ReLU(inplace=True)
    (26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (27): ReLU(inplace=True)
    (28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (29): ReLU(inplace=True)
    (30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

能分出类别达到1000种
在这里插入图片描述

三、VGG16训练好的,应用在CIFAR10数据集,add_module的用法

问题来了,VGG16最后线性层输出为1000种,而我们的CIFAR10只有10类,如何利用现有的网络去改变结构。也就是迁移学习
1、我们可以加一个线性层,让他输入1000,输出为10

import torch
import torchvision
from torch import nn

# train_data=torchvision.datasets.ImageNet("./P25_ImageNet_datasets",split='train',
#                                          transform=torchvision.transforms.ToTensor()
#                                         )

vgg16_false=torchvision.models.vgg16(weights=None)
vgg16_true=torchvision.models.vgg16(weights='DEFAULT')

print(vgg16_true)
train_data=torchvision.datasets.CIFAR10("./P25_datasets_Cifar10",
                                        train=True,transform=torchvision.transforms.ToTensor(),
                                       download=True )
vgg16_true.add_module("add_linear",nn.Linear(1000,10))//这里加入新神经元。//
print(vgg16_true)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述

在这里插入图片描述

1、1我们想把add_linear加入classifier里呢?

vgg16_true.classifier.add_module("add_linear",nn.Linear(1000,10))
  • 1

进去了
在这里插入图片描述

2、我们不添加,想直接在原来的基础上修改最后一个线性层输入为4096,输出为10

print(vgg16_false)
vgg16_false.classifier[6]=nn.Linear(4096,10) //关键//
print(vgg16_false)
  • 1
  • 2
  • 3

修改前:
在这里插入图片描述

修改后:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/217585
推荐阅读
相关标签
  

闽ICP备14008679号