tensorflow-开发-基本步骤

tensorflow官网有很全面的教程,对于新手来说,还是太高深,这里边学习边总结适合自己的学习路线
TensorFlow开发的基本步骤如下:

  1. 定义TensorFlow输入节点
  2. 定义’学习参数’的变量
  3. 定义’运算’
  4. 优化函数,优化目标
  5. 初始化所有变量
  6. 迭代更新参数到最优解
  7. 测试模型
  8. 使用模型

定义输入节点

TensorFlow有如下几种定义输入节点的方法:

  • 通过占位符定义:一般使用这种方式
  • 通过字典类型定义:一般用于输入比较多的情况
  • 直接定义:一般很少使用

占位符定义

1
2
3
import tensorflow as tf
X = tf.placeholder('float')
Y = tf.placeholder('float')

通过函数placeholder定义float类型占位符

字典定义

与占位符定义类似,只不多是组成了字典

1
2
3
4
5
import tensorflow as tf
inputdict = {
'x': tf.placeholder('float'),
'y': tf.placeholder('float')
}

直接定义

就是将定义好的python变量直接放到OP节点中参与输入运算,将模拟数据的变量直接放到模型中进行训练

定义’学习参数’变量

学习参数的定义与输入节点的电仪很想,分为直接定义和字典定义两部分。这两种都是常见的使用方式,只不过在深层神经网络里由于参数过多,普遍会使用第二种情况

直接定义参数

1
2
3
import tensorflow as tf
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.zeros([1]), name='bias')

字典定义

1
2
3
4
5
6
7
8
import tensorflow as tf
# 模型参数
paradict = {
'w': tf.Variable(tf.random_normal([1])),
'b': tf.Variable(tf.zeros([1]))
}
# 前向结构
z = tf.multiply(X, paradict['w'] + paradict['b'])

定义’运算’

定义’运算’的过程是建立模型的核心过程,直接决定了模型的拟合效果。

  1. 定义正向传播模型
    如神经网络、卷积神经网、循环神经网络、GoogLeNet、Resnet等都是由神经元以不同的组合方式组成的网络结构
  2. 定义损失函数
    损失函数主要是计算’输出值’与’目标值’之间的误差,是配合反向传播使用的。为了在反向传播中可以找到最小值要求改函数必须是可导的。

优化函数,优化目标

有了正向结构和损失函数后,就是通过优化函数来优化学习参数,这个过程也是在反向传播中完成的。
反向传播过程就是沿着正向传播的结构像相反方向将误差传递过去。这里面涉及的技术比较多,如L1、L2正则化、冲量调节、学习率自适应、adm随机梯度下降算法等。

初始化所有变量

初始化所有变量的过程,虽然只有一句代码,但也是一个关键环节。
在session创建好了之后,第一件事就是需要初始化

1
2
3
4
import tensorflow as tf
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)

tf.global_variables_initializer函数初始化所有变量的步骤,必须在所有变量和OP定义完成之后。
这样才能保证定义的内容有效,否则,初始化之后定义的变量和OP都无法使用session中的run来进行算值。

迭代更新参数到最优解

模型中的节点是通过session中的run来运算的。在训练环节也是如此,只不过run里面放的是优化操作的OP,同时会在外层加上循环次数

1
2
3
for epoch in range(training_epochs):
for x, y in zip(train_X, train_Y):
sess.run(optimizer, feed_dict={X: x, Y: y})

真正使用过程中会引入一个叫做MINIBATCH概念进行迭代训练,即每次取一定量的数据同时放到网络里进行训练。

测试模型

就是得到模型的准确率,从而来描述模型的好坏

1
print('cost=', sess.run(cost, feed_dict={X: train_X, Y: train_Y}), 'W=', sess.run(W), 'b=', sess.run(b))

使用模型

一般会把生成的模型保存起来,再通过载入已有的模型来进行实际的使用。

参考:<深入学习之TensorFlow: 入门、原理与进阶实战>