**

一 2阶梯度的计算

**
将需要计算梯度的变量设置为tf.Variable( ),并将计算函数置于with tf.GradientTape ( ) as tape内.

import  tensorflow as tfx = tf.Variable(tf.constant([2.]))
w = tf.Variable(tf.constant([2.]))
b = tf.Variable(tf.constant([2.]))with tf.GradientTape(persistent=True) as tape1:with tf.GradientTape(persistent=True) as tape2:y = 3*x*w**3 + 2*x*w**2 + w*x + b**2dw,db = tape2.gradient(y,[w,b])
dw2 = tape1.gradient(dw,w)
db2 = tape1.gradient(db,b)print(dw)
print(dw2)
print(db)
print(db2)

其输出结果为:

tf.Tensor([90.], shape=(1,), dtype=float32)
tf.Tensor([80.], shape=(1,), dtype=float32)
tf.Tensor([4.], shape=(1,), dtype=float32)
tf.Tensor([2.], shape=(1,), dtype=float32)

**

二 激活函数及梯度

**
2.1 sigmoid函数–tf.sigmoid( )

import tensorflow as tfa = tf.Variable(tf.linspace(-10.,10.,10))with tf.GradientTape( ) as tape:y = tf.sigmoid(a)
da = tape.gradient(y,a)#使用tf计算梯度da_ = tf.sigmoid(a)*(1-tf.sigmoid(a))#使用公式计算梯度res = tf.equal(da,da_)#比较两个梯度是否相等print('a = ' + str(a))
print('da = ' + str(da))
print('da_ = ' + str(da_))
print('res = ' + str(res))
a = <tf.Variable 'Variable:0' shape=(10,) dtype=float32, numpy=
array([-10.       ,  -7.7777777,  -5.5555553,  -3.333333 ,  -1.1111107,1.1111116,   3.333334 ,   5.5555563,   7.7777786,  10.       ],dtype=float32)>
da = tf.Tensor(
[4.5416677e-05 4.1857705e-04 3.8362551e-03 3.3258699e-02 1.8632649e-011.8632641e-01 3.3258699e-02 3.8362255e-03 4.1854731e-04 4.5416677e-05], shape=(10,), dtype=float32)
da_ = tf.Tensor(
[4.5416677e-05 4.1857705e-04 3.8362551e-03 3.3258699e-02 1.8632649e-011.8632641e-01 3.3258699e-02 3.8362255e-03 4.1854731e-04 4.5416677e-05], shape=(10,), dtype=float32)
res = tf.Tensor([ True  True  True  True  True  True  True  True  True  True], shape=(10,), dtype=bool)

2.2 tanh函数–tf.tanh( )

import tensorflow as tfa = tf.Variable(tf.linspace(-5.,5.,10))with tf.GradientTape() as tape:y = tf.tanh(a)
da = tape.gradient(y,a)da_ = 1 - tf.square(tf.tanh(a))res = tf.equal(da,da_)print('da = ' + str(da))
print('da_ = ' + str(da_))
print('res = ' +str(res))
da = tf.Tensor(
[1.8167496e-04 1.6742945e-03 1.5344799e-02 1.3303488e-01 7.4530596e-017.4530554e-01 1.3303477e-01 1.5344799e-02 1.6742945e-03 1.8167496e-04], shape=(10,), dtype=float32)
da_ = tf.Tensor(
[1.8167496e-04 1.6742945e-03 1.5344799e-02 1.3303488e-01 7.4530596e-017.4530554e-01 1.3303477e-01 1.5344799e-02 1.6742945e-03 1.8167496e-04], shape=(10,), dtype=float32)
res = tf.Tensor([ True  True  True  True  True  True  True  True  True  True], shape=(10,), dtype=bool)

2.3 relu函数 --tf.nn.relu( )

**

三 loss及其梯度

**
3.1 MSE均方误差

MSE均方误差为样本的实际标签值与输出值的差的平方和.

注意到标签值与输出值的2范数为两者差的平方和再开根号,因此MSE也为两者2范数的平方.

标签值与输出值的2范数为:

故MSE的计算也可以表示为2范数的平方.

import tensorflow as tf#input #4
#hidden #0
#output #3x = tf.random.normal([2,4])
w = tf.random.normal([4,3])
b = tf.zeros([3])
y = tf.constant([0,1])#2个样本,3个类with tf.GradientTape( ) as tape:tape.watch([w,b])out = x@w + b#shape = [2,3]prob = tf.nn.softmax(out,axis=1)loss = tf.reduce_mean(tf.losses.MSE(tf.one_hot(y,depth=3),prob))grads = tape.gradient(loss,[w,b])
dw = grads[0]
db = grads[1]print('dw = ' + str(dw))
print('db = ' + str(db))
dw = tf.Tensor(
[[ 0.16354926 -0.20119932  0.03765006][ 0.01884676 -0.01078806 -0.0080587 ][-0.13132206  0.20891231 -0.07759026][ 0.07750081 -0.11706028  0.03955947]], shape=(4, 3), dtype=float32)
db = tf.Tensor([-0.10206194  0.05672782  0.04533412], shape=(3,), dtype=float32)

3.2 交叉熵 crossentropy
tf.nn.softmax( )

