Tensorflow是一个基于图的计算系统,其主要应用于机器学习。git
从Tensorflow名字的字面意思能够拆分红两部分来理解:Tensor+flow。github
当咱们想要使用Tensorflow作什么事情的时候,通常须要三个操做步骤:docker
Tensorflow有个图的概念,Operations会添加到图中,做为图的节点。在添加某Operation的时候,不会当即执行该Operation。Tensorflow会等待全部Operation添加完毕,而后Tensorflow会优化该计算图,以便决定如何执行计算。数组
若是想开始实验一下Tensorflow,能够经过Docker启动官方的镜像tensorflow/tensorflow。浏览器
以下所示,网络
lienhuadeMacBook-Pro:tensorflow lienhua34$ docker run -d -p 8888:8888 --name tensorflow tensorflow/tensorflow 0fc7849b3ef5ac56e8ad372cc201874338c586ed5f47a4205997712efcd35646 lienhuadeMacBook-Pro:tensorflow lienhua34$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0fc7849b3ef5 tensorflow/tensorflow "/run_jupyter.sh" 49 minutes ago Up 2 seconds 6006/tcp, 0.0.0.0:8888->8888/tcp tensorflow
该镜像启动一个jupyter,而后咱们在浏览器中输入http://localhost:8888/来访问,以下图所示,dom
而后点击右上角的New -> Python 2,新建的一个Python交互页面,即可以开始实验Tensorflow的功能,机器学习
下面咱们经过两个向量相加的简单例子来看一下Tensorflow的基本用法。tcp
[1. 1. 1. 1.] + [2. 2. 2. 2.] = [3. 3. 3. 3.]
import tensorflow as tf with tf.Session(): input1 = tf.constant([1.0 1.0 1.0 1.0]) input2 = tf.constant([2.0 2.0 2.0 2.0]) output = tf.add(input1, input2) result = output.eval() print result
Tensorflow的计算必需要在一个Session的上下文中。Session会包含一个计算图,而这个图你添加的Tensors和Operations。固然,你在添加Tensor和Operation的时候,它们都不会当即进行计算,而是等到最后须要计算Session的结果的时候。当Tensorflow以后了计算图中的全部Tensor和Operation以后,其会知道如何去优化和执行图的计算。学习
两个tf.constant() 语句向计算图中建立了两个Tensor。调用tf.constant()的动做大体能够说为,建立两个指定维度的Tensor,以及两个constant操做符用于初始化相对应的Tensor(不会当即执行)。
tf.add()语句向计算图中添加了一个add操做,当不会当即执行,这时候add操做的结果还没法获取。此时,计算图大体以下所示,
result = output.eval() print result
当咱们最后调用output.eval()时,会触发Tensorflow执行计算图,从而获取output计算结点的结果。
咱们上面的例子使用的Tensor是常量(constant),而在咱们实际的机器学习任务中,咱们每每须要变量(variable)来记录一下可变的状态(例如神经网络节点的权重参数等)。下面咱们来看一个简单的variable例子。
import tensorflow as tf import numpy as np with tf.Session() as sess: # Set up two variables, total and weights, that we'll change repeatedly. total = tf.Variable(tf.zeros([1, 2])) weights = tf.Variable(tf.random_uniform([1,2])) # Initialize the variables we defined above. tf.initialize_all_variables().run() # This only adds the operators to the graph right now. The assignment # and addition operations are not performed yet. update_weights = tf.assign(weights, tf.random_uniform([1, 2], -1.0, 1.0)) update_total = tf.assign(total, tf.add(total, weights)) for _ in range(5): # Actually run the operation graph, so randomly generate weights and then # add them into the total. Order does matter here. We need to update # the weights before updating the total. sess.run(update_weights) sess.run(update_total) print weights.eval(), total.eval()
归纳了说,上面的代码就是建立了两个变量total和weights(都是1维的tensor),total全部元素初始化为0,而weights的元素则用-1到1之间的随机数进行初始化。而后在某个迭代中,使用-1到1之间的随机数来更新变量weights的元素,而后添加到变量total中。
在调用tf.Variable()的时候,只是定了变量以及变量的初始化操做(实际上并未执行)。全部变量都须要在开始执行图计算以前进行初始化。调用tf.initialize_all_variables().run()来对全部变量进行初始化。
在for循环中,
sess.run(update_weights)
触发执行更新weights变量的计算。
sess.run(update_total)
则处理了将变量total和变量weights进行相加,并将结果赋值到变量total。