美文网首页TensorFlow2.0
【TensorFlow2】自定义函数 & 自动求导

【TensorFlow2】自定义函数 & 自动求导

作者: Hennyxu | 来源:发表于2020-03-23 23:33 被阅读0次

TensorFlow2.0对自定义函数自动求导

% Author: XuYihang

本段代码实现了自定义函数f对x的求导,f是二范数形式,也是标量,x是列向量,在机器学习中是比较常见的求导形式:

# 初始化参数
z = tf.zeros((100,1))
Lnz = tf.zeros((100,1))
r = tf.zeros((99,1))

# 写出函数的表达式,并将梯度信息记录在磁带tape中
with tf.GradientTape() as tape:
    # 如果不加 persistent=True,tape.gradient()在调用一次后就会被释放
    # 添加 persistent=True 后,可多次调用tape.gradient(),最后通过del tape释放
    tape.watch(x)
    y = tf.matmul(A,x,transpose_a=True) + b 
    z = tf.sigmoid(y)
    Lnz = tf.math.log(z)
    r = 0.5 * tf.matmul(D,Lnz)
    # 矩阵的数乘也可以通过函数完成 —— r = tf.multiply(r,0.5)
    f = 0.5 * tf.reduce_sum(tf.square(tf.matmul(W, r) - s))

df_dx = tape.gradient(f, x)
# print(df_dx)
df_dx = np.mat(df_dx.numpy())
# print(df_dx)
io.savemat('df_dx.mat',{'df_dx':df_dx})

将matlab数据导入

import tensorflow as tf
import numpy as np
import scipy.io as io

# 读入matlab保存的.mat文件中的变量
GradientComput = io.loadmat('GradientComputV2.mat')

A = tf.constant(GradientComput['A'])
b = tf.constant(GradientComput['b'])
x = tf.Variable(initial_value = GradientComput['x'])
W = tf.constant(GradientComput['W'])
W = tf.cast(W, dtype = tf.float32)
s = tf.constant(GradientComput['s'])
s = tf.cast(s, dtype = tf.float32)
D = tf.constant(GradientComput['D'])
D = tf.cast(D, dtype = tf.float32)

# 查看数据类型是否匹配,避免后续运算报错
print(A.dtype, b.dtype, x.dtype, W.dtype, s.dtype, D.dtype)
print(A.shape, b.shape, x.shape, W.shape, s.shape, D.shape)
<dtype: 'float32'> <dtype: 'float32'> <dtype: 'float32'> <dtype: 'float32'> <dtype: 'float32'> <dtype: 'float32'>
(80, 100) (100, 1) (80, 1) (198, 99) (198, 1) (99, 100)
参考链接
  1. 简单粗暴TensorFlow2.0
  2. TensorFlow2.0 tutorials

相关文章

  • 【TensorFlow2】自定义函数 & 自动求导

    TensorFlow2.0对自定义函数自动求导 % Author: XuYihang 本段代码实现了自定义函数f对...

  • 【学习tensorflow2】损失函数

    使用tensorflow2定义模型时, 损失函数可以使用keras模块提供的损失函数, 也可以自定义损失函数. 以...

  • ceres solver 03 三种求导方式

    非线性优化涉及到对目标函数进行求导,从而迭代优化。Ceres Solver提供了三种求导方式:自动求导、数值求导和...

  • Automatic differentiation packag

    torch.autograd提供了类和函数用来对任意标量函数进行求导。要想使用自动求导,只需要对已有的代码进行微小...

  • 【转】(4)隐函数求导(第二章 导数与微分)

    我们已经学习了反函数求导,复合函数求导,现在又来了个隐函数求导..... 在学隐函数求导前,我们要先知道什么是隐函...

  • 第十三天

    高数 隐函数的求导和参数方程确定的函数的求导。 隐函数求导(直接把y看成为x的函数,在原始公式中进行求导变化,*注...

  • tensor 自动求导

    自动求导(autograd) 直接用张量定义的运算时无法求导的,自动求导功能由 autograde 模块提供。 这...

  • 什么是导函数?

    函数f(x)的求导公式该算式叫做函数f(x)的导函数。也就是说,“求导”就是“求导函数”。函数是什么意思?函数是一...

  • 机器学习中数学

    https://zhuanlan.zhihu.com/p/91607843 基本函数求导 复合函数求导 四则运算 ...

  • 自动求导

    针对pytorch中自动求导机制进行介绍。 当 x = 1.5时, .reqires_grad 设置为 True,...

网友评论

    本文标题:【TensorFlow2】自定义函数 & 自动求导

    本文链接:https://www.haomeiwen.com/subject/rhbkyhtx.html