我有以下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喜欢这样做,因为我需要使用tensorflow而不是pytorch将此代码转换为tensorflow。我已经搜索了一些东西,但不太了解该怎么做。
多亏了keras_squeezenet软件包,我已经能够得到一个经过预训练的SqueezeNet模型(尽管当我加载模型时它会引起一些numpy的未来弃用警告),但是那我如何才能更改Classifier,Optimizer和类的数量我像在pytorch中一样加载的模型?
我使用tensorflow 1.14.0和keras 2.3.1(由于某种原因我无法启动tensorflow 2)
由于会话权限,我也只在使用CPU
编辑感谢@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中;我该怎么办?