pytorch model.apply lambda setattr

我在看SLIMMABLE NEURAL NETWORKS模型代码的时候,被他的这句代码给绕懵了

model.apply(lambda m: setattr(m, 'width_mult', width_mult))

他同时包含了apply、lambda、setattr几个我不懂的点,所以我费了很多时间才搞懂了这句话的意思。他其实等价于下面这段代码

def fn(m):
    setattr(m, 'width_mult', width_mult) 
model.apply(fn)

1. lambda

简单来说,lambda是一个匿名函数,它的一个最简单的例子是:

lambda x:x+1(1)
#等价于
def g(x):
    return x+1

所以

lambda m: setattr(m, 'width_mult', width_mult)
#等价于
def fn(m):
    setattr(m, 'width_mult', width_mult) 

2. setattr

setattr(object, name, value) 作用是给对象object的属性name赋值value

3. apply

model.apply方法会逐个遍历model的子模块

 

def fn(m):
    setattr(m, 'width_mult', width_mult) 
model.apply(fn)

所以综合起来,上面的代码的意思就是,逐个遍历model的子模块,给子模块中的变量width_mult赋值。(部分子模块有这个变量,部分没有)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值