#卷积神经网络
传统神经网络存在的问题:
- 权值太多,计算量太大;
- 权值太多,需要大量样本进行训练。
卷积神经网络CNN:
- CNN通过感受野和权值共享减少了神经网络需要训练的参数个数:
- 卷积:
- 多个卷积核:
*卷积核可以看作是一个滤波器,卷积操作之后会得到一个特征图,不同的卷积核得到的特征图是不一样的,所以不同的卷积核可以对图的不同特征进行取样。
#pooling(池化)
一般卷积层之后都会加上一个池化层,池化层会降维,缩小特征图。
- 最大池化:把每个区域的最大值取出来;
- 平均池化:把每个区域的平均值算出来;
- 随机池化:在每个区域中找一个随机值放过来。
对于卷积操作:
- SAME PADDING:
- 给平面外部补0,这样卷积窗口采样后得到一个跟原来平面大小相同的平面。
- VALID PADDING:
- 不会超出平面外部,卷积窗口采样后得到一个比原来平面小的平面。
对于池化操作:
- SAME PADDING:
- 可能会给平面外部补0。
- VALID PADDING:
- 不会超出平面外部。
#CNN结构
#卷积神经网络应用于MNIST数据集分类
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)
#每个批次的大小
batch_size = 100
#计算一个有多少个批次
n_batch = mnist.train.num_examples // batch_size
#初始化权值
def weight_variable(shape):
initial = tf.truncated_normal(shape,stddev=0.1)
return tf.Variable(initial)
#初始化偏置值
def bias_variable(shape):