Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将使用挤压网预训练模型的pytorch代码转换为tensorflow_Python_Tensorflow_Keras_Deep Learning_Pytorch - Fatal编程技术网

Python 如何将使用挤压网预训练模型的pytorch代码转换为tensorflow

Python 如何将使用挤压网预训练模型的pytorch代码转换为tensorflow,python,tensorflow,keras,deep-learning,pytorch,Python,Tensorflow,Keras,Deep Learning,Pytorch,我有以下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

我有以下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)
我想把这段代码转换成tensorflow,因为我需要使用tensorflow而不是pytorch。我查了一些东西,不太明白怎么做

由于keras_SqueezeNet软件包,我已经能够获得一个预训练的SqueezeNet模型(尽管它在我加载模型时会导致numpy出现一些未来的弃用警告),但是我如何才能像在pytorch中那样更改加载的模型的分类器、优化器和类数呢

我正在使用tensorflow 1.14.0和keras 2.3.1(由于某些原因,我无法启动tensorflow 2)

此外,由于会话权限,我只使用CPU

编辑感谢@Albert:

现在,我已经从我的软件包中加载了模型,并且设置了我将使用的不同图像文件夹:

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中;我该怎么做呢?

你也应该展示你当前的TF代码,并链接到你所指的keras_squeezenet软件包(我不知道)。你也许还应该问一些更具体(单独)的问题。例如,“我有这个TF代码:…,我如何将优化器更改为Adam?”@Albert Hello,谢谢你的评论我编辑了我的帖子,认为我的方向是正确的,你有什么建议吗?非常感谢。正如我所看到的,你不是简单地调用
squezenet(…,classes=num_classes)
?我还是不太明白问题到底出在哪里。你发布了一些代码。它有用吗?或者什么东西不起作用?(你有错误吗?或者某事物出错了吗?请提供这些信息…)从代码中我们可以看到,由于SqueezeNet在1000上预训练,因此权重只能用于1000类。我想进行微调,所以在pytorch上,我更改了model.classifier和类的数量,这样它就可以满足我对两个类的特定需求,并且我仍然可以获得预先训练的权重,从而加快我的训练。在这里,我需要让默认类(1000)加载权重,然后在最后一层中将其更改为2,但是当我检查tensorflow中的层时,conv2d在pytorch中声明时没有(通道内,通道外),所以我不知道要做什么。所以现在我唯一的错误是“BinaryCrossEntropy”我在model.compile中使用的loss,我不认为我使用了正确的crossentropy函数,我将在loss函数文档中再次检查,我需要与Pytorchy中的CrossEntropyLoss相同的函数。您可能还应该显示您当前的TF代码,并链接到您所指的keras_squeezenet包(我不知道)。你也许还应该问一些更具体(单独)的问题。例如,“我有这个TF代码:…,我如何将优化器更改为Adam?”@Albert Hello,谢谢你的评论我编辑了我的帖子,认为我的方向是正确的,你有什么建议吗?非常感谢。正如我所看到的,你不是简单地调用
squezenet(…,classes=num_classes)
?我还是不太明白问题到底出在哪里。你发布了一些代码。它有用吗?或者什么东西不起作用?(你有错误吗?或者某事物出错了吗?请提供这些信息…)从代码中我们可以看到,由于SqueezeNet在1000上预训练,因此权重只能用于1000类。我想进行微调,所以在pytorch上,我更改了model.classifier和类的数量,这样它就可以满足我对两个类的特定需求,并且我仍然可以获得预先训练的权重,从而加快我的训练。在这里,我需要让默认类(1000)加载权重,然后在最后一层中将其更改为2,但是当我检查tensorflow中的层时,conv2d在pytorch中声明时没有(通道内,通道外),所以我不知道要做什么。所以现在我唯一的错误是“BinaryCrossEntropy”我在model.compile中使用的丢失,我认为我没有使用正确的crossentropy函数,我将在丢失函数文档中再次检查,我需要与pytorch中的CrossEntropyLoss相同的函数