TensorFlow学习(6)自定义模型,使用自动微分计算梯度

2023-10-27

1. 自定义模型

1.1 构建自定义模型的基本步骤

  1. 继承keras.Model
  2. 在构造函数中创建层和变量
  3. 实现call方法来执行操作
  4. 实现get_config()
    实现了get_config()就可以使用save()方法保存模型并使用keras.models.load_model()函数加载模型,使用save_weights()load_weights()方法来保存和加载模型

其他功能和基本模型一样

1.2 基于模型内部的损失和指标

在call()方法计算损失,并使用add_loss()方法将其添加到模型的损失函数中

2 使用自动微分计算梯度

  1. 首先定义两个变量W1和W2
  2. 创建一个tf.GradientTape上下文
  3. 要求该tape针对两个变量[W1,W2]计算z的梯度
w1, w2 = tf.Variable(5.), tf.Variable(3.)
with tf.GradientTape() as tape:
    z = f(w1, w2)

gradients = tape.gradient(z, [w1, w2])

调用tape的gradient方法后,tape会立即被自动擦除。如果需要多次调用gradient(),必须使得tape具有持久性persistent=True

with tf.GradientTape(persistent=True) as tape:
    z = f(w1, w2)

dz_dw1 = tape.gradient(z, w1)
dz_dw2 = tape.gradient(z, w2) # works now!
del tape

需要手动删除tape

2.1 跟踪对象

默认跟踪涉及变量的操作,但是可以强制观察你喜欢的任何张量

c1, c2 = tf.constant(5.), tf.constant(3.)
with tf.GradientTape() as tape:
    tape.watch(c1)
    tape.watch(c2)
    z = f(c1, c2)

gradients = tape.gradient(z, [c1, c2])

print(gradients)

结果:
[<tf.Tensor: shape=(), dtype=float32, numpy=36.0>, <tf.Tensor: shape=(), dtype=float32, numpy=10.0>]
  • 用处:实现正则化损失,从而在输入变化不大的时候惩罚那些变化很大的激活

2.2 梯度

一个梯度tape是用来计算单个值(通常是损失)相对于一组值(通常是模型参数)的梯度。一正一反获得所有梯度,可以调用jacobian()方法获取单独的梯度

with tf.GradientTape(persistent=True) as hessian_tape:
    with tf.GradientTape() as jacobian_tape:
        z = f(w1, w2)
    jacobians = jacobian_tape.gradient(z, [w1, w2])
hessians = [hessian_tape.gradient(jacobian, [w1, w2])
            for jacobian in jacobians]
del hessian_tape
print(jacobians)
print(hessians)

用来获得二阶偏导数

hessians = [hessian_tape.gradient(jacobian, [w1, w2])
            for jacobian in jacobians]

2.3 阻止反向传播

使用tf.stop_gradient

def f(w1, w2):
    return 3 * w1 ** 2 + tf.stop_gradient(2 * w1 * w2)

with tf.GradientTape() as tape:
    z = f(w1, w2)

tape.gradient(z, [w1, w2])

2.4 返回值为nan

解决办法(1):重写函数,并使用 来修饰它并使它既返回其正常输出又返回计算导数的函数

@tf.custom_gradient
def my_better_softplus(z):
    exp = tf.exp(z)
    def my_softplus_gradients(grad):
        return grad / (1 + 1 / exp)
    return tf.math.log(exp + 1), my_softplus_gradients

解决办法(2):使用tf.where在较大输入时返回输入

