深度学习(4)Pytorch API

作者:aiqiu_gogogo
来源:CSDN
原文:https://blog.csdn.net/aiqiu_gogogo/article/details/78645887

torch.nn.Module
打印所有子模块:

for sub_module in model.children():
    print(sub_module)

按照名字打印子模块:

for name, module in model.named_children():
    if name in ['conv4', 'conv5']:
        print(module)

打印所有模块:

for module in model.modules():
    print(module)

按照名字打印所有模块:

for name, module in model.named_modules():
    if name in ['conv4', 'conv5']:
        print(module)

打印模型所有参数:

for param in model.parameters():
    print(type(param.data), param.size())

打印模型所有参数名字:

model.state_dict().keys()
model.cpu():将模型复制到CPU上;
model.cuda():将模型复制到GPU上;
model.double():将模型数据类型转换为double;
model.eval():将模型设置成test模式,仅仅当模型中有Dropout和BatchNorm是才会有影响;
model.float():将模型数据类型转换为float;
model.half():将模型数据类型转换为half;
model.load_state_dict(state_dict):用来加载模型参数,将state_dict中的parameters和buffers复制到此module和它的后代中,state_dict中的key必须和model.state_dict()返回的key一致;
model.state_dict():返回一个字典,保存着module的所有状态;
model.train():将模型设置为训练模式;
model.zero_grad():将模型中的所有模型参数的梯度设置为0;
torch.nn.Sequential时序模型例子

model = nn.Sequential(
          nn.Conv2d(1,20,5),
          nn.ReLU(),
          nn.Conv2d(20,64,5),
          nn.ReLU()
        )
##################or##################
model = nn.Sequential(OrderedDict([
          ('conv1', nn.Conv2d(1,20,5)),
          ('relu1', nn.ReLU()),
          ('conv2', nn.Conv2d(20,64,5)),
          ('relu2', nn.ReLU())
        ]))

卷积层

一维卷积:

torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
输入输出尺寸关系:Lout=floor((Lin+2padding−dilation(kernerlSize−1)−1)/stride+1)Lout=floor((Lin+2padding−dilation(kernerlSize−1)−1)/stride+1)

二维卷积:

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
输入输出尺寸关系:Hout=floor((Hin+2padding[0]−dilation0−1)/stride[0]+1)Hout=floor((Hin+2padding[0]−dilation0−1)/stride[0]+1) Wout=floor((Win+2padding[1]−dilation1−1)/stride[1]+1)Wout=floor((Win+2padding[1]−dilation1−1)/stride[1]+1)

三维卷积:

torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
输入输出尺寸关系:Dout=floor((Din+2padding[0]−dilation0−1)/stride[0]+1)Dout=floor((Din+2padding[0]−dilation0−1)/stride[0]+1) Hout=floor((Hin+2padding[1]−dilation2−1)/stride[1]+1)Hout=floor((Hin+2padding[1]−dilation2−1)/stride[1]+1) Wout=floor((Win+2padding[2]−dilation2−1)/stride[2]+1)Wout=floor((Win+2padding[2]−dilation2−1)/stride[2]+1)

一维反卷积:

torch.nn.ConvTranspose1d(in_channels,out_channels,kernel_size,stride=1,padding=0,output_padding=0,groups=1,bias=True)
输入输出尺寸关系:
Lout=(Lin−1)stride−2padding+kernelSize+outputPaddingLout=(Lin−1)stride−2padding+kernelSize+outputPadding

二维反卷积:

torch.nn.ConvTranspose2d(in_channels,out_channels,kernel_size,stride=1,padding=0,output_padding=0,groups=1,bias=True)
输入输出尺寸关系:
Hout=(Hin−1)stride[0]−2padding[0]+kernelSize[0]+outputPadding[0]Hout=(Hin−1)stride[0]−2padding[0]+kernelSize[0]+outputPadding[0] Wout=(Win−1)stride[1]−2padding[1]+kernelSize[1]+outputPadding[1]Wout=(Win−1)stride[1]−2padding[1]+kernelSize[1]+outputPadding[1]

三维反卷积:

torch.nn.ConvTranspose3d(in_channels,out_channels,kernel_size,stride=1,padding=0,output_padding=0,groups=1,bias=True)
输入输出尺寸关系:
Dout=(Din−1)stride[0]−2padding[0]+kernelSize[0]+outputPadding[0]Dout=(Din−1)stride[0]−2padding[0]+kernelSize[0]+outputPadding[0] Hout=(Hin−1)stride[1]−2padding[1]+kernelSize[1]+outputPadding[0]Hout=(Hin−1)stride[1]−2padding[1]+kernelSize[1]+outputPadding[0] Wout=(Win−1)stride[2]−2padding[2]+kernelSize[2]+outputPadding[2]Wout=(Win−1)stride[2]−2padding[2]+kernelSize[2]+outputPadding[2]

池化层

一维池化:

