各位同学好,今天和大家分享一下TensorFlow2.0中的数学运算方法、合并与分割。内容有:

(1)基本运算;(2)矩阵相乘;(3)合并 tf.concat()、tf.stack();(4)分割 tf.split()、tf.unstack()

那我们开始吧。


1. 基本数学运算

开始之前,我们先定义两个tensor,下面的计算都使用这两个

# 2行2列的全为2的tensor
a = tf.fill([2,2],2.)
# 2行2列全1tensor,默认float32
b = tf.ones([2,2]) 

1.1 加减乘除

计算前要保证两个tensor的数据类型相同。

# ==1== 加减乘除
a+b  # 元素之间相加
a-b  # 元素之间相减
a*b  # 元素之间相乘,理解为矩阵的点乘
a/b  # 元素之间相除

  


1.2 求余取整

# ==2== 取整求余
a // b  # a/b 取整除数
a % b   # a/b 取余数


1.3 对数和指数

求对数log: tf.math.log(a)

注意,这里的 log 的底数统一都是 e

a = tf.ones([2,2])
# 求a的每一个元素求对数
tf.math.log(a)

如果想要对数的底数是其他值,需要通过公式计算

如果在tensorflow中要计算 ,方法如下,保证计算的两个tensor数据类型相同

tf.math.log(8.)/tf.math.log(2.)

指数计算   :tf.exp(tensor)

a = tf.ones([2,2])
# 对tensor中的每一个元素求ex
tf.exp(a)


1.4 求次方、开平方

求n次方:(1)tf.pow(tensor, n)   (2)tensor**n

对tensor中的每个元素求n次方

求平方: tf.square(tensor)

对tensor中的每个元素求平方

开平方: tf.sqrt(tensor)

对tensor中的每个元素求平方根

a = tf.fill([2,2],2.)
#(1)求n次方
# 法一:
tf.pow(a,2)
# 法二:
a**2
#(2)开平方
tf.sqrt(a)

  


2. 矩阵相乘

方法:(1)变量1 @ 变量2  (2)tf.mutmul(变量1, 变量2)

2.1 对于二维矩阵

# 创建二维矩阵,保证数据类型相同
a = tf.ones([2,2])  # 2行2列全1.0
b = tf.fill([2,2],2.)  # 2行2列全2.0
# 法一:
a @ b
# 法二:
tf.matmul(a,b)


2.2 对于高维矩阵

# 创建三维tensor
a = tf.ones([4,2,3])
b = tf.fill([4,3,5],2.)
# 法一:
a@b
# 法二:
tf.matmul(a,b)

可以将这几个维度理解为 [图像,行,列]将图像维度单独看作一个维度,对后面两个维度进行矩阵相乘计算,维度相乘公式如下 [b, h, w] @ [b, w, k] = [b, h, k]

利用广播对不满足要求的矩阵扩张后再进行矩阵运算,维度相乘公式为:

[b, h, w] @ [w, k] = [b, h, k]

a = tf.ones([4,2,3])
b = tf.fill([3,5],2.)
# 矩阵相乘
a @ b  #计算时自动广播


3. 合并

3.1 tf.concat()

tf.concat( [tensor1,tensor2,..] , axis )

在指定的某个维度上合并,其他维度不变,不产生新的维度。在使用该方法进行合并两个tensor变量时,除axis指定的维度可以不相等,其他维度必须相等

首先创建2个三维的tensor变量,在axis=0时的维度不同,其他维度相同。指定轴axis=0对两个tensor合并。

# 创建三维的tensor
a = tf.ones([4,35,8]) # 可以理解为收集前4个班级35名学生8门课的成绩
b = tf.ones([2,35,8])
# 将a和b合并,指定轴axis=0,在班级维度上合并
c = tf.concat([a,b],axis=0)
c.shape


3.2 tf.stack()

tf.stack([tensor1,tensor,...], axis)

在指定轴的位置创建一个新的维度,用来合并几个所有维度都相同的tensor变量。要求被合并的tensor变量的shape完全一样。如果axis是正数,在指定轴前面创建一个维度;axis是负数,在指定轴后面创建。

# 创建两个相同shape的tensor变量
a = tf.ones([4,35,8])
b = tf.ones([4,35,8])
# 在指定轴前面创建新维度合并,保证其他维度的shape相同
c = tf.stack([a,b],axis=0)
c.shape
# 若为负数在axis后面创建
d = tf.stack([a,b],axis=-2)
d.shape


4. 拆分

4.1 tf.unstack()

tf.unstack(tensor, axis)

在一个tensor变量的指定维度上,拆分这个维度。将指定维度全部拆分,该维度的shape是多少就拆分多少个拆分后这个维度消失,不会修改原数据,需要用一个新变量接收拆分结果。

# 创建一个四维全1的tensor
a = tf.ones([2,4,35,8])
# 指定拆分axis=1这个维度,全部拆分,为4份
res = tf.unstack(a,axis=1)
# 返回一个列表,查看某个tensor的维度
res[0].shape

对指定维度axis=1进行拆分,拆分后这个维度消失,返回由4个三维tensor组成的列表,列表中每一个tensor的shape都是[2, 35, 8]


4.2 tf.split()

tf.split(tensor, axis, num_or_size_splits)

tensor为需要切分的张量;axis指定在第几个维度上切分;num_or_size_splits表示要切几份,怎么切,如果是一个整数,那直接在指定维度上把张量平均切分成几个小张量,如果是一个向量,就根据这个向量有几个元素分为几项

