美文网首页
MXNet-获取中间层输出及相应的梯度

MXNet-获取中间层输出及相应的梯度

作者: CodePlayHu | 来源:发表于2018-06-12 10:52 被阅读0次

最近为了得到CNN中每一层激活值对应的梯度(自动计算的梯度只有每一层对应的权值和偏置,MX又没有pytorch那样的backward_hook那样的神器),考虑用autograd.中的一些函数来实现.

  • autograd.attach_grad()只能对最后一个attach的变量进行求梯度(不懂怎么用,目前没见过对多个变量用attach_grad)
    想到两种方法:
    1. register_forward_hook,虽然mx有一个这样的函数,确没有任何官方用例,google: mxnet register_forward_hook出来的全是pytorch的问答,真的气。另外,gluon.nn.Conv2D还没有register_forward_hook这个接口。这条路是死了
    2. 参考 这个,自己写一个conv层。但是这里又碰到另一个坑,不知道怎么用另一模型中的参数初始化新的模型。后来用了以下代码来初始化:
    @mx.init.register
    class myInitializer(mx.init.Initializer):
        def __init__(self, weight,bias):
            super(myInitializer,self).__init__()
            self.weight = weight[0]
            self.bias = bias[0]
        def _init_weight(self, _, arr):
            arr[:] = self.weight
        def _init_bias(self, _, arr):
            arr[:] = self.bias
    for ii, layer in enumerate(model.features):
        if isinstance(layer, nn.Conv2D):
            fsize = layer.weight.shape[2]
            new_layer = gradcam.Conv2D(layer._channels,(fsize,fsize))
            new_layer.initialize(init=myInitializer(layer.weight._data,
                                                          layer.bias._data), ctx=ctx)
            self.features.add(new_layer)
        elif ii<31: self.features.add(layer) 
    
    • 然后在需要获取梯度的地方用gradcam中的get_conv_out_grad方法就行了,不过这个方法一次只能获取一个梯度
    • 需要注意的是,在官方文档上有说明如果在autograd.record(train_mode=False),那么backward(train_mode=False),否则梯度将不被定义
    1. 用自定义identity operation

相关文章

  • MXNet-获取中间层输出及相应的梯度

    最近为了得到CNN中每一层激活值对应的梯度(自动计算的梯度只有每一层对应的权值和偏置,MX又没有pytorch那样...

  • 获取中间层的输出

    ref 要获取中间层的输出,最好的办法是新建一个模型 或者使用keras function来实现返回一个特定的输出...

  • Keras 获取中间层输出

    一种简单的方法是创建一个新的Model,使得它的输出是你想要的那个输出 也可以建立一个Keras的函数来达到这一目...

  • 算法学习笔记——神经网络

    关键词:输入层、输出层、中间层、单元\节点、感知器、BP神经网络、激活函数、深度学习、梯度下降、损失函数、反向传播...

  • 学习利用PyTorch做自然语言处理(3)-自动梯度

    本文介绍了有关梯度的定义及用PyTorch自动求梯度的方法。 1.梯度的定义 假设函数的输入是一个维向量,输出是标...

  • PyTorch 获取模型中间层方法

    获取模型中间层 通过index获取 通过特征名获取

  • 网络学习系列(四)ResNet

    要解决的问题: 更深的网络难以训练。对于深层的网络可能会出现的梯度消失与梯度爆炸的问题,但是随着初始标准化与中间层...

  • shell时间获取及延时

    时间获取及延时 时间获取及延时 1 获取时间1.1 获取时间1.2 打印纪元时1.3 格式化输出的时间1.4 测量...

  • 深度学习讲稿(23)

    第5章:通用梯度下降 本章主要内容: 多输入的梯度下降学习 冻结权重的意义和用途 多输出梯度下降学习 多输入多输出...

  • 吴恩达第二次作业代码

    输出 逻辑回归模型的梯度下降 输出 正则化逻辑回归 输出

网友评论

      本文标题:MXNet-获取中间层输出及相应的梯度

      本文链接:https://www.haomeiwen.com/subject/kgaasftx.html