import tensorflow as tf#input #4
#hidden #0
#output #3
#sample #5x = tf.Variable(tf.random.normal([5,4]))
w = tf.Variable(tf.random.normal([4,3]))
b = tf.Variable(tf.zeros([3]))
y = tf.constant([0,1,2,3,4])with tf.GradientTape() as tape:logtis = x@w + bloss = tf.reduce_mean(tf.losses.categorical_crossentropy(tf.one_hot(y,depth=3),logtis,from_logits=True))
grads = tape.gradient(loss,[w,b])dw = grads[0]
db = grads[1]print('dw = ' + str(dw))
print('db = ' + str(db))
dw = tf.Tensor(
[[-0.11434441 -0.07339377  0.1606681 ][ 0.13480666 -0.25847262 -0.24674098][-0.19937721  0.1522943   0.26763383][ 0.14411151 -0.20738746 -0.14302306]], shape=(4, 3), dtype=float32)
db = tf.Tensor([ 0.32484087 -0.00916296  0.0843221 ], shape=(3,), dtype=float32)

TensorFlow2.0:梯度计算相关推荐

  1. TensorFlow2.0:误差计算

    ** 一 MSE(Mean Square Error)均方误差 ** In [2]: out = tf.random.normal([5,4]) In [3]: y = tf.constant([1, ...

  2. 坐标系,坐标系转换,梯度计算

    极坐标,圆柱坐标,直角坐标与梯度计算 极坐标 圆柱坐标 直角坐标 坐标系转换 梯度计算 极坐标 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方 ...

  3. TensorFlow2.0:单层感知机梯度计算

    ** 一 单层单输出感知机梯度计算 ** 单层感知机指的是输入有多个节点,输出只有一个节点. 其实质为二分类,即将样本的多个特征值作为输入,输出为二分类. 假设输入有5个样本,每个样本有3个特征参数, ...

  4. Tensorflow2.0 + Transformers 实现Bert FGM对抗训练惩罚梯度损失函数

    Tensorflow2.0 + Transformers 实现Bert FGM对抗训练惩罚梯度损失函数 前言 变种实现 Transformers中的word_embeddings 代码修改 实验效果 ...

  5. tensorflow2.0 学习笔记:一、神经网络计算

    mooc课程Tensorflow2.0 笔记 人工智能三学派 行为主义:基于控制论,构建感知-动作控制系统(自适应控制系统) 符号主义:基于算数逻辑表达式,求解问题时先把问题描述为表达式,再求解表达式 ...

  6. 【TensorFlow2.0】(5) 数学计算、合并、分割

    各位同学好,今天和大家分享一下TensorFlow2.0中的数学运算方法.合并与分割.内容有: (1)基本运算:(2)矩阵相乘:(3)合并 tf.concat().tf.stack():(4)分割 t ...

  7. 【深度学习】(6) tensorflow2.0使用keras高层API

    各位同学好,今天和大家分享一下TensorFlow2.0深度学习中借助keras的接口减少神经网络代码量.主要内容有: 1. metrics指标:2. compile 模型配置:3. fit 模型训练 ...

  8. 【TensorFlow2.0】(7) 张量排序、填充、复制、限幅、坐标选择

    各位同学好,今天和大家分享一下TensorFlow2.0中的一些操作.内容有: (1)排序 tf.sort().tf.argsort().top_k():(2)填充 tf.pad():(3)复制 tf ...

  9. 【小白学PyTorch】扩展之Tensorflow2.0 | 20 TF2的eager模式与求导

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 扩展之Tensorflow2.0 | 19 TF2模型的存储与载入 扩展之Tensorflow2.0 | 18 ...

最新文章

  1. 现在参加软件测试培训就业难度大不大?
  2. 【Flask项目2】python对象分页数据序列化基类(5)
  3. Floating-Rate Note - FRN
  4. 数据结构之线性存储结构
  5. 使用React和Spring Boot构建一个简单的CRUD应用
  6. java的多线程访问共享变量_java多线程通信之共享变量
  7. 学python最重要的是_Python学习,要选哪个版本?
  8. Qt工作笔记-自定义模型【继承QAbstractTableModel】
  9. 8,EasyNetQ-多态发布和订阅
  10. mac 生成公私钥key
  11. 生产任务单下推产品入库单,金蝶KIS旗舰版盘点机PDA生产管理软件
  12. PTES 测试执行标准
  13. 松下服务器a5系列,松下 A5系列)MADHT1505 伺服驱动器
  14. iPhone5/5c 越狱破解联通4g
  15. Qml使用阿里字体图标库及FontAwesome字体图标库
  16. 芝诺数解|「十三」一菜一格,百菜百味——重庆川菜数据分析报告
  17. MediaRecorder录制视频和录音
  18. python立方根求解_计算python中的立方根
  19. ArcMap-network analyst
  20. python居然可以画樱花

热门文章

  1. 【学习总结】数学-基本计数方法
  2. 通过第三方工具体验Microsoft Graph
  3. android---手电筒之摩尔斯电码
  4. UVa 808 (建坐标系、找规律) Bee Breeding
  5. BZOJ 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)
  6. asp.NET去掉form的runat=server照样使用服务器控件,包括表单的服务器控件
  7. 在实际项目中,如何选择合适的机器学习模型?
  8. SpringMVC-@RequestMapping的参数和用法
  9. jQuery html5Validate基于HTML5表单验证插件
  10. poj 3373 Changing Digits