Как преобразовать код pytorch, использующий предварительно обученную модель Squeez eNet, в tensorflow - PullRequest
1 голос
/ 29 мая 2020

У меня есть следующий код pytorch:

model = models.squeezenet1_1(pretrained=True)

num_classes = 2
model.classifier = nn.Sequential (
    nn.Dropout(0.1),
    nn.Conv2d(512, num_classes, kernel_size= (1,1), stride= (1,1)),
    nn.ReLU(), 
    nn.AvgPool2d(kernel_size= 13, stride= 1, padding= 0)
    )
model.num_classes = num_classes
criterion = nn.CrossEntropyLoss()

optimizer = optim.Adam(model.classifier.parameters(), lr=0.001)

, и id хотел бы преобразовать этот код в тензорный поток, поскольку мне нужно использовать тензорный поток, а не pytorch. Я поискал кое-что и не совсем понял, как это сделать.

Я смог получить предварительно обученную модель Squeez eNet благодаря пакету keras_squeez enet (хотя это вызывает некоторые будущие предупреждения об устаревании с numpy при загрузке модели), но как тогда я могу изменить классификатор, оптимизатор и количество классов для модели, которую я загрузил, как я сделал в pytorch?

Я использую тензорный поток 1.14.0 и keras 2.3.1 (по какой-то причине мне не удалось запустить тензорный поток 2)

Также я использую только ЦП из-за прав сеанса

РЕДАКТИРОВАТЬ благодаря @Albert:

Прямо сейчас я просто загрузил модель из пакета, который я взял из https://github.com/rcmalli/keras-squeezenet, и я установил свои разные папки изображений, которые Я буду использовать:

datagen = ImageDataGenerator()
# load and iterate training dataset
train_it = datagen.flow_from_directory('path to my training', class_mode='binary', batch_size=32)
# load and iterate validation dataset
val_it = datagen.flow_from_directory('path to my validation', class_mode='binary', batch_size=32)
# load and iterate test dataset
test_it = datagen.flow_from_directory('path to my test', class_mode='binary', batch_size=32)

model = SqueezeNet(weights='imagenet')

Я обнаружил, что вы должны использовать model.compile, чтобы указать оптимизатор и потерю с помощью keras, поэтому я думаю, что это может выглядеть примерно так, поправьте меня, если я ошибаюсь:

model.compile(loss='BinaryCrossentropy',optimizer='Adam',metrics=['accuracy'])

Если это правильно, мне просто нужно сделать

model.classifier = nn.Sequential (
    nn.Dropout(0.1),
    nn.Conv2d(512, num_classes, kernel_size= (1,1), stride= (1,1)),
    nn.ReLU(), 
    nn.AvgPool2d(kernel_size= 13, stride= 1, padding= 0)
    )
model.num_classes = num_classes

в tenserflow / keras; как я могу это сделать?

...