一、卷积
1.卷积神经网络
一种特殊的前馈神经网络,主要特点为卷积和池化。通常结构为:
- 全连接的输入层;
- 多个卷积、池化和全连接层组合;
- 全连接输出层与softmax组合。
2.卷积运算
卷积:将两个来源的信息结合产生一组新的信息的数学运算,将特殊矩阵-核应用于张量上产生矩阵-特征图。
- 三维张量:深度叠加;
- 步长、填充(SAME/VALID):size_featuremap=(size_image+2*padding-size_kernel)/strides +1;
- 局部连接--感受野receptivce field;
- 权重共享--每个卷积核有单独的权重矩阵weights和偏差标量bias,在所有滑动位置相同(共享)。
3.TensorFlow的卷积实现
tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=None,data_format=None,name=None)
- input表式输入张量的形状[batch_size,input_height,input_width,input_depth];
- filter表示滤波器张量形状[filter_height,filter_width,filter_depth,output_depth];
二、池化
池化是指对卷积特征空间区域的聚合统计。
平均池化/最大池化,通常非重叠。
max_pool(value,ksize,strides,padding,data_format='NHWC',name=None)
- value表示形状为[batch_size,input_height,input_width,input_depth]的输入张量。
- 通道顺序:NHWC,NCWH;
三、LeNet
1.LeNet
Yann Lecun;
结构:输入-卷积1/ReLU1-pooling1-Conv2/ReLU-pooling2-fc-output;
2.使用tensorflow实现LeNet5
1.定义超参数及占位符
X=tf.placeholder(dtype=tf.float32, name="x", shape=[None, n_inputs])
x_ = tf.reshape(x, shape=[-1, n_width, n_height, n_depth])
2.定义中间的卷积核(w、b)及卷积层(conv2d)、激活层(relu)、池化层----- relu( conv(x,w) +b )
# create first set of convolutional layers
layer1_w = tf.Variable(tf.random_normal(shape=[4,4,n_depth,32],
stddev=0.1),
name='l1_w')
layer1_b = tf.Variable(tf.random_normal([32]),
name='l1_b')
layer1_conv = tf.nn.relu(tf.nn.conv2d(x_,
layer1_w,
strides=[1,1,1,1],
padding='SAME'
) + layer1_b )
layer1_pool = tf.nn.max_pool(layer1_conv,
ksize=[1,2,2,1],
strides=[1,2,2,1],
padding='SAME'
)
3.Flat-fc-relu
tf.nn.relu(tf.matmul(tf.reshape(layer2_pool, [-1, 64*7*7*1]),layer3_w) +layer3_b )
4.输出层
layer4_out = tf.matmul(layer3_fc,layer4_w)+layer4_b
model = layer4_out
5.定义损失函数softmax_cross_entropy_with_logits,优化器AdamOptimizer
# loss function
entropy = tf.nn.softmax_cross_entropy_with_logits(logits=model, labels=y)
loss = tf.reduce_mean(entropy)
# optimizer function
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)