拆分后,指定的轴不消失

a = tf.ones([2,4,35,8])
# 在第1个轴上拆分,平均拆分成2份
res = tf.split(a,axis=1,num_or_size_splits=2)
res[0].shape
# 在第3个轴上拆分成2/2/4,返回一个列表
con = tf.split(a,axis=3,num_or_size_splits=[2,2,4])
con[2].shape

在轴axis=1上拆分,将该轴的shape为4,平均分成两份,返回一个由两个tensor构成的列表,每个tensor的维度都是[2,2,35,8]

在轴axis=3上按列表指定的方式来拆分,axis=3的shape为8,拆分成2/2/4,返回值是由三个tensor组成的列表,分别为[2,4,35,2]、[2,4,35,2]、[2,4,35,4]

【TensorFlow2.0】(5) 数学计算、合并、分割相关推荐

  1. tensorflow2.0 学习笔记:一、神经网络计算

    mooc课程Tensorflow2.0 笔记 人工智能三学派 行为主义:基于控制论,构建感知-动作控制系统(自适应控制系统) 符号主义:基于算数逻辑表达式,求解问题时先把问题描述为表达式,再求解表达式 ...

  2. mybatis-plus对datetime返回去掉.0_华为AI认证-TensorFlow2.0编程基础

    参考<HCIA-AI2.0培训教材><HCIA-AI2.0实验手册> 认证要求: 了解TensorFlow2.0是什么以及其特点 掌握TensorFlow2.0基础和高阶操作方 ...

  3. TensorFlow2.0学习

    文章目录 一.TensorFlow的建模流程 1.1 结构化数据建模流程范例 1.1.1 准备数据 1.1.2 定义模型 1.1.3 训练模型 1.1.4 评估模型 1.1.5 使用模型 1.1.6 ...

  4. ​TensorFlow2.0系列教程集合版(附PDF下载)

    文章来源于机器学习算法与Python实战,作者奥辰 TensorFlow2.0(1):基本数据结构--张量 TensorFlow2.0(2):数学运算 TensorFlow2.0(3):张量排序.最大 ...

  5. js函数语法:ASCII 码的相互转换,字符串操作,数学计算

    ASCII 码的相互转换 for (let i = 'a'.charCodeAt(); i <= 'z'.charCodeAt(); i++) {a.push(String.fromCharCo ...

  6. Tensorflow2.0

    Tensorflow2.0 Tensorflow 简介 Tensorflow是什么 Google开源软件库 采用数据流图,用于数值计算 支持多平台 GPU CPU 移动设备 最初用于深度学习,变得通用 ...

  7. tensorflow2.0实现DeepFM

    文章目录 数据预处理 模型的构建与训练 FM部分 一阶特征 二阶(交叉)特征 DNN部分 组合FM和DNN 模型训练 本文基于tensorflow2.0实现的DeepFM 结构.数据集: Criteo ...

  8. 第3章(3.11~3.16节)模型细节/Kaggle实战【深度学习基础】--动手学深度学习【Tensorflow2.0版本】

    项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0 UC 伯克利李沐的<动手学深度学习>开源书一经推出便广受好评.很多开 ...

  9. TensorFlow2.0基础学习笔记

    创建张量 import tensorflow as tfprint("Tensorflow version:", tf.__version__) # 检查版本号 print(&qu ...

最新文章

  1. Linux中断处理驱动程序编写【转】
  2. [AlwaysOn Availability Groups]AlwaysOn健康诊断日志
  3. cocos2dx event call stack
  4. python好学不-Python爬虫好学吗?
  5. 03_Nginx添加新模块
  6. Oracle 19c 新特性:ADG的自动DML重定向增强读写分离
  7. matlab 自带pca函数,matlab实现主成分分析 princomp函数 PCA中有这个函数
  8. 模型评估【PR|ROC|AUC】
  9. 前端每日实战:33# 视频演示如何用纯 CSS 创作牛奶文字变换效果
  10. nginx服务器能ping通,访问不了的解决办法
  11. Mvc.Ext.Net项目架构(一)
  12. 解决办法:nvidia-docker2指定最新docker,而安装又找不到
  13. 十五天精通WCF——第四天 你一定要明白的通信单元Message
  14. 20021年还需要学C语言吗?C语言成为专家的路径、方法、书籍推荐
  15. 【EXLIBRIS】#小词旮旯# 001 Lock
  16. 毛[文强]老师的一堂前端课程
  17. RxJava学习 - 11. Switching, Throttling, Windowing, and Buffering
  18. xshell个人免费版
  19. PySpark与GraphFrames的安装与使用
  20. 手机支架3d打印模型_新型高效率酶固定化3D打印支架

热门文章

  1. display:inline-block 的使用
  2. JDK相关版本特性浏览
  3. Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了解拖拽的原理...
  4. 配置zendframework开始工作(加入环境变量)
  5. python学习笔记——Thread常用方法
  6. html实时显示log,websocketd 实现浏览器查看服务器实时日志
  7. micropython mqtt_MicroPython使用MQTT协议接入OneNET云平台
  8. bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...
  9. linux的QQ浏览器里微信,移动端微信内置浏览器(或QQ浏览器)无法识别onclick事件的问题解决...
  10. mysql 5.7解压缩,Mysql5.7 windows解压缩ZIP版安装