首先主要记录一些关键词,主要说明这些关键词的个人理解,如有误解,希望提出改正
我们就介绍一下mnist的手写数字识别算法吧
1.张量
这里所说的张量,其实可以类比为Python里面的一些列表,或者列表的嵌套。
2.占位符
x = tensorflow.placeholder(“类型”, shape=[None, 784])
这个就像字面意思了
3.变量
W = tf.Variable(tf.zeros([784, 10]))
定义一个二维张量,类似784 * 10 的平面模型
4.星乘
对应元素相乘,向量化后的图片和权重相乘得到一个张量结果tf.constant([None, 784]) * tf.constant([784, 10])
[None, 784], 之所以这样构造是因为输入未知,但是每张图的像素点为28*28=784,;[784, 10] ,设置这个的原因是因为有784个特征值(像素点),每个特征值代表的数字是【0~9】是个数字即10种输出结果
Int[38]: sess.run(tf.constant([[1,2,3],[4,5,6]]) * tf.constant([[7],[8]]))
Out[38]:
array([[ 7, 14, 21],
[32, 40, 48]])
Int[36]: sess.run(tf.constant([[1,2,3],[4,5,6]]) * tf.constant([[7,8, 9]]))
Out[36]:
array([[ 7, 16, 27],
[28, 40, 54]])
5.交叉熵 cross_entry
在特征工程中,用来衡量两个值的近似度,推导过程如下:
两个概率分布,预测的概率分布为p,真实概率分布为q,每次的概率肯定是小于等于1的
在计算机中想要表示一个概率大小所需要的编码长度需要多少位呢?1byte = 8bit = 2^3bit
每个事件发生需要的存储字节长度为:2^N = 1/P N(需要的位数);P(概率大小)
所以:N = log2(1/p),结果乘以实际概率;
所以每个时间需要的长度为:p(i) * log2(1/p(i))
然后需要的总长度为,单个的求和,
6.卷积 conv
简单一句话,卷积在这里的作用就是提取特征值,即边缘检测,区分开不同的值域
这里再提一个偏置值的问题吧,偏置值作用其实是为了平移整个张量,使边缘域穿过原点
i1x1 + b1 = i2x2
i1 = x2/x1*i2 - b1
对于一个二元输入方程,斜率也就是边缘域, b1就是一个平移值
7.池化 pool
池化作用是啥呢?池化利用一个卷积核在一幅图的张量中进行游走,检测出这个卷积核区域内的最大值,最小值或者均值等,其实就是在压缩你的图片的尺寸
7.通道 channel
首先从最开始的输入开始,对于我们的mnist手写数字而言,是黑白单通道输入,如果是彩图的话,就是三通道输入(rgb)。对于多层卷积网络而言,通道是怎么变化的呢?
1.channel = 1
2.希望第一层输出的特征值个数:mnist这个实例中是32个特征值,即第一层的输出变成了32个channel
3.第二层的输入通道数 = 第一层的特征输出数 = 32
4.第二层的输出特征个数 = 32 + 32 = 64
…以此类推