0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow中讀數(shù)據(jù)三種方法

C語(yǔ)言專家集中營(yíng) ? 來(lái)源:lp ? 2019-04-01 14:40 ? 次閱讀

TensorFlow中讀數(shù)據(jù)一般有三種方法:

使用placeholder讀內(nèi)存中的數(shù)據(jù)

使用queue讀硬盤中的數(shù)據(jù)

使用Dataset讀內(nèi)存?zhèn)€硬盤中的數(shù)據(jù)

基本概率

由于第三種方法在語(yǔ)法上更簡(jiǎn)潔,因此本文主要介紹第三種方法。官方給出的Dataset API類圖:

image.png

其中終于重要的兩個(gè)基礎(chǔ)類:Dateset和Iterator。Dateset是具有相同類型的“元素”的有序表,元素可以是向量、字符串、圖片等。

從內(nèi)存中創(chuàng)建Dataset

以數(shù)字元素為例:

例1

從Dataset中實(shí)例化一個(gè)Iterator,然后對(duì)Iterator進(jìn)行迭代。

iterator = dataset.make_one_shot_iterator()

從dataset中實(shí)例化一個(gè)iterator,是“one shot iterator”,即只能從頭到尾讀取一次。

one_element = iterator.get_next()

從iterator中取出一個(gè)元素, one_element是一個(gè)tensor,因此需要調(diào)用sess.run(one_element)取出值。

如果元素被讀取完了,再sess.run(one_element)會(huì)拋出tf.errors.OutOfRangeError異常。解決方法:使用 dataset.repeat()

更復(fù)雜的輸入形式,例如,在圖像識(shí)別的應(yīng)用中,一個(gè)元素可以使{“image”:image_tensor, “l(fā)abel”:lable_tensor}

dataset = tf.data.Dataset.from_tensor_slices( { "a": np.array([1.0, 2.0, 3.0, 4.0, 5.0]), "b": np.random.uniform(size=(5, 2)) } )

最終dataset中的一個(gè)元素為{"a": 1.0, "b": [0.9, 0.1]}的形式?;蛘?/p>

dataset = tf.data.Dataset.from_tensor_slices( (np.array([1.0, 2.0, 3.0, 4.0, 5.0]), np.random.uniform(size=(5, 2))) )

對(duì)Dataset中的元素做變換:Transformation

一個(gè)Dataset通過(guò)Transformation變成一個(gè)新的Dataset。常用的操作有:

map

batch

shuffle

repeat

下面分別來(lái)介紹以上幾個(gè)操作。(1)mapmap接收一個(gè)函數(shù),dataset中的每個(gè)元素都可以作為這個(gè)函數(shù)的輸入,并將函數(shù)的返回值作為新的dataset,例如:

dataset = tf.data.Dataset.from_tensor_slices(np.array([1.0, 2.0, 3.0, 4.0, 5.0])) dataset = dataset.map(lambda x: x + 1) # 2.0, 3.0, 4.0, 5.0, 6.0

(2)batch將多個(gè)元素組合成batch,例如:

dataset = dataset.batch(32)

(3)shuffle打亂dataset中的元素,參數(shù)buffersize表示打亂時(shí)buffer的大小。

dataset = dataset.shuffle(buffer_size=10000)

(4)repeat將整個(gè)序列重復(fù)多次,只用用來(lái)處理epoch。如果直接調(diào)用repeat()的話,生成的序列就會(huì)無(wú)限重復(fù)下去,沒(méi)有結(jié)束,因此也不會(huì)拋出。tf.errors.OutOfRangeError異常:

dataset = dataset.repeat(5)

例子:讀磁盤圖片與對(duì)應(yīng)的label

讀入磁盤中的圖片和圖片相應(yīng)的label,并將其打亂,組成batch_size=32的訓(xùn)練樣本。在訓(xùn)練時(shí)重復(fù)10個(gè)epoch。

