TensorFLow 数学运算的示例代码


Posted in Python onApril 21, 2020

一、Tensor 之间的运算规则

  • 相同大小 Tensor 之间的任何算术运算都会将运算应用到元素级
  • 不同大小 Tensor(要求dimension 0 必须相同) 之间的运算叫做广播(broadcasting)
  • Tensor 与 Scalar(0维 tensor) 间的算术运算会将那个标量值传播到各个元素
  • Note: TensorFLow 在进行数学运算时,一定要求各个 Tensor 数据类型一致

二、常用操作符和基本数学函数

大多数运算符都进行了重载操作,使我们可以快速使用 (+ - * /) 等,但是有一点不好的是使用重载操作符后就不能为每个操作命名了。

# 算术操作符:+ - * / % 
tf.add(x, y, name=None)  # 加法(支持 broadcasting)
tf.subtract(x, y, name=None) # 减法
tf.multiply(x, y, name=None) # 乘法
tf.divide(x, y, name=None)  # 浮点除法, 返回浮点数(python3 除法)
tf.mod(x, y, name=None)  # 取余
 
# 幂指对数操作符:^ ^2 ^0.5 e^ ln 
tf.pow(x, y, name=None)  # 幂次方
tf.square(x, name=None)  # 平方
tf.sqrt(x, name=None)   # 开根号,必须传入浮点数或复数
tf.exp(x, name=None)   # 计算 e 的次方
tf.log(x, name=None)   # 以 e 为底,必须传入浮点数或复数
 
# 取符号、负、倒数、绝对值、近似、两数中较大/小的
tf.negative(x, name=None)  # 取负(y = -x).
tf.sign(x, name=None)   # 返回 x 的符号
tf.reciprocal(x, name=None) # 取倒数
tf.abs(x, name=None)   # 求绝对值
tf.round(x, name=None)   # 四舍五入
tf.ceil(x, name=None)   # 向上取整
tf.floor(x, name=None)   # 向下取整
tf.rint(x, name=None)   # 取最接近的整数 
tf.maximum(x, y, name=None) # 返回两tensor中的最大值 (x > y ? x : y)
tf.minimum(x, y, name=None) # 返回两tensor中的最小值 (x < y ? x : y)
 
# 三角函数和反三角函数
tf.cos(x, name=None) 
tf.sin(x, name=None) 
tf.tan(x, name=None) 
tf.acos(x, name=None)
tf.asin(x, name=None)
tf.atan(x, name=None) 
 
# 其它
tf.div(x, y, name=None) # python 2.7 除法, x/y-->int or x/float(y)-->float
tf.truediv(x, y, name=None) # python 3 除法, x/y-->float
tf.floordiv(x, y, name=None) # python 3 除法, x//y-->int
tf.realdiv(x, y, name=None)
tf.truncatediv(x, y, name=None)
tf.floor_div(x, y, name=None)
tf.truncatemod(x, y, name=None)
tf.floormod(x, y, name=None)
tf.cross(x, y, name=None)
tf.add_n(inputs, name=None) # inputs: A list of Tensor objects, each with same shape and type
tf.squared_difference(x, y, name=None)

三、矩阵数学函数

# 矩阵乘法(tensors of rank >= 2)
tf.matmul(a, b, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None)
 
# 转置,可以通过指定 perm=[1, 0] 来进行轴变换
tf.transpose(a, perm=None, name='transpose')
 
# 在张量 a 的最后两个维度上进行转置
tf.matrix_transpose(a, name='matrix_transpose')
# Matrix with two batch dimensions, x.shape is [1, 2, 3, 4]
# tf.matrix_transpose(x) is shape [1, 2, 4, 3]
 
# 求矩阵的迹
tf.trace(x, name=None)

# 计算方阵行列式的值
tf.matrix_determinant(input, name=None)

# 求解可逆方阵的逆,input 必须为浮点型或复数
tf.matrix_inverse(input, adjoint=None, name=None)

