TensorFlow

TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。
节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。
可用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。
数据流图(Data Flow Graph)
用“节点”(nodes)和“线”(edges)的有向图来描述数学计算。
“节点” 一般用来表示施加的数学操作,也可表示数据输入(feed in)的起点/输出(push out)的终点,或读取/写入持久变量(persistent variable)的终点。
线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。
张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。
一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。
基本用法
一览

使用 图(Graph) 表示计算任务
在 会话(Session) 中执行图
使用 tensor 表示数据
通过 变量(Variable) 维护状态
使用 feed和fetch 进行赋值或取值

图中的节点称为op(operation)

一个op获得tensor(>=0个)进行计算,产生tensor(>=0个)
TensorFlow程序通常包括 构建阶段 和 执行阶段 
在构建阶段,op的 执行步骤 被描述成图
在执行阶段,使用 会话 执行图中的op
TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其增加节点

进阶

Python代码的目的是用来 构建这个可以在外部运行的计算图,以及 安排计算图的哪一部分应该被运行。


http://tensorfly.cn/
github 地址 :

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/tutorials
;;
https://github.com/tensorflow/tensorflow/tree/r0.8/tensorflow/examples/tutorials


训练模型

为了训练我们的模型,我们首先需要定义一个指标来评估这个模型是好的。其实,在机器学习,我们通常定义指标来表示一个模型是坏的,这个指标称为成本(cost)或损失(loss),然后尽量最小化这个指标。但是,这两种方式是相同的。

一个非常常见的,非常漂亮的成本函数是“交叉熵”(cross-entropy)。交叉熵产生于信息论里面的信息压缩编码技术,但是它后来演变成为从博弈论到机器学习等其他领域里的重要技术手段。它的定义如下:

y 是我们预测的概率分布, y' 是实际的分布(我们输入的one-hot vector)。比较粗糙的理解是,交叉熵是用来衡量我们的预测用于描述真相的低效性。更详细的关于交叉熵的解释超出本教程的范畴,但是你很有必要好好理解它。

为了计算交叉熵,我们首先需要添加一个新的占位符用于输入正确值:

y_ = tf.placeholder("float", [None,10])
然后我们可以用 计算交叉熵:

cross_entropy = -tf.reducesum(y*tf.log(y))
首先,用 tf.log 计算 y 的每个元素的对数。接下来,我们把 y 的每一个元素和 tf.log(y) 的对应元素相乘。最后,用 tf.reduce_sum 计算张量的所有元素的总和。(注意,这里的交叉熵不仅仅用来衡量单一的一对预测和真实值,而是所有100幅图片的交叉熵的总和。对于100个数据点的预测表现比单一数据点的表现能更好地描述我们的模型的性能。

现在我们知道我们需要我们的模型做什么啦,用TensorFlow来训练它是非常容易的。因为TensorFlow拥有一张描述你各个计算单元的图,它可以自动地使用反向传播算法(backpropagation algorithm)来有效地确定你的变量是如何影响你想要最小化的那个成本值的。然后,TensorFlow会用你选择的优化算法来不断地修改变量以降低成本。

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
在这里,我们要求TensorFlow用梯度下降算法(gradient descent algorithm)以0.01的学习速率最小化交叉熵。梯度下降算法(gradient descent algorithm)是一个简单的学习过程,TensorFlow只需将每个变量一点点地往使成本不断降低的方向移动。当然TensorFlow也提供了其他许多优化算法:只要简单地调整一行代码就可以使用其他的算法。


与分类问题不同,回归问题解决的是对具体数值的预测,eg:房价预测,销量预测,流量预测等

均方误差的定义:均方误差

#y代表输出答案,y_代表标准答案  
mse=tf.reduce_mean(tf.square(y_-y))

但在实际问题中往往均方误差并不能很好的表达问题,比如预测销量,卖衣服,货物成本一件100元,商品利润一件20。那此时多预测一个亏100,少预测一个少挣20。所以这里面有一个权重在里面,根据具体问题去定义偏向多进货还是偏向少进货。这时候往往需要根据实际问题在MSE的基础上自定义损失函数。