『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导
TensoFlow自动求导机制
『TensorFlow』第二弹_线性拟合&神经网络拟合_恰是故人归
下面做了三个简单尝试,
- 利用包含gradients、assign等tf函数直接构建图进行自动梯度下降
- 利用优化器计算出导数,再将导数应用到变量上
- 直接使用优化器不显式得到导数
更新参数必须使用assign,这也可能会涉及到控制依赖问题。
# Author : Hellcat
# Time : 2/20/2018 import tensorflow as tf tf.set_random_seed(1000) def get_fake_data(batch_size=8):
x = 20 * tf.random_uniform([batch_size,1],dtype=tf.float32)
y = tf.multiply(x,3) + 1 + tf.multiply(
tf.random_normal([batch_size,1],mean=0,stddev=0.01,dtype=tf.float32),1)
return x, y x, y = get_fake_data() w = tf.Variable(tf.random_uniform([1,1], dtype=tf.float32), name='w')
b = tf.Variable(tf.random_uniform([1,1], dtype=tf.float32), name='b') lr = 0.001 y_pred = tf.add(tf.multiply(w,x),b)
loss = tf.reduce_mean(tf.pow(tf.multiply(0.5,(y_pred - y)),2),axis=0) # 梯度尝试
grad_w, grad_b = tf.gradients(loss,[w,b])
train_w = tf.assign(w,tf.subtract(w,lr*grad_w))
train_b = tf.assign(b,tf.subtract(b,lr*grad_b))
train = [train_w, train_b] # 使用优化器
# optimizer = tf.train.GradientDescentOptimizer(lr) # 优化器&学习率选择
# ## 优化器+梯度操作
# grads_and_vars = optimizer.compute_gradients(loss, [w,b])
# train = optimizer.apply_gradients(grads_and_vars)
## 优化器径直优化
# train = optimizer.minimize(loss) with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for ii in range(80000):
sess.run([train])
if ii % 1000 == 0:
print(sess.run(w),sess.run(b))
PyTorch自动求导机制
由于梯度是会累加的,所以清空梯度一定不要忘记。
import torch as t
from torch.autograd import Variable as V
import matplotlib.pyplot as plt
from IPython import display # 指定随机数种子
t.manual_seed(1000) def get_fake_data(batch_size=8):
x = t.rand(batch_size,1)*20
y = x * 2 + 3 + 3*t.randn(batch_size,1)
return x, y x, y = get_fake_data()
plt.scatter(x.squeeze(), y.squeeze()) w = V(t.rand(1,1),requires_grad=True)
b = V(t.rand(1,1),requires_grad=True) lr = 0.001 for ii in range(8000):
x, y = get_fake_data()
x, y = V(x), V(y)
# print(x, y)
y_pred = x.mm(w) + b.expand_as(x) loss = 0.5*(y_pred - y)**2
loss = loss.sum() # 集结loss向量 loss.backward() w.data.sub_(lr * w.grad.data)
b.data.sub_(lr * b.grad.data) w.grad.data.zero_()
b.grad.data.zero_() if ii % 1000 == 0:
display.clear_output(wait=True)
x = t.arange(0,20).view(-1,1)
y = x.mm(w.data) + b.data.expand_as(x)
plt.plot(x.numpy(), y.numpy())
x2, y2 = get_fake_data(batch_size=20)
plt.scatter(x2, y2) plt.xlim(0,20)
plt.ylim(0,40)
plt.show() print(w.data.squeeze(), b.data.squeeze())
『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导的更多相关文章
- 『PyTorch x TensorFlow』第八弹_基本nn.Module层函数
『TensorFlow』网络操作API_上 『TensorFlow』网络操作API_中 『TensorFlow』网络操作API_下 之前也说过,tf 和 t 的层本质区别就是 tf 的是层函数,调用即 ...
- 『TensorFlow』第七弹_保存&载入会话_霸王回马
首更: 由于TensorFlow的奇怪形式,所以载入保存的是sess,把会话中当前激活的变量保存下来,所以必须保证(其他网络也要求这个)保存网络和载入网络的结构一致,且变量名称必须一致,这是caffe ...
- [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)
一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...
- 『TensorFlow』第十一弹_队列&多线程&TFRecod文件_我辈当高歌
TF数据读取队列机制详解 一.TFR文件多线程队列读写操作 TFRecod文件写入操作 import tensorflow as tf def _int64_feature(value): # val ...
- 『TensorFlow』第十弹_队列&多线程_道路多坎坷
一.基本队列: 队列有两个基本操作,对应在tf中就是enqueue&dequeue tf.FIFOQueue(2,'int32') import tensorflow as tf '''FIF ...
- 『TensorFlow』第三弹_可视化框架介绍_悄悄问圣僧
添加记录节点 -> 汇总记录节点 -> run汇总节点 -> [书写器生成]书写入文件 [-> 刷新缓冲区] 可视化关键点: 注意, 1.with tf.name_scope( ...
- 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下
『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 # Author : Hellcat # Time : 2018/2/11 import torch as t import t ...
- 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上
总结一下相关概念: torch.Tensor - 一个近似多维数组的数据结构 autograd.Variable - 改变Tensor并且记录下来操作的历史记录.和Tensor拥有相同的API,以及b ...
- pytorch的自动求导机制 - 计算图的建立
一.计算图简介 在pytorch的官网上,可以看到一个简单的计算图示意图, 如下. import torchfrom torch.autograd import Variable x = Variab ...
随机推荐
- VBA语法总结
为了控制Excel,学了些VBA,总结下语法,下文分为五部分: 一.代码组织 二.常用数据类型 三.运算符 四.控制流 五.常用内置函数 一.代码组织 1.能写代码的地方有{模块,类模块}. 2.代码 ...
- 苹果 ios 微信浏览器界面 ajax 提交带 file 的 form 总是走error方法
1. 问题 问题出在微信端,而且是苹果机的微信端(苹果你咋这么矫情,安卓正常).:代码还是之前的代码,貌似是苹果升级系统后部分版本出现的 BUG,后来证明确实跟 ios 版本有关,网上也找过类似的解决 ...
- [转]有return的情况下try catch finally的执行顺序
结论: 1.不管有没有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: 3.finally是在return后面的表达式运算后执行的(此 ...
- (转载)Java多线程返回值处理
一.概述 到目前为止,我们已经能够声明并使一个线程任务运行起来了.但是遇到一个问题:现在定义的任务都没有任何返回值,那么加入我们希望一个任务运行结束后告诉我一个结果,该结果表名任务执行成功或失败,此时 ...
- Kaggle比赛:从何着手?
介绍 参加Kaggle比赛,我必须有哪些技能呢? 你有没有面对过这样的问题?最少在我大二的时候,我有过.过去我仅仅想象Kaggle比赛的困难度,我就感觉害怕.这种恐惧跟我怕水的感觉相似.怕水,让我无法 ...
- caffe运行报错:datum channel>0(0:0)
caffe在运行的时候报错:datum channel>0(0:0) 错误原因:数据通道错误,caffe不能识别 解决方案:不告诉你
- 灵雀云容器PaaS平台助力知名股份制银行金融科技革新
互联网.科技和金融的碰撞给银行业带来巨大影响.IT技术起初是传统金融提升效率的工具和方法,随着新技术的演进,技术成为驱动变革的核心要素.Fintech金融科技以技术和数据为驱动,用创新的方法改变了金融 ...
- div “下沉”
最近在做一个计算器,按键整体布局如下: Div2,div3 display属性设置为inline-block.三个div “容器”没添加任何元素时,布局是符合预想的.添加上按键后,布局变成下面这样了: ...
- Python 第五阶段 学习记录之---Django 进阶
Model 一.创建表 1.基本结构 字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...
- python 回调函数,最简单的例子
回调的英文定义: A callback is a function that is passed as an argument to another function and is executed ...