AlexNet
AlexNet是神经网络之父Hinton的学生Alex Krizhevsky开发完成,总共有8层,其中有5个卷积层,3个全链层,前5层其实不完全是卷积层,有些层还加入了池化层,并对数据进行标准化处理。Alex在他的论文中写到,他在处理图片的时候使用了两个GPU进行计算,在卷积过程中他做了分组的处理。
第一层
第一层包含了卷积层、标准化层和池化层。在Tensorflow中,搭建的部分代码程序为:
# 1st Layer: Conv (w ReLu) -> Lrn -> Pool
conv1 = conv(X, 11, 11, 96, 4, 4, padding='VALID', name='conv1')
norm1 = lrn(conv1, 2, 2e-05, 0.75, name='norm1')
pool1 = max_pool(norm1, 3, 3, 2, 2, padding='VALID', name='pool1')
输入的图像为彩色图片224 * 224 * 3 ,实际上会经过预处理变为227 * 227 * 3。
这个图像被96个大小规格为11 * 11 * 3的卷积核进行特征提取,步长为4,96个卷积核分成2组(因为采用了2个GPU服务器进行处理),每组48个卷积核,卷积核在一个方向移动的过程中会生成(227-11)/4+1=55个像素,这样得到了2组55 * 55 * 48的像素层数据。这些像素层经过relu1单元的处理,生成激活像素层,尺寸仍为2组55 * 55 * 48的像素层数据。
这些像素层经过pool运算处理,池化运算的尺度为3 * 3,步长为2,则池化后图像的尺寸为(55-3)/2+1=27。 即池化后像素的规模为27 * 27 * 96;
然后经过归一化处理,归一化运算的尺度为5 * 5;第一卷积层运算结束后形成的像素层的规模为27 *2 7 * 96。
第二层
第二层实际也包含了卷积层、标准化操作和池化层。在Tensorflow中,搭建的部分代码程序为:
# 2nd Layer: Conv (w ReLu) -> Lrn -> Pool with 2 groups
conv2 = conv(pool1, 5, 5, 256, 1, 1, groups=2, name='conv2')