TensorFlow 实战Google 深度学习框架 郑泽宇


研究ssd网络的层结构,该怎样修改,能提升准确度,怎样看结果,各个loss代表的意义,
alphago原理:
ai+教育
ai+媒体
ai+医学
ai+配送
ai+农业
caicloud.io
tensorboard 可视化,tensorflow高层封装,带gpu的分布式tensorflow使用方法,tensorflow输入数据处理流程,

cv,nlp,sr,人机博弈
protocol buffer 处理结构化数据的工具
结构化的数据序列化,序列化之后的数据流还原出结构化数据
bazel 自动化构建工具 ,编译工具,安装bazel首先需要安装jdk8,;
安装JDK8的方法
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
然后安装bazel的其他依赖工具包
sudo apt-get install pkg-config zip g++ zliblg-dev unzip
接着在github发布页面下载安装包 https://github.com/bazelbuild/bazel/releases/tag/0.5.4
以下安装bazel
chmod +x bazel-0.5.5-jdk7-installer-linux-x86_64.sh
./bazel-0.5.4-jdk7-installer-linux-x86_64.sh -user
export PATH="$PATH:$HOME/bin"
具体参考installing bazel
bazel安装完成后还需要安装tensorflow的依赖工具包
sudo apt-get install python-numpy python-dev python-pip python-wheel
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel

########################
cuda toolkit 安装完成后需要将环境变量加入到~/.bash_profile之中
export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$CUDA_HOME/lib"
export PATH="$CUDA_HOME/bin:$PATH"

第二章 tensorflow环境搭建
docker 支持gpu的docker镜像,需要安装nvidiadocker,
nvidia-docker run -it tensorflow/tensorflow:1.5.0-gpu
pip :安装管理python软件包的工具,
ubuntu/linux 64-bit 环境下安装
sudo apt-get install python-pip python-dev

source wheel 文件

第三章tensorflow入门
3.1 tensorflow计算模型 -计算图
tf.get_default_graph() 得到当前默认的计算图
a.graph 可以查看张量所属的计算图
tf.Graph 生成新的计算图
tf.get_variable
tf.global_variables_initializer().run()
tf.Graph.device函数运行计算的设备

3.2 tensorflow数据模型 -张量
零阶张量表示标量(scalar),第一阶张量为向量(vector),一维数组
3.3 tensorflow运行模型 -会话
创建一个会话
sess=tf.Session()
sess.run()
sess.close()
#################
with tf.Session() as sess:
 sess.run()
 ####################
 configproto配置会话的方法
 config=tf.ConfigProto(allow_sofgt_placement=True,log_device_placement=True)
 sess1=tf.InteractiveSession(config=config)
 sess2=tf.Session(config=config)
 
3.4 tensorflow实现神经网络
http://playground.tensorflow.org 通过网页浏览器就可以训练的简单神经网络并实现可视化训练过程的工具。

tf.matmul实现矩阵乘法
tf.random_normal([2,3],stddev=2)
生成2*3矩阵,均值为0,标准差为2的随机数。
tf.random_normal 正态分布
tf.truncated_normal 正态分布,如果随机出来的值偏离平均值超过2个标准差,那么这个数就会重新随机
tf.random_uniform 均匀分布
tf.random_gamma  形状参数alpha、尺度参数beta、取值类型
tf.zeros([2,3],int32)->[[0,0,0],[0,0,0]]
tf.ones([2,3],int32)->[[1,1,1],[1,1,1]]
tf.fill([2,3],9)->[[9,9,9],[9,9,9]]
tf.constant([1,2,3])->[1,2,3]
tf.global_variables_initializer() 给所有变量赋值
tf.assign() 初始化变量

backpropagation
tf.placeholder 存放输入数据
cross_entropy=-tf.reduce_mean
常用的优化方法:tf.train.GradientDescentOptimizer,tf.train.AdamOptimizer,tf.train.MomentumOptimizer
###################################################
第四章 深层神经网络
4、11线性模型的局限
线性不可分问题
4、12激活函数实现去线性
非线性激活函数,tf.nn.relu,tf.sigmod,tf.tanh
4、13多层网络解决异或问题
Perceptrons:An Introduction to Computational Geometry 感知机无法模拟异或运算

4.21经典损失函数
tensorflow 中softmax参数被去掉了,它只是一个额外的处理层,将神经网络的输出变成一个概率分布。交叉熵刻画的是两个概率分布的距离,
正确答案(1,0,0)预测(0.5,0.4,0.1)
预测与正确答案之间的交叉熵为
H((1,0,0),(0.5,0.4,0.1))=-(1*log0.5+0*log0.4+0*log0.1)=0.3
tf.clip_by_value限制张量中的数值在一个范围
v=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
print(tf.clip_by_value(v,2.5,4.5).eval())
小于2.5都被替换成2.5,大于4.5都被替换成4.5
cross_entropy=tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y) 得到softmax回归后的交叉熵
房价预测,销量预测都是回归问题
回归问题最常用的损失函数是均方误差(MSE,mean squared error)
tf.where
tf.greater判断两个张量中的每一个元素的大小


4.31神经网络的优化算法
梯度的方向:
梯度的反方向总损失最小
反向传播算法具体的实现方法和数学证明 learning representations by back-propagating errors

4.41学习率设置
tf.train.exponential_decay 指数衰减学习率,可以使用较大的学习率来快速得到一个比较优的解,然后迭代逐步减小学习率。
4.42过拟合问题
regularization
l1正则化 让数据变的更稀疏,计算公式不可导
l2正则化 不会让数据变的更稀疏,计算公式可导
通过限制权重的大小,使得模型不能任意拟合噪声
tf.contrib.layers.l2_regularizer(lambda)(w)计算l2正则化项的值

4.43滑动平均模型
tf.train.ExponentialMovingAverage
第五章 MINIST数字识别问题
5.1数据处理
http://yann.lecun.com/exdb/mnist 对mnist数据集做出了详细介绍。
5.2使用验证数据集判断模型效果
自己编写验证集判断模型效果
validate_acc=sess.run(accuracy,feed_dict=validate_feed)

5.2.3不同模型效果比较
正则化损失变大是什么原因?
不同模型:使用滑动平均,使用正则化,使用指数衰减学习率,使用隐藏层,使用激活函数
5.3变量
tensorflow提供了创建变量的机制,
v=tf.get_variable("v",shape=[1],initializer=tf.constant_initializer(1.0))
v=tf.Variable(tf.constant(1.0,shape=[1]),name="v")
tensorflow中的变量初始化函数
tf.constant_initializer  变量初始化为给定常量
tf.random_normal_initializer 正态分布的随机值
tf.truncated_normal_initializer 超过2个标准差,这个数将重新随机
tf.random_uniform_initializer 平均分布的随机值
tf.uniform_unit_scaling_initializer 满足平均分布但不影响输出数量级的随机值
tf.zeros_initializer
tf.ones_initializer
tf.variable_scope  reuse=True直接获取已经创建的变量

5.4持久化代码实现 原理及数据结构
saver=tf.train.Saver()
with tf.Session() as sess:
   ....
   saver.save(sess,"/path/to/model/model.ckpt")
   
model.ckpt.meta 保存计算图的结构
model.ckpt 保存了每一个变量的取值
checkpoint 保存了一个目录下所有的模型文件列表。
#############
加载这个已经保存的模型
saver=tf.train.Saver()
with tf.Session() as sess:
  saver.restore(sess,"/path/to/model/model.ckpt")
 
  加载模型中没有变量的初始化
 
  #########
  如果不希望重复定义图上的运算,可以直接加载已经持久化的图
  saver=tf.train.import_meta_graph("/path/to/model/model.ckpt/model.ckpt.meta")
 


第六章 图像识别与卷积神经网络
6.1图像识别问题及经典数据集
cifar yhttps://www.cs.toronto.edu/~kriz/cifar.html 提供不同格式的cifar数据集下载,
mnist是黑白的
cifar是彩色的 cifar-10 10类60000张图片,人工标注正确率94%,
mnist和cifar存在问题:现实中的图片分辨率远高与32*32,而且图片的分辨率也不会固定;二:现实中物体类别很多,一张图片不只出现一种物体
李飞飞带头整理的ImageNet 很大程度上解决了这个问题,1500w图片,被关联到wordnet的大约2000个名称同义词集上。
top-5是指图像识别算法给出前n个答案中有一个正确的概率
6.2卷积神经网络结构
卷积神经网络和全连接神经网络的区别是神经网络中相邻两层的连接方式
卷积神经网络的组成:
输入层:
卷积层: 节点矩阵为什么深度会增加?
池化层:改变矩阵的大小,
全连接层:
softmax层:

6.3lenet模型
inception-v3模型
过滤器的尺寸:
过滤器的深度:
卷积层的参数个数只和过滤器的尺寸、深度以及当前层节点矩阵的深度有关,
filter_weight=tf.get_variable('weights',[5,5,3,16],initializer=tf.truncated_normal_initializer(stddev=0.1))
biases=tf.get_variable('biases',[16],initializer=tf.constant_initializer(0.1))
conv=tf.nn.conv2d(input,filter_weight,strides=[1,1,1,1],padding='SAME')
第三个参数为不同维度上的步长,卷积层的步长只对矩阵的长和宽有效。
最大池化层 max pooling
平均池化层 average pooling
卷积层使用的过滤器是横跨整个深度的,池化层使用的过滤器只影响一个深度上的节点。池化层的过滤除了在长和宽的维度上移动,还需要在深度的维度上移动
pool=tf.nn.max_pool(actived_conv,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')
lenet-5 模型 是Yann LeCun 在Gradient-based learning applied to document recognition中提出。
lenet-5总共有7层,
Very Deep Convolutional Networks for Large-Scale Image Recognition
参考论文:Rethinking the Inception Architecture for Computer Vision
Inception-v3 共46层,
tensorflow-slim实现卷积层
net=slim.conv2d(input,32,[3,3])
第一个参数为输入节点矩阵,第二个参数为当前层过滤器的深度,第三个参数是过滤器的尺寸,

6.4迁移学习
DeCAF:A Deep Convolutional Activation Feature for Generic Visual Recognition 中的结论,可以保留inception-v3模型中的所有卷基层的参数,只是替代最后一层全连接层,
tensorflow-slim可以提高编程效率
##########################
摄像头的重要参数:
分辨率,色彩还原,白平衡以及灰度测试
坏点测试,均匀性测试,
iseetest摄像头性能测试软件。

第七章 图像数据处理
7.1TFRecord输入数据格式
数据处理(将MNIST转为TFRecord)
7.2图像数据处理

7.3多线程输入数据处理框架
randomshufflequeue
tf.Coordinator 和tf.QueueRunner

第八章 循环神经网络
8.1 lstm
8.2 循环神经网络的变种

第九章自然语言处理
9.1神经语言模型
9.2神经网络机器翻译
第十章tensorflow高层封装
10.1keras介绍
10.2estimator介绍
第十一章tensorboard可视化
11.1tensorflow计算图可视化
第十二章 tensorflow计算加速
12.1使用gpu
12.2深度学习训练并行模式
12.3多gpu并行
12.4分布式tensorflow

 在tensorflow中,一个像素点的颜色顺序是R,G,B。
# 在opencv中,一个像素点的颜色顺序是B,G,R。

猜你喜欢

转载自blog.csdn.net/gloriazhang2013/article/details/86640722