tensorflow 自动微分
创始人
2025-05-28 06:07:02
0
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 15 09:55:33 2023@author: Shawn.Li
"""import tensorflow as tf# 创建一个张量,然后将张量转换为变量
# 因为张量是不可改变的,每次对张量的赋值计算就是对张量进行一次复制粘贴
# 要在原内存位置对张量数值进行修改,需要先将张量转换为变量
x = tf.range(4,dtype=tf.float32)
print(x)x = tf.Variable(x)
print(x)# 计算 y = x^T · x , 记录计算过程
# tensordot 是向量点乘,向量按元素相乘然后求和
# 与列向量转置再乘以列向量自身等价# https://tensorflow.google.cn/api_docs/python/tf/gradients?hl=en
# 如果没有 persistent = True ,那么求导一次后T就会消解
# 带有这个标志位的要在计算的最后手动消解 Twith tf.GradientTape(persistent = True) as T:y_dot = tf.tensordot(x,x,axes = 1)y_mul = x*xprint(y_dot)
print(y_mul)# 根据记录的计算过程,反向传播计算梯度
# 当计算链很长的时候,就应该特别关注梯度消失和梯度爆炸的问题,在循环网络中容易碰到
# 截断步长 和 正则化 都是可行的解决办法
y_dot_grad = T.gradient(y_dot,x)
print(y_dot_grad)y_mul_grad = T.gradient(y_mul,x)
print(y_mul_grad)del T# 分离计算
# 把中间函数U当成一个常量计算,而不是一个关于x的变量
# 在记录计算过程时候,需要中断关于U的反向传播,把U当成是一个常量
print("分离计算")
with tf.GradientTape(persistent = True) as T:y = x*xu = tf.stop_gradient(y)z = u * xz_grad = T.gradient(z,x)
print(u)
print(z_grad)del Tprint("控制流的梯度计算")
def f(a):b = 100*awhile tf.norm(b) < 1000:b = 2*bif tf.reduce_sum(b) > 0:c = belse:c = 3* breturn ca = tf.Variable(tf.random.normal(shape = ()))with tf.GradientTape() as T:d = f(a)d_grad = T.gradient(d,a)
print(d_grad)
print(d/a)

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...