Tensorflow2.0学习(十) — 基础张量、微分操作及自定义层

2023-05-16

因为再后面一些分享的章节的内容很多是基于经典论文的复现了,里面会牵扯到很多自定义的模型及其变换。而这些内容有些是我们的Keras API 无法完成的,例如Resnet的residual block。因此这一节课我们有必要去学习一些基础、底层的张量、微分运算操作以及明白如何去自定义我们的层。

首先我们要知道我们在前面几个章节所实践的内容格式都是张量形式的。例如,一张图片在Tensorflow模型中表现的形式就是张量。那么什么是张量?它是一个数据容器,通俗来说就是矩阵向任意维度的推广。1维的张量其实就向量,而2维的张量则是我们经常使用的矩阵。在Tensorflow2.0,张量(Tensor)运算可以被GPU或TPU加速,减少我们的运行时间。

一.Tensor(张量)的基础操作

1.导入相关库。

from __future__ import absolute_import,division,print_function
import tensorflow as tf
import numpy as np

2.一些基础操作。

print(tf.add(1, 2)) #数值相加

 

print(tf.add([1,2],[3,4])) #一维向量相加

print(tf.square(5)) #数值求平方

print(tf.reduce_sum([1,2,3])) #全部数相加

x = tf.matmul([[1]],[[2,3]]) #矩阵相乘
print(x)

3.查看向量尺寸、类型。

print(x.shape)
print(x.dtype)

4.Tensor和numpy的ndarray进行转换。在使用tensorflow的tensor运算时,如果有遇到ndarray格式的数据,它会默认将它转为Tensor的形式进行运算。同样地,如果在使用numpy进行运算时,碰到tensor,它也会自动将其转为ndarray进行运算。

ndarry = np.ones([3,3]) #3x3的ndarray格式的单位矩阵
tensor = tf.multiply(ndarry,2)
print(tensor)

print(np.add(tensor,1))

二.Tensor(张量)的自动微分

1.我们可以使用 GradientTape()函数进行自动微分操作求梯度。其中watch函数的作用是跟踪变量,而assert函数则是判断该语句是否有异常。如果语句结果不等,则会报错。我们可以看到我们用gradient函数对z求了微分。而z的函数为y^2,对y求导则是2y,因为y的值又等于x值的和(4),因此最后结果等于2x4=8。

x = tf.ones((2, 2))

with tf.GradientTape() as t:
    t.watch(x) #跟踪变量
    y = tf.reduce_sum(x)
    z = tf.multiply(y, y)

dz_dy = t.gradient(z, y)
assert dz_dy.numpy() == 8.0

2.因为使用了python的with...as函数语句,因此在第一次gradient之后,GradientTape的资源就会释放了。那如果我们要进行两次gradient操作,要怎么办?我们可以通过在GradientTape后加一个persistent(持续)参数来解决,并最后再用del语句释放资源。

x = tf.constant(3.0) #常数
with tf.GradientTape(persistent=True) as t: #资源不释放
    t.watch(x) #跟踪变量
    y = x*x
    z = y*y
dz_dx = t.gradient(z,x)  # z=x^4,求导后为4x^3,x代入则为4*3*3*3=108
dy_dx = t.gradient(y,x) # y = x^2,求导后为2x,x代入则为2*3=6
print(dz_dx)
print(dy_dx)
del t #释放资源

3.所求的梯度还可以进行二次微分。

x = tf.Variable(1.0)
with tf.GradientTape() as t:
    with tf.GradientTape() as t2:
        y = x*x*x
    dy_dx = t2.gradient(y,x) # y=x^3,求导为3x^2,x代入则为3
d2y_dx2 = t.gradient(dy_dx,x) #dy_dx为3x^2,求导为6x,x代入则为6

assert dy_dx.numpy() == 3.0
assert d2y_dx2.numpy() == 6.0

三.自定义层

1.这里以一个自定义层的例子来解释怎么自定义我们所需要的层。首先我们需要定义一个类,相关语法可以参照python类语法。其中类中传入的函数是继承了keras的layers层函数,__init__层则是传入一些我们需要的参数,这些参数也是我们在调用时必须传入的。而build函数则规定了一些层输入的尺寸大小。call函数则是前向传播过程。