# 奇异值分解
tf.svd(tensor, full_matrices=False, compute_uv=True, name=None)
 
# QR 分解
tf.qr(input, full_matrices=None, name=None)
 
# 求张量的范数(默认2)
tf.norm(tensor, ord='euclidean', axis=None, keep_dims=False, name=None)
 
# 构建一个单位矩阵, 或者 batch 个矩阵,batch_shape 以 list 的形式传入
tf.eye(num_rows, num_columns=None, batch_shape=None, dtype=tf.float32, name=None)
# Construct one identity matrix.
tf.eye(2)
==> [[1., 0.],
  [0., 1.]]
 
# Construct a batch of 3 identity matricies, each 2 x 2.
# batch_identity[i, :, :] is a 2 x 2 identity matrix, i = 0, 1, 2.
batch_identity = tf.eye(2, batch_shape=[3])
 
# Construct one 2 x 3 "identity" matrix
tf.eye(2, num_columns=3)
==> [[ 1., 0., 0.],
  [ 0., 1., 0.]]
 
# 构建一个对角矩阵,rank = 2*rank(diagonal)
tf.diag(diagonal, name=None)
# 'diagonal' is [1, 2, 3, 4]
tf.diag(diagonal) ==> [[1, 0, 0, 0]
      [0, 2, 0, 0]
      [0, 0, 3, 0]
      [0, 0, 0, 4]]

# 其它
tf.diag_part
tf.matrix_diag
tf.matrix_diag_part
tf.matrix_band_part
tf.matrix_set_diag
tf.cholesky
tf.cholesky_solve
tf.matrix_solve
tf.matrix_triangular_solve
tf.matrix_solve_ls
tf.self_adjoint_eig
tf.self_adjoint_eigvals

四、Reduction:reduce various dimensions of a tensor

# 计算输入 tensor 所有元素的和,或者计算指定的轴所有元素的和
tf.reduce_sum(input_tensor, axis=None, keep_dims=False, name=None)
# 'x' is [[1, 1, 1]
#   [1, 1, 1]]
tf.reduce_sum(x) ==> 6
tf.reduce_sum(x, 0) ==> [2, 2, 2]
tf.reduce_sum(x, 1) ==> [3, 3]
tf.reduce_sum(x, 1, keep_dims=True) ==> [[3], [3]] # 维度不缩减
tf.reduce_sum(x, [0, 1]) ==> 6
 
# 计算输入 tensor 所有元素的均值/最大值/最小值/积/逻辑与/或
# 或者计算指定的轴所有元素的均值/最大值/最小值/积/逻辑与/或(just like reduce_sum)
tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None)
tf.reduce_max(input_tensor, axis=None, keep_dims=False, name=None)
tf.reduce_min(input_tensor, axis=None, keep_dims=False, name=None)
tf.reduce_prod(input_tensor, axis=None, keep_dims=False, name=None)
tf.reduce_all(input_tensor, axis=None, keep_dims=False, name=None) # 全部满足条件
tf.reduce_any(input_tensor, axis=None, keep_dims=False, name=None) #至少有一个满足条件

-------------------------------------------
# 分界线以上和 Numpy 中相应的用法完全一致
-------------------------------------------
 
# inputs 为一 list, 计算 list 中所有元素的累计和,
# tf.add(x, y, name=None)只能计算两个元素的和,此函数相当于扩展了其功能
tf.accumulate_n(inputs, shape=None, tensor_dtype=None, name=None)

 
# Computes log(sum(exp(elements across dimensions of a tensor)))
tf.reduce_logsumexp(input_tensor, axis=None, keep_dims=False, name=None)
 
# Computes number of nonzero elements across dimensions of a tensor
tf.count_nonzero(input_tensor, axis=None, keep_dims=False, name=None)

五、Scan:perform scans (running totals) across one axis of a tensor

