首先,我们先引入一些我们将会用到的库,并定义-些会用到的变量。设置batch size为32,表示每一轮训练的batch中样本的数目为32。不像基于MNIST或Cifar-10数据集的实验采用包含上百样例的 batch,batch size设置为32是因为图片数据比较大(高度和宽度都达到了224,深度达到了3),采用较大的 batch 会导致显存不足的情况。num_batch是batch的数量,由于不涉及真实图片数据的训练,所以这个数据同时也可以作为训练的轮数。
和 LeNet-5一样,我们定义一个函数inference_op()来实现网络的结构。在函数的一开始,我们定义了存储参数的列表parameters[]。这个列表非常有用,如果我们需要评价模型的反向传播所用的时间,那么需要提供模型参数的值作为梯度下降的依据。AlexNet使用 ReLU作为激活函数,原因就在于 ReLU 激活函数在较深的网络中能够有效地克服sigmoid 存在的梯度消失问题。我们一般会在卷积层之后直接添加一个池化层进行处理,但是AlexNet 在卷积层和池化层之间还加入了一个LRN层。LRN 层是在 AlexNet 中首次被提出并运用。对LRN层的描述最早见于 Alex 那篇用 CNN 参加 ImageNet比赛的论文, Alex 在论文中的解释是:LRN为了模仿生物神经系统的“侧抑制”机制而对局部神经元的活动创建竞争环境,这样做会让其中响应比较大的值变得相对更大,并抑制其他响应较小的神经元,能够进一步增强模型的泛化能力。随后,Alex 在 ImageNet 数据集上分别测试了添加