最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python神經(jīng)網(wǎng)絡(luò)ResNet50模型的復(fù)現(xiàn)詳解

 更新時間:2022年05月06日 16:03:47   作者:Bubbliiiing  
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)ResNet50模型的復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

什么是殘差網(wǎng)絡(luò)

最近看yolo3里面講到了殘差網(wǎng)絡(luò),對這個網(wǎng)絡(luò)結(jié)構(gòu)很感興趣,于是了解到這個網(wǎng)絡(luò)結(jié)構(gòu)最初的使用是在ResNet網(wǎng)絡(luò)里。

Residual net(殘差網(wǎng)絡(luò)):

將靠前若干層的某一層數(shù)據(jù)輸出直接跳過多層引入到后面數(shù)據(jù)層的輸入部分。

意味著后面的特征層的內(nèi)容會有一部分由其前面的某一層線性貢獻(xiàn)。

其結(jié)構(gòu)如下:

深度殘差網(wǎng)絡(luò)的設(shè)計是為了克服由于網(wǎng)絡(luò)深度加深而產(chǎn)生的學(xué)習(xí)效率變低與準(zhǔn)確率無法有效提升的問題。

什么是ResNet50模型

ResNet50有兩個基本的塊,分別名為Conv Block和Identity Block,其中Conv Block輸入和輸出的維度是不一樣的,所以不能連續(xù)串聯(lián),它的作用是改變網(wǎng)絡(luò)的維度;

Identity Block輸入維度和輸出維度相同,可以串聯(lián),用于加深網(wǎng)絡(luò)的。

Conv Block的結(jié)構(gòu)如下:

Identity Block的結(jié)構(gòu)如下:

這兩個都是殘差網(wǎng)絡(luò)結(jié)構(gòu)。

總的網(wǎng)絡(luò)結(jié)構(gòu)如下:

這樣看起來可能比較抽象,還有一副很好的我從網(wǎng)上找的圖,可以拉到最后面去看哈,放前面太占位置了。

ResNet50網(wǎng)絡(luò)部分實現(xiàn)代碼

#-------------------------------------------------------------#
#   ResNet50的網(wǎng)絡(luò)部分
#-------------------------------------------------------------#
from __future__ import print_function
import numpy as np
from keras import layers
from keras.layers import Input
from keras.layers import Dense,Conv2D,MaxPooling2D,ZeroPadding2D,AveragePooling2D
from keras.layers import Activation,BatchNormalization,Flatten
from keras.models import Model
from keras.preprocessing import image
import keras.backend as K
from keras.utils.data_utils import get_file
from keras.applications.imagenet_utils import decode_predictions
from keras.applications.imagenet_utils import preprocess_input
def identity_block(input_tensor, kernel_size, filters, stage, block):
    filters1, filters2, filters3 = filters
    conv_name_base = 'res' + str(stage) + block + '_branch'
    bn_name_base = 'bn' + str(stage) + block + '_branch'
    x = Conv2D(filters1, (1, 1), name=conv_name_base + '2a')(input_tensor)
    x = BatchNormalization(name=bn_name_base + '2a')(x)
    x = Activation('relu')(x)
    x = Conv2D(filters2, kernel_size,padding='same', name=conv_name_base + '2b')(x)
    x = BatchNormalization(name=bn_name_base + '2b')(x)
    x = Activation('relu')(x)
    x = Conv2D(filters3, (1, 1), name=conv_name_base + '2c')(x)
    x = BatchNormalization(name=bn_name_base + '2c')(x)
    x = layers.add([x, input_tensor])
    x = Activation('relu')(x)
    return x
