python-Simonyan等人的论文“深入卷积网络内部:可视化图像分类模型和显着图”的实现

在使用Caffe框架的卷积神经网络中的梯度数据可视化中,已经可视化了所有类别的梯度数据,对于特定类别采用梯度很有趣.在“ bvlc_reference_caffenet”模型中的deploy.prototxt文件中,我设置了:

force_backward: true

并评论了最后一部分:

layer {
  name: "prob" 
  type: "Softmax"
  bottom: "fc8"
  top: "prob" 
}

,之前:

layer {
  name: "fc8"
  type: "InnerProduct"
  bottom: "fc7"
  top: "fc8"
  inner_product_param {
  num_output: 1000
 }
}

,而不是添加:

 layer {
   name: "loss"
   type: "SoftmaxWithLoss"
   bottom: "fc8"
   bottom: "label"
   top: "prob"
}

在python代码中,方法是调用:

out = net.forward()

,我们通过调用以下命令前进至最后一层:

backout = net.backward()

,获得了渐变的可视化效果.首先,我想问一下这被称为显着性图,如果我想针对特定的类进行反向操作,例如281是给猫的.我该怎么办?

预先感谢您的指导.

附言扬清的笔记本过滤器可视化技术受益于该代码.

imagenetMeanFile = caffe_root  +'python/caffe/imagenet/ilsvrc_2012_mean.npy'
caffe.set_mode_cpu()
net = caffe.Net(caffe_root +   'models/bvlc_reference_caffenet/deploy.prototxt',
            caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel',
            caffe.TRAIN)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1)) # mean pixel 
transformer.set_raw_scale('data', 255)  # the reference model operates on images in [0,255] range instead of [0,1]
transformer.set_channel_swap('data', (2,1,0))  # the reference model has channels in BGR order instead of RGB

解决方法:

对于完整的可视化,您也可以参考我的github,它更加完整并可视化了显着性图以及类模型的可视化以及反向传播中的梯度可视化.

https://github.com/smajida/Deep_Inside_Convolutional_Networks

上一篇:分享我基于网络神经技术-实现全国34个省的工商数据全部破解-可直接调取API接口获取任何数据


下一篇:使用anaconda 3 for python 3.4在ubuntu 15.04上安装caffe-找不到模块caffe