TF Boys (TensorFlow Boys ) 養成記(一):TensorFlow 基本操作
本資料是在Ubuntu14.0.4版本下進行,用來進行圖像處理,所以只介紹關於圖像處理部分的內容,並且默認TensorFlow已經配置好,如果沒有配置好,請參考官方文檔配置安裝,推薦用pip安裝。關於配置TensorFlow,官方已經說得很詳細了,我這裡就不啰嗦了。官方教程看這裡:https://www.tensorflow.org/get_started/os_setup
如果安裝了GPU版本的TensorFlow,還需要配置Cuda,關於Cuda安裝看這裡:https://www.tensorflow.org/get_started/os_setup#optional-install-cuda-gpus-on-linux
我們還需要一個Python編譯器,這裡我們使用Anaconda,Anaconda2對應Python2,Anaconda3對應Python3,我使用Anaconda2。Anaconda自帶了一些常用的Python包,以及一些比較好用的Python編譯器。
配置好TensorFlow以後,打開Anaconda的Spyder,輸入以下代碼檢查TensorFlow是否可用。
import tensorflow as tfnhello = tf.constant(Hello TensorFlow!)nsess = tf.Session()nprint(sess.run(hello))na = tf.constant(10)nb = tf.constant(32)nprint(sess.run(a + b))n
如果遇到任何報錯,請參考:https://www.tensorflow.org/get_started/os_setup#common_problems
使用TensorFlow之前,要了解一下TensorFlow的基本知識:
1. 使用圖(graphs)來表示計算;
2.在會話(Session)中執行圖;
3.使用張量(tensors)來代表數據;
4.通過變數(variables)來維護狀態;
5.使用供給(feeds)和取回(fetches)來傳入或者傳出數據。
關於詳細的基礎使用,請參考:https://www.tensorflow.org/get_started/basic_usage, 太長不看的,至少看下代碼以及代碼的注釋。
了解了這些基本用法以後,活動一下筋骨,來編個小程序測試一下我們學習的結果吧,目標是優化一個一次函數y = wx + b的權值w和偏置b,使得w和b接近給定的表達式y = 0.1*x + b,代碼如下:
import tensorflow as tfnimport numpy as npnimport os nn# 使 Session 會話只使用 0 號 GPU 的 20% 內存nos.environ[CUDA_VISIBLE_DEVICES]=0nconfig = tf.ConfigProto()nconfig.gpu_options.per_process_gpu_memory_fraction=0.2nsess = tf.InteractiveSession(config=config)nnx_data = np.random.rand(100).astype("float32")ny_data = x_data * 0.1 + 0.3nnW = tf.Variable(tf.random_uniform([1],-1.0,1.0))nb = tf.Variable(tf.zeros([1]))ny = W * x_data + bnnloss = tf.reduce_mean(tf.square(y - y_data))nnoptimizer = tf.train.GradientDescentOptimizer(0.5)ntrain = optimizer.minimize(loss)nninit = tf.initialize_all_variables()nsess.run(init)nnfor step in xrange(201):n sess.run(train)n if step % 20 ==0:n print(step, sess.run(W), sess.run(b))n
代碼運行結果如下:
可以看到經過200次迭代,權重w已經接近預設值0.1,b 接近預設值0.3,實際上80次的時候已經收斂到很好的結果了。接下來,我們進行下一步的工作,用神經網路來進行MNIST手寫數字的識別,MNIST手寫數字分 training 和 test 兩個大類,training 有6萬張28*28大小的手寫數字,test有1萬張28*28大小的數字,更具體的介紹看這裡:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges。
MNIST手寫數字識別在TensorFlow的example中有自帶的代碼來實現,官方文檔也給出了很好的解釋,https://www.tensorflow.org/tutorials/mnist/beginners/和https://www.tensorflow.org/tutorials/mnist/pros/這兩個,建議都看,加強自己對TensorFlow的理解。
至此,TensorFlow已經有了基本的入門知識,然鵝,還是不足以支撐我膨脹的野心,我是要成為加勒比海盜一樣的男人,寫錯了,我是要成為TF Boys一樣的男人(背景聲音:噫~~),這種基本知識怎麼能滿足得了我這麼優秀的頭腦。
接下來,我們來看TensorFlow Mechanics 101,說實話,我也不知道這個名字是什麼意思,反正是個教程,管他呢,先學會再說。這裡面看起來也不難啊,就是介紹了examples/tutorials/mnist/mnist.py 和 examples/tutorials/mnist/fully_connected_feed.py兩個函數,順便說一下,用pip安裝之後的TensorFlow目錄一般在:/usr/local/lib/python2.7/dist-packages/tensorflow/或者是/usr/lib/python2.7/dist-packages/tensorflow/這裡。細看這兩個文件的代碼,不是很難,如果前面的知識認真看了,這個可以直接看代碼而不看官方文檔,實在不明白的地方可以看官方文檔的解釋。
在看代碼的過程中,有不明白的函數,就去Python API這裡找相應的函數來看,https://www.tensorflow.org/api_docs/python/,找不到的話,可以點右上角的搜索來搜索該函數。
先寫到這裡,明天更新TensorFlow的How To。
參考文獻:
1. https://www.tensorflow.org/tutorials/
推薦閱讀:
TAG:TensorFlow | 深度学习DeepLearning |