def my_better_softplus(z):
    return tf.where(z > 30., z, tf.math.log(tf.exp(z) + 1.))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlow学习(6)自定义模型,使用自动微分计算梯度 的相关文章

  • ptb_word_lm中batch_size的含义(tensorflow的LSTM模型)

    我是张量流的新手 我现在对它的含义有点困惑batch size 众所周知 其含义是batch size是每批次的样本数 但是根据中的代码ptb word lm 似乎不是 读者 py data len tf size raw data the
  • 如何使用 TFlearn 中的 ImageAugmentation 训练 CNN 中的图像和数据混合

    我想使用图像 像素信息 和数据的混合在 Tflearn Tensorflow 中训练卷积神经网络 由于我的图像数量较少 因此我需要使用图像增强来增加传递到网络的图像样本数量 但这意味着我只能传递图像数据作为输入数据 必须在稍后阶段 大概在全
  • 在NN中指定连接(在keras中)

    我正在使用 keras 和tensorflow 1 4 我想明确指定哪些神经元在两层之间连接 因此 每当第一层中的神经元 i 连接到第二层中的神经元 j 且其他地方为零时 我就有一个矩阵 A 其中包含 1 我的第一次尝试是创建一个带有内核的
  • 如何将张量推送到 TensorFlow 队列并从另一个进程中提取它们?

    我有一个 TensorFlow 集群已启动并正在运行 我正在尝试使用一个客户端进程将数据入队 并将其从另一进程中出队 我无法让它工作 我做错了什么 这是我的推送数据的程序 queue push py import tensorflow as
  • 打印出网络架构中每一层的形状

    在 Keras 中 我们可以如下定义网络 有什么办法可以输出每层之后的形状 例如 我想打印出以下形状inputs在定义行之后inputs 然后打印出形状conv1在定义行之后conv1 etc inputs Input 1 img rows
  • 监控培训课程如何运作?

    我试图理解使用之间的区别tf Session and tf train MonitoredTrainingSession 以及我可能更喜欢其中之一 似乎当我使用后者时 我可以避免许多 杂务 例如初始化变量 启动队列运行程序或设置文件编写器以
  • 如何清除 tf.flags?

    如果我运行此代码两次 tf flags DEFINE integer batch size 2 batch size for training 我会得到这个错误 DuplicateFlagError The flag batch size
  • 调用 tf.linalg.inv 时,TensorFlow 崩溃并显示无法创建 cuSolverDN 实例

    我正在运行tensorflow tensoflow latest gpu码头集装箱 我可以运行简单的向量运算 例如 矩阵乘法没有问题 但是 当我运行以下最小示例时 import tensorflow as tf tf linalg inv
  • 如何在对象检测 API Tensorflow 中仅检测人体

    我在用tensorflow对象检测 API 用于检测对象 它在我的 Windows 系统中运行良好 我如何对其进行更改以仅检测提到的对象 例如 我只想检测人类而不是所有对象 根据此中的第 1 条评论answer https stackove
  • 支持 Nvidia CUDA 工具包 9.2

    Tensorflow gpu 绑定到 Nvidia CUDA Toolkit 的特定版本的原因是什么 当前版本似乎专门寻找 9 0 并且不适用于任何更高版本 例如 我安装了最新的 Toolkit 9 2 并将其添加到路径中 但 Tensor
  • 使用输入管道时如何替换 feed_dict?

    假设您有一个已与feed dict到目前为止将数据注入到图表中 每隔几个时期 我就会通过将任一数据集的一批数据输入到我的图表中来评估训练和测试损失 现在 出于性能原因 我决定使用输入管道 看看这个虚拟示例 import tensorflow
  • 用于测试张量流安装的速度基准

    我怀疑我的 GPU 机器上是否正确配置了张量流 因为在我精美的 GPU 机器上训练一个简单的线性回归模型 批量大小 32 1500 个输入特征 150 个输出变量 的每次迭代速度比在笔记本电脑上慢 100 倍 我使用的是 Titan X 配
  • tf.gfile 在 TensorFlow 中起什么作用?

    我见过人们使用以下几个函数tf gfile例如tf gfile GFile or tf gfile Exists 我有一个想法tf gfile处理文件 但是 我无法找到官方文档来了解它还提供了什么 如果你能帮我的话那就太好了 对于登陆这里的
  • AttributeError:模块“keras.engine”没有属性“Layer”

    当我试图运行时Parking Slot mask rcnn py文件我收到如下错误mrcnn model py文件我该如何解决 gt 2021 06 17 08 25 18 585897 W tensorflow stream execut
  • 从 Keras 检查点加载

    我正在 Keras 中训练一个模型 我使用以下代码保存了所有内容 filepath project model hdh5 checkpoint ModelCheckpoint project model hdf5 monitor loss
  • 通过 cmake 使用预编译的张量流

    我已经建立了一个 C 项目CLion使用CMake 我正在使用各种第三方库 并且还想集成张量流 我试过了bazel编译张量流到共享库libtensorflow so哪种工作有效 但是仍然有相当多的依赖项 例如当前的 protobuf 版本
  • 无需安装 Tensorflow 即可服务 Tensorflow 模型

    我有一个经过训练的模型 想在 python 应用程序中使用 但我看不到任何在不安装 TensorFlow 或创建 gRPC 服务的情况下部署到生产环境的示例 有可能吗 在这种情况下 正确的做法是什么 如果不使用 TensorFlow 本身或
  • Tensorflow 到 ONNX 的转换

    我目前正在尝试转换我使用本教程创建的已保存 且正在工作 的 pb 文件 https github com thtrieu darkflow https github com thtrieu darkflow 到 onnx 文件中 我目前正在
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为

