Tensorflow 從文件中載入訓練數據


本節包含:

  1. 用純文本文件准備訓練數據
  2. 加載文件中的訓練數據

一、用純文本文件准備訓練數據

1.數據的數字化

比如,“是” —— “1”,“否” —— “0”

“優”,“中”,“差” —— 1 2 3  或者 3 2 1

 

2.訓練數據的格式

在文本文件中,一般每行存放一條數據,一條數據中可以有多個數據項(有時稱為“字段”),數據項中間一般使用英文逗號”,“ 進行分割

90,80,70,0
98,95,87,1
99,99,99,1
80,85,90,0

這就是三好學生評選結果問題的一組數據,每行代表一位學生的成績和最后的評選結果

注意: 文本文件一定要以UTF-8 的編碼形式來保存,逗號一定是英文的逗號,盡量不要有空格等空白字符

 

3.使用CSV格式文件輔助處理數據

CSV是逗號分隔值的簡稱,這種格式的文件中每行都是一個個用逗號分隔開的內容項

CSV格式的文件 是純文本文件中的一種,也是 Excel 支持的文件格式,所以可以用 Excel 來處理數據

我使用的是 Notepad++ ,一款代碼編輯軟件

 

 將剛才的數據保存為 .CSV 文件后,可以用Excel 打開,編輯修改

 

二、加載文件中的訓練數據

1.加載函數

numpy包 中的 loadtxt 函數,其中第一個參數是 要讀取的文件名和文件所在的目錄,第二個參數 delimiter 表示數據項之間用什么字符分隔,第三個參數表示讀取的數據類型

import numpy as np
wholeData = np.loadtxt(r"C:\Users\DELL\Desktop\abc.txt",delimiter=",",dtype=np.float32)
print(wholeData)
[[90. 80. 70.  0.]
 [98. 95. 87.  1.]
 [99. 99. 99.  1.]
 [80. 85. 90.  0.]]

 

路徑前加 ”r“  的原因   <—

原因分析:在windows系統當中讀取文件路徑可以使用\,但是在python字符串中\有轉義的含義,如\t可代表TAB,\n代表換行,所以我們需要采取一些方式使得\不被解讀為轉義字符

1、在路徑前面加r,即保持字符原始值的意思。
sys.path.append(r'c:\Users\mshacxiang\VScode_project\web_ddt')
2、替換為雙反斜杠
sys.path.append('c:\\Users\\mshacxiang\\VScode_project\\web_ddt')
3、替換為正斜杠
sys.path.append('c:/Users/mshacxiang/VScode_project/web_ddt')

 

2.讀取時舍棄非數字列

 

import pandas as pd
import numpy as np
fileData = pd.read_csv(r'C:\Users\DELL\Desktop\dataset.csv',dtype=np.float32,header=None,usecols=(1,2,3,4))
wholeData = fileData.as_matrix() print(wholeData)
[[90. 80. 70.  0.]
 [98. 95. 87.  1.]
 [99. 99. 99.  1.]
 [80. 85. 90.  0.]]

可見,在讀取時已經舍棄了非數字列

 

 

3.非數字列與數字列的轉換

 

import pandas as pd
import numpy as np
fileData = pd.read_csv(r'C:\Users\DELL\Desktop\dataset.csv',dtype=np.float32,header=None,converters={(3):lambda s:1.0 if s == "是" else 0.0})
wholeData = fileData.as_matrix()

print(wholeData)
[[90. 80. 70.  0.]
 [98. 95. 87.  1.]
 [99. 99. 99.  1.]
 [80. 85. 90.  0.]]

 

 

 

 4.行數據的拆分  及  喂給訓練過程

 

由於從文件中讀取的數據是一個第二維有4項的二維數組,而我們原來的數據有兩個,一個是分數,每行3項,另一個是評選結果,只有一個數,所以,需要將新的數據格式 拆分后再 喂給神經網絡

import tensorflow as tf
import numpy as np
import pandas as pd

fileData = pd.read_csv(r'C:\Users\DELL\Desktop\abc.txt', dtype=np.float32, header=None)
wholeData = fileData.as_matrix()  #將文件中的數據轉換成二維數組 wholeData
rowCount = int(wholeData.size / wholeData[0].size)  #獲取一共多少條數據
# wholeData.size 獲得的是 數據的所有項的個數,本題是 4 * 4 = 16
# wholeData[0].size  獲得的是第一行的項數,本題是 4
# 所以 行數 = 16 / 4 = 4

goodCount = 0
# 用一個循環統計 符合三號學生條件的數據條數,並放入 goodCount 中
for i in range(rowCount):
    if wholeData[i][0] * 0.6 + wholeData[i][1] * 0.3 + wholeData[i][2] * 0.1 >= 95:
        goodCount = goodCount + 1

print("wholeData = %s" % wholeData)
print("行數rowCount = %d" % rowCount)
print("三好數goodCount = %d" % goodCount)


# 定義模型
x = tf.placeholder(dtype=tf.float32)
yTrain = tf.placeholder(dtype=tf.float32)

w = tf.Variable(tf.zeros([3]), dtype=tf.float32)
b = tf.Variable(80, dtype=tf.float32)

wn = tf.nn.softmax(w)

n1 = wn * x

n2 = tf.reduce_sum(n1) - b

y = tf.nn.sigmoid(n2)

loss = tf.abs(yTrain - y)

optimizer = tf.train.RMSPropOptimizer(0.1)

train = optimizer.minimize(loss)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

for i in range(2):
    for j in range(rowCount):
        result = sess.run([train, x, yTrain, wn, b, n2, y, loss], feed_dict={x: wholeData[j][0:3], yTrain: wholeData[j][3]})
        print(result)

 

wholeData = [[90. 80. 70.  0.]
 [98. 95. 87.  1.]
 [99. 99. 99.  1.]
 [80. 85. 90.  0.]]
行數rowCount = 4
三好數goodCount = 2
[None, array([90., 80., 70.], dtype=float32), array(0., dtype=float32), array([0.33333334, 0.33333334, 0.33333334], dtype=float32), 80.02626, 0.0, 0.5, 0.5]
[None, array([98., 95., 87.], dtype=float32), array(1., dtype=float32), array([0.30555207, 0.33253884, 0.3619091 ], dtype=float32), 80.02626, 12.995125, 0.99999774, 2.2649765e-06]
[None, array([99., 99., 99.], dtype=float32), array(1., dtype=float32), array([0.3055522 , 0.33253887, 0.3619089 ], dtype=float32), 80.02626, 18.97374, 1.0, 0.0]
[None, array([80., 85., 90.], dtype=float32), array(0., dtype=float32), array([0.3055522 , 0.33253887, 0.3619089 ], dtype=float32), 80.02689, 5.2555237, 0.9948085, 0.9948085]
[None, array([90., 80., 70.], dtype=float32), array(0., dtype=float32), array([0.30587256, 0.33257753, 0.36154988], dtype=float32), 80.05657, -0.58367157, 0.3580882, 0.3580882]
[None, array([98., 95., 87.], dtype=float32), array(1., dtype=float32), array([0.27762243, 0.32822776, 0.39414987], dtype=float32), 80.05657, 12.6231, 0.99999666, 3.33786e-06]
[None, array([99., 99., 99.], dtype=float32), array(1., dtype=float32), array([0.27762258, 0.32822785, 0.39414948], dtype=float32), 80.05657, 18.94342, 1.0, 0.0]
[None, array([80., 85., 90.], dtype=float32), array(0., dtype=float32), array([0.27762258, 0.32822785, 0.39414948], dtype=float32), 80.05717, 5.5260544, 0.9960341, 0.9960341]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM