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获得时间的实例说明
Mar 25 Python
Python 序列的方法总结
Oct 18 Python
Python如何为图片添加水印
Nov 25 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
Atom的python插件和常用插件说明
Jul 08 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
flask利用flask-wtf验证上传的文件的方法
Jan 17 Python
python爬虫用mongodb的理由
Jul 28 Python
对PyTorch中inplace字段的全面理解
May 22 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读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
Python编程之多态用法实例详解
2015/05/19 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
wxPython的安装与使用教程
2018/08/31 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
《在大海中永生》教学反思
2014/02/24 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
蓬莱阁导游词
2015/02/04 职场文书
个人总结格式范文
2015/03/09 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
理想国读书笔记
2015/06/25 职场文书
五一放假通知怎么写
2015/08/18 职场文书
高三化学教学反思
2016/02/22 职场文书
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
Django基础CBV装饰器和中间件
2022/03/22 Python