TF Boys (TensorFlow Boys ) 養成記(一):TensorFlow 基本操作

本資料是在Ubuntu14.0.4版本下進行,用來進行圖像處理,所以只介紹關於圖像處理部分的內容,並且默認TensorFlow已經配置好,如果沒有配置好,請參考官方文檔配置安裝,推薦用pip安裝。關於配置TensorFlow,官方已經說得很詳細了,我這裡就不啰嗦了。官方教程看這裡:tensorflow.org/get_star

如果安裝了GPU版本的TensorFlow,還需要配置Cuda,關於Cuda安裝看這裡:tensorflow.org/get_star

我們還需要一個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

如果遇到任何報錯,請參考:tensorflow.org/get_star

使用TensorFlow之前,要了解一下TensorFlow的基本知識:

1. 使用圖(graphs)來表示計算;

2.在會話(Session)中執行圖;

3.使用張量(tensors)來代表數據;

4.通過變數(variables)來維護狀態;

5.使用供給(feeds)和取回(fetches)來傳入或者傳出數據。

關於詳細的基礎使用,請參考:tensorflow.org/get_star, 太長不看的,至少看下代碼以及代碼的注釋。

了解了這些基本用法以後,活動一下筋骨,來編個小程序測試一下我們學習的結果吧,目標是優化一個一次函數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中有自帶的代碼來實現,官方文檔也給出了很好的解釋,tensorflow.org/tutorialtensorflow.org/tutorial這兩個,建議都看,加強自己對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這裡找相應的函數來看,tensorflow.org/api_docs,找不到的話,可以點右上角的搜索來搜索該函數。

先寫到這裡,明天更新TensorFlow的How To。

參考文獻:

1. tensorflow.org/tutorial


推薦閱讀:

TAG:TensorFlow | 深度学习DeepLearning |