發布時間: 2018-12-06 15:57:57
6.1 實驗介紹
6.1.1 關于本實驗
關于 TensorFlow 讀取數據,官網共給出了三種方法,如:供給數據,從文件讀取數據,預加載數據。本實驗主要實現了從文件中讀取數據這種方法。
6.1.2 實驗目的
理解 TensorFlow 的讀取數據的方法。
理解如何利從文件中讀取數據。
6.1.3 實驗介紹
預加載數據及供給數據適用于數據量很小的情況,當運行大型數據會十分小耗內存,因此最好采用從文件讀取數據。TensorFlow 可讀取的文件類型包括 csv 文件,二進制文件,TFRecords 文件、圖像文件等。本實驗讀取 csv 文件。
6.1.4 實驗步驟
步驟 1 登陸華為云。
步驟 2 點擊右上方的控制臺。
步驟 3 選擇彈性云服務器,網頁中會顯示該彈性云的可進行的操作,選擇遠程登錄。即登錄到彈性云服務器。
步驟 4 輸入指令 ll,查看當前目錄下的文件。
步驟 5 輸入命令:vi dealdatas.py,創建新的 Python 腳本。步驟 6 輸入命令 i,進入編輯模式開始編輯,輸入腳本內容。步驟 7 輸入命令 :wq!,保存并退出。
步驟 8 輸入命令 cat dealdatas.py 查看代碼。
步驟 9 運行測試。
輸入命令:python3 dealdatas.py。
6.2 實驗過程
6.2.1 設置編碼說明
#coding:utf-8
6.2.2 導入模塊
import tensorflow as tf
6.2.3 從文件中讀取數據
filename_queue = tf.train.string_input_producer(["tf_read.csv"]) #讀取已有數據
reader = tf.TextLineReader()
文件中數據如下,共 30 行數據:
-0.7615.67-0.1215.67-0.4812.52-0.0612.511.339.110.129.1-0.8820.35-0.1820.36-0.253.99-0.013.99-0.8726.25-0.2326.25-1.032.87-0.032.87-0.517.81-0.047.81-1.5714.46-0.2314.46-0.110.02-0.0110.02-0.568.92-0.058.92-1.24.1-0.054.1-0.775.15-0.045.15-0.884.48-0.044.48-2.710.82-0.310.82-1.232.4-0.032.4-0.775.16-0.045.15-0.816.15-0.056.15-0.65.01-0.035-1.254.75-0.064.75-2.537.31-0.197.3-1.1516.39-0.1916.39-1.75.19-0.095.18-0.623.23-0.023.22-0.7417.43-0.1317.41-0.7715.41-0.1215.41047047.010.253.980.013.98-1.19.01-0.19.01-1.023.87-0.043.87
6.2.4 獲取隊列值
#獲取隊列值
key, value = reader.read(filename_queue) # key 返回的是讀取文件和行數信息
# value 是按行讀取到的原始字符串,送到下面的 decoder 去解析
#key 是文件信息和當前讀取的行數,value 是原始字符串。
record_defaults = [[1.], [1.], [1.], [1.]]# 這里的數據類型決定了讀取的數據類型,而且必須是 list 形式
col1, col2, col3, col4 = tf.decode_csv(value, record_defaults=record_defaults)#
解析出的每一個屬性都是 rank 為 0 的標量
features = tf.stack([col1, col2, col3])
6.2.5 初始化
init_op = tf.global_variables_initializer() local_init_op = tf.local_variables_initializer()
6.2.6 啟動會話
with tf.Session() as sess:
#啟動 session,執行初始化操作
sess.run(init_op) sess.run(local_init_op)
# Start populating the filename queue.開啟一個協調器coord = tf.train.Coordinator()
#使用 start_queue_runners 啟動隊列填充
threads = tf.train.start_queue_runners(coord=coord)
#
try:
for i in range(30):
example, label = sess.run([features, col4]) print(example)
# print(label)
except tf.errors.OutOfRangeError: print('Done !!!')
#如果讀取到文件隊列末尾會拋出此異常
finally: #協調器 coord 發出所有線程中指信號
coord.request_stop()
print('all threads are asked to stop!') coord.join(threads)
print('all threads are stopped!')
#coord.request_stop()來發出終止所有線程的命令,使用 coord.join(threads)把線程加入主線程,等待 threads 結束。
6.2.7 實驗結果
[-0.76 15.67 -0.12]
[-0.48 12.52 -0.06]
[1.33 9.11 0.12]
[-0.88 20.35 -0.18]
[-0.25 3.99 -0.01]
[-0.87 26.25 -0.23]
[-1.03 2.87 -0.03]
[-0.51 7.81 -0.04]
[-1.57 14.46 -0.23]
[-1.000e-01 1.002e+01 -1.000e-02] [-0.56 8.92 -0.05]
[-1.2 4.1 -0.05]
[-0.77 5.15 -0.04]
[-0.88 4.48 -0.04]
[-2.7 10.82 -0.3 ]
[-1.23 2.4 -0.03]
[-0.77 5.16 -0.04]
[-0.81 6.15 -0.05]
[-0.6 5.01 -0.03]
[-1.25 4.75 -0.06]
[-2.53 7.31 -0.19]
[-1.15 16.39 -0.19]
[-1.7 5.19 -0.09]
[-0.62 3.23 -0.02]
[-0.74 17.43 -0.13]
[-0.77 15.41 -0.12]
[ 0. 47. 0.]
[0.25 3.98 0.01]
[-1.1 9.01 -0.1 ]
[-1.02 3.87 -0.04]
6.3 實例描述
本實驗主要是根據不同的文件格式選取不同的函數進行操作,從 CSV 文件中讀取數據, 需要使用 TextLineReader 和 decode_csv 操作。通過對文件的操作,完成數據的讀取與處理。
上一篇: {HTML5}DOM 和 CSS 操作-第一節-DOM 簡介
下一篇: {Springboot}微服務介紹