def conv_block(input_tensor, kernel_size, filters, stage, block, strides=(2, 2)):
    filters1, filters2, filters3 = filters
    conv_name_base = 'res' + str(stage) + block + '_branch'
    bn_name_base = 'bn' + str(stage) + block + '_branch'
    x = Conv2D(filters1, (1, 1), strides=strides,
               name=conv_name_base + '2a')(input_tensor)
    x = BatchNormalization(name=bn_name_base + '2a')(x)
    x = Activation('relu')(x)
    x = Conv2D(filters2, kernel_size, padding='same',
               name=conv_name_base + '2b')(x)
    x = BatchNormalization(name=bn_name_base + '2b')(x)
    x = Activation('relu')(x)
    x = Conv2D(filters3, (1, 1), name=conv_name_base + '2c')(x)
    x = BatchNormalization(name=bn_name_base + '2c')(x)
    shortcut = Conv2D(filters3, (1, 1), strides=strides,
                      name=conv_name_base + '1')(input_tensor)
    shortcut = BatchNormalization(name=bn_name_base + '1')(shortcut)
    x = layers.add([x, shortcut])
    x = Activation('relu')(x)
    return x
def ResNet50(input_shape=[224,224,3],classes=1000):
    img_input = Input(shape=input_shape)
    x = ZeroPadding2D((3, 3))(img_input)
    x = Conv2D(64, (7, 7), strides=(2, 2), name='conv1')(x)
    x = BatchNormalization(name='bn_conv1')(x)
    x = Activation('relu')(x)
    x = MaxPooling2D((3, 3), strides=(2, 2))(x)
    x = conv_block(x, 3, [64, 64, 256], stage=2, block='a', strides=(1, 1))
    x = identity_block(x, 3, [64, 64, 256], stage=2, block='b')
    x = identity_block(x, 3, [64, 64, 256], stage=2, block='c')
    x = conv_block(x, 3, [128, 128, 512], stage=3, block='a')
    x = identity_block(x, 3, [128, 128, 512], stage=3, block='b')
    x = identity_block(x, 3, [128, 128, 512], stage=3, block='c')
    x = identity_block(x, 3, [128, 128, 512], stage=3, block='d')
    x = conv_block(x, 3, [256, 256, 1024], stage=4, block='a')
    x = identity_block(x, 3, [256, 256, 1024], stage=4, block='b')
    x = identity_block(x, 3, [256, 256, 1024], stage=4, block='c')
    x = identity_block(x, 3, [256, 256, 1024], stage=4, block='d')
    x = identity_block(x, 3, [256, 256, 1024], stage=4, block='e')
    x = identity_block(x, 3, [256, 256, 1024], stage=4, block='f')
    x = conv_block(x, 3, [512, 512, 2048], stage=5, block='a')
    x = identity_block(x, 3, [512, 512, 2048], stage=5, block='b')
    x = identity_block(x, 3, [512, 512, 2048], stage=5, block='c')
    x = AveragePooling2D((7, 7), name='avg_pool')(x)
    x = Flatten()(x)
    x = Dense(classes, activation='softmax', name='fc1000')(x)
    model = Model(img_input, x, name='resnet50')
    model.load_weights("resnet50_weights_tf_dim_ordering_tf_kernels.h5")
    return model

圖片預(yù)測

建立網(wǎng)絡(luò)后,可以用以下的代碼進(jìn)行預(yù)測。

if __name__ == '__main__':
    model = ResNet50()
    model.summary()
    img_path = 'elephant.jpg'
    img = image.load_img(img_path, target_size=(224, 224))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    print('Input image shape:', x.shape)
    preds = model.predict(x)
    print('Predicted:', decode_predictions(preds))

預(yù)測所需的已經(jīng)訓(xùn)練好的ResNet50模型可以在https://github.com/fchollet/deep-learning-models/releases下載。非常方便。

預(yù)測結(jié)果為:

Predicted: [[('n01871265', 'tusker', 0.41107917), ('n02504458', 'African_elephant', 0.39015812), ('n02504013', 'Indian_elephant', 0.12260196), ('n03000247', 'chain_mail', 0.023176488), ('n02437312', 'Arabian_camel', 0.020982226)]]

ResNet50模型的完整的結(jié)構(gòu)圖

