使用ResNet18作为判别器以及利用torchvision.models库中的其他模型,如:AlexNet、VGG、SqueezeNet、DenseNet。

再利用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)
 

 

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
```python import torchvision.models as models # 加载resnet18模型 resnet18 = models.resnet18() # 打印模型结构 print(resnet18) ``` 输出结果为: ``` ResNet( (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False) (layer1): Sequential( (0): BasicBlock( (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) (1): BasicBlock( (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) ) (layer2): Sequential( (0): BasicBlock( (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False) (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (downsample): Sequential( (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False) (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) ) (1): BasicBlock( (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) ) (layer3): Sequential( (0): BasicBlock( (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False) (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (downsample): Sequential( (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False) (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) ) (1): BasicBlock( (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) ) (layer4): Sequential( (0): BasicBlock( (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False) (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (downsample): Sequential( (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False) (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) ) (1): BasicBlock( (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (relu): ReLU(inplace=True) (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) ) (avgpool): AdaptiveAvgPool2d(output_size=(1, 1)) (fc): Linear(in_features=512, out_features=1000, bias=True) ) ``` 以上代码演示了如何使用`torchvision.models`模块的`resnet18`函数加载预训练的ResNet-18模型,并打印出模型的结构。ResNet-18是一个经典的卷积神经网络模型,常用于图像分类任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值