在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

基于TensorFlow的數據導入機制

wpl4_DeepLearni ? 來源:未知 ? 作者:李倩 ? 2018-04-02 14:44 ? 次閱讀

聊一聊TensorFlow的數據導入機制

今天我們要講的是TensorFlow中的數據導入機制,傳統的做法是習慣于先構建好TF圖模型,然后開啟一個會話(Session),在運行圖模型之前將數據feed到圖中,這種做法的缺點是數據IO帶來的時間消耗很大,那么在訓練非常龐大的數據集的時候,不提倡采用這種做法,TensorFlow中取而代之的是tf.data.Dataset模塊,今天我們重點介紹這個。

tf.data是一個十分強大的可以用于構建復雜的數據導入機制的API,例如,如果你要處理的是圖像,那么tf.data可以幫助你把分布在不同位置的文件整合到一起,并且對每幅圖片添加微小的隨機噪聲,以及隨機選取一部分圖片作為一個batch進行訓練;又或者是你要處理文本,那么tf.data可以幫助從文本中解析符號并且轉換成embedding矩陣,然后將不同長度的序列變成一個個batch。

我們可以用tf.data.Dataset來構建一個數據集,數據集的來源可以有多種方式,例如如果你的數據集是預先以TFRecord格式寫在硬盤上的,那么你可以用tf.data.TFRecordDataset來構建;如果你的數據集是內存中的tensor變量,那么可以用tf.data.Dataset.from_tensors() 或 tf.data.Dataset.from_tensor_slices()來構建。下面我將通過代碼來演示它們。

首先,我們來看從內存中的tensor變量來構建數據集,如下代碼所示,首先構建了一個0~10的數據集,然后構建迭代器,迭代器可以每次從數據集中提取一個元素:

import tensorflow as tf dataset=tf.data.Dataset.range(10) iterator=dataset.make_one_shot_iterator() next_element = iterator.get_next()with tf.Session() as sess: for _ in range(10): print(sess.run(next_element))

如上代碼所示,range()是tf.data.Dataset類的一個靜態函數,用于產生一段序列。需要注意的是,構建的數據集需要是同一種數據類型以及內部結構。除此之外,由于range(10)代表0~9一共十個數,因此,這里的iterator只能運行10次,超過以后將會拋出tf.errors.OutOfRangeError異常。如果希望不拋出異常,則可以調用dataset.repeat(count)即可實現count次自動重復的迭代器。

range的范圍我們也可以在運行時才確定,即定義max_range為placeholder變量,這個時候需要調用Dataset的make_initializable_iterator方法來構建迭代器,并且這個迭代器的operation需要在迭代之前被運行,代碼如下所示:

max_range=tf.placeholder(tf.int64, shape=[]) dataset = tf.data.Dataset.range(max_range) iterator = dataset.make_initializable_iterator() next_element = iterator.get_next()with tf.Session() as sess: sess.run(iterator.initializer, feed_dict={max_range: 10}) for _ in range(10): print(sess.run(next_element))

也可以為不同的數據集創建同一個迭代器,為了使得這個迭代器可以被重復使用,需要保證不同數據集的類型和維度是一致的。例如,下面的代碼演示了如何使用同一個迭代器來構建訓練集和驗證集,可以看到,當我們開始訓練訓練集的時候,就需要先執行training_init_op,目的是使得迭代器開始加載訓練數據;而當進行驗證的時候,則需要先執行validation_init_op,道理一樣。

training_data = tf.data.Dataset.range(100).map(lambda x: x+tf.random_uniform([], -10, 10, tf.int64)) validation_data = tf.data.Dataset.range(50) iterator = tf.Iterator.from_structure(training_data.output_types, training_data.output_shapes) iterator = tf.data.Iterator.from_structure(training_data.output_types, training_data.output_shapes) next_element = iterator.get_next() training_init_op=iterator.make_initializer(training_data) validation_init_op=iterator.make_initializer(validation_data)with tf.Session() as sess: for epoch in range(10): sess.run(training_init_op) for _ in range(100): sess.run(next_element) sess.run(validation_init_op) for _ in range(50): sess.run(next_element)

也可以通過Tensor變量構建tf.data.Dataset,如下代碼所示,需要注意的是,這里的Tensor的維度是4×10,因此,傳入到迭代器中就是可以運行4次,每次運行生成一個長度為10的向量。

import tensorflow as tf dataset = tf.data.Dataset.from_tensor_slices(tf.random_uniform([4, 10])) iterator = dataset.make_initializable_iterator() next_element = iterator.get_next()with tf.Session() as sess: sess.run(iterator.initializer) for i in range(4): value = sess.run(next_element) print(value)