# 函數(shù)的功能時(shí)將filename對(duì)應(yīng)的圖片文件讀進(jìn)來(lái),并縮放到統(tǒng)一的大小def _parse_function(filename, label): image_string = tf.read_file(filename) image_decoded = tf.image.decode_image(image_string) image_resized = tf.image.resize_images(image_decoded, [28, 28]) return image_resized, label# 圖片文件的列表filenames = tf.constant(["/var/data/image1.jpg", "/var/data/image2.jpg", ...])# label[i]就是圖片filenames[i]的labellabels = tf.constant([0, 37, ...])# 此時(shí)dataset中的一個(gè)元素是(filename, label)dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))# 此時(shí)dataset中的一個(gè)元素是(image_resized, label)dataset = dataset.map(_parse_function)# 此時(shí)dataset中的一個(gè)元素是(image_resized_batch, label_batch)dataset = dataset.shuffle(buffersize=1000).batch(32).repeat(10)# 此時(shí)dataset中的一個(gè)元素是(image_resized_batch, label_batch)# image_resized_batch的形狀為(32, 28, 28, 3), label_batch的形狀為(32, )

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4344

    瀏覽量

    62864
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    329

    瀏覽量

    60584
  • DataSet
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    2209

原文標(biāo)題:TensorFlow讀數(shù)據(jù)

