日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AlexNet详述

發布時間:2024/4/11 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AlexNet详述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

總的來說,目前處在深度學習第三次高潮時期,一般認為這個時期的開端是Hinton于2006年在Science上發表文章:一種稱為“深度置信網絡(deep belief network)”的神經網絡模型可以通過逐層預訓練的方式,有效完成模型訓練過程。這就是“深度學習”這一名詞的來由。

不過,這篇文章的發表遠沒有今天形容的這么偉大,甚至,在當時的學術界,并沒有引起太大的波瀾。真正讓深度學習以及深度神經網絡從“象牙塔中的研究”走到實際工業應用領域的是卷積神經網絡在2012年計算機視覺的“圣杯”ImageNet競賽上強勢奪冠,超越第二名10.9個百分點。這場比賽讓卷積神經網絡乃至深度神經網絡真正走到了世界學術的舞臺上。

本項目使用Keras復現AlexNet并在數據集上進行效果測試。

  • 論文標題

    ImageNet Classification with Deep Convolutional Neural Networks

  • 論文地址

    https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

  • 論文源碼

    https://github.com/pytorch/vision/blob/master/torchvision/models/alexnet.py(PyTorch實現)

網絡說明

結構說明

該結構分為上下兩個部分,每部分含有五層卷積層和三層全連接層,之所以分為兩部分是為了方便在兩片GPU上進行訓練,只在第三層卷積層和全連接層處上下兩部分可以交互。由于上下兩部分完全一致,分析時一般取一部分即可。

在該圖中,大體的網絡配置已經非常清晰,激活函數全部使用了Relu函數并使用了LRN進行參數規范化。

主要貢獻

盡管這個結構在今天看來非常基礎,但正是這樣的結構為后面諸多復雜卷積神經網絡提供了基礎,在卷積神經網絡的發展進程中占據里程碑式的地位。其主要的幾個貢獻如下。

  • 首次將卷積神經網絡應用于計算機視覺領域的海量圖像數據集ImageNet(共1000類圖像,總數約128多萬張),揭示了卷積神經網絡的強大學習能力和表示能力。當然,海量的數據也使得卷積神經網絡免于過擬合。自此,卷積神經網絡在計算機視覺領域開始了“井噴”式的研究。
  • 利用GPU實現網絡訓練,大大加快了神經網絡的訓練速度。
  • 使用了一些訓練技巧,這些技巧使網絡的訓練由不可能變成了可能。如使用Relu激活函數、局部響應規范化操作(LRN)、為防止過擬合而采用的數據增廣(data augmentation)和隨機丟失(dropout)等。
  • 代碼實現

    最新版本的Keras等框架已經不再提供LRN了,后面VGGNet等證明LRN并沒有想象中那么好的效果,現在流行的規范化選擇是BN,所以實現時使用BN層進行規范化。

    由于AlexNet的局限性(參數不少、效果不比后來的很多卷積神經網絡),現今的主流框架很多已經不再封裝AlexNet了。下面主要實現AlexNet基本結構,去除LRN規范化。

    def AlexNet(input_shape=(224, 224, 3), n_classes=1000):""":param input_shape::param n_classes::return:"""# inputinput_tensor = Input(shape=input_shape)# conv1x = Conv2D(96, (11, 11), strides=(4, 4), padding='valid', activation='relu')(input_tensor)# x = BatchNormalization()(x)x = MaxPooling2D((3, 3), strides=(2, 2), padding='valid')(x)# conv2x = Conv2D(256, (5, 5), strides=1, padding='same', activation='relu')(x)# x = BatchNormalization()(x)x = MaxPooling2D((3, 3), strides=(2, 2), padding='valid')(x)# conv3x = Conv2D(384, (3, 3), strides=1, padding='same', activation='relu')(x)x = Conv2D(384, (3, 3), strides=1, padding='same', activation='relu')(x)x = Conv2D(256, (3, 3), strides=1, padding='same', activation='relu')(x)x = MaxPooling2D((3, 3), strides=(2, 2), padding='valid')(x)# fcx = Flatten()(x)x = Dense(4096, activation='relu')(x)x = Dropout(0.5)(x)x = Dense(4096, activation='relu')(x)x = Dropout(0.5)(x)x = Dense(n_classes, activation='softmax')(x)model = Model(input_tensor, x)return model

    模型訓練

    數據集使用Caltech101數據集,比較性能,不進行數據增廣(注意刪除干擾項)。Batch大小定為32。損失函數使用經典分類的交叉熵損失函數,優化函數使用Adam,激活函數使用Relu。(這都是比較流行的選擇)

    訓練結果

    具體訓練結果見文末Github的notebook文件。

    可以看到,由于數據集小的限制,模型很快就陷入了過擬合,但是能夠過擬合訓練集已經證明了模型表示學習的能力。

    補充說明

    盡管今天看來,AlexNet已經不太實用,但是當時的很多思路影響了后來很多卷積神經網絡的設計思路,如使用Relu作為激活函數、輸出標準化。使用dropout防止過擬合。本項目源碼上傳至我的Github,歡迎Star或者Fork。

    超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的AlexNet详述的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。