tensorflow2裝甲板id識(shí)別 2網(wǎng)絡(luò)搭建與訓(xùn)練

tfrecord數(shù)據(jù)到可用數(shù)據(jù)集的轉(zhuǎn)換

在上一篇文章中實(shí)現(xiàn)了tfrecord格式數(shù)據(jù)的讀取
http://www.reibang.com/p/88d09196bf07
但是讀取的內(nèi)容還不能直接被網(wǎng)絡(luò)訓(xùn)練函數(shù)使用艇劫,因而需要對(duì)讀到的數(shù)據(jù)進(jìn)行簡(jiǎn)單處理

reader = tf.data.TFRecordDataset(record_path) # 打開一個(gè)TFrecord

讀取數(shù)據(jù)后硼控,圖像數(shù)據(jù)進(jìn)行解碼和數(shù)據(jù)類型轉(zhuǎn)化來適應(yīng)網(wǎng)絡(luò)計(jì)算的要求,最后將所得列表轉(zhuǎn)化為tensor適配fit函數(shù)要求的格式底扳,實(shí)現(xiàn)如下

def read_dataset(record_path):
    reader = tf.data.TFRecordDataset(record_path) # 打開一個(gè)TFrecord
    #reader = reader.shuffle (buffer_size = 1000) # 在緩沖區(qū)中隨機(jī)打亂數(shù)據(jù)
    reader = reader.map (_parse_function) # 解析數(shù)據(jù)
    #for row in reader.take(1): #獲取指定數(shù)量的數(shù)據(jù)集
    labels = []
    imgs = []
    for row in reader:                #遍歷數(shù)據(jù)集
        label = tf.cast(row['label'],dtype=tf.float32)
        label = label - 1
        #此處應(yīng)當(dāng)注意tf.int8和tf.uint8的區(qū)別,使用錯(cuò)誤將造成正常讀入的圖片解碼結(jié)果與tfrecord解碼結(jié)果不一致
        img = tf.io.decode_raw(row['img_raw'],out_type=tf.uint8)
        img = tf.cast(img,dtype=tf.float32)
        labels.append(label)
        imgs.append(img)

    np.random.seed(1024)
    np.random.shuffle(labels)
    np.random.seed(1024)
    np.random.shuffle(imgs)
    np.random.seed(1024)

    labels = tf.convert_to_tensor(labels)
    imgs =  tf.convert_to_tensor(imgs)
    return labels,imgs

應(yīng)當(dāng)注意tf.int8和tf.uint8的區(qū)別瀑凝,使用錯(cuò)誤將造成正常讀入的圖片解碼結(jié)果與tfrecord解碼結(jié)果不一致

訓(xùn)練過程與訓(xùn)練模型保存

該部分的內(nèi)容與
http://www.reibang.com/p/94cf2a32bbf0
中的差異并不大蝙眶,這里直接貼出完整實(shí)現(xiàn)

import tensorflow as tf
import os
import numpy as np
#定義待解析數(shù)據(jù)集特征
feature_description = {
    'label': tf.io.FixedLenFeature([] , tf.int64, default_value=-1), # 默認(rèn)值自己定義
    'img_raw' : tf.io.FixedLenFeature([], tf.string)
}
# 映射函數(shù),用于解析一條example
def _parse_function (exam_proto): 
    return tf.io.parse_single_example (exam_proto, feature_description)
#讀取返回?cái)?shù)據(jù)集
def read_dataset(record_path):
    reader = tf.data.TFRecordDataset(record_path) # 打開一個(gè)TFrecord
    #reader = reader.shuffle (buffer_size = 1000) # 在緩沖區(qū)中隨機(jī)打亂數(shù)據(jù)
    reader = reader.map (_parse_function) # 解析數(shù)據(jù)
    #for row in reader.take(1): #獲取指定數(shù)量的數(shù)據(jù)集
    labels = []
    imgs = []
    for row in reader:                #遍歷數(shù)據(jù)集
        label = tf.cast(row['label'],dtype=tf.float32)
        label = label - 1
        img = tf.io.decode_raw(row['img_raw'],out_type=tf.uint8)
        img = tf.cast(img,dtype=tf.float32)
        labels.append(label)
        imgs.append(img)

    np.random.seed(1024)
    np.random.shuffle(labels)
    np.random.seed(1024)
    np.random.shuffle(imgs)
    np.random.seed(1024)

    labels = tf.convert_to_tensor(labels)
    imgs =  tf.convert_to_tensor(imgs)
    return labels,imgs
      
