女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

構建簡單數據管道,為什么tf.data要比feed_dict更好?

zhKF_jqr_AI ? 來源:lq ? 2018-12-03 09:08 ? 次閱讀

在大多數面向初學者的TensorFlow教程里,作者通常會建議讀者在會話中用feed_dict為模型導入數據——feed_dict是一個字典,能為占位符饋送數據。但是,其實TF提供了另一種更好的、更簡單的方法:只需使用tf.dataAPI,你就能用幾行代碼搞定高性能數據管道。

那么tf.data的優勢具體在哪里呢?如下圖所示,雖然feed_dict的靈活性大家有目共睹,但每當我們需要等待CPU把數據饋送進來時,GPU就一直處于閑置狀態,也就是程序運行效率太低。

而tf.data管道沒有這個問題,它能提前抓取下個batch的數據,降低總體閑置時間。在這個基礎上,如果我們采用并行數據導入,或者事先進行數據預處理,整個過程就更快了。

在5分鐘內實現小型圖像管道

要構建一個簡單數據管道,首先我們需要兩個對象:一個用于存儲數據集的tf.data.Dataset,以及一個允許我們逐個從數據集中提取樣本的tf.data.Iterator。

對于tf.data.Dataset,它在圖像管道中是這樣的:

[

[Tensor(image), Tensor(label)],

[Tensor(image), Tensor(label)],

...

]

之后我們就可以用tf.data.Iterator逐個檢索圖像標簽對。在實踐中,多個圖像標簽對通常會組成元素序列,方便迭代器進行提取。

至于數據集,DatasetAPI有兩種創建數據集的方法,其一是從源(如Python中的文件名列表)創建數據集,其二是可以直接在現有數據集上應用轉換,下面是一些示例:

Dataset(list of image files) → Dataset(actual images)

Dataset(6400 images) → Dataset(64 batches with 100 images each)

Dataset(list of audio files) → Dataset(shuffled list of audio files)

定義計算圖

小型圖像管道的大致情況如下圖所示:

所有代碼都和模型、損失、優化器等一起放在我們的計算圖定義中。首先,我們要從文件列表中創建一個張量。

# define list of files

files = ['a.png', 'b.png', 'c.png', 'd.png']

# create a dataset from filenames

dataset = tf.data.Dataset.from_tensor_slices(files)

之后是定義一個函數來從其路徑加載圖像(作為張量),并調用tf.data.Dataset.map()把函數用于數據集中的所有元素(文件路徑)。如果想并行調用函數,你也可以設置num_parallel_calls=n里的map()參數。

# Source

def load_image(path):

image_string = tf.read_file(path)

# Don't use tf.image.decode_image, or the output shape will be undefined

image = tf.image.decode_jpeg(image_string, channels=3)

# This will convert to float values in [0, 1]

image = tf.image.convert_image_dtype(image, tf.float32)

image = tf.image.resize_images(image, [image_size, image_size])

return image

# Apply the function load_image to each filename in the dataset

dataset = dataset.map(load_image, num_parallel_calls=8)

然后是用tf.data.Dataset.batch()創建batch:

# Create batches of 64 images each

dataset = dataset.batch(64)

如果想減少GPU閑置時間,我們可以在管道末尾添加tf.data.Dataset.prefetch(buffer_size),其中buffer_size這個參數表示預抓取的batch數,我們一般設buffer_size=1,但在某些情況下,尤其是處理每個batch耗時不同時,我們也可以適當擴大一點。

dataset = dataset.prefetch(buffer_size=1)

最后,我們再創建一個迭代器遍歷數據集。雖然迭代器的選擇有很多,但對于大多數任務,我們還是建議選擇可以初始化的迭代器。

iterator = dataset.make_initializable_iterator()

調用tf.data.Iterator.get_next()創建占位符張量,每次評估時,TensorFlow都會填充下一batch的圖像。

batch_of_images = iterator.get_next()

如果寫到這里,你突然想換回feed_dict的方法,你可以用batch_of_images把之前的占位符全都替換掉。

運行會話

現在,我們就可以向往常一樣運行模型了。但在每個epoch前,記得先評估iterator.initializer的op和tf.errors.OutOfRangeError有沒有拋出異常。

with tf.Session() as session:

for i in range(epochs):

session.run(iterator.initializer)

try:

# Go through the entire dataset

whileTrue:

image_batch = session.run(batch_of_images)

except tf.errors.OutOfRangeError:

print('End of Epoch.')

nvidia-smi這個命令可以幫我們監控GPU利用率,找到數據管道中的瓶頸。正常情況下,GPU的平均利用率應該高于70%-80%。

更完整的數據管道

Shuffle

在Dataset里,tf.data.Dataset.shuffle()是一個比較常用的方法,它可以用來打亂數據集中的數據順序。它的參數buffer_size指定的是一次打亂的元素數量,一般情況下,我們建議把這個參數值設大一點,最好一次性就能把整個數據集洗牌,因為如果參數過小,它可能會造成意料之外的偏差。

dataset = tf.data.Dataset.from_tensor_slices(files)

