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

深度學(xué)習(xí)小工程練習(xí)之tensorflow垃圾分類詳解

 更新時(shí)間:2021年04月14日 17:35:56   作者:tzc_fly  
這篇文章主要介紹了練習(xí)深度學(xué)習(xí)的一個(gè)小工程,代碼簡(jiǎn)單明確,用來(lái)作為學(xué)習(xí)深度學(xué)習(xí)的練習(xí)很適合,對(duì)于有需要的朋友可以參考下,希望大家可以體驗(yàn)到深度學(xué)習(xí)帶來(lái)的收獲

介紹

這是一個(gè)基于深度學(xué)習(xí)的垃圾分類小工程,用深度殘差網(wǎng)絡(luò)構(gòu)建

軟件架構(gòu)

  1. 使用深度殘差網(wǎng)絡(luò)resnet50作為基石,在后續(xù)添加需要的層以適應(yīng)不同的分類任務(wù)
  2. 模型的訓(xùn)練需要用生成器將數(shù)據(jù)集循環(huán)寫(xiě)入內(nèi)存,同時(shí)圖像增強(qiáng)以泛化模型
  3. 使用不包含網(wǎng)絡(luò)輸出部分的resnet50權(quán)重文件進(jìn)行遷移學(xué)習(xí),只訓(xùn)練我們?cè)?個(gè)stage后增加的層

安裝教程

  1. 需要的第三方庫(kù)主要有tensorflow1.x,keras,opencv,Pillow,scikit-learn,numpy
  2. 安裝方式很簡(jiǎn)單,打開(kāi)terminal,例如:pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
  3. 數(shù)據(jù)集與權(quán)重文件比較大,所以沒(méi)有上傳
  4. 如果環(huán)境配置方面有問(wèn)題或者需要數(shù)據(jù)集與模型權(quán)重文件,可以在評(píng)論區(qū)說(shuō)明您的問(wèn)題,我將遠(yuǎn)程幫助您

使用說(shuō)明

  1. 文件夾theory記錄了我在本次深度學(xué)習(xí)中收獲的筆記,與模型訓(xùn)練的控制臺(tái)打印信息
  2. 遷移學(xué)習(xí)需要的初始權(quán)重與模型定義文件resnet50.py放在model
  3. 下訓(xùn)練運(yùn)行trainNet.py,訓(xùn)練結(jié)束會(huì)創(chuàng)建models文件夾,并將結(jié)果權(quán)重garclass.h5寫(xiě)入該文件夾
  4. datagen文件夾下的genit.py用于進(jìn)行圖像預(yù)處理以及數(shù)據(jù)生成器接口
  5. 使用訓(xùn)練好的模型進(jìn)行垃圾分類,運(yùn)行Demo.py

結(jié)果演示

在這里插入圖片描述

cans易拉罐

在這里插入圖片描述

代碼解釋

在實(shí)際的模型中,我們只使用了resnet50的5個(gè)stage,后面的輸出部分需要我們自己定制,網(wǎng)絡(luò)的結(jié)構(gòu)圖如下:

在這里插入圖片描述

stage5后我們的定制網(wǎng)絡(luò)如下:

"""定制resnet后面的層"""
def custom(input_size,num_classes,pretrain):
    # 引入初始化resnet50模型
    base_model = ResNet50(weights=pretrain,
                          include_top=False,
                          pooling=None,
                          input_shape=(input_size,input_size, 3),
                          classes=num_classes)
    #由于有預(yù)權(quán)重,前部分凍結(jié),后面進(jìn)行遷移學(xué)習(xí)
    for layer in base_model.layers:
        layer.trainable = False
    #添加后面的層
    x = base_model.output
    x = layers.GlobalAveragePooling2D(name='avg_pool')(x)
    x = layers.Dropout(0.5,name='dropout1')(x)
    #regularizers正則化層,正則化器允許在優(yōu)化過(guò)程中對(duì)層的參數(shù)或?qū)拥募せ钋闆r進(jìn)行懲罰
    #對(duì)損失函數(shù)進(jìn)行最小化的同時(shí),也需要讓對(duì)參數(shù)添加限制,這個(gè)限制也就是正則化懲罰項(xiàng),使用l2范數(shù)
    x = layers.Dense(512,activation='relu',kernel_regularizer= regularizers.l2(0.0001),name='fc2')(x)
    x = layers.BatchNormalization(name='bn_fc_01')(x)
    x = layers.Dropout(0.5,name='dropout2')(x)
    #40個(gè)分類
    x = layers.Dense(num_classes,activation='softmax')(x)
    model = Model(inputs=base_model.input,outputs=x)
    #模型編譯
    model.compile(optimizer="adam",loss = 'categorical_crossentropy',metrics=['accuracy'])
    return model

網(wǎng)絡(luò)的訓(xùn)練是遷移學(xué)習(xí)過(guò)程,使用已有的初始resnet50權(quán)重(5個(gè)stage已經(jīng)訓(xùn)練過(guò),卷積層已經(jīng)能夠提取特征),我們只訓(xùn)練后面的全連接層部分,4個(gè)epoch后再對(duì)較后面的層進(jìn)行訓(xùn)練微調(diào)一下,獲得更高準(zhǔn)確率,訓(xùn)練過(guò)程如下:

class Net():
    def __init__(self,img_size,gar_num,data_dir,batch_size,pretrain):
        self.img_size=img_size
        self.gar_num=gar_num
        self.data_dir=data_dir
        self.batch_size=batch_size
        self.pretrain=pretrain
    def build_train(self):
        """遷移學(xué)習(xí)"""
        model = resnet.custom(self.img_size, self.gar_num, self.pretrain)
        model.summary()
        train_sequence, validation_sequence = genit.gendata(self.data_dir, self.batch_size, self.gar_num, self.img_size)
        epochs=4
        model.fit_generator(train_sequence,steps_per_epoch=len(train_sequence),epochs=epochs,verbose=1,validation_data=validation_sequence,
                                     max_queue_size=10,shuffle=True)
        #微調(diào),在實(shí)際工程中,激活函數(shù)也被算進(jìn)層里,所以總共181層,微調(diào)是為了重新訓(xùn)練部分卷積層,同時(shí)訓(xùn)練最后的全連接層
        layers=149
        learning_rate=1e-4
        for layer in model.layers[:layers]:
            layer.trainable = False
        for layer in model.layers[layers:]:
            layer.trainable = True
        Adam =adam(lr=learning_rate, decay=0.0005)
        model.compile(optimizer=Adam, loss='categorical_crossentropy', metrics=['accuracy'])
        model.fit_generator(train_sequence,steps_per_epoch=len(train_sequence),epochs=epochs * 2,verbose=1,
            callbacks=[
                callbacks.ModelCheckpoint('./models/garclass.h5',monitor='val_loss', save_best_only=True, mode='min'),
                callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1,patience=10, mode='min'),
                callbacks.EarlyStopping(monitor='val_loss', patience=10),],
            validation_data=validation_sequence,max_queue_size=10,shuffle=True)
        print('finish train,look for garclass.h5')

訓(xùn)練結(jié)果如下:

 """

    loss: 0.7949 - acc: 0.9494 - val_loss: 0.9900 - val_acc: 0.8797

    訓(xùn)練用了9小時(shí)左右

 """

如果使用更好的顯卡,可以更快完成訓(xùn)練

最后

希望大家可以體驗(yàn)到深度學(xué)習(xí)帶來(lái)的收獲,能和大家學(xué)習(xí)很開(kāi)心,更多關(guān)于深度學(xué)習(xí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于python定位棋子位置及識(shí)別棋子顏色

    基于python定位棋子位置及識(shí)別棋子顏色

    本文主要介紹了python定位棋子位置及識(shí)別棋子顏色,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • python去除空格和換行符的實(shí)現(xiàn)方法(推薦)

    python去除空格和換行符的實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)?lái)一篇python去除空格和換行符的實(shí)現(xiàn)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Python實(shí)現(xiàn)自定義讀寫(xiě)分離代碼實(shí)例

    Python實(shí)現(xiàn)自定義讀寫(xiě)分離代碼實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)自定義讀寫(xiě)分離代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python開(kāi)發(fā)一個(gè)解析protobuf文件的簡(jiǎn)單編譯器

    python開(kāi)發(fā)一個(gè)解析protobuf文件的簡(jiǎn)單編譯器

    這篇文章主要介紹了python如何開(kāi)發(fā)一個(gè)解析protobuf文件的簡(jiǎn)單編譯器,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • 備戰(zhàn)618!用Python腳本幫你實(shí)現(xiàn)淘寶秒殺

    備戰(zhàn)618!用Python腳本幫你實(shí)現(xiàn)淘寶秒殺

    本次的文章,分享一個(gè)淘寶秒殺腳本,這個(gè)腳本用Python編寫(xiě),使用了Python庫(kù)selenium,并且通過(guò)selenium + chromedriver,用程序控制chrome瀏覽器,完成搶購(gòu)的一系列操作.有了這個(gè)腳本,大家至少可以與其他的機(jī)器人站在同一起跑線上,公平搶購(gòu)喜歡的寶貝 ,需要的朋友可以參考下
    2021-06-06
  • Micropython固件使用Pico刷固件并配置VsCode開(kāi)發(fā)環(huán)境的方法

    Micropython固件使用Pico刷固件并配置VsCode開(kāi)發(fā)環(huán)境的方法

    這篇文章主要介紹了Micropython固件使用Pico刷固件并配置VsCode開(kāi)發(fā)環(huán)境的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • Mac版Python3安裝/升級(jí)的方式

    Mac版Python3安裝/升級(jí)的方式

    這篇文章主要介紹了Mac版Python3安裝/升級(jí)的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解Python中heapq模塊的用法

    詳解Python中heapq模塊的用法

    Python中的heapq模塊提供了一種堆隊(duì)列heapq類型,這樣實(shí)現(xiàn)堆排序等算法便相當(dāng)方便,這里我們就來(lái)詳解Python中heapq模塊的用法,需要的朋友可以參考下
    2016-06-06
  • python生成隨機(jī)驗(yàn)證碼(中文驗(yàn)證碼)示例

    python生成隨機(jī)驗(yàn)證碼(中文驗(yàn)證碼)示例

    這篇文章主要介紹了python生成中文隨機(jī)驗(yàn)證碼示例,需要的朋友可以參考下
    2014-04-04
  • tensorflow2.0與tensorflow1.0的性能區(qū)別介紹

    tensorflow2.0與tensorflow1.0的性能區(qū)別介紹

    今天小編就為大家分享一篇tensorflow2.0與tensorflow1.0的性能區(qū)別介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02

最新評(píng)論

桑植县| 镇巴县| 奉新县| 金湖县| 晋城| 永胜县| 东乌珠穆沁旗| 杭州市| 清镇市| 白河县| 固阳县| 喀喇沁旗| 奈曼旗| 宁陵县| 衡阳县| 永清县| 南和县| 东城区| 祥云县| 县级市| 汉沽区| 南华县| 黄石市| 黑水县| 长葛市| 长宁区| 会宁县| 陕西省| 萍乡市| 嘉峪关市| 五原县| 安乡县| 共和县| 铁力市| 玉山县| 八宿县| 大埔区| 无为县| 紫金县| 泸溪县| 大新县|