class MyDenselayer(tf.keras.layers.Layer):
    def __init__(self,num_outputs):
        super(MyDenselayer,self).__init__()
        self.num_outputs = num_outputs
        
    def build(self,input_shape):
        self.kernel = self.add_variable('kernel',shape=[int(input_shape[-1]),self.num_outputs])
    
    def call(self,input):
        return tf.matmul(input,self.kernel)

layer = MyDenseLayer(10)

 

以上就是本节的内容。更多相关的操作和应用,我会在后面的系列内容中体现出来,方便大家更进一步理解。谢谢你们的观看和支持!

 

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

Tensorflow2.0学习(十) — 基础张量、微分操作及自定义层 的相关文章

  • 编程入门指南:零基础如何自学编程?

    注明一下 xff1a 本文适用于零基础 xff0c 想自学编程的伙伴 xff0c 重点在于盘清底层逻辑以及整理一些学习途径 编程学习如何入门 xff1f 第一步 xff1a 做好心理建设 首先要告诉你一个坏消息 xff1a 自学编程的弯路多
  • Clion中控制台中文出现乱码怎么解决?

    为什么会出现乱码 xff0c 肯定是字符的编码方式不匹配导致的 我们知道 xff0c 现在比较新一点的编辑器和IDE基本都是默认UTF 8编码了 xff0c 但是在Windows下 xff0c 控制台中的中文编码格式是GBK xff0c 因
  • Pandas教程(非常详细)

    文章目录 教程特点阅读条件 Pandas是什么Pandas主要特点Pandas主要优势Pandas内置数据结构 Pandas库下载和安装Windows系统安装Linux系统安装1 Ubuntu用户2 Fedora用户 MacOSX系统安装
  • Pygame教程(非常详细)

    文章目录 教程特点阅读条件 Pygame是什么扩展知识 Pygame下载和安装1 pip包管理器安装2 二进制安装包安装 第一个Pygame程序初始化程序创建Surface对象事件监听游戏循环 Pygame Display显示模块详解Pyg
  • 如何系统地入门学习stm32?

    来自 xff1a https www zhihu com question 46616925 心得 xff1a 本人当初学习STM32的时候有一些跟风的因素 xff0c 自以为学的芯片越多就越厉害 61 61 其实 xff0c 学习嵌入式重
  • 一口气从零读懂CAN总线以及应用

    在各种总线通信中 xff0c 很多都是点对点的通信方式 xff0c CAN总线是一种去中心化的多主控通信方式 xff0c 在汽车领域应用很多 xff0c 因此有必要了解一下 概要 上世纪八十年代以来 xff0c 汽车ECU越来越多 xff0
  • 开源免费录屏和直播软件OBS Studio教程

    转载于 xff1a https zhuanlan zhihu com p 107720665 OBS Studio是目前比较主流的免费开源录屏和直播软件 xff0c 它提供了丰富的功能特性 xff0c 可以媲美一些受欢迎的同类商业软件 如果
  • KY-RTI分布仿真技术教程

    已剪辑自 https blog csdn net sillysunny article details 84197424 第一章 简介 高层体系结构 xff08 High Level Architecture xff0c HLA xff09
  • 自动化测试框架知识,读这一篇就够了!怎么构建属于自己的自动化测试框架

    已剪辑自 https segmentfault com a 1190000022693251 自动化测试因其节约成本 提高效率 减少手动干预等优势已经日渐成为测试人员的 潮流 xff0c 从业人员日益清楚地明白实现自动化框架是软件自动化项目
  • 代理模型优化算法

    已剪辑自 https zhuanlan zhihu com p 99609634 微信公号 xff1a Mat物语科研数据分析 阅读本文最好需要提前了解 xff08 一点点 xff09 的一些知识点 xff08 不懂也可以阅读 xff09
  • Maven常用知识梳理总结

    一 xff0e Maven简介 Maven的本质是一个项目管理工具 xff0c 将项目开发和管理过程抽象成一个项目对象模型 POM 将java项目看成是一个对象来进行管理 POM Project Object Model xff1a 项目对
  • 让数据变得更直观:10款常用的可视化工具(解决99%的可视化大屏需求)

    不管是跟上司汇报工作 xff0c 还是向客户介绍项目 xff0c 在工作中各种与 汇报 有关的事情 xff0c 都离不开图表 漂亮而有视觉冲击力的图表可以给你的工作大大加分 xff0c 让对方直观理解你想表达的内容 xff0c 而大屏能将图
  • CMake 编译选项设置

    在CMakeLists txt中可以通过修改CMake内置的环境变量来改变C或C 43 43 的编译选项 编译选项相关的CMake 变量如下 xff1a CMAKE C FLAGS span class token operator 61
  • 阿里云服务器盘镜像备份恢复到本地VMware

    步骤如下 xff1a 1 阿里云创建镜像并下载镜像文件到本地 xff1b 2 使用qemu img工具转换镜像文件为vmdk 格式 3 将转换后的文件挂载到VMware上然后运行 xff1b 4 运行后修改账号密码 IP等信息 xff1b
  • 树莓派系统入门教程(一)—— 烧录系统镜像,配置系统信息

    烧录系统镜像 一 准备工作二 烧录镜像2 1 格式化内存卡2 2 烧录镜像 xff08 Raspberry Pi Imager xff09 2 3 烧录镜像 xff08 Win32DiskImager xff09 一 准备工作 1 材料准备
  • LCD1602按下复位后乱码的问题

    1602按下后会有乱码的问题 xff0c 其实根本上是硬件引起的 某些最小系统板的复位电路没做好 xff0c 按下复位键后 xff0c 就会产生乱码 但是出现这种现象 xff0c 是可以用软件后期修正的 由于LCD复位后默认是8线输入 xf
  • Linux VNC server 安装配置

    一 服务端操作 0 打开终端 xff0c 切换到目标账户 su xie 1 打开终端使用yum命令安装vnc sever yum install tigervnc server y 2 设置 vnc server 开机启动 chkconfi
  • IDEA出现 java.lang.NoSuchMethodError 错误的原因及解决方法

    出现 java lang NoSuchMethodError 错误的原因及解决方法 问题分析 xff1a 出现这种情况 xff0c 一般是存在jar冲突 xff0c 简单的说就是导入了两个相同名称的jar xff0c 系统不知道用哪个 解决
  • VNC 桌面没有图标解决办法

    VNC 桌面没有图标解决办法 安装 sudo apt get install gnome core xfce4 打开xstartup文件 xff08 前提已安装VNC xff09 命令 xff1a vim vnc xstartup 操作 x
  • DELL R730服务器安装centos7.3教程

    服务器安装centos7 3系统分为两步 第一步 xff0c 对磁盘进行分组并部署raid 第二步 xff0c 通过系统安装程序安装操作系统 xff0c 并进行系统安装配置 第一步 xff0c RADI的分组部署 将服务器开机 xff0c

