TensorFlow筆記 檔案讀取

2022-04-28 01:50:59 字數 3965 閱讀 1240

這些只用於可以完全載入到記憶體中的小型資料集:

1,儲存在常數中

2,儲存在變數中,初始化後,永遠不改變它的值

使用常量

training_data =...

training_labels =...

with tf.session():

input_data =tf.constant(training_data)

input_labels = tf.constant(training_labels)

使用變數的方式,您就需要在資料流圖建立後初始化這個變數。

training_data =...

training_labels =...

with tf.session() as sess:

data_initializer = tf.placeholder(dtype=training_data.dtype,

shape=training_data.shape)

label_initializer = tf.placeholder(dtype=training_labels.dtype,

shape=training_labels.shape)

input_data = tf.variable(data_initalizer, trainable=false, collections=)

input_labels = tf.variable(label_initalizer, trainable=false, collections=)

...sess.run(input_data.initializer,

feed_dict=)

sess.run(input_labels.initializer,

feed_dict=)

設定trainable=false防止後面被資料流圖給改變,也就是不會在訓練的時候更新它的值。

設定collections=可以防止graphkeys.variables收集後做為儲存和恢復的中斷點。設定這些標誌,是為了減少額外的開銷。

一般資料檔案格式有文字、excel和資料。那麼tensorflow都有對應的解析函式,除了這幾種。還有tensorflow指定的檔案格式。

標準tensorflow格式

tensorflow還提供了一種內建檔案格式tfrecord,二進位制資料和訓練類別標籤資料儲存在同一檔案。模型訓練前影象等文字資訊轉換為tfrecord格式。tfrecord檔案是protobuf格式。資料不壓縮,可快速載入到記憶體。tfrecords檔案包含 tf.train.example protobuf,需要將example填充到協議緩衝區

檔案佇列生成函式

產生指定檔案張量

檔案閱讀器類

要讀取每個記錄是固定數量位元組的二進位制檔案

讀取tfrecords檔案

解碼

由於從檔案中讀取的是字串,需要函式去解析這些字串到張量

將檔名列表交給tf.train.string_input_producer函式。

string_input_producer來生成乙個先入先出的佇列,檔案閱讀器會需要它們來取資料。string_input_producer提供的可配置引數來設定檔名亂序和最大的訓練迭代數,queuerunner會為每次迭代(epoch)將所有的檔名加入檔名佇列中,如果shuffle=true的話,會對檔名進行亂序處理。

一過程是比較均勻的,因此它可以產生均衡的檔名佇列。

這個queuerunner工作執行緒是獨立於檔案閱讀器的執行緒,因此亂序和將檔名推入到檔名佇列這些過程不會阻塞檔案閱讀器執行。

根據你的檔案格式,選擇對應的檔案閱讀器,然後將檔名佇列提供給閱讀器的read方法。閱讀器的read方法會輸出乙個鍵來表徵輸入的檔案和其中紀錄(對於除錯非常有用),同時得到乙個字串標量,這個字串標量可以被乙個或多個解析器,或者轉換操作將其解碼為張量並且構造成為樣本。

#

讀取csv格式檔案

#1、構建檔案佇列

#2、構建讀取器,讀取內容

#3、解碼內容

#4、現讀取乙個內容,如果有需要,就批處理內容

import

tensorflow as tf

import

osdef

readcsv_decode(filelist):

"""讀取並解析檔案內容

:param filelist: 檔案列表

:return: none

"""#

把檔案目錄和檔名合併

flist = [os.path.join("

./csvdata/

",file) for file in

filelist]

#構建檔案佇列

file_queue = tf.train.string_input_producer(flist,shuffle=false)

#構建閱讀器,讀取檔案內容

reader =tf.textlinereader()

key,value =reader.read(file_queue)

record_defaults = [["

null

"],["

null

"]] #

[[0],[0],[0],[0]]

#解碼內容,按行解析,返回的是每行的列資料

example,label = tf.decode_csv(value,record_defaults=record_defaults)

#通過tf.train.batch來批處理資料

example_batch,label_batch = tf.train.batch([example,label],batch_size=9,num_threads=1,capacity=9)

with tf.session() as sess:

#執行緒協調員

coord =tf.train.coordinator()

#啟動工作執行緒

threads = tf.train.start_queue_runners(sess,coord=coord)

#這種方法不可取

#for i in range(9):

#print(sess.run([example,label]))

#列印批處理的資料

print

(sess.run([example_batch,label_batch]))

coord.request_stop()

coord.join(threads)

return

none

if__name__=="

__main__":

filename_list = os.listdir("

./csvdata")

readcsv_decode(filename_list)

每次read的執行都會從檔案中讀取一行內容,注意,(這與後面的和tfrecords讀取不一樣),decode_csv操作會解析這一行內容並將其轉為張量列表

如果輸入的引數有缺失,record_default引數可以根據張量的型別來設定預設值。在呼叫run或者eval去執行read之前,你必須呼叫tf.train.start_queue_runners來將檔名填充到佇列。否則read操作會被阻塞到檔名佇列中有值為止。

學習筆記 tensorflow檔案讀取

目錄先看下檔案讀取以及讀取資料處理成張量結果的過程 一般資料檔案格式有文字 excel和資料。那麼tensorflow都有對應的解析函式,除了這幾種。還有tensorflow指定的檔案格式。tensorflow還提供了一種內建檔案格式tfrecord,二進位制資料和訓練類別標籤資料儲存在同一檔案。模...

python學習筆記 CSV檔案讀

python pandas io tools 之csv檔案讀寫 讀取csv檔案 pd.read csv 寫入csv檔案 pd.to csv import pandas as pd obj pd.read csv test.csv print objunnamed 0 c1 c2 c3 0 a 0 5...

tensorflow 檔案管理

目錄 1.如何pai上讀取資料 2.如何減少讀取的費用開支 3.使用oss需要注意的問題 1.在pai上讀取資料 python不支援讀取oss的資料,故所有呼叫 python open os.path.exist 等檔案,資料夾操作的函式的 都無法執行.如scipy.misc.imread nump...