再利用GAN生成对抗网络的时候,我们常使用ResNet18作为判别器,具体的实现如下:
import torchvision.models as models
G = generator().cuda(args.gpu) # 加载生成器到GPU中
summary(G,(1,256,256)) # 生成器的摘要
# define D定义判别器
D = models.resnet18(pretrained=False,num_classes=2) # 判别器是resnet18
# D = se_resnet_18(pretrained=False,num_classes=2)
D.fc = nn.Sequential(nn.Linear(512, 1), nn.Sigmoid())
# 通过修改ResNet-18的最后一层全连接层(D.fc)来适应二分类任务
# 此处结构应与上一个模型输出可做矩阵乘法
D = D.cuda(args.gpu)
summary(D,(3,256,256))
if args.d_init is not None:
D.load_state_dict(torch.load(args.d_init)) # 加载初始化的判别器D的模型权重
这段代码是在构建一个使用ResNet-18作为判别器的二分类模型。首先创建了一个ResNet-18的实例D,并设置了pretrained=False和num_classes=2。pretrained=False表示不使用预训练的权重,num_classes=2表示模型最后的分类类别数为2。
接下来,通过修改ResNet-18的最后一层全连接层D.fc来适应二分类任务。这里使用了nn.Sequential将两个层组合在一起,即一个线性层(nn.Linear)和一个Sigmoid激活函数(nn.Sigmoid)。这样的结构可以将上一层的输出结果与一个权重矩阵相乘,并通过Sigmoid函数得到最终的二分类概率输出。
然后将模型D移至GPU上,以加快计算速度。
最后,使用summary函数对模型D进行了打印输出,显示了模型的结构概要信息,包括输入尺寸和各个层的输出尺寸。
总的来说,这段代码构建了一个使用ResNet-18作为判别器的二分类模型,并对模型进行了修改和打印输出。
我们直接使用torchvision.models
模块中的子模块,torchvision.models库中包含许多常用的
我们直接使用torchvision.models模块中的子模块,torchvision.models库中包含许多常用的模型,比如:AlexNet、VGG、ResNet、SqueezeNet、DenseNet。它们都可以直接通过torchvision.models直接进行调用,十分方便。具体的使用方法如下:
参考博主:https://zhuanlan.zhihu.com/p/477058585
可以使用随机初始化的权重来创建这些模型。
import torchvision.models as models
resnet18 = models.resnet18()
alexnet = models.alexnet()
squeezenet = models.squeezenet1_0()
densenet = models.densenet_161()
使用PyTorch torch.utils.model_zoo为ResNet变体和AlexNet提供预训练模型。这些可以通过传入pretrained=True来构造:对于ResNet variants和AlexNet,我们也提供了预训练(pre-trained)的模型。
预训练(pre-trained)是在ImageNet数据集上进行的。
import torchvision.models as models
#pretrained=True就可以使用预训练的模型
resnet18 = models.resnet18(pretrained=True)
alexnet = models.alexnet(pretrained=True)
不同的模型构建细节
AlexNet 模型结构
torchvision.models.alexnet(pretrained=False, ** kwargs)
pretrained (bool) = True, 返回在ImageNet上训练好的模型。
构建一个resnet18模型
torchvision.models.resnet18(pretrained=False, ** kwargs)
pretrained (bool) = True, 返回在ImageNet上训练好的模型。
构建一个ResNet-34 模型.
torchvision.models.resnet34(pretrained=False, ** kwargs)
Parameters: pretrained (bool) = True, 返回在ImageNet上训练好的模型。
构建一个ResNet-50模型
torchvision.models.resnet50(pretrained=False, ** kwargs)
pretrained (bool) = True, 返回在ImageNet上训练好的模型。
构建一个ResNet-101模型
torchvision.models.resnet101(pretrained=False, ** kwargs)
pretrained (bool) = True, 返回在ImageNet上训练好的模型。
构建一个ResNet-152模型
torchvision.models.resnet152(pretrained=False, ** kwargs)
pretrained (bool) = True, 返回在ImageNet上训练好的模型。
VGG 11层模型(配置“A”)
torchvision.models.vgg11(pretrained=False, ** kwargs)
pretrained (bool) = True, 返回在ImageNet上训练好的模型。
批量归一化的VGG 11层模型(配置“A”)
torchvision.models.vgg11_bn(** kwargs)
构建一个VGG 13模型
torchvision.models.vgg13(pretrained=False, ** kwargs)
pretrained (bool) = True, 返回在ImageNet上训练好的模型。
批量归一化的VGG 13层模型(配置“B”)
torchvision.models.vgg13_bn(** kwargs)
VGG 16层模型(配置“D”)
torchvision.models.vgg16(pretrained=False, ** kwargs)
Parameters: pretrained (bool) = True, returns a model pre-trained on ImageNet
批量归一化的VGG 16层模型(配置“D”)
torchvision.models.vgg16_bn(** kwargs)
VGG 19层模型(配置“E”)
torchvision.models.vgg19(pretrained=False, ** kwargs)
pretrained (bool) = True, 返回在ImageNet上训练好的模型。
批量归一化的VGG 16层模型(配置“E”)
torchvision.models.vgg19_bn(** kwargs)