Tensorflow的梯度异步更新示例
背景:
先说一下应用吧,一般我们进行网络训练时,都有一个batchsize设置,也就是一个batch一个batch的更新梯度,能有这个batch的前提是这个batch中所有的图片的大小一致,这样才能组成一个placeholder。那么若一个网络对图片的输入没有要求,任意尺寸的都可以,但是我们又想一个batch一个batch的更新梯度怎么办呢?
操作如下:
先计算梯度:
# 模型部分 Optimizer = tf.train.GradientDescentOptimizer(1) gradient = Optimizer.compute_gradients(loss) # 每次计算所有变量的梯度 grads_holder = [(tf.placeholder(tf.float32, shape=g.get_shape()), v) for (g, v) in gradient]# 将每次计算的梯度保存 optm = Optimizer.apply_gradients(grads_holder) # 进行梯度更新 # 初始化部分 sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) # 实际训练部分 grads = [] # 定义一个空的列表用于存储每次计算的梯度 for i in range(batchsize): # batchsize设置在这里 x_i = ... # 输入 y_real = ... # 标签 grad_i = sess.run(gradient, feed_dict={inputs: x_i, outputs: y_real}) #梯度计算 grads.append(grad_i) # 梯度存储 # 定义一个空的字典用于存储,batchsize中所有梯度的和 grads_sum = {} # 将网络中每个需要更新梯度的变量都遍历一遍 for i in range(len(grads_holder)): k = grads_holder[i][0] # 得到该变量名 # 将该变量名下的所有梯度求和,这里也可以求平均,求平均只需要除以batchsize grads_sum[k] = sum([g[i][0] for g in grads]) # 完成梯度更新 sess.run(optm,feed_dict=grads_sum)
以上这篇Tensorflow的梯度异步更新示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
运用TensorFlow进行简单实现线性回归、梯度下降示例
线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(即此函数是否足够拟合训练集数据),挑选出最好的函数(cost function最小)即可. 单变量线性回归: a) 因为是线性回归,所以学习到的函数为线性函数,即直线函数: b) 因为是单变量,因此只有一个x. 我们能够给出单变量线性回归的模型: 我们常称x为feature,h(x)为hypothesis. 上面介绍的方法中,我们肯定有一个疑问,怎样能够看出线性
-
PyTorch的SoftMax交叉熵损失和梯度用法
在PyTorch中可以方便的验证SoftMax交叉熵损失和对输入梯度的计算 关于softmax_cross_entropy求导的过程,可以参考HERE 示例: # -*- coding: utf-8 -*- import torch import torch.autograd as autograd from torch.autograd import Variable import torch.nn.functional as F import torch.nn as nn import nu
-
Tensorflow实现部分参数梯度更新操作
在深度学习中,迁移学习经常被使用,在大数据集上预训练的模型迁移到特定的任务,往往需要保持模型参数不变,而微调与任务相关的模型层. 本文主要介绍,使用tensorflow部分更新模型参数的方法. 1. 根据Variable scope剔除需要固定参数的变量 def get_variable_via_scope(scope_lst): vars = [] for sc in scope_lst: sc_variable = tf.get_collection(tf.GraphKeys.TRAINAB
-
tensorflow的计算图总结
计算图 在 TensorFlow 中用计算图来表示计算任务. 计算图,是一种有向图,用来定义计算的结构,实际上就是一系列的函数的组合. 用图的方式,用户通过用一些简单的容易理解的数学函数组件,就可以建立一个复杂的运算 在 TensorFlow 使用图,分为两步:建立计算图 和 执行图 图,在形式上由结点 Nodes 和边 Edges 组成. - Nodes,用圆圈表示,代表一些对数据进行的计算或者操作(Operation). - Edges,用箭头表示,是操作之间传递的实际值(Tensor) 建
-
tensorflow求导和梯度计算实例
1. 函数求一阶导 import tensorflow as tf tf.enable_eager_execution() tfe=tf.contrib.eager from math import pi def f(x): return tf.square(tf.sin(x)) assert f(pi/2).numpy()==1.0 sess=tf.Session() grad_f=tfe.gradients_function(f) print(grad_f(np.zeros(1))[0].n
-
在Tensorflow中实现梯度下降法更新参数值
我就废话不多说了,直接上代码吧! tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) TensorFlow经过使用梯度下降法对损失函数中的变量进行修改值,默认修改tf.Variable(tf.zeros([784,10])) 为Variable的参数. train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy,var_list=
-
Tensorflow的梯度异步更新示例
背景: 先说一下应用吧,一般我们进行网络训练时,都有一个batchsize设置,也就是一个batch一个batch的更新梯度,能有这个batch的前提是这个batch中所有的图片的大小一致,这样才能组成一个placeholder.那么若一个网络对图片的输入没有要求,任意尺寸的都可以,但是我们又想一个batch一个batch的更新梯度怎么办呢? 操作如下: 先计算梯度: # 模型部分 Optimizer = tf.train.GradientDescentOptimizer(1) gradient
-
Tensorflow之梯度裁剪的实现示例
tensorflow中的梯度计算和更新 为了解决深度学习中常见的梯度消失(gradient explosion)和梯度爆炸(gradients vanishing)问题,tensorflow中所有的优化器tf.train.xxxOptimizer都有两个方法: compute_gradients apply_gradients compute_gradients 对于compute_gradients方法,计算var_list中参数的梯度,使得loss变小.默认情况下,var_list为Grap
-
TensorFlow的权值更新方法
一. MovingAverage权值滑动平均更新 1.1 示例代码: def create_target_q_network(self,state_dim,action_dim,net): state_input = tf.placeholder("float",[None,state_dim]) action_input = tf.placeholder("float",[None,action_dim]) ema = tf.train.ExponentialMo
-
TensorFlow卷积神经网络AlexNet实现示例详解
2012年,Hinton的学生Alex Krizhevsky提出了深度卷积神经网络模型AlexNet,它可以算是LeNet的一种更深更宽的版本.AlexNet以显著的优势赢得了竞争激烈的ILSVRC 2012比赛,top-5的错误率降低至了16.4%,远远领先第二名的26.2%的成绩.AlexNet的出现意义非常重大,它证明了CNN在复杂模型下的有效性,而且使用GPU使得训练在可接受的时间范围内得到结果,让CNN和GPU都大火了一把.AlexNet可以说是神经网络在低谷期后的第一次发声,确立了深
-
人工智能学习Pytorch梯度下降优化示例详解
目录 一.激活函数 1.Sigmoid函数 2.Tanh函数 3.ReLU函数 二.损失函数及求导 1.autograd.grad 2.loss.backward() 3.softmax及其求导 三.链式法则 1.单层感知机梯度 2. 多输出感知机梯度 3. 中间有隐藏层的求导 4.多层感知机的反向传播 四.优化举例 一.激活函数 1.Sigmoid函数 函数图像以及表达式如下: 通过该函数,可以将输入的负无穷到正无穷的输入压缩到0-1之间.在x=0的时候,输出0.5 通过PyTorch实现方式
-
Tensorflow 实现线性回归模型的示例代码
目录 1.线性与非线性回归 案例讲解 1.数据集 2.读取训练数据Income.csv并可视化展示 3.利用Tensorflow搭建和训练神经网络模型[线性回归模型的建立] 4. 模型预测 1.线性与非线性回归 线性回归 Linear Regression:两个变量之间的关系是一次函数关系的——图像是直线,叫做线性.线性是指广义的线性,也就是数据与数据之间的关系,如图x1. 非线性回归:两个变量之间的关系不是一次函数关系的——图像不是直线,叫做非线性,如图x2. 一元线性回归:只包括一个自变量和
-
解决react中useState状态异步更新的问题
目录 疑惑 状态异步更新带来的问题 问题示例 问题解决 类组件的解决方案 函数组件的解决方案 其他解决方案 结尾 疑惑 相信刚开始使用react函数组件的小伙伴也遇到过一个坑,就是 useState 更新状态是异步更新的,但是react 并没有提供关于这个问题的解决方案.那我们能否使用自己的方法来解决这个问题呢?答案肯定是可以的. 状态异步更新带来的问题 就拿一个比较常见的场景来说.在react项目中,我们想在关闭对话框后再去处理其他业务.但是 useState 的状态是异步更新的.我们通过se
-
Python实现梯度下降法的示例代码
目录 1.首先读取数据集 2.初始化相关参数 3.定义计算代价函数–>MSE 4.梯度下降 5.执行 1.首先读取数据集 导包并读取数据,数据自行任意准备,只要有两列,可以分为自变量x和因变量y即可即可. import numpy as np import matplotlib.pyplot as plt data = np.loadtxt("data.csv", delimiter=",") x_data = data[:, 0] y_data = data
-
vue中的任务队列和异步更新策略(任务队列,微任务,宏任务)
目录 事件循环 任务队列 如何理解微任务和宏任务? 深究Vue异步更新策略原理 事件循环 JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事. 为了协调事件.用户交互.脚本.UI 渲染和网络处理等行为,防止主线程的不阻塞,Event Loop 的方案应用而生. Event Loop 包含两类: 一类是基于 Browsing Context 一种是基于 Worker 二者的运行是独立的,也就是说,每一个 JavaScript 运行的"线程环境"都有一个独立的
随机推荐
- Prototype Hash对象 学习
- JAVA8 十大新特性详解
- mybatis collection 多条件查询的实现方法
- 浅谈window对象的scrollBy()方法
- PHP获取服务器端信息的方法
- Python Queue模块详细介绍及实例
- c#接口使用示例分享
- C#实现绑定DataGridView与TextBox之间关联的方法
- C++中的循环引用
- Vue.js系列之项目搭建(1)
- PHP学习笔记(二) 了解PHP的基本语法以及目录结构
- jQuery实现Tab菜单滚动切换的方法
- php面象对象数据库操作类实例
- 新浪新闻小偷
- 实例讲解ASP实现抓取网上房产信息
- okhttp3.4.1+retrofit2.1.0实现离线缓存的示例
- 用易语言开发Linux程序的方法
- Python OpenCV 使用滑动条来调整函数参数的方法
- ubuntu开机后使用使用终端运行应用程序的设置方法
- C++中对C语言结构体用法的扩充