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

淺談Tensorflow加載Vgg預(yù)訓(xùn)練模型的幾個(gè)注意事項(xiàng)

 更新時(shí)間:2020年05月26日 11:19:06   作者:GodWriter  
這篇文章主要介紹了淺談Tensorflow加載Vgg預(yù)訓(xùn)練模型的幾個(gè)注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

寫(xiě)這個(gè)博客的關(guān)鍵Bug: Value passed to parameter 'input' has DataType uint8 not in list of allowed values: float16, bfloat16, float32, float64。本博客將圍繞 加載圖片 和 保存圖片到本地 來(lái)詳細(xì)解釋和解決上述的Bug及其引出來(lái)的一系列Bug。

加載圖片

首先,造成上述Bug的代碼如下所示

image_path = "data/test.jpg" # 本地的測(cè)試圖片
 
image_raw = tf.gfile.GFile(image_path, 'rb').read()
# 一定要tf.float(),否則會(huì)報(bào)錯(cuò)
image_decoded = tf.image.decode_jpeg(image_raw)
 
# 擴(kuò)展圖片的維度,從三維變成四維,符合Vgg19的輸入接口
image_expand_dim = tf.expand_dims(image_decoded, 0)
 
# 定義Vgg19模型
vgg19 = VGG19(data_path)
net = vgg19.feed_forward(image_expand_dim, 'vgg19')
print(net)

上述代碼是加載Vgg19預(yù)訓(xùn)練模型,并傳入圖片得到所有層的特征圖,具體的代碼實(shí)現(xiàn)和原理講解可參考我的另一篇博客:Tensorflow加載Vgg預(yù)訓(xùn)練模型。那么,為什么代碼會(huì)出現(xiàn): Value passed to parameter 'input' has DataType uint8 not in list of allowed values: float16, bfloat16, float32, float64,這個(gè)Bug呢?

這句英文翻譯過(guò)來(lái)是指:傳遞的值類(lèi)型是uint8,但是接受的參數(shù)類(lèi)型必須是float的那幾種。故原因就是傳入值的數(shù)據(jù)類(lèi)型錯(cuò)了,那么如何解決這個(gè)Bug呢,很簡(jiǎn)單

image_path = "data/test.jpg" # 本地的測(cè)試圖片
 
image_raw = tf.gfile.GFile(image_path, 'rb').read()
# 一定要tf.float(),否則會(huì)報(bào)錯(cuò)
image_decoded = tf.to_float(tf.image.decode_jpeg(image_raw))
 
# 擴(kuò)展圖片的維度,從三維變成四維,符合Vgg19的輸入接口
image_expand_dim = tf.expand_dims(image_decoded, 0)
 
# 定義Vgg19模型
vgg19 = VGG19(data_path)
net = vgg19.feed_forward(image_expand_dim, 'vgg19')
print(net)

這兩個(gè)代碼塊唯一的變動(dòng)就是:image_decoded結(jié)果在輸出前加了一個(gè)tf.float(),將其轉(zhuǎn)換為float類(lèi)型。

在tensorflow API中,tf.image.decode_jpeg()默認(rèn)讀取的圖片數(shù)據(jù)格式為unit8,而不是float。uint8數(shù)據(jù)的范圍在(0, 255)中,正好符合圖片的像素范圍(0, 255)。但是,保存在本地的Vgg19預(yù)訓(xùn)練模型的數(shù)據(jù)接口為float,所以才造成了本文開(kāi)頭的Bug。

這里還要提一點(diǎn),若是使用PIL的方法來(lái)加載圖片,則不會(huì)出現(xiàn)上述的Bug,因?yàn)橥ㄟ^(guò)PIL得到的圖片格式是float,而不是uint8,故不需要轉(zhuǎn)換。

很多同學(xué)可能會(huì)疑惑,若是強(qiáng)行改變了原圖片的數(shù)據(jù)格式,從uint8類(lèi)型轉(zhuǎn)變成float,會(huì)不會(huì)導(dǎo)致數(shù)據(jù)改變或者出錯(cuò)?故我做了下面這個(gè)實(shí)驗(yàn):

image_path = "data/3.jpg"
image_raw = tf.gfile.GFile(image_path, 'rb').read()
image_unit8 = tf.image.decode_jpeg(image_raw)
image_float = tf.to_float(image_unit8)
 
with tf.Session() as sess:
 image_unit8_, image_float_ = sess.run([image_unit8, image_float])
 
print("image_unit8_", image_unit8_)
print("image_float_ ", image_float_ )

代碼結(jié)果如下:

 image_unit8_
 [180, 192, 204],
 [183, 195, 207],
 [186, 198, 210],
 ...,
 [191, 205, 218],
 [191, 205, 218],
 [190, 204, 217]],
 
 image_float_ 
 [180., 192., 204.],
 [183., 195., 207.],
 [186., 198., 210.],
 ...,
 [191., 205., 218.],
 [191., 205., 218.],
 [190., 204., 217.]],

可以看到,數(shù)據(jù)根本沒(méi)有變化,只是后面多加了個(gè)小數(shù)點(diǎn),變得只有類(lèi)型,而沒(méi)有強(qiáng)制改變值,故同學(xué)們不需要過(guò)度擔(dān)心。

保存圖片到本地

在加載圖片的時(shí)候,為了使用保存在本地的預(yù)訓(xùn)練Vgg19模型,我們需要將讀取的圖片由uint8格式轉(zhuǎn)換成float格式。那若是我們想將已經(jīng)轉(zhuǎn)換為float格式的圖片再保存到本地,該怎么做呢?

首先,我們根據(jù)上述的文字的意思讀取圖片,并且將其轉(zhuǎn)換為float格式,在將讀取的圖片再次保存到本地之前,我們首先可視化一下轉(zhuǎn)換格式后的圖片,代碼如下:

import tensorflow as tf
from matplotlib import pyplot as plt
image_path = "data/boat.jpg"
 
image_raw = tf.gfile.GFile(image_path, 'rb').read()
image_decoded = tf.image.decode_jpeg(image_raw)
image_decoded = tf.to_float(image_decoded)
 
with tf.Session() as sess:
 image_decoded_ = sess.run(image_decoded)
 plt.imshow(image_decoded_)
 plt.show()

生成的圖片如下圖所示:

左邊是原圖,右邊是轉(zhuǎn)換為float格式的圖片,可見(jiàn)將圖片轉(zhuǎn)換為float格式,雖然數(shù)值沒(méi)有造成太大影響,但是若想將圖片保存到本地就會(huì)出現(xiàn)問(wèn)題。

說(shuō)了這么多,只為了說(shuō)一點(diǎn),在保存圖片到本地之前,需要將其格式從float轉(zhuǎn)回uint8,否則會(huì)造成一系列錯(cuò)誤:圖片顯示異常,API報(bào)錯(cuò)等。正確的保存代碼如下:

save_path = "data/boat_copy.jpg"
image_uint = tf.cast(image_decoded, tf.uint8)
with tf.Session() as sess:
 with open(save_path, 'wb') as img:
 image_saved = sess.run(tf.image.encode_jpeg(image_uint))
 img.write(image_saved)

其中只有一句話(huà)最關(guān)鍵,即 tf.cast(image_decoded, tf.uint8)。

