首页 Paddle框架 帖子详情
Paddle如何统计自定义的网络的训练参数总量?
收藏
快速回复
Paddle框架 问答深度学习 1796 14
Paddle如何统计自定义的网络的训练参数总量?
收藏
快速回复
Paddle框架 问答深度学习 1796 14

自己定义了一个网络,如何利用Paddle统计模型的参数总量?

0
收藏
回复
全部评论(14)
时间顺序
thinc
#2 回复于2020-05

这个不清楚,可以自己算一下,应该也不太困难

0
回复
a
a stan
#3 回复于2020-05

我也是刚用pp,不知道怎么弄。不过你要知道模型大小(一般是多少M/G)的话,除以4就是的参数总量咯(float32)。

某一层的参数量也好算,比如标准卷积核大小为K_w * K_h,  且input channels为C_in,   output channels为C_out,  参数量就是

K_w * K_h * C_in * C_out,全连接的就是 C_in * C_out,可分离(分开去算)和空洞(参数不变,只是增大了感受野)也是类似的

0
回复
s
sbl1996
#4 回复于2020-05
import numpy as np

def calculate_params(model):
    n_train = 0
    n_non_train = 0
    for p in model.parameters():
        if p.trainable:
            n_train += np.prod(p.shape)
        else:
            n_non_train += np.prod(p.shape)
    return n_train + n_non_train, n_train, n_non_train
1
回复
没入门的研究生
#5 回复于2020-05

可以在每一层求一下kernel和bias的shape,然后把里面的数乘一下就是大概的值。

0
回复
AIStudio810258
#6 回复于2020-06
a stan #3
我也是刚用pp,不知道怎么弄。不过你要知道模型大小(一般是多少M/G)的话,除以4就是的参数总量咯(float32)。 某一层的参数量也好算,比如标准卷积核大小为K_w * K_h,  且input channels为C_in,   output channels为C_out,  参数量就是 K_w * K_h * C_in * C_out,全连接的就是 C_in * C_out,可分离(分开去算)和空洞(参数不变,只是增大了感受野)也是类似的
展开

还能用模型文件大小估算,这个方法不错。

0
回复
AIStudio810258
#7 回复于2020-06
还能用模型文件大小估算,这个方法不错。

如果模型优化了的话,实际系统开销也是优化后的开销。

0
回复
AIStudio810258
#8 回复于2020-06

我有印象,Paddle估算模型开销的方法是结合了理论上网络规模计算和实际硬件测试结果的。

0
回复
thinc
#9 回复于2020-06
我有印象,Paddle估算模型开销的方法是结合了理论上网络规模计算和实际硬件测试结果的。

paddle对资源上需求没有很大的,如果跟其他框架比起来的话

0
回复
AIStudio810258
#10 回复于2020-06
thinc #9
paddle对资源上需求没有很大的,如果跟其他框架比起来的话

恩,Paddle是用C++实现的。效率高

0
回复
没入门的研究生
#11 回复于2020-06
thinc #9
paddle对资源上需求没有很大的,如果跟其他框架比起来的话

用paddle和tensorflow同时实现了一下fast text,tensorflow 慢到天际。。。训练前的预分配资源最慢。这一点paddle的优势挺大的。

0
回复
thinc
#12 回复于2020-06
用paddle和tensorflow同时实现了一下fast text,tensorflow 慢到天际。。。训练前的预分配资源最慢。这一点paddle的优势挺大的。

2.0动态图还能一键改静态图编译,你说刺激不

0
回复
没入门的研究生
#13 回复于2020-06
thinc #12
2.0动态图还能一键改静态图编译,你说刺激不

刺激刺激,人性化啊!

0
回复
东门洛风
#14 回复于2020-06
a stan #3
我也是刚用pp,不知道怎么弄。不过你要知道模型大小(一般是多少M/G)的话,除以4就是的参数总量咯(float32)。 某一层的参数量也好算,比如标准卷积核大小为K_w * K_h,  且input channels为C_in,   output channels为C_out,  参数量就是 K_w * K_h * C_in * C_out,全连接的就是 C_in * C_out,可分离(分开去算)和空洞(参数不变,只是增大了感受野)也是类似的
展开

多谢,我试试

0
回复
代码生成器
#15 回复于2020-11

可以参考这个

https://zhuanlan.zhihu.com/p/250291825

1
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户