Я хочу тренировать модель SqueezeNet 1.1 с использованием набора данных MNIST вместо набора данных ImageNet.
Могу ли я иметь ту же модель, что и torchvision.models.squeezenet?
Спасибо!
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, что не должно занять слишком много времени.
Одна из модификаций, которые следует учитывать, - это обновить количество классов, для которых 10 для MNIST. В частности, 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) до того, как сеть будет на своем слое infernece, что приведет к ошибке.