Pytorch中apply函数作用

pytorch中的model.apply(fn)会递归地将函数fn应用到父模块的每个子模块submodule,也包括model这个父模块自身。经常用于初始化init_weights的操作。如下apply递归调用_init_vit_weights,初始化ViT模型的子模块。

		from torch import nn
        #Weight init,初始化pos_embed
        # trunc_normal_利用正态分布生成一个点,点在[a, b]区间之内
        nn.init.trunc_normal_(self.pos_embed, std=0.02)
        # Weight init,初始化cls_token
        nn.init.trunc_normal_(self.cls_token, std=0.02)
        # 调用vit初始函数
        self.apply(_init_vit_weights)


		def _init_vit_weights(m):
		    """
		    ViT weight initialization
		    :param m: module
		    """
		    if isinstance(m, nn.Linear):
		        nn.init.trunc_normal_(m.weight, std=.01)
		        if m.bias is not None:
		            nn.init.zeros_(m.bias)
		    elif isinstance(m, nn.Conv2d):
		        nn.init.kaiming_normal_(m.weight, mode="fan_out")
		        if m.bias is not None:
		            nn.init.zeros_(m.bias)
		    elif isinstance(m, nn.LayerNorm):
		        nn.init.zeros_(m.bias)
		        nn.init.ones_(m.weight)
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuezero_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值