美文网首页python
CNN变体网络之--AlexNet

CNN变体网络之--AlexNet

作者: 晨光523152 | 来源:发表于2019-08-07 21:57 被阅读60次

    AlexNet与LeNet-5区别

    AlexNet不同于LeNet-5的地方:

    • 使用了最大池化
    • 使用了ReLu激活函数
    • ReLu激活函数之后,使用了本地响应归一化:LRN(Local Response Normalization)

    LRN功能

    LRN:能够使得最强烈的激活来抑制同一位置但是在不同特征图中的神经元(这种竞争激活特性已经在生物神经元中被观察到)。这种特性鼓励不同特征图变得专业化,推动它们分离并迫使它们去探索新的功能,最终改进泛化。

    LRN公式

    b_{x, y}^{i} = a_{x, y}^{i}(k + \alpha \sum_{j = j_{loww}}^{j_{high}}(a_{x, y}^{j})^{- \beta} )\;\;\;\;\;\; (1)

    其中,x, y表示第x行,第y列,i表示第i个特征图,a_{x, y}^{i}表示经过ReLu后的输出,b_{x, y}^{i}表示第i个特征图中第x行,第y列的值经过归一化后的输出
    \begin{split} j_{low} &= max(0, i - \frac{r}{2})\;\;\;\;\;\;(2)\\ j_{high} & = min(i + \frac{r}{2}, f_{n} - 1) \;\;\;\;\;\;(2) \end{split}
    其中,k, r, \alpha是超参数,k被称为偏置参数,r被称为深度半径,f_{n}是特征图的数量。
    在AlexNet中,超参数设置如下:r = 2, \alpha = 0.00002, \beta = 0.75, k = 1
    如果r = 2并且神经元被激活,那么它将抑制位于其上面和下面的特征图中的神经元的激活

    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)
    
    
    image.png
    • 实验结果图


      AlexNet损失
      AlexNet准确率
    • 实验结果:
      9225/9225 [==============================] - 105s 11ms/sample - loss: 0.1829 - accuracy: 0.9514

    参考资料:
    机器学习实战
    https://blog.csdn.net/wmy199216/article/details/71171401

    相关文章

      网友评论

        本文标题:CNN变体网络之--AlexNet

        本文链接:https://www.haomeiwen.com/subject/bjoadctx.html