天天看點

Tensorflow實戰-minist

隻是對Softmax Regression識别手寫數字的簡單總結,詳情請看tenforflow源碼。

sess = tf.InteractiveSession()
#使用這個指令會把這個session注冊為預設的session,之後的運算也預設跑在這個session中,不同session之間的資料和運算應該都是互相獨立的。      

使用Variable是用來存儲模型參數的,不同于存儲資料的tensor一旦使用掉就會消失,Variable在模型訓練疊代中是持久化的,可以長期存在并且在每輪疊代中被更新。可以在計算圖中實作一些特殊的操作,如Assign, AssignAdd, AssignMul。

# cross-entropy as loss function
# ground truth
y_ = tf.placeholder(tf.float32, [None,10])
# cross-entropy
# tf.reduce_mean是用來對每個batch資料結果求均值
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y), reduction_indices=[1]))      

得到進行訓練的操作

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)      

全局參數初始化器的使用

tf.global_variables_initializer().run()      

調用train_step對樣本進行訓練

batch_xs, batch_ys = mnist.train.next_batch(100)
train_step.run({x: batch_xs, y_:batch_ys})      

對模型的準确率進行驗證

# tf.argmax是從一個tensor中尋找最大值的序号。
# tf.argmax(y,1):求各個預測的數字中機率最大的那一個
# tf. argmax(y_,1):找樣本的真實數字類别
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
# 傳回bool      
# 統計全部樣本預測的accuracy,bool->float32->mean
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))      
print(accuracy.eval({x:mnist.test.images, y_: mnist.test.labels}))