TensorFlow(R与Python系列第四篇)
目录
一、TensorFlow介绍
二、张量
三、有用的TensorFlow运算符
四、reduce系列函数实现约减
1-第一种理解方式:引入轴概念后直观可理
2-第二种理解方式:按张量括号层次的方式
参考:
一、TensorFlow介绍
TensorFlow是一个强大的用于数值计算的库,特别适合大规模机器学习或者可以将其用于需要大量计算的任何其他场景。TensorFlow是由Google Brain团队开发,并未许多Google的大规模服务提供了支持,例如Google Cloud Speech、Google Photos和Google Search。它于2015年11月开源,现在是最受欢迎的深度学习库。
TensorFlow提供什么?
- TensorFlow核心与NumPy非常相似,但具有GPU支持;
- TensorFlow支持分布式计算(跨多个设备和服务器);
- TensorFlow包含一种即时(JIT)编译器,可使其针对速度和内存使用情况来优化计算,它的工作方式是从Python函数中提取计算图,然后进行优化(通过修剪未使用的节点),最后有效地运行它(通过自动并行运算相互独立的操作);
- 计算图可以导出为可移植格式,因此那你可以在一个环境中(例如Linux上使用Python)训练TensorFlow模型,然后在另一个环境中(例如在Android设备上使用Java)运行TensorFlow模型;
- TensorFlow实现了自动微分(autodiff),并提供了一些优秀的优化器,例如RMSProp和Nadam,因此你可以轻松地最小化各种损失函数。
TensorFlow使用图(Graph)来表示计算任务,图中的节点(Node)称为op(“operation”的缩写)。一个op获得0个或者多个张量,执行计算,产生0个或者多个张量。每个张量是要给类型化的多维数组。一个TensorFlow图描述了计算的过程。为了进行计算,图必须在Session(会话)里被启动。会话将图的op分发到诸如CPU或GPU之类的设备上,同时提供执行op的方法。这些方法执行后,将所产生的张量返回。
一开始,我们需要导入tensorflow这个包,为了以后调用tensorflow包中的对象、成员变量和成员函数更加方便,我们import tensorflow后面加上了as tf,表示以后可以用tf这个简写来代表tensorflow的全名。
#载入库
import tensorflow as tf#显示版本
print(tf.__version__) #注意是version前后都是两个下划线。
二、张量
TensorFlow中Tensor意思是“张量”,Flow意思是“流或流动”。任意维度的数据可以称为“张量”,如一维数组、二维数组、N维数组。它最初想要表达的含义是保持计算节点不变,让数据在不同的计算设备上传输并计算。
- 零阶张量表示标量,一个数;
- 一阶张量表示一维向量;
- 2阶张量表示矩阵;
- n阶张量表示n维数组;
张量中并没有真正存储数字,它存储的是如何得到这些数字的计算过程。TesorFlow中的张量和NumPy中的数组不同,TensorFlow的计算结果不是一个具体的数字,而是一个张量的结构。如:
>>> a = tf.constant([1.0, 2.0], name="a")
>>> a
<tf.Tensor: shape=(2,), dtype=float32, numpy=array([1., 2.], dtype=float32)>
>>> print(a)
tf.Tensor([1. 2.], shape=(2,), dtype=float32)

- 占位符(placeholder):事先未指定的值,(个人理解为C语言中对变量使用前进行定义)
- 变量(variable):一个可以改变的值,
>>> tf.Variable([[1., 2., 3.],[4., 5., 6]])#matirx
<tf.Variable 'Variable:0' shape=(2, 3) dtype=float32, numpy=
array([[1., 2., 3.],[4., 5., 6.]], dtype=float32)>
- 常量(constant):一个不可变的值,使用tf.constant()创建张量,
>>> tf.constant([[1., 2., 3.],[4., 5., 6]]) #矩阵
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[1., 2., 3.],[4., 5., 6.]], dtype=float32)>
>>> tf.constant(42) #标量
<tf.Tensor: shape=(), dtype=int32, numpy=42>
三、有用的TensorFlow运算符
- tf.add(x,y) 两个类型相同张量相加,x+y;
- tf.subtract(x,y)两个类型相同张量相减,x-y;
- tf.multiply(x,y)两个张量元素相乘
- tf.pow(x,y)求元素x的y次方
- tf.exp(x)相当于pow(e,x)其中e为欧拉常数(2.718...)
- tf.sqrt(x)相当于pow(x,0.5)
- tf.div(x,y)两个张量元素相除
- tf.truediv(x,y)与tf.div相同,但将参数转换为浮点数
- tf.floordiv(x,y)与tf.truediv相同,但将最终结果取整
- tf.mod(x,y)取元素商的余数
- tf.negative(x)每个元素都取反
四、reduce系列函数实现约减
- tf.reduce_mean()
- tf.reduce_sum()
- tf.reduce_max()
- tf.math.log()
约减这一概念的解释,可以通过以下两种方法来理解:
- 引入轴的概念,0表示垂直方向,即沿着行的方向,1表示水平方向,即沿着列的方向;
- 按张量括号层次的方式
其中第一种理解方式简单且直观,但是仅限于2维以内的数组,当维数超过3时,我们很闹找到直观可以理解的方向。
1-第一种理解方式:引入轴概念后直观可理
tf.reduce_sum()功能时对张量中的所有元素进行求和,它的函数原型如下:
reduce_sum( input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)
- 第一个参数input_tensor时必需的
- 第二个参数axis,决定了约减的轴方向,
- 如果axis=0,则可以简单的将其理解为从垂直方向进行约减,也就是说,对按行进行处理;
- 如果axis=1,则可以简单的将其理解为从水平方向进行约减,也就是说,对按列进行处理;
- 对张量而言,约减可以有先后顺序的。因此,axis的值可以是一个向量,axis=[1,0]表示先水平方向约减,再垂直方向约减。反之,axis=[0,1]表示先垂直方向约减,再水平方向约减。
- 如果axis没有指定方向,那么将采用默认值None,表示所有维度的张量都会被依次约减。
- 个人感觉:有点像apply(x,1, function)的感觉。
- keep_dims为真True,则每个维度的张量被约减到长度为1,即保留了维度信息。
- 参数name是可选项,表示为这个操作取一个名字。
- 参数reduction_indices已经过时,它已经完全被axis取代,此处保留的目的仅为兼容旧代码。
>>> x = tf.constant([[1, 2, 3],[4, 5, 6]])
>>> x
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[1, 2, 3],[4, 5, 6]])>
>>> tf.reduce_sum(x) #axis取默认值,即对两个维度都执行约减
<tf.Tensor: shape=(), dtype=int32, numpy=21>
>>> tf.reduce_sum(x,0) #axis=0
<tf.Tensor: shape=(3,), dtype=int32, numpy=array([5, 7, 9])>
>>> tf.reduce_sum(x,1) #axis=1
<tf.Tensor: shape=(2,), dtype=int32, numpy=array([ 6, 15])>
2-第二种理解方式:按张量括号层次的方式
由于第一种理解方式对三维以上数组的约减没办法找到直观可以理解的方向,因此,更加普适的解释应该是按张量括号层次的方式来理解。张量括号由外到内,对应从小到大的维数,最外面的括号为0,表示第0维度;倒数第二括号,记为1,表示第1维度;以此类推0,1,2,。。。
>>> y=tf.constant([[[1, 1, 1],[2, 2, 2]],[[3, 3, 3],[4, 4, 4]]])
>>> y
<tf.Tensor: shape=(2, 2, 3), dtype=int32, numpy=
array([[[1, 1, 1],[2, 2, 2]],[[3, 3, 3],[4, 4, 4]]])>
>>> tf.reduce_sum(y,0)
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[4, 4, 4],[6, 6, 6]])>
>>> tf.reduce_sum(y,1)
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[3, 3, 3],[7, 7, 7]])>
>>> tf.reduce_sum(y,2)
<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[ 3, 6],[ 9, 12]])>
>>> tf.reduce_sum(y,[0,1])
<tf.Tensor: shape=(3,), dtype=int32, numpy=array([10, 10, 10])>
>>> tf.reduce_sum(y,[0,1,2])
<tf.Tensor: shape=(), dtype=int32, numpy=30>
- 当axis=0时:
- 当axis=1时:
- 当axis=2时:
总结使用外层括号的进行约减的步骤:
- 根据axis的值,将相应的成对括号进行配对,括号内的元素表示这个维度下的元素,注意,这个维度下的元素可以根据相应的成对括号有几对便有几组;
- 计算每组这个维度下元素的和,注意,这里的元素可以表示标量、矩阵、三维数组、N维数组;
- 将每组这个维度下的计算结果放回到原先划分这个维度的元素的位置里,同时去掉这个维度的配对的括号。
参考:
《深度学习之美:AI时代的数据处理与最佳实践》(2018年6月出版,电子工业出版社)(这本书是我目前看到的介绍reduce(约减)最棒的书!把约减这个概念介绍的很清楚!其他书在介绍约减时很含糊,对于初学者不友好。)
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow(原书第2版)》(2020年10月出版,机工社)
《Python深度学习:基于TensorFlow》(Python深度学习:基于TensorFlow)
《TensorFlow机器学习(原书第2版)》(2022年5月出版,机工社)
相关文章:

TensorFlow(R与Python系列第四篇)
目录 一、TensorFlow介绍 二、张量 三、有用的TensorFlow运算符 四、reduce系列函数实现约减 1-第一种理解方式:引入轴概念后直观可理 2-第二种理解方式:按张量括号层次的方式 参考: 一、TensorFlow介绍 TensorFlow是一个强大的用于数…...

华为数通方向HCIP-DataCom H12-821题库(单选题:261-280)
第261题 以下关于IPv6过渡技术的描述,正确的是哪些项? A、转换技术的原理是将IPv6的头部改写成IPv4的头部,或者将IPv4的头部改写成IPv6的头部 B、使用隧道技术,能够将IPv4封装在IPv6隧道中实现互通,但是隧道的端点需要支持双栈技术 C、转换技术适用于纯IPv4网络与纯IPv…...
论文《基于概率标签估计的半监督日志缺陷检测》翻译
论文《Semi-supervised Log-based Anomaly Detection via Probabilistic Label Estimation》翻译 Semi-supervised Log-based Anomaly Detection via Probabilistic Label Estimation翻译...

ajax day2
1、 2、控制弹框显示和隐藏: 3、右键tr,编辑为html,可直接复制tr部分的代码 4、删除时,点击删除按钮,可以获取图书id: 5、编辑图书 快速赋值表单元素内容,用于回显: 6、hidden …...
互联网摸鱼日报(2023-09-04)
互联网摸鱼日报(2023-09-04) 36氪新闻 腾讯游戏的棋中妙手 逐一解读北交所8大改革组合拳 本周双碳大事:全国碳市场清缴履约工作全面展开;宁德时代在成都成立新能源研究院;我国首个万吨级光伏发电直接制绿氢项目投产 你在上海 city walk&a…...

