https://blog.csdn.net/disen10/article/details/79376631

固定权重:https://www.cnblogs.com/chenyliang/p/6780019.html

固定权重:https://discuss.gluon.ai/t/topic/1164

查看权重

在训练过程中,有时候我们为了debug而需要查看中间某一步的权重信息,在mxnet中,我们可以很方便的调用get_params()方法来得到权重信息。

  1.  
    '''
  2.  
    查看权重示例代码
  3.  
    转载时注明地址:http://blog.csdn.net/u010414386?viewmode=contents
  4.  
    '''
  5.  
    import mxnet as mx
  6.  
    sym, arg_params, aux_params = mx.model.load_checkpoint('resnet-50',0)#载入模型
  7.  
    mod = mx.mod.Module(symbol=sym,context=mx.gpu()) #创建Module
  8.  
    mod.bind(for_training=False,data_shapes=[('data',(1,3,224,224))]) #绑定,此代码为预测代码,所以training参数设为False
  9.  
    mod.set_params(arg_params,aux_params)
  10.  
    import numpy as np
  11.  
    import cv2
  12.  
    def get_image(filename):
  13.  
    img = cv2.imread(filename)
  14.  
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
  15.  
    img = cv2.resize(img,(224,224))
  16.  
    img = np.swapaxes(img,0,2)
  17.  
    img = np.swapaxes(img,1,2)
  18.  
    img = img[np.newaxis,:]
  19.  
    return img
  20.  
    from collections import namedtuple
  21.  
    Batch = namedtuple('Batch',['data'])
  22.  
    img = get_image('val_1000/0.jpg') #获取图片
  23.  
    mod.forward(Batch([mx.nd.array(img)])) #预测结果
  24.  
    ################################################
  25.  
    #debug模式下,获取权重信息
  26.  
    keys = mod.get_params()[0].keys() # 列出所有权重名称
  27.  
    conv_w = mod.get_params()[0]['conv0_weight'] #获取想要查看的权重信息,如conv_weight
  28.  
    print conv_w.asnumpy() #查看具体数值
  29.  
    ################################################
  30.  
    prob = mod.get_outputs()[0].asnumpy()
  31.  
    y = np.argsort(np.squeeze(prob))[::-1]
  32.  
    print('truth label %d; top-1 predict label %d' % (val_label[0], y[0]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

查看中间输出结果

由于mxnet的网络由symbol组成,而symbol又属于符号式编程,所以我们不能像上面查看权重一样直接查看,我们需要把我们想看的输出结果保存下来。

  1.  
    '''
  2.  
    方法一
  3.  
    查看中间结果代码
  4.  
    转载时注明地址:http://blog.csdn.net/u010414386?viewmode=contents
  5.  
    '''
  6.  
    import mxnet as mx
  7.  
    net = mx.symbol.Variable('data')
  8.  
    fc1 = mx.symbol.FullyConnected(data=net, name='fc1', num_hidden=128)
  9.  
    net = mx.symbol.Activation(data=fc1, name='relu1', act_type="relu")
  10.  
    net = mx.symbol.FullyConnected(data=net, name='fc2', num_hidden=64)
  11.  
    out = mx.symbol.SoftmaxOutput(data=net, name='softmax')
  12.  
    # 通过把两个输出组成一个group来得到自己需要查看的中间层输出结果
  13.  
    group = mx.symbol.Group([fc1, out])
  14.  
    print group.list_outputs()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  1.  
    '''
  2.  
    方法二
  3.  
    有时候我们使用别人的模型,所以无法像方法一一样在定义模型的时候就确定需要查看的中间层输出结果,
  4.  
    这时候我们使用get_internals()方法来查找自己需要查看的中间层
  5.  
    转载时注明地址:http://blog.csdn.net/u010414386?viewmode=contents
  6.  
    '''
  7.  
    import mxnet as mx
  8.  
    sym, arg_params, aux_params = mx.model.load_checkpoint('resnet-50',0)#载入模型
  9.  
    ########################################################################
  10.  
    args = sym.get_internals().list_outputs() #获得所有中间输出
  11.  
    internals = model.symbol.get_internals()
  12.  
    fc1 = internals['fc1_output']
  13.  
    conv = internals['stage4_unit3_conv1_output']
  14.  
    group = mx.symbol.Group([fc1, sym, conv]) #把需要输出的结果按group方式组合起来,这样就可以得到中间层的输出
  15.  
    #########################################################################
  16.  
    mod = mx.mod.Module(symbol=group,context=mx.gpu()) #创建Module
  17.  
    mod.bind(for_training=False,data_shapes=[('data',(1,3,224,224))]) #绑定,此代码为预测代码,所以training参数设为False
  18.  
    mod.set_params(arg_params,aux_params)
  19.  
    import numpy as np
  20.  
    import cv2
  21.  
    def get_image(filename):
  22.  
    img = cv2.imread(filename)
  23.  
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
  24.  
    img = cv2.resize(img,(224,224))
  25.  
    img = np.swapaxes(img,0,2)
  26.  
    img = np.swapaxes(img,1,2)
  27.  
    img = img[np.newaxis,:]
  28.  
    return img
  29.  
    from collections import namedtuple
  30.  
    Batch = namedtuple('Batch',['data'])
  31.  
    img = get_image('val_1000/0.jpg') #获取图片
  32.  
    mod.forward(Batch([mx.nd.array(img)])) #预测结果
  33.  
    prob = mod.get_outputs()[0].asnumpy()
  34.  
    y = np.argsort(np.squeeze(prob))[::-1]
  35.  
    print('truth label %d; top-1 predict label %d' % (val_label[0], y[0]))

mxnet下如何查看中间结果的更多相关文章

  1. Linux下如何查看版本信息

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然.   1.# uname -a   (Linux查看版本当前操作系统内核信息)   L ...

  2. Linux下怎么查看当前系统的版本

    Linux下怎么查看当前系统的版本:   uname -r 功能说明:uname用来获取电脑和操作系统的相关信息. 语 法:uname [-amnrsvpio][--help][--version] ...

  3. 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等

    一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...

  4. 在linux下,查看一个运行中的程序, 占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...

  5. linux下如何查看mysql、apache是否安装,并卸载

    --linux下如何查看mysql.apache是否安装,并卸载? http://blog.163.com/dengxiuhua126@126/blog/static/1186077720137311 ...

  6. Linux 下实时查看日志

    Linux 下实时查看日志 cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /v ...

  7. Linux下如何查看tomcat是否安装、启动、文件路径、进程ID

    Linux下如何查看tomcat是否安装.启动.文件路径.进程ID 在Linux系统下,Tomcat使用命令的操作! 检测是否有安装了Tomcat: rpm -qa|grep tomcat 查看Tom ...

  8. Linux下内存查看命令

    在Linux下面,我们常用top命令来查看系统进程,top也能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. Linux下内存查看命令free详解: 在Linux下查看内存我们 ...

  9. Linux之Ubuntu下如何查看已安装的软件/库文件【摘抄】

    本文属于实用性质,且属于摘抄别处,出自:[Ubuntu 下如何查看已安装的软件](http://blog.csdn.net/m1205979825/article/details/40855583) ...

随机推荐

  1. vuex 子组件传值

    以下是基础的使用方法,详细且深入使用方法详细见博客:https://segmentfault.com/a/1190000015782272 Vuex官网地址:https://vuex.vuejs.or ...

  2. Goland的使用

    一.安装Goland 一.Goland简介 Goland是由JetBrains公司旨在为go开发者提供的一个符合人体工程学的新的商业IDE.这个IDE整合了IntelliJ平台的有关go语言的编码辅助 ...

  3. C语言strcasecmp()函数:判断字符串是否相等(忽略大小写)

    头文件:#include <string.h> 定义函数:int strcasecmp (const char *s1, const char *s2); 函数说明:strcasecmp( ...

  4. Node.js学习看这里:基础、进阶、文章

    Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...

  5. 通过官方API结合源码,如何分析程序流程

    通过官方API结合源码,如何分析程序流程通过官方API找到我们关注的API的某个方法,然后把整个流程执行起来,然后在idea中,把我们关注的方法打上断点,然后通过Step Out,从内向外一层一层分析 ...

  6. sjw-风评评测-定位页面元素

    一.手工标准化操作流程: 1.登录系统 2.登录后的页面点击:账户设置 3.点击“重新评测”,进入到风险评测页面 4.答完8道题 5.勾选条件checkbox 6.点击“提交” 提交后的页面 二.自动 ...

  7. python的赋值,深拷贝和浅拷贝的区别

    原文地址https://www.cnblogs.com/xueli/p/4952063.html 赋值:a = [1,2,3,["a","b"]]  b=a,那 ...

  8. 前端c标签foreach传值给后台

    前端c标签foreach传值给后台 <div style="margin-bottom: 10px"> <c:forEach items="${good ...

  9. Unable to update the EntitySet 'T_JsAPI' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.

    前几天使用EF6的Db First模式改造了支付中心的数据访问层,废弃了ado.net. 同时,使用T4把实体类生成到了model层的PO目录下. 今天在db里新建了一张表,在edmx文件里更新模型( ...

  10. mybatis之接口绑定

    接口绑定方案 mybatis中,提供了一套接口绑定方案,程序员可以提供一个接口,然后提供对应接口的一个mapper.xml文件.MyBatis会自动将接口和xml文件进行绑定.实际上就是mybatis ...