当前位置: 首页 > news >正文

深度学习(3)-TensorFlow入门(常数张量和变量)

低阶张量操作是所有现代机器学习的底层架构,可以转化为TensorFlow API。

张量,包括存储神经网络状态的特殊张量(变量)​。
张量运算,比如加法、relu、matmul。
反向传播,一种计算数学表达式梯度的方法(在TensorFlow中通过GradientTape对象来实现)​。

然后是高阶深度学习概念。这可以转化为Keras API。

,多层可以构成模型。
损失函数,它定义了用于学习的反馈信号。(必须是可微的)
优化器,它决定学习过程如何进行。
评估模型性能的指标,比如精度。
训练循环,执行小批量梯度随机下降。

常数张量和变量

要使用TensorFlow,我们需要用到一些张量。创建张量需要给定初始值。例如,可以创建全1张量或全0张量(见代码清单3-1)​,也可以从随机分布中取值来创建张量(见代码清单3-2)​。

代码清单3-1 全1张量或全0张量

import tensorflow as tf
x = tf.ones(shape=(2, 1))
#←----等同于np.ones(shape=(2, 1))
print(x)
x = tf.zeros(shape=(2, 1))
#←----等同于np.zeros(shape=(2, 1))
print(x)

代码清单3-2 随机张量

x = tf.random.normal(shape=(3, 1), mean=0., stddev=1.)
#←----从均值为0、标准差为1的正态分布中抽取的随机张量,等同于np.random.normal(size=(3, 1), loc=0., scale=1.)
# mean的中文含义就是均值print(x)x = tf.random.uniform(shape=(3, 1), minval=0., maxval=1.)
#←----从0和1之间的均匀分布中抽取的随机张量,等同于np.random.uniform(size=(3, 1), low=0., high=1.)
print(x)

NumPy数组和TensorFlow张量之间的一个重要区别是,TensorFlow张量是不可赋值的,它是常量。举例来说,在NumPy中,你可以执行以下操作,如代码清单3-3所示。

代码清单3-3 NumPy数组是可赋值的

import numpy as np
x = np.ones(shape=(2, 2))
x[0, 0] = 0.

如果在TensorFlow中执行同样的操作(如代码清单3-4所示)​,那么程序会报错:EagerTensor object does not support item assignment(EagerTensor对象不支持对元素进行赋值)​。

代码清单3-4 TensorFlow张量是不可赋值的

x = tf.ones(shape=(2, 2))----程序会报错,因为张量是不可赋值的
x[0, 0] = 0.

要训练模型,我们需要更新其状态,而模型状态是一组张量。如果张量不可赋值,那么我们该怎么做呢?这时就需要用到变量(variable)​。tf.Variable是一个类,其作用是管理TensorFlow中的可变状态。要创建一个变量,你需要为其提供初始值,比如随机张量,如代码清单3-5所示。

>>> v = tf.Variable(initial_value=tf.random.normal(shape=(3, 1)))
>>> print(v)
array([[-0.75133973],[-0.4872893 ],[ 1.6626885 ]], dtype=float32)

变量的状态可以通过其assign方法进行修改,如代码清单3-6所示。

代码清单3-6 为TensorFlow变量赋值

>>> v.assign(tf.ones((3, 1)))
array([[1.],[1.],[1.]], dtype=float32)

这种方法也适用于变量的子集,如代码清单3-7所示。

代码清单3-7 为TensorFlow变量的子集赋值

>>> v[0, 0].assign(3.)
array([[3.],[1.],[1.]], dtype=float32)

与此类似,assign_add()和assign_sub()分别等同于+=和-=的效果,如代码清单3-8所示。

代码清单3-8 使用assign_add()

>>> v.assign_add(tf.ones((3, 1)))
array([[2.],[2.],[2.]], dtype=float32)

就像NumPy一样,TensorFlow提供了许多张量运算来表达数学公式。我们来看几个例子,如代码清单3-9所示。

代码清单3-9 一些基本的数学运算

a = tf.ones((2, 2))
b = tf.square(a)----求平方
c = tf.sqrt(a)----求平方根
d = b + c  ←----两个张量(逐元素)相加
e = tf.matmul(a, b)----计算两个张量的积(详见第2章)
e *= d  ←----两个张量(逐元素)相乘

