tensorflow学习笔记

TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。TensorFlow™ 最初是由 Google Brain 团队(隶属于 Google 的 AI 部门)中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持,并且其灵活的数值计算核心广泛应用于许多其他科学领域。

tensorflow入门

tensorflow实现机器学习的基本步骤如下:

  1. 定义模型,建立数据流图
  2. 定义loss,并指定优化器
  3. 传入数据并进行训练
  4. 使用测试集进行评测

通用代码框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import tensorflow as tf

# 初始化变量和模型参数,定义训练闭环中的运算

def inference(X):
# 计算推断模型在数据X上的输出,并将结果返回

def loss(X,Y):
# 依据训练数据X及其期望输出Y计算损失

def inputs():
# 读取或生成训练数据X及其期望输出Y

def train(total_loss):
# 依据计算的总损失训练或调整模型参数

def evaluate(sess,X,Y):
# 对训练得到的模型进行评估

# 在一个会话对象中启动数据流图,搭建流程
with tf.Session() as sess:
tf.initialize_all_variables().run()

X,Y=inputs()

total_loss=loss(X,Y)
train_op=train(total_loss)

coord=tf.train.Coordinator()
threads=tf.train.start_queue_runners(sess=sess,coord=coord)

# 实际的训练迭代次数
training_steps=1000
for step in range(training_steps):
sess.run([train_op])
# 出于调试和学习的目的,查看损失在训练过程中递减的情况
if step % 10 =0:
print "loss: ",sess.run([total_loss])

evaluate(sess,X,Y)

coord.request_stop()
coord.join(threads)
sess.close()

保存训练检查点

借助tf.train.Saver类可创建检查点文件,将数据流图中变量保存至其中。修改后框架如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 模型定义代码
# 创建一个Saver对象
saver=tf.train.Saver()

# 在会话对象中启动数据流图,搭建流程
with tf.Session() as sess:
# 模型设置

# 实际的训练闭环
for step in range(training_steps):
sess.run([train_op])

if step % 1000 ==0
# 将创建遵循命名模板为my-model-{step}的检查点文件,默认保存最近的5个文件
saver.save(sess,'my-model',global_step=step)

# 模型评估

saver.save(sess,'my-model',global_step=training_steps)
sess.close()

如果希望从检查点恢复,则使用tf.train.get_checkpoint_state方法验证检查点文件的存在,并使用tf.train.Saver.restore方法恢复变量值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
with tf.Session() as sess:
# 模型设置

initial_step=0

# 验证之前是否已经保存了检查点文件
ckpt=tf.train.get_checkpoint_state(os.path.dirname(__file__))
if ckpt and ckpt.model_checkpoint_path:
# 从检查点恢复模型参数
saver.restore(sess,ckpt.model_checkpoint_path)
initial_step=int(ckpt.model_checkpoint_path.rsplite('_',1)[1])

# 实际的训练闭环
for step in range(initial_step, training_steps):
...

参考文献

  1. TensorFlow指南,by tensorflow.
  2. 尝试理解 shape 的用法,by mcoder.
  3. Python中的列表(list),元组(Tuple),字典(Dict)和集合(Set),by liuyanfeier.
  4. 使用list和tuple,by liaoxuefeng.
  5. Python的reshape(-1,1),by lxlong89940101.
  6. numpy.array,by numpy.
  7. TensorFlow 官方文档中文版,by pythontab.
  8. numpy.array shape (R, 1) and (R,) 的区别,by 时间被海绵吃了2.
  9. tf.variable_scope中的reuse,by 超级无敌小小顺利.
  10. Tensorflow共享变量机制理解与应用,by BetterManPeter.
  11. tf.reduce_mean()函数解析(最清晰的解释),by 我是管小亮.
  12. 深度解析OPENAI-MADDPG,by 起点教程.
  13. diagonal Gaussian policies的一些理解,by Intuition.
  14. 强化学习随机策略之高斯似然数原理与代码实现,by 神奇的战士.
  15. 数学基础——浅谈似然,by shidata.
  16. gym中的discrete类、box类和multidiscrete类简介和使用,by iitter.
  17. OPENAI Baeslines 详解(零)综述,by zachary2wave.
  18. 强化学习Gym库学习实践(一),by 愣娃RC.
  19. Gym使用简介,by Lisnol.
  20. 左右互搏,self-play,《Emergent Complexity via Multi-Agent Competition》,by 王小惟 Weixun.
  21. 多智能体深度强化学习——MADDPG算法代码分析(tensorflow),by RavenRaaven.
  22. 多元高斯分布以及高斯分布微分熵,by 侠肝义胆陈浩天.
  23. tf.split 与 tf.squeeze 用法,by 应钟有微.
  24. 碎片化学习之数学(二):Categorical Distribution,by 李新春.
  25. Distribution is all you need:这里有12种做ML不可不知的分布,by 机器之心.
  26. tensorflow中axis理解非常重要,by 爱视觉.
  27. tensorflow中四种不同交叉熵函数tf.nn.softmax_cross_entropy_with_logits(),by iotstu.
  28. TF里几种loss和注意事项,by 崔权.
  29. Softmax函数和Sigmoid函数的区别与联系初识CV,by 初识CV.
  30. 损失函数|交叉熵损失函数,by 飞鱼Talk.
  31. tf.random_uniform的使用,by UESTC_C2_403.
  32. sparse_softmax_cross_entropy_with_logits与softmax_cross_entropy_with_logits,by 光彩照人.
  33. 关于LogSumExp,by Hurry Z.
  34. softmax 与 log sum exp,by 我要给主播生猴子.