Tensorflow.cifar_tf.nn.lrn
1、cifar 相关 (实际上这也是 度娘"tf.nn.lrn"时 搜索到的)
1.1、学习笔记TF029_实现进阶卷积网络 - 简书.html(https://www.jianshu.com/p/db534c67ea97)
1.1.1、GitHub - tensorflow_models_ Models and examples built with TensorFlow.html(https://github.com/tensorflow/models)ZC:我已经 复制到 gitee中了
https://gitee.com/zclxy/models_tensorflow/tree/master/tutorials/image/cifar10 中能看到 下载 "cifar-10"和"cifar-100"的dataset 的网址
1.1.2、Classification datasets results.html(http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html)
ZC:这里有 "cifar-10"和"cifar-100"的dataset 的链接,实际上和上面是 一个地方
2、tf.nn.lrn 相关
2.1、tensorflow下的局部响应归一化函数tf.nn.lrn - 仙界天堂 - CSDN博客.html(https://blog.csdn.net/sinat_21585785/article/details/75087768)
2.2、深度学习原理与框架-Tensorflow卷积神经网络-cifar10图片分类(代码) 1.tf.nn.lrn(局部响应归一化操作) 2.random.sample(在列表中随机选值) 3.tf.one_hot(对标签进行one_hot编码) - python我的最爱 - 博客园.html(https://www.cnblogs.com/my-love-is-python/p/10529732.html)
ZC:cifar10
2.3、学习笔记 TF014_卷积层、激活函数、池化层、归一化层、高级层 - V2EX.html(https://www.v2ex.com/t/363602)
2.4、局部相应归一化(Local Response Normalization) - 个人文章 - SegmentFault 思否.html(https://segmentfault.com/a/1190000015860578)
2.5、tensorflow中的lrn函数详解 - banana1006034246的博客 - CSDN博客.html(https://blog.csdn.net/banana1006034246/article/details/75204013)
LRN函数类似DROPOUT和数据增强作为relu激励之后防止数据过拟合而提出的一种处理方法,全称是 local response normalization--局部响应标准化。这个函数很少使用,基本上被类似DROPOUT这样的方法取代,具体原理还是值得一看的。
ZC:为何 "少用"?什么场景下使用这个?
3、
4、
5、极客学院 中的文章资料:
5.1、cifar-10 的文章
来自:卷积神经网络 - TensorFlow 官方文档中文版 - 极客学院Wiki.html(http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/deep_cnn.html)
代码:可以在 https://gitee.com/zclxy/models_tensorflow/tree/master/tutorials/image 中找到
我下载的 dataset,在 "G:\Tensorflow\Tensorflow_dataset\极客学院\卷积神经网络" 中
ZC:文中提到的“Images页的列表中查看所有可用的变换”,点击链接进入查看,"Images页"里面全是 类"tf.image"的讲解
ZC:文中提到的“image_summary
”,点击链接进入查看,指的应该是 函数tf.image_summary(tag, tensor, max_images=None, collections=None, name=None)
6、
7、
8、 我的理解:
8.1、tensorflow下的局部响应归一化函数tf.nn.lrn - 仙界天堂 - CSDN博客.html(https://blog.csdn.net/sinat_21585785/article/details/75087768)
8.1.1、
8.1.2、
这个公式中的a表示卷积层(包括卷积操作和池化操作)后的输出结果,这个输出结果的结构是一个四维数组[batch,height,width,channel],
这里可以简单解释一下,batch就是批次数(每一批为一张图片),height就是图片高度,width就是图片宽度,channel就是通道数可以理解成一批图片中的某一个图片经过卷积操作后输出的神经元个数(或是理解成处理后的图片深度)。
ai(x,y)表示在这个输出结构中的一个位置[a,b,c,d],可以理解成在某一张图中的某一个通道下的某个高度和某个宽度位置的点,即第a张图的第d个通道下的高度为b宽度为c的点。
论文公式中的N表示通道数(channel)。
a,n/2,k,α,β分别表示函数中的input,depth_radius,bias,alpha,beta,其中n/2,k,α,β都是自定义的,特别注意一下∑叠加的方向是沿着通道方向的,即每个点值的平方和是沿着a中的第3维channel方向的,也就是一个点同方向的前面n/2个通道(最小为第0个通道)和后n/2个通道(最大为第d-1个通道)的点的平方和(共n+1个点)。
而函数的英文注解中也说明了把input当成是d个3维的矩阵,说白了就是把input的通道数当作3维矩阵的个数,叠加的方向也是在通道方向。
画个简单的示意图:
8.1.3、
8.1.4、ZC:说实话 "8.1.1"、"8.1.2"和"8.1.3"看了个莫名其妙... 然后结合 他给出的 实验结果 和 自己的实验拼凑结果,摸索出了 计算关系。只是知道了 怎么计算 原理 还是不太懂...
ZC:我的摸索
(1) 程序打印的信息:
[[[[ 1 2 3 4] --> [[[[0.07142857 0.06666667 0.10000001 0.13793103] [ 5 6 7 8]] --> [0.04545454 0.03448276 0.04022989 0.05369128]] [[ 9 10 11 12] --> [[0.02980132 0.02242153 0.02466368 0.03287672] [13 14 15 16]]] --> [0.0220339 0.01654846 0.0177305 0.02363368]]] [[[17 18 19 20] --> [[[0.0174538 0.01310044 0.01382824 0.01843318] [21 22 23 24]] --> [0.01444292 0.01083744 0.01133005 0.01510384]] [[25 26 27 28] --> [[0.01231527 0.00923952 0.00959488 0.01279123] [29 30 31 32]]]] --> [0.01073279 0.00805153 0.00831991 0.01109185]]]]
(2) 公式,代入 实际的测试代码中的值后
上面公式中:i --> channel数据中的 byte数据的序号(从0开始)。
将 i 的值 代入公式:(举例子,对 2 进行计算求值,2 在chanell数组中的 序号是 1)
于是:j的取值范围就是 从0到3,于是计算的话:2对应的值 = 2 / (0 + 1* (1^2 + 2^2 + 3^2 + 4^2)) = 0.06666667
瞎蒙,摸索的计算过程:
# 26对应的输出结果0.00923952计算如下 : 26/(0+1*(25^2+26^2+27^2+28^2))^1 # 24^2 = 576 25^2 = 625 26^2 = 676 27^2 = 729 28^2 = 784 --> 2814 26/2814 = 0.00923952 # 25/2814 = 0.00888415 # 27/2814 = 0.00959488 # 28/2814 = 0.00995025 # 576 + 625 + 676 + 729 = 2606 24/2606 = 0.00920952 # 144 + 625 + 676 + 729 = 2174 24/2174 = # 25 / (625 + 676 + 729) = 0.01231527 # 28 / 0.01279123 = 2188.9998 = 2189 # 676 + 729 + 784 = 2189 # ∑上下标是什么意思_百度知道.html(https://zhidao.baidu.com/question/552425984.html) # 29^2 = 841 30^2 = 900 31^2 = 961 32^2 = 1024 # 841 + 900 + 961 = 2702 29 / 2702 = 0.01073279 # 841 + 900 + 961 + 1024 = 3726 30 / 3726 = 0.00805153 31 / 3726 = 0.00831991 # 900 + 961 + 1024 = 2885 32 / 2885 = 0.01109185 # 1^2 + 2^2 + 3^2 = 14 1 / 14 = 0.07142857 # 1^2 + 2^2 + 3^2 + 4^2 = 30 2 / 30 = 0.06666667 3 / 30 = 0.1 # 2^2 + 3^2 + 4^2 = 29 4 / 29 = 0.13793103
9、
10、
11、
12、
13、
14、
15、