機器學習,人工智能往后肯定是一個趨勢,現階段有必要研究一兩個人工智能的工具,以免自己技術落伍,其中tensorflow就是一個很不錯的項目,有谷歌開發后開源,下面開始學習安裝和使用
安裝篇:
很不幸,源代碼和pip的源都是在谷歌托管,連tensorflow官網都是,所以國內訪問不了,很悲劇。但是通過docker可以輕松安裝,又不用翻牆。
docker pull tensorflow/tensorflow
下載tensorflow鏡像。
docker run -dit -p 8888:8888 --name tensorflow tensorflow/tensorflow
啟動tensorflow容器。
如果沒有防火牆的話,現在用瀏覽器訪問docker所在服務器地址的8888端口就可以看到jupyter界面了。(jupyter可以認為是一個python的網頁版IDE,方便使用)
http://xxx.xxx.xxx.xxx:8888
為了安全,jupyter默認設置了token驗證,可以通過
docker logs tensorflow
查看token。每還一個瀏覽器或者電腦,都需要輸入新的token, 如果有人感覺使用不方便,可以給jupyter設置一個密碼,設置方式如下:
1,進入tensorflow容器
docker exec -it tensorflow /bin/bash
2,運行
jupyter notebook password
3, 根據提示兩次輸入密碼
4, 重啟tensorflow容器
docker restart tensorflow
二,第一個tensorflow程序
tensorflow的入門程序是識別手寫數字,就跟其他程序的helloword一樣。
詳細工作原理,見這個帖子
http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html
代碼實現:
from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf #引入mnist的數據 mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) #設置一個數組元素為32位浮點數、未知數*784的數組占位符X x = tf.placeholder(tf.float32, [None, 784]) #設置一個默認值為0的784*10的數組變量 w = tf.Variable(tf.zeros([784,10])) #設置一個默認值為0的1*10的數組變量 b = tf.Variable(tf.zeros([10])) #根據公式生成表達式 y = tf.nn.softmax(tf.matmul(x,w) + b) #設置一個浮點數,未知數*10的數組占位符y_ y_ = tf.placeholder("float", [None,10]) #根據公式設置表達式 cross_entropy = -tf.reduce_sum(y_*tf.log(y)) #設置訓練方式 train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) #初始化變量 init = tf.initialize_all_variables() #生成執行session sess = tf.Session() #運行變量初始化 sess.run(init) #執行1000次訓練,每次從mnist庫中拿出100個數進行訓練 for i in range(10000): batch_xs, batch_ys = mnist.train.next_batch(100) sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys}) # correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
結果為:
Extracting MNIST_data/train-images-idx3-ubyte.gz Extracting MNIST_data/train-labels-idx1-ubyte.gz Extracting MNIST_data/t10k-images-idx3-ubyte.gz Extracting MNIST_data/t10k-labels-idx1-ubyte.gz 0.9215
如果出現這個錯誤
Temporary failure in name resolution
那么很不幸,意味着mnist這個庫下載不下來,這個庫也是要訪問谷歌,只能通過vpn或者國外服務器測試了。