UG\NX CAM二次开发 遍历组中的工序 UF_NCGROUP_ask_member_list
文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 遍历组中的工序 UF_NCGROUP_ask_member_list 效果: 代码: void GetAllOperTag(tag_t groupTag, vector<tag_t> &vOperTags) {int count=0;tag_t * list;UF_NCGROUP_ask_member_li…...
适配器、装饰器模式
一、装饰器模式 向一个现有的对象增加其功能而不改变其结构,属于类的包装...

Netty服务端启动的整体流程-基于源码4.1.96Final分析
Netty采用的是主从Reactor多线程的模型,参考Scalable IO in Java,但netty的subReactor为一个组 一、从FileServer服务器示例入手 public final class FileServer {static final boolean SSL System.getProperty("ssl") ! null;// Use the …...
预训练Bert添加new token的问题
问题 最近遇到使用transformers的AutoTokenizer的时候,修改vocab.txt中的[unused1]依然无法识别相应的new token。 实例: 我将[unused1]修改为了[TRI],句子中的[TRI]并没有被整体识别,而是识别为了[,T,RI,]。这明显是有问题的。…...
非常典型和高效的枚举类写法
目录 1、讲讲好处 2、例子 (1)枚举类: (2)DTO类: 3、根据上面例子进行具体讲解 1、讲讲好处 在使用这种标准枚举模式编写业务逻辑时,可以直接通过枚举成员来表示状态,不需要担心底层的 value 或描述信…...

kafka-- kafka集群环境搭建
kafka集群环境搭建 # 准备zookeeper环境 (zookeeper-3.4.6) # 下载kafka安装包 https://archive.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz # 上传 : 172.16.144.133 cd /usr/local/softwaretar -zxvf /usr/local/software/kafka_2.12-2.1.0.tgz -C /usr/local…...
3.flask-sqlalchemy ORM库
介绍 Flask-SQLAlchemy是一个用于Flask的扩展,它提供了一个便捷的方式来处理数据库操作。Flask-SQLAlchemy基于SQLAlchemy,一个功能强大的Python SQL工具包和对象关系映射(ORM)系统 官网文档:http://www.pythondoc.com/flask-sql…...

mac 安装 homebrew
摘要: 本文主要是下载安装包安装homebrew,然后配置环境变量Path。检验是否安装成功。 homebrew地址:macOS(或 Linux)缺失的软件包的管理器 — Homebrew 在终端命令下载安装: /bin/bash -c "$(curl…...

R语言应用interactionR包进行亚组相加交互作用分析
在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化,两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的:乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于(…...
mysql 数据库面试题整理
Mysql 中 MyISAM 和 InnoDB 的区别 1、InnoDB 支持事务MyISAM 不支持 2、InnoDB 支持外键MyISAM 不支持 3、InnoDB 是聚集索引,MyISAM 是非聚集索引 4、InnoDB 不保存表的具体行数 5、InnoDB 最小的锁粒度是行锁,MyISAM是表锁 mysql中有就更新…...
LeetCode-435-无重叠区间
题目链接: 力扣435 -无重叠区间 解题思路:和之前的合并区间、汇总区间都比较相似, 先对二维数组排序,按照左边界升序;当 当前区间的左区间 < 前一个区间的右区间,说明有重叠,res1,还要更新当…...
记录深度学习常用指令(一)
一、创建Conda虚拟Python环境 conda create -n [仓库名字] python[版本]二、激活环境 conda activate [仓库名字]三、安装PyTorch PyTorch官方 GPU: conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorchCPU࿱…...

Shell脚本练习——系统应用相关
显示系统信息 [rootwenzi data]#cat systemInfo.sh #/bin/bash RED"\E[1;31m" GREEN"\E[1;32m" END"\E[0m" echo -e "$GREEN----------------------Host systeminfo--------------------$END" echo -e "HOSTNAME: $REDho…...

同创永益入选首批“金融数字韧性与混沌工程实践试点机构”
8月16日下午,由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民,中国科学院院士冯登国,中国工商银行首席技…...

Hive 表注释乱码解决
文章目录 出现原因MySQL 字符集修改调整元数据库字符集测试 出现原因 一般 Hive 的元数据信息都存储在 MySQL 中,但 MySQL 数据库中的 character_set_server 和 character_set_database 参数,默认都为 latin1 字符集,这两个参数决定了服务器…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

Linux-进程间的通信
1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...

动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...