以上就是python神經(jīng)網(wǎng)絡(luò)ResNet50模型的復(fù)現(xiàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于ResNet50模型復(fù)現(xiàn)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python+OpenCV進(jìn)行不規(guī)則多邊形ROI區(qū)域提取

    Python+OpenCV進(jìn)行不規(guī)則多邊形ROI區(qū)域提取

    ROI即感興趣區(qū)域。機器視覺、圖像處理中,從被處理的圖像以方框、圓、橢圓、不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域,稱為感興趣區(qū)域,ROI。本文將利用Python和OpenCV實現(xiàn)不規(guī)則多邊形ROI區(qū)域提取,需要的可以參考一下
    2022-03-03
  • python中字符串String及其常見操作指南(方法、函數(shù))

    python中字符串String及其常見操作指南(方法、函數(shù))

    String方法是用來處理代碼中的字符串的,它幾乎能搞定你所遇到的所有字符串格式,下面這篇文章主要給大家介紹了關(guān)于python中字符串String及其常見操作(方法、函數(shù))的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • pycharm終端解釋器與Python解釋器配置

    pycharm終端解釋器與Python解釋器配置

    這篇文章主要介紹了pycharm終端解釋器與Python解釋器配置,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • python實現(xiàn)斐波那契數(shù)列的方法示例

    python實現(xiàn)斐波那契數(shù)列的方法示例

    每個碼農(nóng)大概都會用自己擅長的語言寫出一個斐波那契數(shù)列出來,斐波那契數(shù)列簡單地說,起始兩項為0和1,此后的項分別為它的前兩項之后。下面這篇文章就給大家詳細(xì)介紹了python實現(xiàn)斐波那契數(shù)列的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Python操作Excel文件的11種方法(全網(wǎng)最全)

    Python操作Excel文件的11種方法(全網(wǎng)最全)

    在日常工作或開發(fā)過程中,Excel文件作為一種常用的數(shù)據(jù)存儲格式,其高效便捷的數(shù)據(jù)處理能力被廣泛應(yīng)用于數(shù)據(jù)統(tǒng)計、數(shù)據(jù)分析等領(lǐng)域,Python作為一種強大的編程語言,提供了豐富的庫支持來實現(xiàn)對Excel文件的操作,本篇將詳細(xì)介紹如何使用Python來操作Excel文件
    2025-03-03
  • Python+Turtle制作獨特的表白圖

    Python+Turtle制作獨特的表白圖

    這篇文章主要利用Python和Turtle庫繪制獨特的表白圖,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,感興趣的可以了解一下
    2022-04-04
  • Python結(jié)合requests和Cheerio處理網(wǎng)頁內(nèi)容的操作步驟

    Python結(jié)合requests和Cheerio處理網(wǎng)頁內(nèi)容的操作步驟

    Python因其簡潔明了的語法和強大的庫支持,成為了編寫爬蟲程序的首選語言之一,requests庫是Python中用于發(fā)送HTTP請求的第三方庫,而Cheerio庫則是一個用于解析HTML和XML文檔的庫,本文給大家介紹了Python結(jié)合requests和Cheerio處理網(wǎng)頁內(nèi)容的操作步驟
    2025-01-01
  • 利用PyQt5+Matplotlib 繪制靜態(tài)/動態(tài)圖的實現(xiàn)代碼

    利用PyQt5+Matplotlib 繪制靜態(tài)/動態(tài)圖的實現(xiàn)代碼

    這篇文章主要介紹了利用PyQt5+Matplotlib 繪制靜態(tài)/動態(tài)圖的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python3報錯check_hostname?requires?server_hostname的解決

    python3報錯check_hostname?requires?server_hostname的解決

    這篇文章主要介紹了python3報錯check_hostname?requires?server_hostname的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Python-openpyxl表格讀取寫入的案例詳解

    Python-openpyxl表格讀取寫入的案例詳解

    這篇文章主要介紹了Python-openpyxl表格讀取寫入的案例分析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論

南靖县| 泾源县| 北票市| 内丘县| 安康市| 乐业县| 怀来县| 夏津县| 东海县| 绥德县| 白城市| 翁源县| 聂荣县| 岢岚县| 利辛县| 营山县| 大理市| 临漳县| 黄骅市| 分宜县| 莱阳市| 上饶县| 宜宾县| 兴义市| 石林| 彭水| 神池县| 佳木斯市| 尉犁县| 霍林郭勒市| 南宫市| 偏关县| 墨玉县| 廉江市| 山东省| 柏乡县| 淅川县| 张家口市| 达日县| 长沙市| 江华|