最后,還有一種比較常見的讀取數據的方式,就是從TFRecord文件中去讀取,這里再介紹一下之前在語音識別項目里采取的TFRecord的讀寫代碼。

首先是將音頻特征寫入到TFRecord文件之中,在語音識別中,我們最常用的兩個特征就是MFCC和LogFBank,要寫入文件中的不僅僅是這兩個變量,還要有文本標簽Label以及特征序列的長度sequence_legnth,這四個變量中,只有sequence_length是整數標量,其他三個都是列表格式,所以這里對于列表使用字節來保存,而對于標量,使用整型來保存。

def _bytes_feature(value): return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))def _int64_feature(value): return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))class RecordWriter(object): def __init__(self): pass def write(self, content, tfrecords_filename): writer = tf.python_io.TFRecordWriter(tfrecords_filename) if isinstance(content, list): feature_dict = {} for i in range(len(content)): feature = content[i] if i==0: feature_raw = np.array(feature).tostring() feature_dict['mfccFeat']=_bytes_feature(feature_raw) elif i==1: feature_raw = np.array(feature).tostring() feature_dict['logfbankFeat']=_bytes_feature(feature_raw) elif i==2: feature_raw = np.array(feature).tostring() feature_dict['label']=_bytes_feature(feature_raw) else: feature_dict['sequence_length']=_int64_feature(feature) features_to_write = tf.train.Example(features=tf.train.Features(feature=feature_dict)) writer.write(features_to_write.SerializeToString()) writer.close() print('Record has been writen:'+tfrecords_filename)

寫好TFRecord以后,在讀取的時候首先需要對TFRecord格式文件進行解析,解析函數如下:

def parse(self, serialized): feature_dict={} feature_dict['mfccFeat']=tf.FixedLenFeature([], tf.string) feature_dict['logfbankFeat']=tf.FixedLenFeature([], tf.string) feature_dict['label']=tf.FixedLenFeature([], tf.string) feature_dict['sequence_length']=tf.FixedLenFeature([1], tf.int64) features = tf.parse_single_example( serialized, features=feature_dict) mfcc = tf.reshape(tf.decode_raw(features['mfccFeat'], tf.float32), [-1, self.feature_num]) logfbank = tf.reshape(tf.decode_raw(features['logfbankFeat'], tf.float32), [-1, self.feature_num]) label = tf.decode_raw(features['label'], tf.int64) return mfcc, logfbank, label, features['sequence_length']

然后我們可以直接通過調用tf.data.TFRecordDataset來導入TFRecord文件列表,以及對每個文件調用parse函數進行解析,并且由于每個文件的特征矩陣長度不一,所以需要對齊進行padding操作,最終可以獲得迭代器,代碼如下:

self.fileNameList = tf.placeholder(tf.string, [None, ]) padded_shapes= ([-1,feature_num],[-1,feature_num],[-1],[1]) padded_values = (0.0,0.0,np.int64(-1),np.int64(0)) dataset = tf.data.TFRecordDataset(self.fileNameList, buffer_size=self.buffer_size).map(self.parse, num_parallel_call).padded_batch(batch_size, padded_shapes, padded_values) self.iterator = tf.data.Iterator.from_structure((tf.float32, tf.float32, tf.int64, tf.int64), (tf.TensorShape([None, None, 60]), tf.TensorShape([None, None, 60]), tf.TensorShape([None, None]), tf.TensorShape([None, None]))) self.initializer = self.iterator.make_initializer(dataset)

于是,關于TFRecord文件的讀寫就介紹完了,并且,基于TensorFlow的數據導入機制也介紹完了。

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

    關注

    4

    文章

    1209

    瀏覽量

    24799
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60600

原文標題:聊一聊TensorFlow的數據導入機制

文章出處:【微信號:DeepLearningDigest,微信公眾號:深度學習每日摘要】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于 TensorFlow

    在節點間相互聯系的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。TensorFlow 最初由
    發表于 03-30 19:57

    使用 TensorFlow, 你必須明白 TensorFlow

    數據, 計算圖中, 操作間傳遞的數據都是 tensor. 你可以把 TensorFlow tensor 看作是一個 n 維的數組或列表. 一個 tensor 包含一個靜態類型 rank, 和 一個
    發表于 03-30 20:03

    TensorFlow運行時無法加載本機

    )Python分發由英特爾公司提供給您。請查看:https://software.intel.com/en-us/python-distribution>>>將tensorflow導入為tf回溯
    發表于 10-19 12:00

    導入tensorflow時未找到“GLIBC_2.23”錯誤

    導入tensorflow時,它給我一個錯誤。附上錯誤的屏幕截圖。請幫忙。GLIBC_Error.PNG 40.9 K.以上來自于谷歌翻譯以下為原文Hi, I created a new conda
    發表于 11-14 09:59

    情地使用Tensorflow吧!

    在節點間相互聯系的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。TensorFlow 最初由
    發表于 07-22 10:13

    TensorFlow是什么

    TensorFlow 在深度學習模型中的應用,使讀者可以輕松地將模型用于數據集并開發有用的應用程序。每章包含一系列處理技術問題、依賴性、代碼和解讀的示例,在每章的最后,還有一個功能完善的深度學習模型。
    發表于 07-22 10:14

    TensorFlow教程|常見問題

    ,參看 TensorFlow使用 GPU ; 使用多 GPU 的示范實例參看 CIFAR-10 教程 。可用的 tensor 有哪些不同的類型?TensorFlow 支持許多種不同的數據
    發表于 07-27 18:33

    TensorFlow csv文件讀取數據(代碼實現)詳解

    大多數人了解 Pandas 及其在處理大數據文件方面的實用性。TensorFlow 提供了讀取這種文件的方法。前面章節中,介紹了如何在 TensorFlow 中讀取文件,本節將重點介紹如何從 CSV
    發表于 07-28 14:40

    TensorFlow實現簡單線性回歸

    本小節直接從 TensorFlow contrib 數據集加載數據。使用隨機梯度下降優化器優化單個訓練樣本的系數。實現簡單線性回歸的具體做法導入需要的所有軟件包: 在神經網絡中,所有的
    發表于 08-11 19:34

    TensorFlow實現多元線性回歸(超詳細)

    TensorFlow 實現簡單線性回歸的基礎上,可通過在權重和占位符的聲明中稍作修改來對相同的數據進行多元線性回歸。在多元線性回歸的情況下,由于每個特征具有不同的值范圍,歸一化變得至關重要
    發表于 08-11 19:35

    TensorFlow邏輯回歸處理MNIST數據

    [0000000010]:具體做法導入所需的模塊: 可以從模塊 input_data 給出的 TensorFlow 示例中獲取 MNIST 的輸入數據。該 one_hot 標志設置為真,以使用標簽
    發表于 08-11 19:36

    TensorFlow邏輯回歸處理MNIST數據

    [0000000010]:具體做法導入所需的模塊: 可以從模塊 input_data 給出的 TensorFlow 示例中獲取 MNIST 的輸入數據。該 one_hot 標志設置為真,以使用標簽
    發表于 08-11 19:36

    如何用TensorFlow導入MNIST數據集?

    TensorFlow導入MNIST數據
    發表于 11-11 07:33

    圖文詳解tensorflow數據讀取機制

    tensorflow數據讀取機制,文章的最后還會給出實戰代碼以供參考。 授權轉載:知乎專欄 AI Insight 一、tensorflow讀取機制
    發表于 09-22 16:41 ?2次下載

    TensorFlow數據讀取機制分析

    解釋一下TensorFlow數據讀取機制,文章的最后還會給出實戰代碼以供參考。 TensorFlow讀取機制圖解 首先需要思考的一個問題是
    發表于 09-28 17:45 ?0次下載
    <b class='flag-5'>TensorFlow</b><b class='flag-5'>數據</b>讀取<b class='flag-5'>機制</b>分析
    主站蜘蛛池模板: 天天干天天草天天射 | 色偷偷女男人的天堂亚洲网 | 欧美三级黄色 | 欧美成人一区二区三区在线视频 | 成人特黄午夜性a一级毛片 成人网18免费下 | aa小视频| 日韩一区二区视频在线观看 | 欧美在线视频二区 | 日本美女黄视频 | 国产hs免费高清在线观看 | 美女网色站 | 久久狠色噜噜狠狠狠狠97 | 日本免费黄色小视频 | 免费毛片软件 | 国产一区二区三区美女在线观看 | 98pao强力打造高清免费 | 扒开末成年粉嫩的小缝强文 | 激情文学综合网 | 免费观看成人毛片 | 国产午夜小视频 | 国产国产人免费人成成免视频 | 日本视频一区二区三区 | 日日碰狠狠添天天爽五月婷 | 亚洲一二三四区 | 国产va免费精品高清在线 | 狠狠色狠狠色综合婷婷tag | 日韩卡1卡2卡三卡四卡二卡免 | 国产精品资源手机在线播放 | 月夜免费观看完整视频 | 午夜免费伦费影视在线观看 | 美日韩一区二区 | 欧美影院一区二区 | 成人窝窝午夜看片 | 91大神大战丝袜美女在线观看 | 成人精品一区二区不卡视频 | 天天看片中文字幕 | 午夜爽爽视频 | 国产毛片久久久久久国产毛片 | 亚洲五月婷婷 | 亚洲第一免费网站 | aaa一级|