重要的是,代码清单3-9中的每一个运算都是即刻执行的:任何时候都可以打印出当前结果,就像在NumPy中一样。我们称这种情况为急切执行(eager execution)​。

本文可运行全部代码集合,大家可以直接在装了tensorflow的python3环境下运行。

import tensorflow as tf
x = tf.ones(shape=(2, 1))
#←----等同于np.ones(shape=(2, 1))
print(x)
x = tf.zeros(shape=(2, 1))
#←----等同于np.zeros(shape=(2, 1))
print(x)x = tf.random.normal(shape=(3, 1), mean=0., stddev=1.)
#←----从均值为0、标准差为1的正态分布中抽取的随机张量,等同于np.random.normal(size=(3, 1), loc=0., scale=1.)
# mean的中文含义就是均值print(x)x = tf.random.uniform(shape=(3, 1), minval=0., maxval=1.)
#←----从0和1之间的均匀分布中抽取的随机张量,等同于np.random.uniform(size=(3, 1), low=0., high=1.)
print(x)import numpy as np
x = np.ones(shape=(2, 2))
x[0, 0] = 0.print(x)v = tf.Variable(initial_value=tf.random.normal(shape=(3, 1)))
print(v)v.assign(tf.ones((3, 1)))
print(v)v[0, 0].assign(3.)
print(v)v.assign_add(tf.ones((3, 1)))
print(v)

相关文章:

深度学习(3)-TensorFlow入门(常数张量和变量)

低阶张量操作是所有现代机器学习的底层架构,可以转化为TensorFlow API。 张量,包括存储神经网络状态的特殊张量(变量)​。 张量运算,比如加法、relu、matmul。 反向传播,一种计算数学表达式梯度的方法&…...

3-2 WPS JS宏 工作簿的打开与保存(模板批量另存为工作)学习笔记

************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…...

【GO】学习笔记

目录 学习链接 开发环境 开发工具 GVM - GO多版本部署 GOPATH 与 go.mod go常用命令 环境初始化 编译与运行 GDB -- GNU 调试器 基本语法与字符类型 关键字与标识符 格式化占位符 基本语法 初始值&零值&默认值 变量声明与赋值 _ 下划线的用法 字…...

【TypeScript】ts在vue中的使用

目录 一、Vue 3 TypeScript 1. 项目创建与配置 项目创建 关键配置文件 2.完整项目结构示例 3. 组件 Props 类型定义 4. 响应式数据与 Ref 5. Composition 函数复用 二、组件开发 1.组合式API(Composition API) 2.选项式API(Options…...

2025前端框架最新组件解析与实战技巧:Vue与React的革新之路

作者:飞天大河豚 引言 2025年的前端开发领域,Vue与React依然是开发者最青睐的框架。随着Vue 3的全面普及和React 18的持续优化,两大框架在组件化开发、性能优化、工程化支持等方面均有显著突破。本文将从最新组件特性、使用场景和编码技巧三…...

Elasticsearch 的分布式架构原理:通俗易懂版

Elasticsearch 的分布式架构原理:通俗易懂版 Lucene 和 Elasticsearch 的前世今生 Lucene 是一个功能强大的搜索库,提供了高效的全文检索能力。然而,直接基于 Lucene 开发非常复杂,即使是简单的功能也需要编写大量的 Java 代码&…...

【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)

目录 1 官方deepseek 1.1 拉取学术GPT项目 1.2 安装依赖 1.3 修改配置文件中的DEEPSEEK_API_KEY 2 第三方API 2.1 修改DEEPSEEK_API_KEY 2.2 修改CUSTOM_API_KEY_PATTERM 2.3 地址重定向 2.4 修改模型参数 2.5 成功调用 2.6 尝试添加一个deepseek-r1参数 3 使用千帆…...

2.部署kafka:9092

官方文档:http://kafka.apache.org/documentation.html (虽然kafka中集成了zookeeper,但还是建议使用独立的zk集群) Kafka3台集群搭建环境: 操作系统: centos7 防火墙:全关 3台zookeeper集群内的机器,1台logstash 软件版本: …...

