Deep MNIST for Experts解读(二):卷积与池化
https://www.tensorflow.org/get_started/mnist/pros
下面看看那三个遗留问题。
1.卷积
conv2d
max_pool_2x2
Tensorflow提供了两个卷积函数,tf.nn.conv2d和tf.nn.conv3d,并不适合拿来直接演示说明基本概念。
什么是卷积运算?
卷积的感性说明:https://www.zhihu.com/question/22298352
卷积的理性说明:http://blog.youkuaiyun.com/anan1205/article/details/12313593。
最直观的说明:http://ufldl.stanford.edu/wiki/index.php/%E5%8D%B7%E7%A7%AF%E7%89%B9%E5%BE%81%E6%8F%90%E5%8F%96
的卷积的那个动图。
这里说明一下。
绿色矩阵为学习样本,橙色是一个小矩阵,称为卷积核,可以把它视为一个滑窗。用卷积核去覆盖样本矩阵,运算一次,得到一个值。
比如: 被卷积核第一次覆盖的子矩阵(绿色)是
[[1,1,1],
[0,1,1],
[0,0,1]],
卷积核(橙色)是:
[[1,0,1],
[0,1,0],
[1,0,1]]
对应坐标的值相乘,再各元素相加:
1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1=4,得到粉红色矩阵的第一个元素。
移动卷积核,依次得到粉红色矩阵的各个元素,这就是卷积运算。
下面来理解下mnist_deep.py中的conv2d。
def conv2d(x, W):
"""conv2d returns a 2d convolution layer with full stride."""
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
tf.nn.conv2d给了四个参数:
x:即输入input,格式为:[训练时一个batch的图片数量, 图片高度, 图片宽度, 输入通道数],
[batch, in_height, in_width, in_channels]
源码中的定义为:x_image = tf.reshape(x, [-1, 28, 28, 1]),也就是batch待定,图片是28*2
https://www.tensorflow.org/get_started/mnist/pros
下面看看那三个遗留问题。
1.卷积
conv2d
max_pool_2x2
Tensorflow提供了两个卷积函数,tf.nn.conv2d和tf.nn.conv3d,并不适合拿来直接演示说明基本概念。
什么是卷积运算?
卷积的感性说明:https://www.zhihu.com/question/22298352
卷积的理性说明:http://blog.youkuaiyun.com/anan1205/article/details/12313593。
最直观的说明:http://ufldl.stanford.edu/wiki/index.php/%E5%8D%B7%E7%A7%AF%E7%89%B9%E5%BE%81%E6%8F%90%E5%8F%96
的卷积的那个动图。
这里说明一下。
绿色矩阵为学习样本,橙色是一个小矩阵,称为卷积核,可以把它视为一个滑窗。用卷积核去覆盖样本矩阵,运算一次,得到一个值。
比如: 被卷积核第一次覆盖的子矩阵(绿色)是
[[1,1,1],
[0,1,1],
[0,0,1]],
卷积核(橙色)是:
[[1,0,1],
[0,1,0],
[1,0,1]]
对应坐标的值相乘,再各元素相加:
1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1=4,得到粉红色矩阵的第一个元素。
移动卷积核,依次得到粉红色矩阵的各个元素,这就是卷积运算。
下面来理解下mnist_deep.py中的conv2d。
def conv2d(x, W):
"""conv2d returns a 2d convolution layer with full stride."""
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
tf.nn.conv2d给了四个参数:
x:即输入input,格式为:[训练时一个batch的图片数量, 图片高度, 图片宽度, 输入通道数],
[batch, in_height, in_width, in_channels]
源码中的定义为:x_image = tf.reshape(x, [-1, 28, 28, 1]),也就是batch待定,图片是28*2