文章出處:【微信號(hào):C_Expert,微信公眾號(hào):C語(yǔ)言專家集中營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    labview查看本機(jī)ip的三種方法

    做TCP通訊的時(shí)候,有時(shí)候需要知道自己的IP雖然知道自己電腦ip可以不用這么麻煩,但是有時(shí)候就想用自己所學(xué)來(lái)獲得自己所需,職業(yè)病 咳咳這里給出得到本地IP的三種方法。源程序,在附件里。
    發(fā)表于 11-27 17:17

    啟動(dòng)Redis的三種方法

    Redis筆記(1)——安裝、卸載、三種方法啟動(dòng)Redis,Redis命令使用(干貨十足),Redis兩種方法設(shè)置密碼,時(shí)間復(fù)雜度(更完善哦~)
    發(fā)表于 06-08 16:09

    LwIP協(xié)議棧開(kāi)發(fā)嵌入式網(wǎng)絡(luò)的三種方法有何關(guān)系

    LwIP協(xié)議棧開(kāi)發(fā)嵌入式網(wǎng)絡(luò)的三種方法分析 輕量級(jí)的TCP/IP協(xié)議棧LwIP,提供了三種應(yīng)用程序設(shè)計(jì)方法,且很容易被移植到多任務(wù)的操作系統(tǒng)。本文結(jié)合μC/OS-II這一實(shí)時(shí)操作系統(tǒng)
    發(fā)表于 08-05 07:55

    噪聲系數(shù)測(cè)量的三種方法

    噪聲系數(shù)測(cè)量的三種方法 本文介紹了測(cè)量噪聲系數(shù)的三種方法:增益法、Y
    發(fā)表于 05-07 13:38 ?2166次閱讀

    解決電池問(wèn)題有三種方法

    解決電池問(wèn)題有三種方法      對(duì)于手機(jī)電池問(wèn)題如何解決,業(yè)內(nèi)人士指出有以下三種方法:   一、發(fā)明新型電池。目前有日本生產(chǎn)商已經(jīng)展示了概念性的燃
    發(fā)表于 11-10 14:26 ?959次閱讀

    臺(tái)式機(jī)CMOS放電三種方法

    現(xiàn)有的主板大多設(shè)計(jì)了CMOS放電跳線方便用戶進(jìn)行放電操作,不過(guò)CMOS放電的方法也不止這一,閱讀下文了解臺(tái)式機(jī)CMOS放電三種方法
    發(fā)表于 01-09 11:01 ?5.3w次閱讀
    臺(tái)式機(jī)CMOS放電<b class='flag-5'>三種方法</b>

    電感變壓器漆包線快速去漆的三種方法盤點(diǎn)

    電感變壓器如何快速的去漆呢?一般在實(shí)際的工作,一般采用手工去皮,電動(dòng)剝皮,剝離劑剝皮這三種方法來(lái)進(jìn)行去漆,那么這三種種方法更高效呢?
    發(fā)表于 12-21 14:12 ?1.6w次閱讀

    python統(tǒng)計(jì)詞頻的三種方法

    python統(tǒng)計(jì)詞頻的三種方法方法。
    發(fā)表于 05-25 14:33 ?2次下載

    獲得更高輸出電流的三種方法

    的79dB PSRR(1MHz)。一些客戶要求將電流提高到200mA以上,同時(shí)仍保持低噪聲和高PSRR。本文探討了獲得更高輸出電流的三種方法,并提供了實(shí)用的輸入,以幫助您確定哪種方法最適合您的電路條件。這三種方式是:
    的頭像 發(fā)表于 01-08 15:32 ?6266次閱讀
    獲得更高輸出電流的<b class='flag-5'>三種方法</b>

    噪聲系數(shù)測(cè)量的三種方法

    本文介紹了測(cè)量噪聲系數(shù)的三種方法:增益法、Y系數(shù)法和噪聲系數(shù)測(cè)試儀法。這三種方法的比較以表格的形式給出。
    的頭像 發(fā)表于 05-18 11:02 ?1351次閱讀
    噪聲系數(shù)測(cè)量的<b class='flag-5'>三種方法</b>

    【世說(shuō)設(shè)計(jì)】噪聲系數(shù)測(cè)量的三種方法

    本文介紹了測(cè)量噪聲系數(shù)的三種方法:增益法、Y系數(shù)法和噪聲系數(shù)測(cè)試儀法。這三種方法的比較以表格的形式給出。在無(wú)線通信系統(tǒng),噪聲系數(shù)(NF)或者相對(duì)應(yīng)的噪聲因數(shù)(F)定義了噪聲性能和對(duì)接
    的頭像 發(fā)表于 05-19 10:38 ?1144次閱讀
    【世說(shuō)設(shè)計(jì)】噪聲系數(shù)測(cè)量的<b class='flag-5'>三種方法</b>

    pwm產(chǎn)生的三種方法

    pwm產(chǎn)生的三種方法 PWM(Pulse Width Modulation)是一常用的控制技術(shù),可以通過(guò)調(diào)節(jié)開(kāi)關(guān)管的通斷時(shí)間,通過(guò)改變輸出波形的占空比來(lái)實(shí)現(xiàn)對(duì)電路的控制。在現(xiàn)代工業(yè)控制,PWM
    的頭像 發(fā)表于 09-02 10:25 ?7800次閱讀

    三種方法實(shí)現(xiàn)串口接收不定長(zhǎng)度的數(shù)據(jù)

    下面三種方式都親測(cè)可用,實(shí)際使用時(shí)應(yīng)采用第三種方法,更有效率。
    的頭像 發(fā)表于 09-14 16:16 ?1.1w次閱讀
    <b class='flag-5'>三種方法</b>實(shí)現(xiàn)串口接收不定長(zhǎng)度的<b class='flag-5'>數(shù)據(jù)</b>

    修復(fù)鋰電池的三種方法

    電子發(fā)燒友網(wǎng)站提供《修復(fù)鋰電池的三種方法.doc》資料免費(fèi)下載
    發(fā)表于 11-15 10:40 ?5次下載
    修復(fù)鋰電池的<b class='flag-5'>三種方法</b>

    傳統(tǒng)激光功率衰減的三種方法

    傳統(tǒng)激光功率衰減通常使用以下三種方法,分別為中性密度衰減片衰減法、偏振衰減法、鍍膜光學(xué)鏡片衰減法。
    的頭像 發(fā)表于 01-20 10:42 ?1852次閱讀
    傳統(tǒng)激光功率衰減的<b class='flag-5'>三種方法</b>