學習筆記 tensorflow檔案讀取

2022-07-06 16:54:13 字數 2869 閱讀 6129

目錄先看下檔案讀取以及讀取資料處理成張量結果的過程:

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

tensorflow還提供了一種內建檔案格式tfrecord,二進位制資料和訓練類別標籤資料儲存在同一檔案。模型訓練前影象等文字資訊轉換為tfrecord格式。tfrecord檔案是protobuf格式。資料不壓縮,可快速載入到記憶體。tfrecords檔案包含 tf.train.example protobuf,需要將example填充到協議緩衝區,將協議緩衝區序列化為字串,然後使用該檔案將該字串寫入tfrecords檔案。在影象操作我們會介紹整個過程以及詳細引數。

tf.train.string_input_producer(string_tensor, ,shuffle=true):將輸出字串(例如檔名)輸入到管道佇列

將檔名列表交給tf.train.string_input_producer函式。string_input_producer來生成乙個先入先出的佇列,檔案閱讀器會需要它們來取資料。string_input_producer提供的可配置引數來設定檔名亂序和最大的訓練迭代數,queuerunner會為每次迭代(epoch)將所有的檔名加入檔名佇列中,如果shuffle=true的話,會對檔名進行亂序處理。一過程是比較均勻的,因此它可以產生均衡的檔名佇列。

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

根據檔案格式,選擇對應的檔案閱讀器

class tf.fixedlengthrecordreader(record_bytes):要讀取每個記錄是固定數量位元組的二進位制檔案

tf.tfrecordreader:讀取tfrecords檔案

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

tf.decode_csv(records,record_defaults=none,field_delim = none,name = none):將csv轉換為張量,與tf.textlinereader搭配使用

tf.decode_raw(bytes,out_type,little_endian = none,name = none) :將位元組轉換為乙個數字向量表示,位元組為一字串型別的張量,與函式tf.fixedlengthrecordreader搭配使用,二進位制讀取為uint8格式

tf.train.start_queue_runners(sess=none,coord=none):收集所有圖中的佇列執行緒,並啟動執行緒

tf.train.batch(tensors,batch_size,num_threads = 1,capacity = 32,name=none):讀取指定大小(個數)的張量

tf.train.shuffle_batch(tensors,batch_size,capacity,min_after_dequeue, num_threads=1,) :亂序讀取指定大小(個數)的張量

import tensorflow as tf

import os

def readcsv(filelist):

"""讀取csv檔案

"""# 構造檔案佇列

file_queue = tf.train.string_input_producer(filelist)

# 構建閱讀器

reader = tf.textlinereader()

key, value = reader.read(file_queue)

# 對每行內容進行解碼

records = [["none"], ["none"]]

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

# 批處理

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

return example_batch, label_batch

if __name__ == '__main__':

filelist = os.listdir("./data/csvdata")

filelist = ["./data/csvdata/{}".format(i) for i in filelist]

example_batch, label_batch = readcsv(filelist)

with tf.session() as sess:

sess.run(tf.local_variables_initializer())

sess.run(tf.global_variables_initializer())

# 執行緒協調器

coord = tf.train.coordinator()

# 開啟讀取檔案執行緒

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

# 列印資料

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

coord.request_stop()

coord.join()

tensorflow學習筆記

tensorflow安裝可以直接通過命令列或者原始碼安裝,在此介紹tensorflow8命令列安裝如下 安裝tensorflow sudo pip install upgrade 另外,解除安裝tensorflow命令為 sudo pip uninstall tensorflow tensorflo...

Tensorflow學習筆記

1.如何在虛擬機器中安裝tensor flow 1 首先安裝pip pip install 2 pip install 2.學習tensorflow需要學習 python and linux 3.使用 tensorflow,你必須明白 tensorflow 1 使用圖 graph 來表示計算任務.2...

TensorFlow學習筆記

1 擬合直線 import the library import tensorflow as tf import numpy as np prepare train data train x np.linspace 1,1,100 temp1 train x,temp2 train x.shape,...