pytorch nn.Sequential()动态添加方法
之前我们使用nn.Sequential()都是直接写死的,就如下所示:
# Example of using Sequential
model = nn.Sequential(
nn.Conv2d(,,),
nn.ReLU(),
nn.Conv2d(,,),
nn.ReLU()
) # Example of using Sequential with OrderedDict
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(,,)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(,,)),
('relu2', nn.ReLU())
]))
那如果我们想要根据条件一点点添加进去,那就可以使用其的add_module方法
torch.nn.
Module
.add_module
add_module(name, module)
添加子模块到当前模块中
该添加子模块能够使用给定的名字name来访问
参数:
- name (string):子模块的名字。该添加子模块能够使用给定的名字name来从该模块中被访问
- module (Module) :添加到该模块中的子模块
例子:
class Encoder(nn.Module): #输入图片的大小isize、噪声的维度nz=、输入图片的通道nc=、ndf=、
def __init__(self,isize,nz,nc,ndf,ngpu,n_exter_layers=,add_final_conv=True):
super(Encoder,self).__init__()
self.ngpu=ngpu
# 必须为16倍数
assert isize % ==,"isize has to be a multiple of 16" main=nn.Sequential()
# 图片的高宽缩小一倍
main.add_module('initial-conv-{0}-{1}'.format(nc,ndf),nn.Conv2d(nc,ndf,,,,bias=False))
main.add_module('initial-relu-{0}'.format(ndf),nn.LeakyReLU(0.2,inplace=True))
csize,cndf=isize/,ndf for t in range(n_exter_layers): #在这里面特征宽高不变,通道数也不变
main.add_module('extra-layers-{0}-{1}-conv'.format(t,cndf),nn.Conv2d(cndf,cndf,,,,bias=False))
main.add_module('extra-layers-{0}-{1}-batchnorm'.format(t,cndf),nn.BatchNorm2d(cndf))
main.add_module('extra-layers-{0}-{1}-relu'.format(t,cndf),nn.LeakyReLU(0.2,inplace=True)) # 在特征高宽仍大于4时,就添加缩小一倍高宽,通道增加一倍的卷积块
while csize>:
in_feat = cndf out_feat = cndf * main.add_module('pyramid-{0}-{1}-conv'.format(in_feat, out_feat),nn.Conv2d(in_feat, out_feat, , , , bias=False)) main.add_module('pyramid-{0}-batchnorm'.format(out_feat),nn.BatchNorm2d(out_feat)) main.add_module('pyramid-{0}-relu'.format(out_feat),nn.LeakyReLU(0.2, inplace=True)) cndf = cndf * csize = csize / # 最后一层卷积,将4*4变为1*,得到nz = 100的噪声
if add_final_conv: main.add_module('final-{0}-{1}-conv'.format(cndf, ),nn.Conv2d(cndf, nz, , , , bias=False))
self.main=main def forward(self,input):
if self.ngpu>:
output=nn.parallel.data_parallel(self.main,input,range(self.ngpu)) #在多个gpu上运行模型,并行计算
else:
output=self.main(input) return output #如果输入的大小是3××,最后的输出是100××.
pytorch nn.Sequential()动态添加方法的更多相关文章
- ios的runtime为什么可以动态添加方法
一句话概括 每个instance都有一个isa,这个isa,里面含有所有的方法列表,ios提供库函数增加,修改,即实现了动态添加方法
- 使用runtime给类动态添加方法并调用 - class_addMethod
上手开发 iOS 一段时间后,我发现并不能只着眼于完成需求,利用闲暇之余多研究其他的开发技巧,才能在有限时间内提升自己水平.当然,“其他开发技巧”这个命题对于任何一个开发领域都感觉不找边际,而对于我来 ...
- iOS运行时使用(动态添加方法)
1 举例 我们实现一个Person类 然后Person 其实是没得对象方法eat:的 下面调用person的eat方法 程序是会奔溃的 那么需要借助运行时动态的添加方法 Person *p = [[ ...
- 快速上手Runtime(四)之动态添加方法
如果一个类方法非常多,加载类到内存的时候也比较耗费资源,可以使用动态给某个类,添加方法解决.做到优化内存,节省资源的效果. // // Person.m // ResolveInstanceMetho ...
- ios开发runtime学习三:动态添加方法(实际应用少,面试)
#import "ViewController.h" #import "Person.h" /* 1: Runtime(动态添加方法):OC都是懒加载机制,只要 ...
- python 面向对象六 动态添加方法 __slots__限制动态添加方法
一.动态添加属性 >>> class Student(object): pass >>> st = Student() >>> st.name = ...
- 给python类动态添加方法(method)
群里有人问如何做到 def foo(): pass class Bar(object): pass Bar.set_instance_method(foo) b = Bar() b.foo() 这个其 ...
- python 类对象和实例对象动态添加方法
class Person(): def __init__(self, name): self.name = name def print_name(self): print(self.name) p ...
- Runtime 方法替换 和 动态添加实例方法 结合使用
前言: 方法替换,可以替换任意外部类的方法,而动态添加方法只能实现在被添加类创建的对象里,但是将方法替换和动态添加方法结合使用,可以实现,对任意外部类动态添加需要的方法,这个方法可以是类方法也可以是实 ...
随机推荐
- Kotlin星投影与泛型约束详解
星投影(star projection): 继续来学习Kotlin泛型相关的东东,星投影(star projection),这是个啥东东呢?下面先来说一下概念: 1.对于Star<out T&g ...
- linux系统编程之进程(三)
今天继续学习进程相关的东东,继上节最后简单介绍了用exec函数替换进程映像的用法,今天将来深入学习exec及它关联的函数,话不多说,正式进入正题: exec替换进程映象: 对于fork()函数,它 ...
- 牛客82-B:区间的连续段 (ST表,贪心)(WXK牛逼)
题目描述 给你一个长为n的序列a和一个常数k 有m次询问,每次查询一个区间[l,r]内所有数最少分成多少个连续段,使得每段的和都 <= k 如果这一次查询无解,输出"Chtholly& ...
- PHP——获取当前时间精确到毫秒(yyyyMMddHHmmssSSS)
前言 emmmmmm,别说话,我们偷偷偷狗子 格式 | yyyyMMddHHmmssSSS 代码 获取毫秒 //获取当前时间毫秒 function msectime() { list($msec, $ ...
- TCP/IP 协议栈及 OSI 参考模型详解
OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...
- 接口中的JSON报文
原始报文: 请求报文: [ { "appNo" : "", "applicantCredentialCode" : "" ...
- Spark运行架构及作业提交流程
1.yarn-cluster模式: (1)client客户端提交spark Application应用程序到yarn集群. (2)ResourceManager收到了请求后,在集群中选择一个NodeM ...
- Poj 3233 Matrix Power Series(矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...
- Code Chef October Challenge 2019题解
传送门 \(MSV\) 设个阈值搞一搞就行了 //quming #include<bits/stdc++.h> #define R register #define pb emplace_ ...
- 一步HTML5教程学会体系
HTML5是HTML最新的版本,万维网联盟. HTML5是下一代的HTML标准,HTML5是为了在移动设备上支持多媒体. 新特性: 绘画的canvas元素,用于媒介回放的video和audio元素,对 ...