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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习之基于AlexNet实现猫狗大战

發布時間:2023/12/15 pytorch 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习之基于AlexNet实现猫狗大战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這次實驗的主角并不是貓狗大戰,而是AlexNet網絡,只不過數據集為貓狗大戰數據集。本次實驗利用自己搭建的AlexNet網絡實現貓狗大戰,測試一下AlexNet網絡的性能。

AlexNet網絡作為LeNet網絡之后得到的網絡模型,在很多地方都有了重大的創新,而這些創新就目前來看仍有重大的意義。

1.創新點

1.ReLU非線性函數(ReLU Nonlinearity)
在AlexNet網絡之前的網絡模型中,大多采用sigmoid或者tanh作為激活函數,但是Alex(AlexNet網絡的發明者)發現在訓練時間的梯度衰減方面,這些非線性飽和函數非線性非飽和函數慢很多。在AlexNet中用的非線性非飽和函數:ReLU。實驗表明,ReLU比tanh快6倍。
2.利用GPU進行運算
實現高效的GPU卷積運算結構,也使得此后GPU成為深度學習的主要工具。
3.LRN(局部響應歸一化)
增加LRN的想法是之前的網絡模型中不曾有的,雖然它的作用在后面的網絡中沒有體現出來,不過也是一次重要的創新。公式如下:

4.Overlapping Pooling
使用重疊的最大池化,以前在卷積神經網絡中大部分都采用平均池化,在AlexNet中都是使用最大池化,最大池化可以避免平均池化的模糊化效果。重疊的最大池化是指卷積核的尺寸要大于步長,這樣池化層的輸出之間會有重疊和覆蓋,提升特征的豐富性。在AlexNet中使用的卷積核大小為3×3,橫向和縱向的步長都為2。
5.Data Augmentation(數據擴充)
也就是數據增強,使用Random Cropflip從而上千倍的擴充訓練樣本的數量,也使得隨機裁剪成為通用方法。
6.DropOut
簡而言之,這種方法是用來減少過擬合的風險,經過若干次實驗發現,創新點5(Data Augmentation)也可以做到防止過擬合。Dropout的原理是通過訓練時隨機使得一部分結點失效,不貢獻連接權重而減少過擬合風險。同時強迫這些神經元去學習互補的一些特征。

2.網絡結構

AlexNet網絡結構以及各層訓練參數的計算如下圖所示:

3.AlexNet網絡搭建

與原始的AlexNet網絡不同的是去除了兩層Dropout層,最終的輸出參數設置為了分類的類別數2,并且利用BN(BatchNormalization)代替了LRN(并沒有太大的作用)

def AlexNet(nb_classes, input_shape):input_tensor = Input(shape=input_shape)# 1st blockx = Conv2D(96, (11, 11), activation='relu', strides=4, name='block1_conv1')(input_tensor)x = BatchNormalization()(x)x = MaxPooling2D((3, 3), strides=2, name='block1_pool')(x)# 2nd blockx = Conv2D(256, (5, 5), activation='relu', padding='same', name='block2_conv1')(x)x = BatchNormalization()(x)x = MaxPooling2D((3, 3), strides=2, name='block2_pool')(x)# 3rd blockx = Conv2D(384, (3, 3), activation='relu', padding='same', name='block3_conv1')(x)# 4th blockx = Conv2D(384, (3, 3), activation='relu', padding='same', name='block4_conv1')(x)# 5th blockx = Conv2D(256, (3, 3), activation='relu', padding='same', name='block5_conv1')(x)x = MaxPooling2D((3, 3), strides=2, name='block5_pool')(x)# full connectionx = Flatten()(x)x = Dense(4096, activation='relu', name='fc1')(x)# x = Dropout(0.5)(x)x = Dense(4096, activation='relu', name='fc2')(x)# x = Dropout(0.5)(x)output_tensor = Dense(nb_classes, activation='softmax', name='predictions')(x)model = Model(input_tensor, output_tensor)return model model = AlexNet(2,(height,width,3))

在對貓狗大戰數據集進行分類識別時,網絡的優化器采用的隨機梯度下降法SGD,一開始采用的優化器是Adam,但是效果并不好。

model.compile(optimizer="sgd",loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),metrics=['accuracy'] )

實驗結果如下所示:

經過40個epochs之后,模型的準確率在90%左右,效果不錯。

總結:本文主要是對AlexNet網絡進行的分析,至于數據集的處理,并沒有給出相應的代碼,在博主之前的博客中,是有詳細的代碼的,與本文的代碼相同。至于Dropout層的處理,路過的大佬可以試驗一下效果。
努力加油a啊

總結

以上是生活随笔為你收集整理的深度学习之基于AlexNet实现猫狗大战的全部內容,希望文章能夠幫你解決所遇到的問題。

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