dataset = dataset.shuffle(len(files))

數據增強

數據增強是擴大數據集的一種常用方式,這方面常用的函數有tf.image.random_flip_left_right()、tf.image.random_brightness()和tf.image.random_saturation():

# Source

def train_preprocess(image):

image = tf.image.random_flip_left_right(image)

image = tf.image.random_brightness(image, max_delta=32.0 / 255.0)

image = tf.image.random_saturation(image, lower=0.5, upper=1.5)

# Make sure the image is still in [0, 1]

image = tf.clip_by_value(image, 0.0, 1.0)

return image

標簽

要想在圖像上加載標簽(或其他元數據),我們只需在創建初始數據集時就把它們包含在內:

# files is a python list of image filenames

# labels is a numpy array with label data for each image

dataset = tf.data.Dataset.from_tensor_slices((files, labels))

確保應用于數據集的所有.map()函數都允許標簽數據通過:

def load_image(path, label):

# load image

return image, label

dataset = dataset.map(load_image)

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4909

    瀏覽量

    130646
  • 數據集
    +關注

    關注

    4

    文章

    1222

    瀏覽量

    25273

原文標題:構建簡單數據管道,為什么tf.data要比feed_dict更好?

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    帶校時功能的簡單數字鐘

    用555制成振蕩器,74LS90制成分頻器,帶校時功能的簡單數字鐘。
    發表于 02-01 18:35

    簡單數據采集系統怎樣清除上次采集的數據

    各位前輩:我用labview編了一個簡單數據采集系統,現在想在暫停后,再次運行時,清除掉上次采集的數據,需要怎樣做啊??
    發表于 03-07 21:29

    Tensorflow快餐教程(1) - 30行代碼搞定手寫識別

    ) == sess.run(predict_op, feed_dict={X: teX})))經過100輪的訓練,我們的準確率是92.36%。無腦的淺層神經網絡用了最簡單的線性模型,我們換成經典的神經網絡來實現這個功能
    發表于 04-28 16:08

    TFTF定義兩個變量相乘之placeholder先hold類似變量+feed_dict最后外界傳入值

    TFTF定義兩個變量相乘之placeholder先hold類似變量+feed_dict最后外界傳入值
    發表于 12-21 10:35

    內建屬性__dict__的簡單概述

    Python中內建屬性__dict__
    發表于 07-24 10:16

    簡單數字鐘電路圖

    簡單數字鐘電路圖
    發表于 01-08 11:11 ?179次下載

    簡單數字鐘電路圖

    簡單數字鐘電路圖
    發表于 01-08 11:11 ?103次下載

    如何將自定義圖片輸入到TensorFlow的訓練模型

    對于上述代碼中與模型構建相關的代碼,請查閱官方《Deep MNIST for Experts》一節的內容進行理解。在本文中,需要重點掌握的是如何將本地圖片源整合成為feed_dict可接受的格式。其中最關鍵的是這兩行
    的頭像 發表于 08-17 15:57 ?9107次閱讀

    【連載】深度學習筆記13:Tensorflow實戰之手寫mnist手寫數字識別

    ,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print(accuracy.eval(feed_dict
    的頭像 發表于 10-30 18:50 ?8172次閱讀

    tf.data API的功能和最佳實踐操作

    tf.data API 通過 tf.data.Dataset.prefetch 轉換提供了一個軟件 pipelining 操作機制,該轉換可用于將數據生成的時間與所消耗時間分離。特別是,轉換使用后
    的頭像 發表于 01-11 13:51 ?1.3w次閱讀

    TensorFlow 2.0將專注于簡單性和易用性

    使用 tf.data 加載數據。使用輸入管道讀取訓練數據,用 tf.data 創建的輸入線程讀取訓練數據
    的頭像 發表于 01-18 10:44 ?2721次閱讀
    TensorFlow 2.0將專注于<b class='flag-5'>簡單</b>性和易用性

    python教程之變量和簡單數據類型

    本文檔的主要內容詳細介紹的是python教程之變量和簡單數據類型。
    發表于 04-26 08:00 ?7次下載
    python教程之變量和<b class='flag-5'>簡單數據</b>類型

    C語言簡單數據解析

    C語言簡單數據解析? 在嵌入式開發中通過串口等傳輸數據通常使用JSON解析,雖然JSON十分強大,但JSON耗費資源太多,數據的打包和解析都比較麻煩。有時我們只是傳輸一些簡單
    發表于 01-13 15:17 ?8次下載
    C語言<b class='flag-5'>簡單數據</b>解析

    使用tf.data進行數據集處理

    在進行AI模型訓練過程前,需要對數據集進行處理, Tensorflow提供了tf.data數據集處理模塊,通過該接口能夠輕松實現數據集預處理。tf.
    的頭像 發表于 11-29 15:34 ?1553次閱讀

    網絡工程師學Python之變量和簡單數據類型

    Python是一種廣泛應用于編程和數據科學的高級編程語言,它支持許多不同類型的變量和簡單數據類型。
    的頭像 發表于 04-15 17:56 ?906次閱讀