【tensorflow】tensorflow学习记录——安装、第一个程序篇
机器学习,人工智能往后肯定是一个趋势,现阶段有必要研究一两个人工智能的工具,以免自己技术落伍,其中tensorflow就是一个很不错的项目,有谷歌开发后开源,下面开始学习安装和使用
安装篇:
很不幸,源代码和pip的源都是在谷歌托管,连tensorflow官网都是,所以国内访问不了,很悲剧。但是通过docker可以轻松安装,又不用FQ。
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或者国外服务器测试了。