Tensorflow基本概念

                                                                           Tensorflow基本概念
计算图(tf.Graph)
计算图是tensorflow的计算模型,计算图上的每一个节点都是一个运算,计算图上的边表示运算之间的数据传递关系。计算图上还保存了每个运算的设备信息以及运算之间的依赖关系。
默认计算图:tf.get_default_graph()
自定义计算图:
g=tf.Graph   
设置成默认图:g.as_default()
绑定计算设备:g.device(‘/gpu:0’)

计算图管理程序集合资源,并自动维护五个不同的默认集合:
集合类型                                                               集合内容                                                     使用环境                                     所有变量
tf.GraphKeys.VARIABLES                               神经网络参数                 
tf.GraphKeys.TRAINABLE_VARIABLES         模型训练,生产模型可视化内容
tf.GraphKeys.SUMMARIES                             日志生成相关张量                                          计算可视化
tf.GraphKeys.QUEUE_RUNNERS                   处理输入的QueueRunner                                输入处理
tf.MOVING_AVERAGE_BARIABLES            所有计算了滑动平均值的变量                        计算变量滑动平均值

张量(tf.Tensor)
张量是tensorflow的数据模型,张量的功能类似于多维数组,但是张量本身并不存储任何结果,它只是对计算结果的引用(函数指针)。
张量的三个基本属性:
name:张量名,张量的唯一标识符
张量命名:node:src_output  其中node为节点名称 src_output:表示当前张量来自节点的第几个输出
例如:
add:0  
shape:维度
type:类型,张量的数据类型
a=tf.constant([2,3],name=”a”,type=tf.float32)



会话(tf.Session)
用于执行利用计算图和张量定义好的运算。
会话拥有并管理tensorflow程序运行时的所有资源。
使用会话的两种模式:
①明确调用会话生成函数和关闭会话函数
sess=tf.Session()
sess.run(…)
sess.close()
这种方式当程序在执行异常退出时,会产生资源泄露。
②利用with上下文管理语句
sess=tf.Session()
with sess.as_default():
          sess.run(…)


交互式会话:自动注册成默认会话,并配置会话策略:并行线程数,GPU分配策略,日志策略,运算超时参数等。
Config =tf.ConfigProto(allow_soft_placement=True,
                                                 log_device_placement=True)
sess=tf.InteractiveSession(config=config)



使用神经网络的四个步骤:
①提取特征向量作为神经网络的输入
②定义神经网络结构:前向传播算法
③通过训练调整神经网络参数:反向传播算法,最小化损失函数
④利用训练好的神经网络预测未知数据


tensorflow随机数生成函数:
tf.random_normal()   正太分布
tf.truncated_normal()  截掉离群值的正太分布
tf.random_uniform()  平均分布
tf.random_gamma()  Gamma分布

tensorflow常数生成函数:
tf.zeros    tf.ones   tf.fill  tf.constant



深层神经网络
①线性模型的局限:只能解决线性可分问题
②单层神经网络:无法模拟异或运算
③深度学习:多层非线性神经网络
④激活函数:
a) ReLU函数
b) sigmoid函数
c) tanh函数

⑤损失函数
经典损失函数:
a) 交叉熵:两个概率分布之间的距离
用softmax回归将神经网络前向传播得到的预测值和标签向量变成概率分布,然后用交叉熵计算预测值和标签向量的距离


cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
cross_entropy=tf.nn.softmax_cross_entropy_with_logits(y,y_)


b) 均方误差:回归预测
mse=tf.reduce_mean(tf.square(y_-y))


c) 自定义损失函数
loss=tf.reduce_sum(tf.select(tf.greater(v1,v2), (v1-v2)*a, (v1-v2)*b))



神经网络优化算法
a) 梯度下降法:可能无法得到全局最优解,计算时间长
b) 反向传播算法

学习率:参数每次更新的幅度
指数衰减学习率:训练前期快速接近最优解,训练后期不会产生太大波动
learning_rate=tf.train.exponential_decay(0.1,global_step,100,0.96,staircase=True)

过拟合:
当模型过为复杂之后,它可以很好的“记忆”每一个训练数据中的随机噪声的部分而忘记了要去学习训练数据中通用的趋势的现象
极端例子:模型的参数比训练数据的总数还多,则模型可以记住所有训练数据的结果而使得损失函数为0.
解决过拟合的方法:
a) 正则化:在损失函数中加入表征模型复杂度的度量
L1正则化:会使得参数变得稀疏,不可偏导
L2正则化:可偏导

滑动平均模型
让模型在测试数据上更健壮
维护一个影子变量动态更新变量的值
ema=tf.train.ExponentialMovingAverage(0.99,step)

你可能感兴趣的:(深度学习,深度学习,Tensorflow)