以上這篇淺談Tensorflow加載Vgg預(yù)訓(xùn)練模型的幾個(gè)注意事項(xiàng)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python繪圖庫(kù)之pyqtgraph的用法詳解

    Python繪圖庫(kù)之pyqtgraph的用法詳解

    PyQtGraph建立在Qt QGraphicsScene的原生庫(kù),可提供更好更高性能繪圖能力,特別是對(duì)于實(shí)時(shí)數(shù)據(jù),可以提供交互性和使用Qt圖形小部件輕松自定義繪圖的能力。本文就來(lái)解釋一下pyqtgraph的用法,需要的可以收藏一下
    2022-12-12
  • 解決Python pandas plot輸出圖形中顯示中文亂碼問(wèn)題

    解決Python pandas plot輸出圖形中顯示中文亂碼問(wèn)題

    今天小編就為大家分享一篇解決Python pandas plot輸出圖形中顯示中文亂碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python基于回溯法子集樹(shù)模板解決找零問(wèn)題示例

    Python基于回溯法子集樹(shù)模板解決找零問(wèn)題示例

    這篇文章主要介紹了Python基于回溯法子集樹(shù)模板解決找零問(wèn)題,簡(jiǎn)單描述了找零問(wèn)題并結(jié)合具體實(shí)例形式分析了Python使用回溯法子集樹(shù)模板解決找零問(wèn)題的步驟、實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Python3單行定義多個(gè)變量或賦值方法

    Python3單行定義多個(gè)變量或賦值方法

    今天小編就為大家分享一篇Python3單行定義多個(gè)變量或賦值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 基于Python詞云分析政府工作報(bào)告關(guān)鍵詞

    基于Python詞云分析政府工作報(bào)告關(guān)鍵詞

    這篇文章主要介紹了基于Python詞云分析政府工作報(bào)告關(guān)鍵詞,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • pandas DataFrame的修改方法(值、列、索引)

    pandas DataFrame的修改方法(值、列、索引)

    這篇文章主要介紹了pandas DataFrame的修改方法(值、列、索引),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python用sqlacodegen根據(jù)已有數(shù)據(jù)庫(kù)(表)結(jié)構(gòu)生成對(duì)應(yīng)SQLAlchemy模型

    python用sqlacodegen根據(jù)已有數(shù)據(jù)庫(kù)(表)結(jié)構(gòu)生成對(duì)應(yīng)SQLAlchemy模型

    本文介紹了如何使用sqlacodegen獲取數(shù)據(jù)庫(kù)所有表的模型類(lèi),然后使用ORM技術(shù)進(jìn)行CRUD操作,有此需求的朋友可以了解下本文
    2021-06-06
  • 零基礎(chǔ)寫(xiě)python爬蟲(chóng)之爬蟲(chóng)編寫(xiě)全記錄

    零基礎(chǔ)寫(xiě)python爬蟲(chóng)之爬蟲(chóng)編寫(xiě)全記錄

    前面九篇文章從基礎(chǔ)到編寫(xiě)都做了詳細(xì)的介紹了,第十篇么講究個(gè)十全十美,那么我們就來(lái)詳細(xì)記錄一下一個(gè)爬蟲(chóng)程序如何一步步編寫(xiě)出來(lái)的,各位看官可要看仔細(xì)了
    2014-11-11
  • wxPython中文教程入門(mén)實(shí)例

    wxPython中文教程入門(mén)實(shí)例

    這篇文章主要為大家分享下python編程中有關(guān)wxPython的中文教程,分享一些wxPython入門(mén)實(shí)例,有需要的朋友參考下
    2014-06-06
  • 使用Python將EPUB電子書(shū)網(wǎng)文主角換成自己

    使用Python將EPUB電子書(shū)網(wǎng)文主角換成自己

    通過(guò)Python對(duì)EPUB電子書(shū)格式進(jìn)行解壓、修改和重新打包,實(shí)現(xiàn)將網(wǎng)文主角名字替換成自己或其他指定名字的有趣嘗試,這一過(guò)程主要涉及zipfile和os庫(kù)的使用,以及對(duì)HTML或XHTML文件中字符串的查找與替換,感興趣的朋友一起看看吧
    2024-11-11

最新評(píng)論

孝昌县| 华宁县| 斗六市| 保亭| 沾化县| 赫章县| 延津县| 健康| 上饶市| 房山区| 荥阳市| 白河县| 双鸭山市| 丘北县| 宜阳县| 文昌市| 莲花县| 无锡市| 古丈县| 昌乐县| 交城县| 镇赉县| 阜康市| 赤壁市| 江安县| 阿拉善盟| 洪湖市| 来凤县| 夹江县| 黑水县| 柳林县| 胶南市| 都兰县| 铜山县| 公安县| 长春市| 祁门县| 禹州市| 柳州市| 浪卡子县| 德化县|