学习路之PHP --TP6异步执行功能 (无需安装任何框架)

学习路之PHP --异步执行功能 (无需安装任何框架) 简介一、工具类二、调用三、异步任务的操作四、效果: 简介 执行异步任务是一种很常见的需求,如批量发邮箱,短信等等执行耗时任务时,需要程序异步执行&…...

Uniapp 小程序复制、粘贴功能实现

在开发 Uniapp 小程序的过程中,复制和粘贴功能是非常实用且常见的交互需求。今天,我就来和大家详细分享如何在 Uniapp 中实现这两个功能。 复制功能:uni.setClipboardData方法 goResult() {uni.setClipboardData({data: this.copyContent, /…...

seacmsv9注入管理员账号密码+orderby+limit

一、seacmsv9 SQL注入漏洞 查看源码 <?php session_start(); require_once("include/common.php"); //前置跳转start $cs$_SERVER["REQUEST_URI"]; if($GLOBALS[cfg_mskin]3 AND $GLOBALS[isMobile]1){header("location:$cfg_mhost$cs");}…...

多通道数据采集和信号生成的模块化仪器如何重构飞机电子可靠性测试体系?

飞机的核心电子系统包括发电与配电系统&#xff0c;飞机内部所有设备和系统之间的内部数据通信系统&#xff0c;以及用于外部通信的射频设备。其他所有航空电子元件都依赖这些关键总线进行电力传输或数据通信。在本文中&#xff0c;我们将了解模块化仪器&#xff08;无论是PCIe…...

天润融通分析DeepSeek如何一键完成从PR接入,到真正的业务接入

DeepSeek出圈之后&#xff0c;市场上很快掀起了一波DeepSeek接入潮。 在客户服务领域&#xff0c;许多企业见识到DeepSeek的超强能力后&#xff0c;也迅速接入DeepSeek并获得了不错的效果。 比如在客户接待服务场景&#xff0c;有企业将DeepSeek应用到智能问答助手&#xff0…...

免费PDF工具

Smallpdf.com - A Free Solution to all your PDF Problems Smallpdf - the platform that makes it super easy to convert and edit all your PDF files. Solving all your PDF problems in one place - and yes, free. https://smallpdf.com/#rappSmallpdf.com-解决您所有PD…...

PyTorch 源码学习:GPU 内存管理之它山之石——TensorFlow BFC 算法

TensorFlow 和 PyTorch 都是常用的深度学习框架&#xff0c;各自有一套独特但又相似的 GPU 内存管理机制&#xff08;BFC 算法&#xff09;。它山之石可以攻玉。了解 TensorFlow 的 BFC 算法有助于学习 PyTorch 管理 GPU 内存的精妙之处。本文重点关注 TensorFlow BFC 算法的核…...

【学写LibreCAD】1 LibreCAD主程序

一、源码 头文件&#xff1a; #ifndef MAIN_H #define MAIN_H#include<QStringList>#define STR(x) #x #define XSTR(x) STR(x)/*** brief handleArgs* param argc cli argument counter from main()* param argv cli arguments from main()* param argClean a list…...

Android Studio超级详细讲解下载、安装配置教程(建议收藏)

博主介绍&#xff1a;✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神&#xff0c;答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战&#xff0c;深受全网粉丝喜爱与支持✌有…...

CDN与群联云防护的技术差异在哪?

CDN&#xff08;内容分发网络&#xff09;与群联云防护是两种常用于提升网站性能和安全的解决方案&#xff0c;但两者的核心目标和技术实现存在显著差异。本文将从防御机制、技术架构、适用场景和代码实现等方面详细对比两者的区别&#xff0c;并提供可直接运行的代码示例。 一…...

故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断

故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断 目录 故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断分类效果基本介绍模型描述DBO-BP-Bagging蜣螂算法优化多特征分类预测一、引言1.1、研究背景和意义1.2、研究现状1.3、研究目的与方法 二…...

Linux-SaltStack配置

文章目录 SaltStack配置 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年02月24日20点51分 SaltStack配置 SaltStack 中既支持SSH协议也支持我们的一个客户端 #获取公钥&#xff08;…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...