TF,數據轉換和softmax()


數據來自kaggle的競賽數據Titanci,train.csv
import tensorflow as tf

讀取CSV

# tf提供了讀取csv文件的方法
data_queue = tf.train.string_input_producer(['train.csv'])
reader = tf.TextLineReader(skip_header_lines = 1)
key , value = reader.read(data_queue)
# decode_csv 將字符串轉換到具有指定默認值,由張量列構成的元組中
# 為每列數據設置數據類型
decoded = tf.decode_csv(value, record_defaults=[[0.0],[0.0],[0],[""],[""],[0.0],[0.0],[0.0],[""],[0.0],[""],[""]])
decoded
[<tf.Tensor 'DecodeCSV:0' shape=() dtype=float32>,
<tf.Tensor 'DecodeCSV:1' shape=() dtype=float32>,
<tf.Tensor 'DecodeCSV:2' shape=() dtype=int32>,
<tf.Tensor 'DecodeCSV:3' shape=() dtype=string>,
<tf.Tensor 'DecodeCSV:4' shape=() dtype=string>,
<tf.Tensor 'DecodeCSV:5' shape=() dtype=float32>,
<tf.Tensor 'DecodeCSV:6' shape=() dtype=float32>,
<tf.Tensor 'DecodeCSV:7' shape=() dtype=float32>,
<tf.Tensor 'DecodeCSV:8' shape=() dtype=string>,
<tf.Tensor 'DecodeCSV:9' shape=() dtype=float32>,
<tf.Tensor 'DecodeCSV:10' shape=() dtype=string>,
<tf.Tensor 'DecodeCSV:11' shape=() dtype=string>]
passenger_id,survived,pclass,name,sex,age,sibsp,parch,ticket,fare,cabin,embarked=tf.train.shuffle_batch(decoded,
batch_size=10,
capacity=10*50,
min_after_dequeue=10)

屬性數據的轉換

# 船票的等級,用三個屬性來表示,船票等級,這樣可以消除一些並不存在的線性關系
first_class = tf.to_float(tf.equal(pclass,[1]))
second_class = tf.to_float(tf.equal(pclass,[2]))
third_class = tf.to_float(tf.equal(pclass,[3]))
first_class
<tf.Tensor 'ToFloat:0' shape=(10,) dtype=float32>
gender = tf.to_float(tf.equal(sex,['female']))
# tf.stack將所以的布爾值打包進一個張量中
# tf.transpose對打包的張量進行轉置,沒一行為一個乘客的特征數據
features = tf.transpose(tf.stack([first_class,second_class,third_class,gender]))
tf.stack([first_class,second_class,third_class,gender])

標簽數據轉換

#標簽數據的轉換
labels = tf.to_int32(tf.argmax(tf.to_int32(tf.stack([
tf.equal(label,['setosa']),
tf.equal(label,['versicolor']),
tf.equal(label,['virginnica'])
])),0))

Sofomax分類

對數幾率回歸,可對yes/no問題建模,對於多個選項的問題,可以使用softmax函數,它是對數幾率在N個不同值上的推廣.
公式:

f(xi)=exiN1j=0exj

softmax函數的返回值含有N個分量的概率向量,每個分量對應一個輸出分類的概率值.N個分量的概率值的和為1,所以softmax()要求每個樣本
必須屬於某個分類,並且所有的樣本均被覆蓋.如果各個分量的概率和小於1,則說明存在着一些隱藏的類別,如果大於1,則說明有些樣本可能屬於
多個類別.
當類別個數為2時,得到的輸出概率與對數幾率回歸模型完全相同.
在多分類問題當中,要計算的分類有N個,所以需要N個不同的權值組,每一個組對應着一個可能的輸出,因此需要構造一個權值矩陣,矩陣的沒一行
與一個樣本的特征向量所對應,每列對應一個輸出類別.(這個不固定,取決於對權重矩陣的定義)
在tensorflow中,專門提供了兩個實現softmax交叉熵函數的方法:
tf.nn.sparse_softmax_cross_entropy_with_logits()
tf.nn.softmax_cross_entropy_with_logits()
上面的兩個方法中,傳入的參數, (標簽, 未激活的模型輸出)
在第一個方法中,不需要地標簽數據進行向量化處理,比如說:某個數據中有3個類別:只用將標簽屬性值轉換為0~2的整數即可.
在第二個方法中,允許用戶使用每個樣本屬於每個類別的概率信息進行訓練,但是傳入的標簽數據要進行one-hot編碼:
即:假如有三個不同的類別,標簽應為:100,010,001

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com