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

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

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

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

基于TensorFlow的數(shù)據(jù)導(dǎo)入機制

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

聊一聊TensorFlow的數(shù)據(jù)導(dǎo)入機制

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

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

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

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

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類的一個靜態(tài)函數(shù),用于產(chǎn)生一段序列。需要注意的是,構(gòu)建的數(shù)據(jù)集需要是同一種數(shù)據(jù)類型以及內(nèi)部結(jié)構(gòu)。除此之外,由于range(10)代表0~9一共十個數(shù),因此,這里的iterator只能運行10次,超過以后將會拋出tf.errors.OutOfRangeError異常。如果希望不拋出異常,則可以調(diào)用dataset.repeat(count)即可實現(xiàn)count次自動重復(fù)的迭代器。

range的范圍我們也可以在運行時才確定,即定義max_range為placeholder變量,這個時候需要調(diào)用Dataset的make_initializable_iterator方法來構(gòu)建迭代器,并且這個迭代器的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))

也可以為不同的數(shù)據(jù)集創(chuàng)建同一個迭代器,為了使得這個迭代器可以被重復(fù)使用,需要保證不同數(shù)據(jù)集的類型和維度是一致的。例如,下面的代碼演示了如何使用同一個迭代器來構(gòu)建訓(xùn)練集和驗證集,可以看到,當(dāng)我們開始訓(xùn)練訓(xùn)練集的時候,就需要先執(zhí)行training_init_op,目的是使得迭代器開始加載訓(xùn)練數(shù)據(jù);而當(dāng)進行驗證的時候,則需要先執(zhí)行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變量構(gòu)建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)

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

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

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格式文件進行解析,解析函數(shù)如下:

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']

然后我們可以直接通過調(diào)用tf.data.TFRecordDataset來導(dǎo)入TFRecord文件列表,以及對每個文件調(diào)用parse函數(shù)進行解析,并且由于每個文件的特征矩陣長度不一,所以需要對齊進行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)

于是,關(guān)于TFRecord文件的讀寫就介紹完了,并且,基于TensorFlow的數(shù)據(jù)導(dǎo)入機制也介紹完了。

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

    關(guān)注

    4

    文章

    1223

    瀏覽量

    25322
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    330

    瀏覽量

    61071

原文標題:聊一聊TensorFlow的數(shù)據(jù)導(dǎo)入機制

文章出處:【微信號:DeepLearningDigest,微信公眾號:深度學(xué)習(xí)每日摘要】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    關(guān)于 TensorFlow

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

    使用 TensorFlow, 你必須明白 TensorFlow

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

    TensorFlow運行時無法加載本機

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

    導(dǎo)入tensorflow時未找到“GLIBC_2.23”錯誤

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

    情地使用Tensorflow吧!

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

    TensorFlow是什么

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

    TensorFlow教程|常見問題

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

    TensorFlow csv文件讀取數(shù)據(jù)(代碼實現(xiàn))詳解

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

    TensorFlow實現(xiàn)簡單線性回歸

    本小節(jié)直接從 TensorFlow contrib 數(shù)據(jù)集加載數(shù)據(jù)。使用隨機梯度下降優(yōu)化器優(yōu)化單個訓(xùn)練樣本的系數(shù)。實現(xiàn)簡單線性回歸的具體做法導(dǎo)入需要的所有軟件包: 在神經(jīng)網(wǎng)絡(luò)中,所有的
    發(fā)表于 08-11 19:34

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

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

    TensorFlow邏輯回歸處理MNIST數(shù)據(jù)

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

    TensorFlow邏輯回歸處理MNIST數(shù)據(jù)

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

    如何用TensorFlow導(dǎo)入MNIST數(shù)據(jù)集?

    TensorFlow導(dǎo)入MNIST數(shù)據(jù)
    發(fā)表于 11-11 07:33

    圖文詳解tensorflow數(shù)據(jù)讀取機制

    tensorflow數(shù)據(jù)讀取機制,文章的最后還會給出實戰(zhàn)代碼以供參考。 授權(quán)轉(zhuǎn)載:知乎專欄 AI Insight 一、tensorflow讀取機制
    發(fā)表于 09-22 16:41 ?2次下載

    TensorFlow數(shù)據(jù)讀取機制分析

    解釋一下TensorFlow數(shù)據(jù)讀取機制,文章的最后還會給出實戰(zhàn)代碼以供參考。 TensorFlow讀取機制圖解 首先需要思考的一個問題是
    發(fā)表于 09-28 17:45 ?0次下載
    <b class='flag-5'>TensorFlow</b><b class='flag-5'>數(shù)據(jù)</b>讀取<b class='flag-5'>機制</b>分析
    主站蜘蛛池模板: 久久草在线精品 | 天天做天天爽爽快快 | 操夜夜| 色香影视| 天天做夜夜爱 | 久久综合九色综合欧洲 | 亚洲国内精品自在线影视 | 18男女很黄的视频 | 国产一区在线播放 | 日本高清色视频在线观看免费 | 天天爽天天爽天天片a久久网 | 在线天天干 | 欧美肥胖女人bbwbbw视频 | 欧美特级黄 | 婷婷资源综合 | 窝窝视频成人影院午夜在线 | 天天操天天插 | 最新黄色大片 | 99久久精品费精品国产一区二 | 一个色中文字幕 | 国产一二三区精品 | 清朝荒淫牲艳史在线播放 | 久久中文字幕一区二区 | 天天色天天综合网 | 在线观看日本免费视频大片一区 | 亚洲一区二区在线免费观看 | 欧美干色 | 很狠操| 黄色网址网站在线观看 | 日本在线视频一区二区 | 国产理论 | 日本一区二区在线免费观看 | 天堂在线www在线资源 | 国产欧美精品午夜在线播放 | 欧美色图中文字幕 | 操美女视频网站 | 精品手机在线视频 | 日本片巨大的乳456线观看 | 色老头视频在线观看 | 亚洲免费在线观看视频 | 天堂tv亚洲tv日本tv欧美人tv |