校园视频AI分析识别算法通过分布式TensorFlow模型训练,校园视频AI分析识别算法对学生的行为进行实时监测,当系统检测到学生出现打架、翻墙、倒地、抽烟等异常行为时算法将自动发出警报提示。在做算法模型训练过程中,深度学习应用到实际问题中,一个非常棘手的问题是训练模型时计算量太大。为了加速训练,TensorFlow可以利用GPU或/和分布式计算进行模型训练。TensorFlow可以通过td.device函数来指定运行每个操作的设备,这个设备可以是本设备的CPU或GPU,也可以是远程的某一台设备。TF生成会话的时候,可愿意通过设置tf.log_device_placemaent参数来打印每一个运算的设备。
校园视频AI分析识别算法之所以选择TensorFlow,是因为TensorFlow开源一周年以来,已有500 contributors,以及11000 个commits。目前采用TensorFlow平台作为模型训练的受选择,在生产环境下进行深度学习的公司有ARM、Google、UBER、DeepMind、京东等公司。目前谷歌已把TensorFlow应用到很多内部项目,如谷歌语音识别,GMail,谷歌图片搜索等。校园视频AI分析识别算法训练过程中TensorFlow主要特性有:
使用灵活:TensorFlow是一个灵活的神经网络学习平台,采用图计算模型,支持High-Level的API,支持Python、C 、Go、Java接口。跨平台:TensorFlow支持CPU和GPU的运算,支持台式机、服务器、移动平台的计算。并从r0.12版本支持Windows平台。产品化:TensorFlow支持从研究团队快速迁移学习模型到生产团队。实现了研究团队发布模型,生产团队验证模型,构建起了模型研究到生产实践的桥梁。高性能:TensorFlow中采用了多线程,队列技术以及分布式训练模型,实现了在多CPU、多GPU的环境下分布式训练模型。
接下来描述校园视频AI分析识别算法训练过程具体实际操作过程中的一些技术细节注意的地方:
第一步创建一个session对象.如果无任何创建参数,会话构造器将启动默认图.
sess = tf. Session()
调用sess的run()方法来执行图
result = sess. run(product)//product是op计算的输出.result是一个numpy类的对象
//'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
- 整个执行过程是自动的,会话负责传递 op 所需的全部输入. op 通常是并发执行的. 可以指定设备 with tf.device(“/gpu:1”)//如果机器上有多个gpu默认是只用第一个,其他需要指定.
- 关闭对话
显示关闭 sess.close()
with关闭
with tf. Session() as sess:
result = sess. run([product] )
print result
交互式使用
使用 InteractiveSession 代替 Session 类, 使用
Tensor.eval() 和 Operation.run() 方法代替 Session.run()
Tensor.eval() 和 Operation.run() 方法代替 Session.run()
# 进入一个交互式 TensorFlow 会话.
import tensorflow as tf
sess = tf. InteractiveSession()
x = tf. Variable([1.0, 2.0] )
a = tf. constant([3.0, 3.0] )
# 使用初始化器 initializer op 的 run() 方法初始化 ‘x’
x. initializer. run()
# 增加一个减法 sub op, 从 ‘x’ 减去 ‘a’. 运行减法 op, 输出结果
sub = tf. sub(x, a)
print sub. eval()//代替session.run
# ==> [-2. -1.]
变量
变量维护图执行过程中的状态信息
损失值loss是交叉熵和权重衰减项的和.
TensorBoard
通过读取TensorFlow的事件文件来运行.
通过向节点添加summary操作汇集数据(scalar_summary,histogram_summary等等)
使用tf.merge_all_summaries将节点的信息汇总合并,它会依据特点步骤将所有数据生成一个序列化的 Summary protobuf对象
将汇总的protobuf对象传递给tf.train.Summarywriter.SummaryWriter的构造函数中包含参数logdir.所有的事件都会写到它所指的目录下.可选参数 GraphDef 。如果输入了该参数,那么 TensorBoard也会显示你的图像。
#合并操作
merged_summary_op = tf. merge_all_summaries()
#/tep/mnist_logs日志文件目录,为了显示自己的的图表,需要将Tensorflow指向此工作的日志目录,sess.log在Tensorflow中显示sess.graph图像
summary_writer = tf. train. SummaryWriter('/tmp/mnist_logs' , sess. graph)
#当步数为100的时候运行合并操作
total_step = 0
while training:
total_step = 1
session. run(training_op)
if total_step % 100 == 0:
summary_str = session. run(merged_summary_op)
#写入数据
summary_writer. add_summary(summary_str, total_step)
启动Tensorflow
python tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory
这里的参数 logdir 指向 SummaryWriter 序列化数据的存储路径。如果 logdir 目录的子目录中包含另一次运行时的数据,那么 TensorBoard 会展示所有运行的数据。一旦 TensorBoard 开始运行,你可以通过在浏览器中输入 localhost:6006 来查看 TensorBoard。
如果你已经通过pip安装了 TensorBoard,你可以通过执行更为简单地命令来访问 TensorBoard
tensorboard –logdir=/path/to/log-directory
构建一个多层卷积网络
- 一般来说,初始化权重和偏置时应加入轻微噪声,来打破对称性,防止零梯度 的问题
- 卷积
def conv2d(x, W) :
#strides步长padding边距
return tf. nn. conv2d(x, W, strides=[1, 1, 1, 1] , padding='SAME' )
*池化
def max_pool_2x2(x) :
return tf. nn. max_pool(x, ksize=[1, 2, 2, 1] ,
strides=[1, 2, 2, 1] , padding='SAME' )
本文主要介绍校园视频AI分析识别算法训练过程中TensorFlow一些关键技术的使用实践,包括TensorFlow变量、TensorFlow应用架构、TensorFlow可视化技术、GPU使用,以及HDFS集成使用。