本資料是在Ubuntu14.0.4版本下進行,用來進行圖像處理,因此只介紹關於圖像處理部分的內容,而且默認TensorFlow已經配置好,若是沒有配置好,請參考官方文檔配置安裝,推薦用pip安裝。關於配置TensorFlow,官方已經說得很詳細了,我這裏就不囉嗦了。官方教程看這裏:https://www.tensorflow.org/get_started/os_setuppython
若是安裝了GPU版本的TensorFlow,還須要配置Cuda,關於Cuda安裝看這裏:https://www.tensorflow.org/get_started/os_setup#optional-install-cuda-gpus-on-linuxlinux
咱們還須要一個Python編譯器,這裏咱們使用Anaconda,Anaconda2對應Python2,Anaconda3對應Python3,我使用Anaconda2。Anaconda自帶了一些經常使用的Python包,以及一些比較好用的Python編譯器。git
配置好TensorFlow之後,打開Anaconda的Spyder,輸入如下代碼檢查TensorFlow是否可用。github
import tensorflow as tf hello = tf.constant('Hello TensorFlow!') sess = tf.Session() print(sess.run(hello)) a = tf.constant(10) b = tf.constant(32) print(sess.run(a + b))
若是遇到任何報錯,請參考:https://www.tensorflow.org/get_started/os_setup#common_problems小程序
使用TensorFlow以前,要了解一下TensorFlow的基本知識:api
1. 使用圖(graphs)來表示計算;網絡
2.在會話(Session)中執行圖;dom
3.使用張量(tensors)來表明數據;python2.7
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 tf import numpy as np import os
os.environ['CUDA_VISIBLE_DEVICES']='0' config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction=0.2 sess = tf.InteractiveSession(config=config) x_data = np.random.rand(100).astype("float32") y_data = x_data * 0.1 + 0.3 W = tf.Variable(tf.random_uniform([1],-1.0,1.0)) b = tf.Variable(tf.zeros([1])) y = W * x_data + b
loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) init = tf.initialize_all_variables() sess.run(init)
for step in xrange(201): sess.run(train) if step % 20 ==0: print(step, sess.run(W), sess.run(b))
代碼運行結果以下:
能夠看到通過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。
參考文獻: