pytorch 求网络模型参数实例
用pytorch训练一个神经网络时,我们通常会很关心模型的参数总量。下面分别介绍来两种方法求模型参数
一.求得每一层的模型参数,然后自然的可以计算出总的参数。
1.先初始化一个网络模型model
比如我这里是model=cliqueNet(里面是些初始化的参数)
2.调用model的Parameters类获取参数列表
一个典型的操作就是将参数列表传入优化器里。如下
optimizer=optim.Adam(model.parameters(),lr=opt.lr)
言归正传,继续回到参数里面,参数在网络里面就是variable,下面分别求每层的尺寸大小和个数。
函数get_number_of_param()里面的参数就是刚才第一步初始化的model
defget_number_of_param(model): """getthenumberofparamforeveryelement""" count=0 forparaminmodel.parameters(): param_size=param.size() count_of_one_param=1 fordisinparam_size: count_of_one_param*=dis print(param.size(),count_of_one_param) count+=count_of_one_param print(count) print('totalnumberofthemodelis%d'%count)
再来看看结果:
torch.Size([64,1,3,3])576 576 torch.Size([64])64 640 torch.Size([6,36,64,3,3])124416 125056 torch.Size([30,36,36,3,3])349920 474976 torch.Size([12,36])432 475408 torch.Size([6,36,216,3,3])419904 895312 torch.Size([30,36,36,3,3])349920 1245232 torch.Size([12,36])432 1245664 torch.Size([6,36,216,3,3])419904 1665568 torch.Size([30,36,36,3,3])349920 2015488 torch.Size([12,36])432 2015920 torch.Size([6,36,216,3,3])419904 2435824 torch.Size([30,36,36,3,3])349920 2785744 torch.Size([12,36])432 2786176 torch.Size([216,216,1,1])46656 2832832 torch.Size([216])216 2833048 torch.Size([108,216])23328 2856376 torch.Size([108])108 2856484 torch.Size([216,108])23328 2879812 torch.Size([216])216 2880028 torch.Size([216,216,1,1])46656 2926684 torch.Size([216])216 2926900 torch.Size([108,216])23328 2950228 torch.Size([108])108 2950336 torch.Size([216,108])23328 2973664 torch.Size([216])216 2973880 torch.Size([216,216,1,1])46656 3020536 torch.Size([216])216 3020752 torch.Size([108,216])23328 3044080 torch.Size([108])108 3044188 torch.Size([216,108])23328 3067516 torch.Size([216])216 3067732 torch.Size([140,280,1,1])39200 3106932 torch.Size([140])140 3107072 torch.Size([216,432,1,1])93312 3200384 torch.Size([216])216 3200600 torch.Size([216,432,1,1])93312 3293912 torch.Size([216])216 3294128 torch.Size([9,572,3,3])46332 3340460 torch.Size([9])9 3340469 totalnumberofthemodelis3340469
可以通过计算验证一下,发现参数与网络是一致的。
二:一行代码就可以搞定参数总个数问题
2.1先来看看torch.tensor.numel()这个函数的功能就是求tensor中的元素个数,在网络里面每层参数就是多维数组组成的tensor。
实际上就是求多维数组的元素个数。看代码。
print('cliqueNetparameters:',sum(param.numel()forparaminmodel.parameters()))
当然上面代码中的model还是上面初始化的网络模型。
看看两种的计算结果
torch.Size([64,1,3,3])576 576 torch.Size([64])64 640 torch.Size([6,36,64,3,3])124416 125056 torch.Size([30,36,36,3,3])349920 474976 torch.Size([12,36])432 475408 torch.Size([6,36,216,3,3])419904 895312 torch.Size([30,36,36,3,3])349920 1245232 torch.Size([12,36])432 1245664 torch.Size([6,36,216,3,3])419904 1665568 torch.Size([30,36,36,3,3])349920 2015488 torch.Size([12,36])432 2015920 torch.Size([6,36,216,3,3])419904 2435824 torch.Size([30,36,36,3,3])349920 2785744 torch.Size([12,36])432 2786176 torch.Size([216,216,1,1])46656 2832832 torch.Size([216])216 2833048 torch.Size([108,216])23328 2856376 torch.Size([108])108 2856484 torch.Size([216,108])23328 2879812 torch.Size([216])216 2880028 torch.Size([216,216,1,1])46656 2926684 torch.Size([216])216 2926900 torch.Size([108,216])23328 2950228 torch.Size([108])108 2950336 torch.Size([216,108])23328 2973664 torch.Size([216])216 2973880 torch.Size([216,216,1,1])46656 3020536 torch.Size([216])216 3020752 torch.Size([108,216])23328 3044080 torch.Size([108])108 3044188 torch.Size([216,108])23328 3067516 torch.Size([216])216 3067732 torch.Size([140,280,1,1])39200 3106932 torch.Size([140])140 3107072 torch.Size([216,432,1,1])93312 3200384 torch.Size([216])216 3200600 torch.Size([216,432,1,1])93312 3293912 torch.Size([216])216 3294128 torch.Size([9,572,3,3])46332 3340460 torch.Size([9])9 3340469 totalnumberofthemodelis3340469 cliqueNetparameters:3340469
可以看出两种计算出来的是一模一样的。
以上这篇pytorch求网络模型参数实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。