【问题标题】:Train SqueezeNet model using MNIST dataset Pytorch使用 MNIST 数据集 Pytorch 训练 SqueezeNet 模型
【发布时间】:2019-05-04 17:22:39
【问题描述】:

我想使用 MNIST 数据集而不是 ImageNet 数据集来训练 SqueezeNet 1.1 模型。
我可以拥有与 torchvision.models.squeezenet 相同的模型吗?
谢谢!

【问题讨论】:

    标签: python neural-network pytorch mnist torchvision


    【解决方案1】:

    TorchVision 仅为 SqueezeNet 架构提供 ImageNet 数据预训练模型。但是,您可以使用 MNIST 数据集来训练您自己的模型,只需从 torchvision.models 获取模型(而不是预训练的模型)。

    In [10]: import torchvision as tv
    
    # get the model architecture only; ignore `pretrained` flag
    In [11]: squeezenet11 = tv.models.squeezenet1_1()
    
    In [12]: squeezenet11.training   
    Out[12]: True
    

    现在,您可以使用此架构在 MNIST 数据上训练模型,这不会花费太长时间。


    要记住的一个修改是更新 MNIST 的类数为 10。具体来说,1000应该改成10,内核和stride也相应地改。

      (classifier): Sequential(
        (0): Dropout(p=0.5)
        (1): Conv2d(512, 1000, kernel_size=(1, 1), stride=(1, 1))
        (2): ReLU(inplace)
        (3): AvgPool2d(kernel_size=13, stride=1, padding=0)
      )
    

    下面是相关解释:finetuning_torchvision_models-squeezenet

    【讨论】:

    • 我需要更改 num_classes 属性吗?
    • 第一个 conv 中的任何其他更改,兄弟?-self.features = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3, stride=2),
    • 必须是预训练权重用于初始化的一种方式,对吧?只有最终的 conv 层不同..
    【解决方案2】:

    预训练权重的初始化是可能的,但由于 MNIST 图像是 28X28 像素,因此您会遇到步幅和内核大小的问题。很可能在网络处于其推理层之前,减少会导致 (batch_sizex1x1xchannel) 特征图,这将导致错误。

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 2016-09-28
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2018-01-03
      • 2019-11-06
      相关资源
      最近更新 更多