我们以(inceptionV3)为例:
Pytorch里我们如何使用设计好的网络结构,比如inceptionV3:
import torchvision.models as models
inception=models.inception_v3(pretrained=True)
Pytorch提供了个叫做children()的函数,这个函数可以用来提取出model每一层的网络结构,在此基础上进行修改即可,修改方法如下(去除后两层):
inception_layer = nn.Sequential(*list(model.children())[:-2])
目前留下了剔除后两层的网络结构
class Net(nn.Module):
def __init__(self , model):
super(Net, self).__init__()
#取掉model的后两层
self.resnet_layer = nn.Sequential(*list(model.children())[:-2])
self.transion_layer = nn.ConvTranspose2d(2048, 2048, kernel_size=14, stride=3)
self.pool_layer = nn.MaxPool2d(32)
self.Linear_layer = nn.Linear(2048, 8)
def forward(self, x):
x = self.resnet_layer(x)
x = self.transion_layer(x)
x = self.pool_layer(x)
x = x.view(x.size(0), -1)
x = self.Linear_layer(x)
return x
-
resnet = models.resnet50(pretrained=True) model = Net(resnet)