学习笔记:深度学习网络特征逐层可视化

         Deep Learning很吸引人,也很玄乎的一个点就是大家都说它可以提取到分级的逐层抽象的特征。但对我们来说,总是耳听为虚,眼见为实。所以,每当我们训练完一个深度模型后,我们还特别想把这个深度模型学到的东西给可视化出来,好弄明白它到底学到了什么东西,是不是有意义的,是不是像传说中的那样神奇”    zouxy09   http://blog.csdn.net/zouxy09/article/details/10012747

于是在训练完自己的数据之后,也来看看 每一层的参数 及 输出 是否有明显的可视化效果。

由于系统里 无法show的问题,我改成了将结果存成图片,然后从服务器上拉到本地来看。对应的函数做了一点小的修改。


def vis_square(data, padsize=1, padval=0):
    data -= data.min()
    data /= data.max()


    # force the number of filters to be square
    n = int(np.ceil(np.sqrt(data.shape[0])))
    padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
    data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))


    # tile the filters into an image
    data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
    data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
    #pylab.imshow(data)
    #pylab.show()
    plt.figure()
    plt.imshow(data)
    plt.savefig("t.jpg")


原图 缩放到32*32后如下



输出代码如下 :

觉得输出结果还是有明显的可视性。


feat = net.blobs['conv1'].data[0]
vis_square(feat, padval=1)


filters = net.params['conv1'][0].data
vis_square(filters.transpose(0,2,3,1))




feat = net.blobs['conv2'].data[0]
vis_square(feat, padval=1)


filters = net.params['conv2'][0].data
vis_square(filters[:32].reshape(32**2, 5, 5))







feat = net.blobs['conv3'].data[0]
vis_square(feat, padval=0.5)

feat = net.params['conv3'][0].data
vis_square(filters[:32].reshape(32**2,5,5))





feat = net.blobs['ip1'].data[0]
vis_square(feat)


feat = net.blobs['ip2'].data[0]
vis_square(feat)





  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值