本資料是在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 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的基本知識:
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 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。
參考文獻:
1. https://www.tensorflow.org/tutorials/