TensorFlow入门(十三、动态图Eager)
一个图(Graph)代表一个计算任务,且在模型运行时,需要把图放入会话(session)里被启动。一旦模型开始运行,图就无法修改了。TensorFlow把这种图一般称为静态图。
动态图是指在Python中代码被调用后,其操作立即被执行的计算。
它与静态图最大的区别是不需要使用session来建立会话。即在静态图中,需要在会话中调用run方法才可以获得某个张量、常量或变量的具体值,而在动态图里,在创建动态图的过程中,默认已经建立了一个session。所有的代码都在该session中进行,而且该session具有进程相同的生命周期。
使用动态图时,直接运行就可以计算得到 它们的具体值,甚至还可以和numpy数组混合计算。它使得TensorFlow的学习变得更简单,也使研发更直观。
Eager Execution是一种命令式编程环境,运行后返回具体的值。一般更多用于研究和实验。它的优点有:
①直观的界面,可以自然地组织代码结构并使用Python数据结构。快速迭代小模型和小型数据集
②更轻松的调试功能,直接调用操作以检查正在运行的模型并测试更改。使用标准Python调试工具可以进行即时错误报告
③自然控制流程。使用Python控制流程而不是图控制流程,简化了动态模型的规范
④适用于几乎所有可用的TensorFlow运算
⑤它还可以在GPU上运行,提高神经网络的训练速度
激活Eager模式
激活Eager模式的代码如下:
import tensorflow as tf
tf.enable_eager_execution()
如果程序的后面需要优化器,也可以在这里先定义:
tfe = tf.contrib.eager
注意:Eager模式在程序开始就要激活,并且不能与普通模式混用。一旦开启Eager模式便不能撤销,不能实现静态图中关闭session的功能,且只执行一次,无法实现多session操作。这也是动态图的不足之处。如果当前代码只需要一个session来完成的话,可以优先选择动态图Eager来实现。
使用Eager模式
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
tf.enable_eager_execution()import numpy as npa = tf.constant([[1,2],[3,4]])
print("a = ",a)b = tf.Variable(np.zeros((2,2)))
print("\n b = ",b)c = [[2.]]
m = tf.matmul(c,c)
print("hello,{}".format(m))
可以看到在Eager执行下,a和b操作后的返回值是tf.Tensor,其包含了具体值。不再像Graph模式下那样只是一个计算图节点的符号句柄。由于Eager模式可以立即看到结果,非常有助于程序debug。
Eager模式下的基本运算
TensorFlow提供了丰富的操作库,如tf.add,tf.matmul,tf.square等,使用它们生成的结果都是张量Tensor。在Eager模式下,可以直接使用这些操作输出运算结果。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
tf.enable_eager_execution()print(tf.add(1,2))
print(tf.square(8))
print(tf.reduce_sum([1,2,3]))
print(tf.square(2) + tf.square(3))
动态控制流
在Eager模式下,TensorFlow也可以像Python定义函数一样,自定义函数,实现动态控制流。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
tf.enable_eager_execution()def function(num):counter = tf.constant(0)num = tf.convert_to_tensor(num)for num in range(1,num.numpy() + 2):num = tf.constant(num)if int(num % 2) == 0 and int(num % 4) == 0:print("good")elif int(num % 2) == 0:print("hi")elif int(num % 4) == 0:print("hello")else:print(num.numpy())counter += 1function(16)
在实际的编程过程中,为了提高效率,也可以在Eager模式下训练模型。
示例代码如下:
import tensorflow as tf
tf.compat.v1.enable_eager_execution()#创建训练数据
Num_Test = 1000
train_X = tf.compat.v1.random_normal([Num_Test])
train_Y = train_X * 5 +2#搭建正向模型
#定义运算结构
def prediction(input,weight,bias):return input * weight + bias#搭建反向模型
def loss(weights,biases):error = prediction(train_X,weights,biases) - train_Yreturn tf.reduce_mean(tf.square(error))def grad(weights,biases):#前向计算,得到loss,同时将操作记录到tape上,用于计算梯度with tf.GradientTape() as tape:loss_value = loss(weights,biases)#反向播放tape,得到梯度return tape.gradient(loss_value,[weights,biases])#定义迭代参数和学习率
train_steps = 200
learning_rate = 0.01#定义学习参数的变量
W = tf.Variable(5.)
B = tf.Variable(10.)print("Initial loss:{:.3f}".format(loss(W,B)))#训练模型
for i in range(train_steps):dW,dB = grad(W,B)W.assign_sub(dW * learning_rate)B.assign_sub(dB * learning_rate)if i % 20 == 0:print("Loss at step {:03d}:{:.3f}".format(i,loss(W,B)))print("Final loss:{:.3f}".format(loss(W,B)))
print("W = {},B = {}".format(W.numpy(),B.numpy()))
相关文章:

TensorFlow入门(十三、动态图Eager)
一个图(Graph)代表一个计算任务,且在模型运行时,需要把图放入会话(session)里被启动。一旦模型开始运行,图就无法修改了。TensorFlow把这种图一般称为静态图。 动态图是指在Python中代码被调用后,其操作立即被执行的计算。 它与静态图最大的区别是不需要使用session来建立会话…...

批量执行insert into 的脚本报2006 - MySQL server has gone away
数据库执行批量数据导入是报“2006 - MySQL server has gone away”错误,脚本并没有问题,只是insert into 的批量操作语句过长导致。 解决办法: Navicat ->工具 ->服务器监控->mysql ——》变量 修改max_allowed_packet大小为512…...

翻译docker官方文档(残缺版)
Build with docker(使用 Docker 技术构建应用程序或系统镜像) Overview (概述) 介绍(instruction) 层次结构(Layers) The order of Dockerfile instructions matters. A Docker build consists of a series of ordered build ins…...

PySpark 概述
文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…...
『heqingchun-ubuntu系统下Qt报错connot find -lGL解决方法』
ubuntu系统下Qt报错connot find -lGL解决方法 问题: Qt报错 connot find -lGL collect2:error:ld returned 1 exit status 解决方式: cd /usr/lib/x86_64-linux-gnu查看一下 ls | grep libGLlibGLdispatch.so.0 libGLdispatch.so.0.0.0 libGLESv2.so.…...
代码整洁之道:程序员的职业素养(十六)
辅导、学徒期与技艺 导师的重要性在职业发展中是不可低估的。尽管最好的计算机科学学位教学计划可以提供坚实的理论基础,但面对实际工作中的挑战,年轻毕业生往往需要更多指导。幸运的是,有许多优秀的年轻人可以通过观察和模仿他们的导师来快…...

OSPF的原理与配置
第1章 OSPF[1] 本章阐述了OSPF协议的特征、术语,OSPF的路由器类型、网络类型、区域类型、LSA类型,OSPF报文的具体内容及作用,描述了OSPF的邻居关系,通过实例让读者掌握OSPF在各种场景中的配置。 本章包含以下内容: …...

uni-app : 生成三位随机数、自定义全局变量、自定义全局函数、传参、多参数返回值
核心代码 function generateRandomNumber() {const min 100;const max 999;// 生成 min 到 max 之间的随机整数// Math.random() 函数返回一个大于等于 0 且小于 1 的随机浮点数。通过将其乘以 (max - min 1),我们得到一个大于等于 0 且小于等于 (max - min 1…...
EF core 如何撤销对对象的更改
一般情况下 DB.SaveChanges() 就可以正常提交更改了. 但是如何撤销更改, 可以使用下面的代码. //撤销更改 //放弃更改. 防止后面的finally出错 DB.ChangeTracker.Entries().Where(e > e.Entity ! null).ToList().ForEach(e > e.State EntityState.Detached);...
以字符串mark作为分隔符,对字符串s进行分割
int main() {string s "How are you?";string mark " ";string tmp;int cur 0, first 0;//找到第一个标记while ((cur s.find_first_of(mark, cur)) ! string::npos){//获取第一个标记前的子串tmp s.substr(first, cur - first);cout << tmp …...

c++day6(菱形继承、虚继承、多态、模板、异常)
今日任务 1.思维导图 2.编程题: 代码: #include <iostream>using namespace std; /*以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园&a…...

外卖跑腿系统开发的最佳实践和成功案例
外卖跑腿系统的开发既涉及技术实现,也需要考虑用户体验、运营策略和合规性。以下是一些最佳实践和一些成功的案例,以帮助您更好地理解这个领域的要点。 1. 技术框架的选择 选择适合的技术框架是外卖跑腿系统成功的关键。您可以考虑使用以下技术&#…...
python中的range()函数详解
range() 是 Python 内置的一个函数,用于生成一个整数序列。 range([start], [stop], [step])start、stop、step 分别表示序列的起始值、终止值和步长。start 和 step 是可选参数,如果不指定则默认为 0 和 1。 一、range()传递不…...
【taro react】 ---- 常用自定义 React Hooks 的实现【四】之遮罩层
1. 问题场景 在实际开发中我们会遇到一个遮罩层会受到多个组件的操作影响,如果我们不采用 redux 之类的全局状态管理,而是选择组件之间的值传递,我们就会发现使用组件的变量来控制组件的显示和隐藏很不方便,更不要说像遮罩层这样一个项目多处使用的公共组件,他的隐藏和显示…...

【git】git命令行
首先要了解git整个流程的一个分类: workspace:工作区staging area:暂存区/缓存区local repository:版本库或本地仓库remote repository:远程仓库 创建仓库 git clone gitgithub.comxxxxxxxxxxxx//拷贝一份远程仓库 …...
centos8 jenkins 搭建和使用
一、安装jenkins 直接war包搭建下载地址:https://get.jenkins.io/war-stable/ 下载稳定长期版本 二、jenkins 启动依赖java, 安装java sdk ,好像支持java 11和17版本,21版本不支持会报错 下载sdk地址,https://www.oracle.com/j…...
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
在大数据领域,Hive作为一种数据仓库解决方案,为用户提供了一种SQL接口来查询和分析存储在Hadoop集群中的数据。为了更灵活地与Hive进行交互,我们可以使用Hive JDBC(Java Database Connectivity)驱动程序。本文将深入探…...

SQL开发笔记之专栏介绍
Sql是用于访问和处理数据库的标准计算机语言,使用SQL访问和处理数据系统中的数据,这类数据库包括:Mysql、PostgresSql、Oracle、Sybase、DB2等等,数据库无非围绕着“增删改查”的核心业务进行开发。并且目前绝大多数的后端程序开发…...
华为OD机考算法题:找终点
目录 题目部分 解读与分析 代码实现 题目部分 题目找终点难度易题目说明给定一个正整数数组,设为nums,最大为100个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。 要求: 1.第…...
el-table通过scope.row获取表格每列的值,以及scope.$index
<el-table-column type"selection" width"55"></el-table-column><el-table-column prop"id" label"ID" width"80"></el-table-column><el-table-column prop"name" label"文件名…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...