大家好,本人使用Tensorflow已经有一年多时间,在此期间看了很多相关书籍和博客,我也总结了一些Tensorflow实际使用知识点,我会陆续分享给大家。今天本文先介绍Tensorflow基础知识。
一、Tensorflow的操作是符号运算操作
TensorFlow和其他数值计算库(如Numpy)最显着的区别在于TensorFlow中的操作是符号运算。这是非常强大的概念,它允许TensorFlow执行所有类型操作(例如自动微分),这些都是不能与命令库(如Numpy)一起使用的。这也使得它变得很难掌握。因此我将结合一些例子,以便能快速理解TensorFlow。
二、一个矩阵相乘的简单例子
让我们从一个简单的例子开始,我们想要两个随机矩阵相乘。首先我们看一下Numpy中的一个实现:
现在我们在TensorFlow中执行完全相同的计算:
与立即执行计算结果不同(例如Numpy),TensorFlow只向图中的结果节点提供了一个句柄(张量类型)。我们来打印z的值,得到如下的结果:
Tensor("MatMul:0", shape=(5, 5), dtype=float32)
由于输入都是事先定义好的大小。所以TensorFlow能够推断张量大小以及其类型。为了计算张量的值,我们需要使用Session.run()方法来创建一个会话并对其进行评估。
三、一个拟合函数的例子
我们通过另一个例子来理解符号计算的强大。假设我们有一条曲线样本,如下所示:
我们想根据这些样本估计f(x)。我们先来定义一个参数函数:
它是输入x和潜在参数w的函数,我们的目标就是寻找潜在参数,使得以下公式成立:
这可以通过最小化以下损失函数来完成。
尽管这个简单问题有封闭形式的解决方法,但我们选择更一般的方法,这可以推广到任意可微分函数,所以我们使用随机梯度下降法来求解潜在参数w。首先我们简单地计算一组采样点上L(w)相对于w的平均梯度,然后再向相反方向移动。在TensorFlow中实现代码:
通过运行这段代码,我们可以看到结果如下:
[[5.00010347e 00],[ -6.03180633e-05],[2.99345398e 00]]
这与我们的参数非常接近。
这只是TensorFlow可做到的冰山一角。只需几行代码,就可以在TensorFlow中高效地实现优化具有百万参数的大型神经网络等问题。此外TensorFlow还支持多设备和线程运行,还支持多种平台。