torch.nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
输入输出尺寸关系:
Lout=floor((Lin+2padding−dilation(kernelSize−1)−1)/stride+1Lout=floor((Lin+2padding−dilation(kernelSize−1)−1)/stride+1

二维池化:

torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
输入输出尺寸关系:
Hout=floor((Hin+2padding[0]−dilation0−1)/stride[0]+1Hout=floor((Hin+2padding[0]−dilation0−1)/stride[0]+1 Wout=floor((Win+2padding[1]−dilation1−1)/stride[1]+1Wout=floor((Win+2padding[1]−dilation1−1)/stride[1]+1

三维池化:

torch.nn.MaxPool3d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
输入输出尺寸关系:
Dout=floor((Din+2padding[0]−dilation0−1)/stride[0]+1)Dout=floor((Din+2padding[0]−dilation0−1)/stride[0]+1) Hout=floor((Hin+2padding[1]−dilation1−1)/stride[1]+1)Hout=floor((Hin+2padding[1]−dilation1−1)/stride[1]+1) Wout=floor((Win+2padding[2]−dilation2−1)/stride[2]+1)Wout=floor((Win+2padding[2]−dilation2−1)/stride[2]+1)

一维反池化:

torch.nn.MaxUnpool1d(kernel_size, stride=None, padding=0)
输入输出尺寸关系:
Hout=(Hin−1)stride[0]−2padding[0]+kernelSize[0]Hout=(Hin−1)stride[0]−2padding[0]+kernelSize[0]

二维反池化:

torch.nn.MaxUnpool2d(kernel_size, stride=None, padding=0)
输入输出尺寸关系:
Hout=(Hin−1)stride[0]−2padding[0]+kernelSize[0]Hout=(Hin−1)stride[0]−2padding[0]+kernelSize[0] Wout=(Win−1)stride[1]−2padding[1]+kernelSize[1]Wout=(Win−1)stride[1]−2padding[1]+kernelSize[1]

三维反池化:

torch.nn.MaxUnpool3d(kernel_size, stride=None, padding=0)
输入输出尺寸关系:
Dout=(Din−1)stride[0]−2padding[0]+kernelSize[0]Dout=(Din−1)stride[0]−2padding[0]+kernelSize[0] Hout=(Hin−1)stride[1]−2padding[0]+kernelSize[1]Hout=(Hin−1)stride[1]−2padding[0]+kernelSize[1] Wout=(Win−1)stride[2]−2padding[2]+kernelSize[2]Wout=(Win−1)stride[2]−2padding[2]+kernelSize[2]
其他各种池化操作见:https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn/#containers
非线性激活层
torch.nn.ReLU(inplace=False):ReLU(x)=max(0,x)ReLU(x)=max(0,x);
torch.nn.ReLU6(inplace=False):ReLU6(x)=min(max(0,x),6)ReLU6(x)=min(max(0,x),6);
torch.nn.ELU(alpha=1.0, inplace=False):f(x)=max(0,x)+min(0,alpha∗(ex−1))f(x)=max(0,x)+min(0,alpha∗(ex−1));
torch.nn.PReLU(num_parameters=1, init=0.25):f(x)=max(0,x)+negativeslope∗min(0,x)f(x)=max(0,x)+negativeslope∗min(0,x);
torch.nn.Threshold(threshold, value, inplace=False):relu的一般情况;
torch.nn.Hardtanh(min_value=-1, max_value=1, inplace=False);
torch.nn.Sigmoid();
orch.nn.Tanh();
torch.nn.LogSigmoid();
torch.nn.Softplus(beta=1, threshold=20);
torch.nn.Softshrink(lambd=0.5);
torch.nn.Softsign();
torch.nn.Softshrink(lambd=0.5);
torch.nn.Softmin();
torch.nn.Softmax();
torch.nn.LogSoftmax();

BN层

一维BN层:torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True);

二维BN层:torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True);

三维BN层:torch.nn.BatchNorm3d(num_features, eps=1e-05, momentum=0.1, affine=True);

插值层

二维最近邻插值层:torch.nn.UpsamplingNearest2d(size=None, scale_factor=None);

二维双线性插值层:torch.nn.UpsamplingBilinear2d(size=None, scale_factor=None);

其他重要层

全链接层:torch.nn.Linear(in_features, out_features, bias=True);

Dropout层:

torch.nn.Dropout(p=0.5, inplace=False)
torch.nn.Dropout2d(p=0.5, inplace=False)
torch.nn.Dropout3d(p=0.5, inplace=False)
范数距离层:torch.nn.PairwiseDistance(p=2, eps=1e-06);
L1损失层:torch.nn.L1Loss(size_average=True);
L2损失层:torch.nn.MSELoss(size_average=True);
交叉熵损失层:torch.nn.CrossEntropyLoss(weight=None, size_average=True);
损失层用法及大量其它损失层见中文文档;
多GPU使用
关键函数:torch.nn.DataParallel(module, device_ids=None, output_device=None, dim=0)
解释:此容器通过将mini-batch划分到不同的设备上来实现给定module的并行。在forward过程中,module会在每个设备上都复制一遍,每个副本都会处理部分输入。在backward过程中,副本上的梯度会累加到原始module上,具体用法见多GPU实例博客;

torch.nn.functional
其中有大量功能函数,同torch.nn的函数功能相同,用法不同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343