if __name__ == '__main__':
    labels,imgs = read_dataset('./armor_train.tfrecords')
    #網(wǎng)絡(luò)搭建
    model = tf.keras.models.Sequential([
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(500,activation='relu',kernel_regularizer=tf.keras.regularizers.l2()),
        tf.keras.layers.Dense(128,activation='relu',kernel_regularizer=tf.keras.regularizers.l2()),
        tf.keras.layers.Dense(50,activation='relu',kernel_regularizer=tf.keras.regularizers.l2()),
        tf.keras.layers.Dense(8,activation='softmax',kernel_regularizer=tf.keras.regularizers.l2())
    ])
    #訓(xùn)練參數(shù)設(shè)置
    model.compile(
        optimizer=tf.keras.optimizers.Adam(),
        loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
        metrics=['sparse_categorical_accuracy']
    )
    #模型持久化設(shè)置
    ckpt_path = "./checkpoint/armor_id.ckpt"
    if(os.path.exists(ckpt_path + ".index")): #生成ckpt的同時(shí)會(huì)生成index文件,可通過該文件是否存在判斷是否有預(yù)訓(xùn)練模型生成
        print("--load modle--")
        model.load_weights(ckpt_path)

    cp_callback = tf.keras.callbacks.ModelCheckpoint(
        filepath = ckpt_path,
        save_weights_only=True,                       #只保留模型參數(shù)
        save_best_only=True                                #只保留最優(yōu)模型
    )
    #訓(xùn)練
    history = model.fit(imgs,labels,batch_size=32,epochs=50,validation_split=0.2,validation_freq=1,callbacks=[cp_callback])
    #網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)顯示
    model.summary()

結(jié)果分析

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

curacy: 0.9874 - val_loss: 0.3584 - val_sparse_categorical_accuracy: 0.9764
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten (Flatten)            multiple                  0         
_________________________________________________________________
dense (Dense)                multiple                  6144500   
_________________________________________________________________
dense_1 (Dense)              multiple                  64128     
_________________________________________________________________
dense_2 (Dense)              multiple                  6450      
_________________________________________________________________
dense_3 (Dense)              multiple                  408       
=================================================================
Total params: 6,215,486
Trainable params: 6,215,486
Non-trainable params: 0
_________________________________________________________________

后面還需要對(duì)網(wǎng)絡(luò)的結(jié)構(gòu)進(jìn)行進(jìn)一步的更改剧腻。不過可以確定的是訓(xùn)練流程已經(jīng)跑通。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涂屁,一起剝皮案震驚了整個(gè)濱河市书在,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拆又,老刑警劉巖儒旬,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栏账,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡栈源,警方通過查閱死者的電腦和手機(jī)挡爵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甚垦,“玉大人茶鹃,你說我怎么就攤上這事≈坪洌” “怎么了前计?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)垃杖。 經(jīng)常有香客問我,道長(zhǎng)丈屹,這世上最難降的妖魔是什么调俘? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮旺垒,結(jié)果婚禮上彩库,老公的妹妹穿的比我還像新娘。我一直安慰自己先蒋,他們只是感情好骇钦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竞漾,像睡著了一般眯搭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上业岁,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天鳞仙,我揣著相機(jī)與錄音,去河邊找鬼笔时。 笑死棍好,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的允耿。 我是一名探鬼主播借笙,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼较锡!你這毒婦竟也來了业稼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤念链,失蹤者是張志新(化名)和其女友劉穎盼忌,沒想到半個(gè)月后积糯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谦纱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年看成,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跨嘉。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡川慌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祠乃,到底是詐尸還是另有隱情梦重,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布亮瓷,位于F島的核電站琴拧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嘱支。R本人自食惡果不足惜蚓胸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望除师。 院中可真熱鬧沛膳,春花似錦、人聲如沸汛聚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倚舀。三九已至叹哭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞄桨,已是汗流浹背话速。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芯侥,地道東北人泊交。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像柱查,于是被迫代替她去往敵國和親廓俭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容