— 来自莫烦Python
计算图纸
Tensorflow 首先要定义神经网络的结构, 然后再把数据放入结构当中去运算和 training
因为TensorFlow是采用数据流图
data
flow
graphs
来计算, 所以首先我们得创建一个数
据流流图, 然后再将我们的数据(数据以张量tensor
的形式存在)放在数据流图中计算. 节点Nodes
在图中表示数学操作,图中的线edges
则表示在节点间相互联系的多维数据数组, 即张
量tensor
. 训练模型时tensor
会不断的从数据流图中的一个节点flow到另一节点, 这就是
TensorFlow名字的由来.
Tensor张量意义
张量(
Tensor
):
- 张量有多种,零阶张量为
纯量
或标量
(scalar
) 也就是一个数值.比如[1]
- 一阶张量为
向量
(vector
), 比如 一维的[1, 2, 3]
- 二阶张量为
矩阵
(matrix
), 比如 二维的[[1, 2, 3],[4, 5, 6],[7, 8, 9]]
- 以此类推, 还有三阶,三维的 …
GradientDecent例子
Tensorflow 是非常重视结构的, 我们得建立好了神经网络的结构, 才能将数字放进去, 运行这个结构.
创建数据
首先, 我们这次需要加载
tensorflow
和numpy
两个模块, 并且使用numpy
来创建我们的数据.
1 | import tensorflow as tf |
其中, 我们用
tf.Variable
来创建描述y
的参数. 我们可以把y_data = x_data*0.1 + 0.3
想象成y=Weights * x + biases
, 然后神经网络也就是学着把Weights
变成0.1,biases
变成0.3.
搭建模型
1 | Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) |
计算误差
接着就是计算
y
和y_data
的误差:
1 | loss = tf.reduce_mean(tf.square(y-y_data)) |
传播误差
反向传递误差的工作就教给
optimizer
了, 我们使用的误差传递方法是梯度下降法:Gradient Descent
让后我们使用optimizer
来进行参数的更新.
1 | optimizer = tf.train.GradientDescentOptimizer(0.5) |
训练
到目前为止, 我们只是建立了神经网络的结构, 还没有使用这个结构. 在使用这个结构之前, 我们必须先初始化所有之前定义的
Variable
, 所以这一步是很重要的!
1 | # init = tf.initialize_all_variables() # tf 马上就要废弃这种写法 |
接着,我们再创建会话
Session
. 我们会在下一节中详细讲解 Session. 我们用Session
来执行init
初始化步骤. 并且, 用Session
来run
每一次 training 的数据. 逐步提升神经网络的预测准确性.
1 | sess = tf.Session() |
运行结果如图:
Placeholder 传入值
placeholder
是 Tensorflow 中的占位符,暂时储存变量类似形参,规定类型而外部传值
Tensorflow 如果想要从外部传入data, 那就需要用到
tf.placeholder()
, 然后以这种形式传输数据sess.run(***, feed_dict={input: **})
1 | import tensorflow as tf |
接下来, 传值的工作交给了
sess.run()
, 需要传入的值放在了feed_dict={}
并一一对应每一个input
.placeholder
与feed_dict={}
是绑定在一起出现的
1 | with tf.Session() as sess: |