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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > ChatGpt >内容正文

ChatGpt

tensorboard ckpt pb 模型的输出节点_FlyAI小课堂:Tensorflow-模型和数据的保存和载入...

發(fā)布時(shí)間:2025/3/15 ChatGpt 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorboard ckpt pb 模型的输出节点_FlyAI小课堂:Tensorflow-模型和数据的保存和载入... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在開(kāi)始學(xué)習(xí)之前推薦大家可以多在FlyAI競(jìng)賽服務(wù)平臺(tái)多參加訓(xùn)練和競(jìng)賽,以此來(lái)提升自己的能力。FlyAI是為AI開(kāi)發(fā)者提供數(shù)據(jù)競(jìng)賽并支持GPU離線訓(xùn)練的一站式服務(wù)平臺(tái)。每周免費(fèi)提供項(xiàng)目開(kāi)源算法樣例,支持算法能力變現(xiàn)以及快速的迭代算法模型。

目錄

  • 基本方法
  • 不需重新定義網(wǎng)絡(luò)結(jié)構(gòu)的方法
  • saved_model方式
  • 附件一:sklearn上的用法

    一、基本方法

    1.1 保存

    • 定義變量
    • 使用saver.save()方法保存
    import tensorflow as tf import numpy as np W = tf.Variable([[1,1,1],[2,2,2]],dtype = tf.float32,name='w') b = tf.Variable([[0,1,2]],dtype = tf.float32,name='b')init = tf.initialize_all_variables() saver = tf.train.Saver() with tf.Session() as sess:sess.run(init)save_path = saver.save(sess,"save/model.ckpt")

    1.2 載入

    • 定義變量
    • 使用saver.restore()方法載入
    import tensorflow as tf import numpy as np W = tf.Variable(tf.truncated_normal(shape=(2,3)),dtype = tf.float32,name='w') b = tf.Variable(tf.truncated_normal(shape=(1,3)),dtype = tf.float32,name='b')saver = tf.train.Saver() with tf.Session() as sess:saver.restore(sess,"save/model.ckpt")

    1.3 說(shuō)明

  • 創(chuàng)建saver時(shí),可以指定需要存儲(chǔ)的tensor,如果沒(méi)有指定,則全部保存;
  • 2. 默認(rèn)情況下:saver.save(sess,"save/model.ckpt")產(chǎn)生4個(gè)文件:

    checkpoint文件保存最新的模型;

    model.ckpt.data 以字典的形式保存權(quán)重偏置項(xiàng)等訓(xùn)練參數(shù)

    model.ckpt.index:存儲(chǔ)訓(xùn)練好的參數(shù)索引

    model.ckpt.meta : 元文件(meta) 中保存了MetaGraphDef 的持久化數(shù)據(jù),即模型數(shù)據(jù),計(jì)算圖的網(wǎng)絡(luò)結(jié)構(gòu)信息,完整的graph、variables、operation、collection。

    3. 如何知道tensor的名字,最好是定義tensor的時(shí)候就指定名字,如上面代碼中的name='w',如果你沒(méi)有定義name,tensorflow也會(huì)設(shè)置name,只不過(guò)這個(gè)name就是根據(jù)你的tensor或者操作的性質(zhì)。所以最好還是自己定義好name。

    【說(shuō)明:這種方法不方便的在于,在使用模型的時(shí)候,必須把模型的結(jié)構(gòu)重新定義一遍,然后載入對(duì)應(yīng)名字的變量的值。但是很多時(shí)候我們都更希望能夠讀取一個(gè)文件然后就直接使用模型,而不是還要把模型重新定義一遍。所以就需要使用另一種方法?!?/p>

    二、不需重新定義網(wǎng)絡(luò)結(jié)構(gòu)的方法

    tf.train.import_meta_graph

    import_meta_graph(

    meta_graph_or_file,

    clear_devices=False,

    import_scope=None,

    **kwargs

    )

    這個(gè)方法可以從文件中將保存的graph的所有節(jié)點(diǎn)加載到當(dāng)前的default graph中,并返回一個(gè)saver。也就是說(shuō),我們?cè)诒4娴臅r(shí)候,除了將變量的值保存下來(lái),其實(shí)還有將對(duì)應(yīng)graph中的各種節(jié)點(diǎn)保存下來(lái),所以模型的結(jié)構(gòu)也同樣被保存下來(lái)了。

    比如我們想要保存計(jì)算最后預(yù)測(cè)結(jié)果的y,則應(yīng)該在訓(xùn)練階段將它添加到collection中。具體代碼如下:

    2.1 保存

    和1.1一樣,保持不變

    2.2 載入

    import tensorflow as tf import numpy as np # W = tf.Variable(tf.truncated_normal(shape=(2,3)),dtype = tf.float32,name='w') # b = tf.Variable(tf.truncated_normal(shape=(1,3)),dtype = tf.float32,name='b')# saver = tf.train.Saver() with tf.Session() as sess:new_saver = tf.train.import_meta_graph("save/model.ckpt.meta")new_saver.restore(sess, "save/model.ckpt")

    【個(gè)人理解:model.ckpt.meta : 保存了TensorFlow計(jì)算圖的網(wǎng)絡(luò)結(jié)構(gòu)信息,import_meta_graph("save/model.ckpt.meta")這句拉取了結(jié)構(gòu),故不用重新定義?!?/p>

    三、saved_model方式

    實(shí)現(xiàn)了 (y = x + b)當(dāng)輸入一個(gè)x 那么輸出的結(jié)果y就等于輸入x加上b。

    3.1 保存

    # Author:yifan import os import tensorflow as tf # 以下所有代碼默認(rèn)導(dǎo)入 from tensorflow.python.saved_model.signature_def_utils_impl import predict_signature_def # 保存模型路徑 PATH = './models' # 創(chuàng)建一個(gè)變量 one = tf.Variable(3.0) # 創(chuàng)建一個(gè)占位符,在 Tensorflow 中需要定義 placeholder 的 type ,一般為 float32 形式 num = tf.placeholder(tf.float32,name='input') # 創(chuàng)建一個(gè)加法步驟,注意這里并沒(méi)有直接計(jì)算 sum = tf.add(num,one,name='output') # 初始化變量,如果定義Variable就必須初始化 init = tf.global_variables_initializer() # 創(chuàng)建會(huì)話(huà)sess with tf.Session() as sess:sess.run(init)print(sess.run(sum, feed_dict={num: 5.0}))# #保存SavedModel模型,使用以下三句builder = tf.saved_model.builder.SavedModelBuilder(PATH)signature = predict_signature_def(inputs={'input':num}, outputs={'output':sum})builder.add_meta_graph_and_variables(sess,[tf.saved_model.tag_constants.SERVING],signature_def_map={'predict': signature})builder.save()

    說(shuō)明:

  • tf.saved_model.builder.SavedModelBuilder:該方法的參數(shù)是傳入用于保存模型的目錄名,目錄不用預(yù)先創(chuàng)建
  • predict_signature_def:將輸入節(jié)點(diǎn)、輸出節(jié)點(diǎn)和名字(sig_name)傳入,生成一個(gè)簽名對(duì)象。傳入的參數(shù)為輸入和輸出以及他們的name。
  • add_meta_graph_and_variables:將簽名加入到模型中
  • 第一個(gè)參數(shù)傳入的是Session它包含了當(dāng)前graph(圖)和Variables(變量)。
  • 第二個(gè)參數(shù)是給當(dāng)前需要保存的MetaGraph 一個(gè)標(biāo)簽,標(biāo)簽名可以自定義,在之后載入模型的時(shí)候,需要根據(jù)這個(gè)標(biāo)簽名去查找對(duì)應(yīng)的MetaGraphDef,找不到就會(huì)報(bào)如 RuntimeError: MetaGraphDef associated with tags 'foo' could not be found in SavedModel這樣的錯(cuò)。
  • ---- 標(biāo)簽也可以選用系統(tǒng)定義好的參數(shù),tf.saved_model.tag_constants.SERVING與 tf.saved_model.tag_constants.TRAINING等。

    運(yùn)行結(jié)果:8.0,和保存的模型:

  • 執(zhí)行完成后會(huì)在當(dāng)前項(xiàng)目的目錄下生成models文件夾,里面包含variables文件夾以及saved_model.pb文件。
  • variables保存所有變量信息,
  • saved_model.pb用于保存模型結(jié)構(gòu)等信息,含圖形結(jié)構(gòu)。
  • 注意:當(dāng)前目錄下不可以存在models文件夾,否則會(huì)報(bào)錯(cuò)。

    3.2 載入

    # Author:yifan import tensorflow as tf # 以下所有代碼默認(rèn)導(dǎo)入 PATH = './models' with tf.Session() as sess:tf.saved_model.loader.load(sess, ["serve"], PATH) #一種載入變量的方式:in_x =tf.saved_model.loader.load(sess, ["serve"], PATH).signature_def['predict'].inputs['input'].name #另一種載入變量的方式: # in_x = sess.graph.get_tensor_by_name('input:0') #加載輸入變量y = sess.graph.get_tensor_by_name('output:0') #加載輸出變量scores = sess.run(y, feed_dict={in_x: 3.})print(scores)

    說(shuō)明:

  • tf.saved_model.loader.load方法加載模型,第二個(gè)參數(shù)["serve"]為T(mén)AG標(biāo)簽與存模型時(shí)候指定的字段相同(tf.saved_model.tag_constants.SERVING = "serve",本文中調(diào)用了tf的定義),第三個(gè)參數(shù)為模型路徑;
  • tf.saved_model.loader.load(sess, ["serve"], PATH).signature_def['predict'].inputs['input'].name:用signature_def方法從導(dǎo)入的模型中提取簽名。和3)作用是一樣的。
  • sess.graph.get_tensor_by_name:加載輸入輸出變量,注意這里的變量name都需要加上":0",如"input"變?yōu)?#34;input:0"
  • 最后像之前那樣sess.run(),feed喂入數(shù)據(jù),這里輸入了個(gè)3.0。
  • 結(jié)果:6.0

    3.3 查看模型的Signature簽名

    傳統(tǒng)的導(dǎo)入 需要用get_tensor_by_name , 這樣就需要記錄tensor的name熟悉,很麻煩。通過(guò)signature,我們可以指定變量的別名,方便存取。但如果我們拿到了別人的含有signature一個(gè)SavedModel模型而且并不知道"標(biāo)簽"那么怎么調(diào)用呢?

    ---Tensorflow官方已經(jīng)為我們準(zhǔn)備好了一個(gè)腳本,tensorflow下的saved_model_cli.py文件可以幫到。

    我們可以'WIN+R'輸入'cmd'然后回車(chē)打開(kāi)你的CMD,然后指定路徑到你的模型目錄下,運(yùn)行:

    saved_model_cli show --dir=./ --all

    打印出的信息中我們就可以看到模型的輸入/輸出的名稱(chēng)、數(shù)據(jù)類(lèi)型、shape以及方法名稱(chēng)。

    附件一:sklearn上的用法

    保存參數(shù):

    from sklearn.externals import joblib

    joblib.dump((centres, des_list,img_features), "imgs_features.pkl", compress=3)

    讀取參數(shù):

    centres, des_list, img_features = joblib.load("imgs_features.pkl") #讀取保存的特征

    參考文章

    【1】

    TensorFlow 模型保存/載入的兩種方法?blog.csdn.net

    【2】

    【tensorflow】保存模型、再次加載模型等操作_I am what i am-CSDN博客_保存模型?blog.csdn.net

    【3】

    TensorFlow saved_model 模塊?blog.csdn.net

    【4】

    Tensorflow學(xué)習(xí)筆記(二)模型的保存與加載(一 )?blog.csdn.net

    更多精彩內(nèi)容請(qǐng)?jiān)L問(wèn)FlyAI-AI競(jìng)賽服務(wù)平臺(tái);為AI開(kāi)發(fā)者提供數(shù)據(jù)競(jìng)賽并支持GPU離線訓(xùn)練的一站式服務(wù)平臺(tái);每周免費(fèi)提供項(xiàng)目開(kāi)源算法樣例,支持算法能力變現(xiàn)以及快速的迭代算法模型。

    挑戰(zhàn)者,都在FlyAI!!!

    新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

    總結(jié)

    以上是生活随笔為你收集整理的tensorboard ckpt pb 模型的输出节点_FlyAI小课堂:Tensorflow-模型和数据的保存和载入...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。