Поезд SqueezeNet модель с использованием набора данных MNIST Pytorch

Я хочу обучить модель SqueezeNet 1.1, используя набор данных MNIST вместо набора данных ImageNet.
Могу ли я иметь ту же модель, что и torchvision.models.squeezenet?
Спасибо!

2 ответа

Решение

TorchVision предоставляет только модель предварительной подготовки данных ImageNet для архитектуры SqueezeNet. Однако вы можете обучить свою собственную модель, используя набор данных 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, а ядро ​​и шагать соответственно.

  (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

Инициализация предварительно обученных весов возможна, но у вас будут проблемы с шагами и размерами ядра, поскольку изображения MNIST имеют размер 28X28 пикселей. Скорее всего, сокращение приведет к (batch_sizex1x1xchannel) функциональным картам, прежде чем сеть окажется на своем уровне логического вывода, что приведет к ошибке.

Другие вопросы по тегам