AlexNet与LeNet-5区别
AlexNet不同于LeNet-5的地方:
- 使用了最大池化
- 使用了ReLu激活函数
- 在ReLu激活函数之后,使用了本地响应归一化:LRN(Local Response Normalization)
LRN功能
LRN:能够使得最强烈的激活来抑制同一位置但是在不同特征图中的神经元(这种竞争激活特性已经在生物神经元中被观察到)。这种特性鼓励不同特征图变得专业化,推动它们分离并迫使它们去探索新的功能,最终改进泛化。
LRN公式
其中,表示第行,第列,表示第个特征图,表示经过ReLu后的输出,表示第个特征图中第行,第列的值经过归一化后的输出
其中,是超参数,被称为偏置参数,被称为深度半径,是特征图的数量。
在AlexNet中,超参数设置如下:。
如果并且神经元被激活,那么它将抑制位于其上面和下面的特征图中的神经元的激活
AlexNet网络架构
例子
还是在HSI上实验一下,切分数据集的函数如我之前的《CNN变体网络之--LeNet》里面一样。
为了和LeNet作比较,我直接把激活函数换成了ReLu,然后在每一个激活之后加了个LRU。
- AlexNet
model = keras.Sequential()
model.add(layers.Conv2D(input_shape = (X_train.shape[1], X_train.shape[2], X_train.shape[3]),
strides = (1, 1), filters = 6, kernel_size = (5, 5), padding = 'same',
activation = 'relu'))
model.add(layers.BatchNormalization())
model.add(layers.AveragePooling2D(pool_size = (2, 2)))
model.add(layers.Conv2D(filters = 16, kernel_size = (5, 5), strides = (1, 1), padding = 'valid', activation = 'relu'))
model.add(layers.BatchNormalization())
model.add(layers.AveragePooling2D(pool_size = (2, 2)))
model.add(layers.Conv2D(filters = 120, kernel_size = (5, 5), strides = (1, 1), padding = 'valid', activation = 'relu'))
model.add(layers.BatchNormalization())
model.add(layers.Flatten())
model.add(layers.Dense(84, activation = 'relu'))
model.add(layers.Dense(y_train.shape[1], activation = 'softmax'))
model.compile(loss = keras.losses.CategoricalCrossentropy(),optimizer = keras.optimizers.SGD(),
metrics = ['accuracy'])
model.summary()
history = model.fit(X_train, y_train, validation_split=0.2, epochs=n_epochs,
batch_size=batch_size)
plt.figure()
plt.plot(history.history['loss'], label='train_loss')
plt.plot(history.history['val_loss'], label='val_loss')
plt.legend()
plt.xlabel('epochs')
plt.ylabel('loss')
plt.title('AlexNet-5_train')
plt.figure()
plt.plot(history.history['accuracy'], label='train_accuracy')
plt.plot(history.history['val_accuracy'], label='val_accuracy')
plt.legend()
plt.xlabel('epochs')
plt.ylabel('accuracy')
plt.title('Alex-5_accuracy')
plt.show()
test = model.evaluate(X_test, y_test)
print(test)
-
实验结果图
实验结果:
9225/9225 [==============================] - 105s 11ms/sample - loss: 0.1829 - accuracy: 0.9514
参考资料:
机器学习实战
https://blog.csdn.net/wmy199216/article/details/71171401