随机推荐

  • 【深度学习】最全的十九种损失函数汇总

    tensorflow和pytorch很多都是相似的 这里以pytorch为例 文章目录 一 L1范数损失 L1Loss 二 均方误差损失 MSELoss 三 交叉熵损失 CrossEntropyLoss 四 KL 散度损失 KLDivLos
  • 数仓建模宽表设计

    一 宽表的设计 其实宽表是数仓里面非常重要的一块 前面我们介绍过了维度表事实表 今天我们介绍一下宽表 前面我们说过了数仓是分层的 这是技术进步和时代变化相结合的产物 数仓的分层式为了更好地管理数仓以及更加高效地进行数据开发 宽表主要出现在d
  • 关于二进制的一个题目

    关于二进制的一个题目 猜测下面count的个数 test23d cpp 定义控制台应用程序的入口点 include stdafx h include
  • 【Copilot】GitHub Copilot could not connect to server. Extension activation failed: “read ECONNRESET“

    背景 搞了个Copilot 在VS里完美运行 但VScode里就一直报这个错误 GitHub Copilot could not connect to server Extension activation failed read ECON
  • 数据库锁表如何处理

    前段时间阿粉在公司开发的时候 不慎导致了数据库产生了锁表的操作 因为阿粉之前从来没有遇到过 之前只是了解过一点 所以导致了锁表 于是阿粉为了解决问题 研究了一下这一部分的内容 于是决定把这一块的知识分享给大家 数据库锁定机制 话说如果你只是
  • 将pbr移植到osg中的需要注意模型法线

    在pbr移植到osg中时 有时发现发黑 原因是光线方向和模型方向相反 在max dot N L 0 计算是 自然就是0了 也很简单 取绝对值即可 即 改为max abs dot N L 0 虽然不一定正确 但是效果起码出来了 另外 传递浮点
  • react-json-view(一看就会的教程)

    最近业务上需要用到json可视化的需求 在这给大家安利一个前端页面很好用的插件react json view 第一步 安装插件npm install save react json view 或者 yarn react json view
  • 持续集成Jenkins安装部署

    Jenkins是一个在DevOps领域中 支持CI CD 持续集成 持续交付 过程域的开源项目 其提供可扩展插件的支持 以自动化的机制对项目工程执行打包 编译 构建 测试以及最终发布到目的地服务器并成功部署运行 本文主要描述Jenkins的
  • Angular表单创建和校验

    Angular中提供了模板驱动表单和响应式表单 相对来做 模板驱动表单使用更加简单 只需要在表单外围添加 myForm ngForm 指令 给每个表单项添加ngModel指令和name属性 然后就可以通过myform value获取到表单中
  • 阿里云数据库RDS MySQL 物理全备文件数据恢复至自建数据库Mysql 5.7中

    环境介绍 CentOS 7 5 Mysql 5 7 percona xtrabackup 24 注意事项 操作系统中已安装数据恢复工具Percona XtraBackup 您可以从Percona XtraBackup官网下载安装 MySQL
  • 高并发系统设计--负载均衡与API网关

    负载均衡 负载均衡 有两个用途 1 将负载均衡的分配到多个处理节点上 减少单个处理节点的请求量 提升整体系统的性能 2 作为流量入口 对请求方屏蔽服务节点的部署细节 实现对业务方无感的扩容 可以分为两大类 一类是代理类的负载均衡服务 另一类
  • VMware Workstation 17 pro下载安装教程

    VMware Workstation 17 pro下载安装教程 Hello 感谢大家阅读我的文章 有问题评论区留言呦 最近 课题组新配了电脑 自带Win11操作系统 所以我这里安装VMware的时候就下载了最新版的17 pro 它是支持Wi
  • NCC中实现单点登录服务发布

    NCC中实现单点登录服务发布 前言 本文档旨在从方案 能力 及开发方式几个方面 对单点登录进行讲解 相关资料 百度网盘 社区资料 概念介绍 单点登录 Single Sign On 简称为 SSO 是比较流行的企业业务整合的解决方案之一 SS
  • vue实现动画滚动效果

    效果如下 npm https www npmjs com package vue seamless scroll activeTab versions 官网 https chenxuan0000 github io vue seamless
  • WebSocket 协议介绍

    WebSocket 协议 1 相关技术背景介绍 客户端 浏览器 和 服务端在是怎么进行通信的呢 当前许多传统应用的 Web 项目是通过简单的 AJAX 来进行通信的 AJAX 是一种用于创建快速动态网页的技术 通过在后台与服务器进行少量数据
  • 力扣645 错误的集合 位运算

    1 https leetcode cn com problems set mismatch solution cyi huo fa xiang jie by feng feng 19 边界条件的设定很难想到 t sum sum https
  • JDBC连接MySQL,增删改查方法

    1 加载驱动 Class forName 参数为 com mysql jdbc Driver Mysql 5 8版本 8 0版本jar包 参数为 com mysql cj jdbc Driver 2 建立连接 URL jdbc mysql
  • 项目管理1:嵌入式系统项目失败的7个隐形杀手

    转自飞凌论坛一部分 http bbs witech com cn forum php mod viewthread tid 71580 extra page 3D3 人人都是项目经理的年代 但不是人人都是合格的项目经理 1 范围潜变 每个项
  • 原 PyTorch学习之六个学习率调整策略.图示

    How to adjust Learning Rate torch optim lr scheduler LambdaLR torch optim lr scheduler StepLR torch optim lr scheduler M
  • TensorFlow学习(6)自定义模型,使用自动微分计算梯度

    1 自定义模型 1 1 构建自定义模型的基本步骤 继承keras Model类 在构造函数中创建层和变量 实现call方法来执行操作 实现get config 实现了get config 就可以使用save 方法保存模型并使用keras m