[关闭]
@w460461339 2019-02-20T18:14:45.000000Z 字数 2319 阅读 1282

Tensorflow Day3.1:Weight-Decay&GoogleNet&feature-map可视化

Tensorflow


code1.7z-14.6kB
12_tensorflow.7z11331.5kB

Day3_GoogleNet.ipynb36.8kB

Day3_CIFAR_Reader.ipynb3.6kB

Day3_GoogleNet_Test.ipynb8.2kB

Day3_Load_Model_Test.ipynb5.9kB

Day3_Feature_Map_Visual.ipynb15.5kB

1、什么是Weight Decay

简单理解,Weight_Decay,其实就是加了一个L2正则项。

加入L2正则化的Cost——function:

梯度项:

梯度更新:

那么相当于对更新的参数进行了缩放,所以是weight_decay.

注意和momentum的区分

momentum是在梯度项上做了手脚,对梯度项加上了之前的梯度值,使得其能够保留之前的信息。

这个和对被更新的weight进行缩放是不同的。

2、googlenet inception迭代特点

参考:
https://my.oschina.net/u/876354/blog/1637819

2.1 googleNet-inception-V1

首先,为什么会有v1?

image_1d2i582esfbrkh1o8onn8kj59.png-30.2kB

其作用如下:

1、GoogleNet网络较深,担心梯度消失。
2、因此,在这里计算了这一步输出的分类结果,作为额外的梯度值,在乘以某一个系数(比如0.3)之后,再加入到最终的loss中去。
3、这样好处有三:
    3.1 增大了梯度信号。
    3.2 对这一步之前的weight而言,相当于加入了正则项,防止过拟合。
    3.3 训练时候相当于用了多尺度,做了模型融合。
4、这个只是在训练过程中使用,预测时候不适用。

image_1d2i5clu9153655n6bmej7ia3m.png-221kB

2.2 Inception-V2&V3

但是,第二种卷及分解在浅层效果不好。实验表明,当feature-map的尺寸在12~20(这里不知道是指边长还是面积)时,效果才比较好。

2.3 Inception-V4

加入了ResNet的思想。
image_1d2i65knmnqb1e8ou7lahi1rm22a.png-36.4kB

3、feature-map可视化总结

这个其实没有什么好说的,其实操作很简单:

1、找到想要可视化的层,和执行训练一样,用sess.run执行它。
2、得到的结果一般是一个[batch_size,height,width,channel]的tensor。
3、我一般都是随意选一个batch,然后将每个channel的图像分开保存,相当于得到了channel个[height,width]的图像。
4、注意得到的图像中每个像素值是一个小数,一般是0~1之间。所以我会乘以一个255,并整数化,就能得到中间层的值了。
  1. '''
  2. train
  3. '''
  4. feature_map_dir='./feature_maps/'
  5. init=tf.global_variables_initializer()
  6. with tf.Session() as sess:
  7. sess.run(init)
  8. for i in range(20000):
  9. batch_x,batch_y=mnist.train.next_batch(50)
  10. if i%100==0:
  11. # h_pool1就是我们想看的feature_map
  12. result,feature_map1=sess.run([accuracy,h_pool1],feed_dict={x_input:batch_x,
  13. y_input:batch_y,
  14. keep_prob:1.0})
  15. # 打印尺寸
  16. print(int(i/100),result,feature_map1.shape)
  17. # 对于每个channel,将对应的feature-map*255,并整数化后保存即可。
  18. for j in range(32):
  19. cv2.imwrite('./feature_maps/img_'+str(j)+'.jpg',
  20. feature_map1[24,:,:,j]*255)
  21. sess.run([trainer],feed_dict={x_input:batch_x,
  22. y_input:batch_y,
  23. keep_prob:0.5})
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注