最近再写openpose,它的网络结构是多阶段的网络,所以写网络的时候很想用列表的方式,但是直接使用列表不能将网络中相应的部分放入到cuda中去。
其实这个问题很简单的,使用moduleList就好了。
1 我先是定义了一个函数,用来根据超参数,建立一个基础网络结构
stage = [[3, 3, 3, 1, 1], [7, 7, 7, 7, 7, 1, 1]] branches_cfg = [[[128, 128, 128, 512, 38], [128, 128, 128, 512, 19]], [[128, 128, 128, 128, 128, 128, 38], [128, 128, 128, 128, 128, 128, 19]]] # used for add two branches as well as adapt to certain stage def add_extra(i, branches_cfg, stage): """ only add CNN of brancdes S & L in stage Ti at the end of net :param in_channels:the input channels & out :param stage: size of filter :param branches_cfg: channels of image :return:list of layers """ in_channels = i layers = [] for k in range(len(stage)): padding = stage[k] // 2 conv2d = nn.Conv2d(in_channels, branches_cfg[k], kernel_size=stage[k], padding=padding) layers += [conv2d, nn.ReLU(inplace=True)] in_channels = branches_cfg[k] return layers
2 然后用普通列表装载他们
conf_bra_list = [] paf_bra_list = [] # param for branch network in_channels = 128 for i in range(all_stage): if i > 0: branches = branches_cfg[1] conv_sz = stage[1] else: branches = branches_cfg[0] conv_sz = stage[0] conf_bra_list.append(nn.Sequential(*add_extra(in_channels, branches[0], conv_sz))) paf_bra_list.append(nn.Sequential(*add_extra(in_channels, branches[1], conv_sz))) in_channels = 185
3 再然后,使用moduleList方法,把普通列表专成pytorch下的模块
# to list self.conf_bra = nn.ModuleList(conf_bra_list) self.paf_bra = nn.ModuleList(paf_bra_list)
4 最后,调用就好了
out_0 = x # the base transform for k in range(len(self.vgg)): out_0 = self.vgg[k](out_0) # local name space name = locals() confs = [] pafs = [] outs = [] length = len(self.conf_bra) for i in range(length): name['conf_%s' % (i + 1)] = self.conf_bra[i](name['out_%s' % i]) name['paf_%s' % (i + 1)] = self.paf_bra[i](name['out_%s' % i]) name['out_%s' % (i + 1)] = torch.cat([name['conf_%s' % (i + 1)], name['paf_%s' % (i + 1)], out_0], 1) confs.append('conf_%s' % (i + 1)) pafs.append('paf_%s' % (i + 1)) outs.append('out_%s' % (i + 1))
5 顺便装了一下,使用了python局部变量命名空间,name = locals(),其实完全使用普通列表保存变量就好了,高兴就好。
以上这篇对pytorch网络层结构的数组化详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍pytorch打印网络结构的实例,包括了pytorch打印网络结构的实例的使用技巧和注意事项,需要的朋友参考一下 最简单的方法当然可以直接print(net),但是这样网络比较复杂的时候效果不太好,看着比较乱;以前使用caffe的时候有一个网站可以在线生成网络框图,tensorflow可以用tensor board,keras中可以用model.summary()、或者plot_mo
本文向大家介绍对Pytorch神经网络初始化kaiming分布详解,包括了对Pytorch神经网络初始化kaiming分布详解的使用技巧和注意事项,需要的朋友参考一下 函数的增益值 提供了对非线性函数增益值的计算。 增益值gain是一个比例值,来调控输入数量级和输出数量级之间的关系。 xavier分布 xavier分布解析:https://prateekvjoshi.com/2016/03/29/
原文:Structured arrays 介绍 结构化数组其实就是ndarrays,其数据类型是由组成一系列命名字段的简单数据类型组成的。 例如: >>> x = np.array([('Rex', 9, 81.0), ('Fido', 3, 27.0)], ... dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4
本文向大家介绍pytorch 更改预训练模型网络结构的方法,包括了pytorch 更改预训练模型网络结构的方法的使用技巧和注意事项,需要的朋友参考一下 一个继承nn.module的model它包含一个叫做children()的函数,这个函数可以用来提取出model每一层的网络结构,在此基础上进行修改即可,修改方法如下(去除后两层): 那么,接下来就可以构建我们的网络了: 最后,构建一个对象,并加载
问题内容: 我在 .NET for WinRT(C#)中 ,我想将JSON字符串反序列化为,然后将字典值稍后转换为实际类型。JSON字符串可以包含对象层次结构,我也希望在其中包含子对象。 这是应该能够处理的示例JSON: 我尝试使用 DataContractJsonSerializer 这样做: 实际上,这对于第一个级别是可行的,但是 “父母” 只是一个不能强制转换为的对象: 然后,我尝试使用 J
问题内容: 我想从pytorch模型中形象化。我该怎么做?我尝试使用,但出现错误: 问题答案: 需要一个变量(即带有的张量),而不是模型本身。 尝试: