tensorflow学习笔记

tf.get_default_graph 获取当前默认的计算图
tf.Graph 生成新的计算图
tf.Graph.device 制定运行计算的设备
tf.add_to_collection 将资源加入一个或多个集合中
tf.get_collection 获取一个集合里面的所有资源
通过tf.IntersctiveSession() 函数可以省去将产生的会话注册为默认会话的过程
在这里插入图片描述

tf.,matmul() 实现了矩阵乘法的功能

声明一个2×3的矩阵变量方法:(均值为0,标准差为2)

weights = tf.Variable(tf.random_normol([2.3],stddev=2))

在这里插入图片描述
tf.global_variables_initializer :实现初始化所有变量

init_op = tf.global_variables_initializer()
sess.run(init_op)

监督学习最重要的思想就是,在已知答案的标注数据集上,模型给出的预测结果要尽量接近真实的答案。

某模型经过Softmax回归之后的预测答案是(0.5,0.4,0.1),正确答案是(1,0,0)那么这个预测和正确答案之间的交叉熵为:
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 将一个张量中的数值限制在一个范围之内
tf.log 对张量中所有元素依次求对数
tf.nn.softmax_cross_entropy_with_logits 实现使用了softmax回归后交叉熵的损失函数

cross_rntropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)

其中y代表了原始神经网络的输出结果,y_则给出了标准答案(回归问题解决的是对具体数值的预测

最常用的损失函数是均方误差(MSE,mean squared error),如下

mse = tf.reduce_mean(tf.square(y_ - y))

y代表了神经网络的输出答案,y_代表了标准答案,这里的“-‘’代表了两个矩阵对应元素的减法

在这里插入图片描述
在这里插入图片描述
tf.train.exopnential_decay 实现了指数衰减学习率

decayed_learning_rate = \
       learning_rate * decay_rate ^ (global_step /decay_steps)

其中,decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设定的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度
在这里插入图片描述
tf.train.ExponentialMovingAverage 实现滑动平均模型
滑动平均模型的代码实现
首先明确一点,TensorFlow中的ExponentialMovingAverage()是针对权重weight和偏差bias的,而不是针对训练集的。如果你现在训练集中实现这个效果,需要自己设计代码。
为什么要对w和b使用滑动平均模型呢?因为在神经网络中,
更新的参数时候不能太大也不能太小,更新的参数跟你之前的参数有联系,不能发生突变。一旦训练的时候遇到个“疯狂”的参数,有了滑动平均模型,疯狂的参数就会被抑制下来,回到正常的队伍里。这种对于突变参数的抑制作用,用专业术语讲叫鲁棒性,鲁棒性就是对突变的抵抗能力,鲁棒性越好,这个模型对恶性参数的提抗能力就越强。
在TensorFlow中,ExponentialMovingAverage()可以传入两个参数:衰减率(decay)和数据的迭代次数(step),这里的decay和step分别对应我们的β和num_updates,所以在实现滑动平均模型的时候,步骤如下:
1、定义训练轮数step
2、然后定义滑动平均的类
3、给这个类指定需要用到滑动平均模型的变量(w和b)
4、执行操作,把变量变为指数加权平均值

 # 1、定义训练的轮数,需要用trainable=False参数指定不训练这个变量,
    # 避免这个变量被计算滑动平均值
    global_step = tf.Variable(0, trainable=False)

    # 2、给定滑动衰减率和训练轮数,初始化滑动平均类
    # 定训练轮数的变量可以加快训练前期的迭代速度
    variable_averages = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,
                                                          global_step)
    # 3、用tf.trainable_variable()获取所有可以训练的变量列表,也就是所有的w和b
    # 全部指定为使用滑动平均模型
    variables_averages_op = variable_averages.apply(tf.trainable_variables())

    # 反向传播更新参数之后,再更新每一个参数的滑动平均值,用下面的代码可以一次完成这两个操作
    with tf.control_dependencies([train_step, variables_averages_op]):
        train_op = tf.no_op(name="train")

设置完使用滑动平均模型之后,只需要在每次使用反向传播的时候改为使用run.(train_op)就可以正常执行了。


在这里插入图片描述
在这里插入图片描述
持久化
在这里插入图片描述
加载已经持久化的模型
在这里插入图片描述
如果不希望重复定义图上的运算,可以直接加载已经持久化的图
在这里插入图片描述
export_meta_graph 以json格式导出MetaGraphDef Protocol Buffer
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值