随机推荐

  • 访问控制ACL

    ACL访问控制列表可以对具体的用户或组设置权限 root 64 localhost useradd tony tom root 64 localhost passwd tony root 64 localhost passwd tom ro
  • NFS与自动挂载

    1 NFS共享文件server端的配置 xff08 server ip xff1a 172 16 8 11 xff09 root 64 localhost getenforce Enforcing root 64 localhost set
  • SAP主题改变方法

    背景 xff1a SAP7 6有很多主题 xff0c 然后按以下的方法可以改变 xff08 我比较习惯blue这个主题目 xff0c 7 6版本现在默认不是这个主题目 xff09 文章目录 方法一 通过登录后设置步骤1步骤2 方法二 通过程
  • SMB文件共享

    1 windows server端配置 C Users wll gt net share 共享名 资源 注解 C C 默认共享 D D 默认共享 IPC
  • swap空间扩容

    1 查看现有swap空间大小 root 64 centos7 free total used free shared buff cache available Mem 2028116 389108 1266584 12644 372424
  • Linux 卸载及删除磁盘分区

    1 卸载分区 root 64 centos7 df Th Filesystem Type Size Used Avail Use Mounted on dev mapper centos root xfs 17G 4 0G 14G 24 d
  • 磁盘阵列raid5的创建及管理

    1 在虚拟机上添加4个磁盘 xff0c 其中主用盘3个 xff0c 热备盘1个 root 64 centos7 fdisk l Disk dev sda 21 5 GB 21474836480 bytes 41943040 sectors
  • Keil关于.axf文件报错

    项目场景 xff1a 熟悉Keil C51的同学在使用Keil MDK编译STM32系列单片机时会更容易上手 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统 xff0c 与汇编相比 xff0c
  • 《java核心技术卷1》部分章节读书笔记

    目录 3 java基本的程序设计结构3 1 命名规范3 2 数据类型3 3 运算符3 4 枚举类型 3 5 字符串3 6 大数值 BigInteger和BigDecimal3 7 数组 4 对象与类4 1 识别类4 2 类之间的关系4 3
  • linux 问题-——退出vi编辑器 wq失效

    退出linux的vi编辑器时 xff0c 先按左上角的esc按键 xff0c 再输出输入命令 保存不退出w强制保存但不退出w 保存并退出wq强制保存并退出wq xff01 不保存退出q不保存并强制退出q 出现以下问题 xff1a esc退出
  • SUMO中车辆类型的定义及路由文件的写法

    车辆类型的定义 在SUMO中 xff0c 通过vType标签来定义车辆的类型 xff0c 一般可以写成如下形式 xff1a span class token operator lt span vType id span class toke
  • 为什么c语言允许直接访问物理地址?

    C语言允许直接访问物理地址 xff0c 是因为它是一种面向底层的语言 xff0c 提供了底层的硬件操作和系统调用的能力 在C语言中 xff0c 可以通过指针变量直接访问内存地址 xff0c 从而对硬件进行底层控制和操作 在一些应用场景下 x
  • TortoiseGit 安装和使用

    TortoiseGit是一款适用于Windows系统的开源的git版本控制客户端 xff0c 其优点是使用图像化界面操作 xff0c 而不需要记住或使用Git命令 xff0c 从而增加开发效率 xff0c 对不熟悉命令的使用者比较友善 下面
  • 解放拖动屏幕的双手——用xrandr配置多屏显示

    操作系统 xff1a Arch Linux 桌面系统 xff1a Xfce 又是一次会议的结束 xff0c 待我回办公室把大屏幕接上 xff0c 准备继续干 等等 xff0c 这是怎么回事 xff1f 打开系统的Display设置一看 xf
  • 深入浅出BGP

    文章目录 深入浅出BGP说明一 BGP的产生1 1 动态路由的分类1 2 BGP概述 二 与IGP的区别三 BGP核心3 1 属性3 1 1 属性特点 3 2 选路规则3 3 对等体 深入浅出BGP 说明 此篇主要对BGP的产生 与IGP的
  • LVM跨主机迁移

    LVM跨主机迁移 虚拟机 实验环境 两台Centos 7 8虚拟机 xff0c IP xff1a 192 168 221 199 200 查看lv test中的数据 使用命令lsblk xff0c 确认逻辑卷vg下挂有两个分区均为sdb磁盘
  • CodeBlocks 20.03安装&汉语化&找不到编译器

    一 CodeBlocks下载 下载地址 xff1a https www codeblocks org downloads binaries 到如下界面选择下载codeblocks 20 03mingw setup exe xff0c 这个里
  • 【FreeRTOS】从0写简易RTOS实现任务切换

    1 RTOS引入 单片机性能越来越强 xff0c 很多Linux程序在单片机上也可以运行了 xff1a 这需要RTOS 我们要开发的单片机产品 xff0c 功能也越来越丰富 xff1a 这也需要RTOS 就个人技术发展来说 xff0c 单片
  • java中的抽象类与接口(面试常考,重要)!!

    目录 抽象类语法规则注意事项 重要 xff0c 全部掌握 抽象类的作用 接口语法规则注意事项提示类实现多个接口 接口使用实例 Comparable 接口与Comparator接口 xff09 Comparable接口Comparator接口
  • Tensorflow2.0学习(十) — 基础张量、微分操作及自定义层

    因为再后面一些分享的章节的内容很多是基于经典论文的复现了 xff0c 里面会牵扯到很多自定义的模型及其变换 而这些内容有些是我们的Keras API 无法完成的 例如Resnet的residual block 因此这一节课我们有必要去学习一