精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创文章,禁止转载和任何形式的非法内容使用,违者必究
Python是动态语言,怎么和低级的钩子有关系了呢?
现在,对应的钩子将为torch.nn.utils.prune.PruningContainer类型,并将存储应用于weight参数的剪裁历史。
for hook in module._forward_pre_hooks.values():
if hook._tensor_name == "weight": # select out the correct hook
break
print(module._forward_pre_hooks)
出:
OrderedDict([(0, <torch.nn.utils.prune.RandomUnstructured object at 0x7fda78275e48>), (1, <torch.nn.utils.prune.L1Unstructured object at 0x7fda80bbe470>)])
上图是Pytorch里帮助文档的内容
0x地址是函数地址
函数是在代码段里,要占用的内存,要占用内存就有地址
为了支持地址,就有了函数指针
Void (*myfunc)(void),没有参数且没有返回值的函数指针(*)是标志
在另外的时间点,按约定调用
函数指针和C#委托都是回调的形式
常见的用于做坏事的windows键盘钩子和鼠标钩子
钩子也是一种回调
把钩子函数嵌入到底层执行过程里,底层执行到了,就会调用钩子函数
Pytorch里说的钩子,就是在配置参数时,回调的函数,指定了这函数,则配置参数过程执行时会按这个函数的要求来做。 原文的意思是对weight参数在传递时,进行变形,weight参数在神经网络里比较重要,是神经单元的入参。
Python有难度,大家要重视。
Python在人工智能方面比较火,有兴趣学Python和人工智能欢迎联系我们。