# Compute the cumulative sum of the tensor x along axis
tf.cumsum(x, axis=0, exclusive=False, reverse=False, name=None)
# Eg:
tf.cumsum([a, b, c]) # => [a, a + b, a + b + c]
tf.cumsum([a, b, c], exclusive=True) # => [0, a, a + b]
tf.cumsum([a, b, c], reverse=True) # => [a + b + c, b + c, c]
tf.cumsum([a, b, c], exclusive=True, reverse=True) # => [b + c, c, 0]
 
# Compute the cumulative product of the tensor x along axis
tf.cumprod(x, axis=0, exclusive=False, reverse=False, name=None)

六、Segmentation

沿着第一维(x 轴)根据 segment_ids(list)分割好相应的数据后再进行操作

TensorFLow 数学运算的示例代码

# Computes the sum/mean/max/min/prod along segments of a tensor
tf.segment_sum(data, segment_ids, name=None)
# Eg:
m = tf.constant([5,1,7,2,3,4,1,3])
s_id = [0,0,0,1,2,2,3,3]
s.run(tf.segment_sum(m, segment_ids=s_id))
>array([13, 2, 7, 4], dtype=int32)
 
tf.segment_mean(data, segment_ids, name=None)
tf.segment_max(data, segment_ids, name=None)
tf.segment_min(data, segment_ids, name=None)
tf.segment_prod(data, segment_ids, name=None)
 
# 其它
tf.unsorted_segment_sum
tf.sparse_segment_sum
tf.sparse_segment_mean
tf.sparse_segment_sqrt_n

 七、 序列比较与索引提取

# 比较两个 list 或者 string 的不同,并返回不同的值和索引
tf.setdiff1d(x, y, index_dtype=tf.int32, name=None) 
 
# 返回 x 中的唯一值所组成的tensor 和原 tensor 中元素在现 tensor 中的索引
tf.unique(x, out_idx=None, name=None)
 
# x if condition else y, condition 为 bool 类型的,可用tf.equal()等来表示
# x 和 y 的形状和数据类型必须一致
tf.where(condition, x=None, y=None, name=None) 
 
# 返回沿着坐标轴方向的最大/最小值的索引
tf.argmax(input, axis=None, name=None, output_type=tf.int64)
tf.argmin(input, axis=None, name=None, output_type=tf.int64)
 
# x 的值当作 y 的索引,range(len(x)) 索引当作 y 的值
# y[x[i]] = i for i in [0, 1, ..., len(x) - 1]
tf.invert_permutation(x, name=None)
 
# 其它
tf.edit_distance

到此这篇关于TensorFLow 数学运算的示例代码的文章就介绍到这了,更多相关TensorFLow 数学运算内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
python表格存取的方法
Mar 07 Python
Python数据类型之Number数字操作实例详解
May 08 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
python圣诞树编写实例详解
Feb 13 Python
Django Serializer HiddenField隐藏字段实例
Mar 31 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
jupyter修改文件名方式(TensorFlow)
Apr 21 #Python
Python基于requests实现模拟上传文件
Apr 21 #Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 #Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 #Python
如何基于python对接钉钉并获取access_token
Apr 21 #Python
python用TensorFlow做图像识别的实现
Apr 21 #Python
jupyter notebook 添加kernel permission denied的操作
Apr 21 #Python
You might like
PHP - Html Transfer Code
2006/10/09 PHP
php UBB 解析实现代码
2011/11/27 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
jquery插件制作 提示框插件实现代码
2012/08/17 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
初学python数组的处理代码
2011/01/04 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
python的setattr函数实例用法
2020/12/16 Python
adidas美国官网:adidas US
2016/09/21 全球购物
J2EE相关知识面试题
2013/08/26 面试题
幸福家庭事迹材料
2014/02/03 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
三方股东合作协议书
2014/10/28 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
祝寿主持词
2015/07/02 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python