tensorflow2.0—矩阵向量相关操作

一 、标量运算

加减乘除乘方,以及三角函数,指数,对数等常见函数,逻辑比较运算符

import tensorflow as tf
import numpy as np 
##定义两个常量
a = tf.constant([[1,2],[3,4]])
b = tf.constant([[5,6],[7,8]])
#基本的操作符如下
#+ - * /** % // >= 
#(a>=2)&(a<=3) (a>=2)|(a<=3)  a==5 #tf.equal(a,5)
#a%3  mod的运算符重载,等价于m = tf.math.mod(a,3)
tf.sqrt(a)#开方 sqrt 
1 maximum 与 minimum
#Returns the max of x and y (i.e. x > y ? x : y) element-wise.
tf.maximum(a,b)
#Returns the min of x and y (i.e. x < y ? x : y) element-wise.
tf.minimum
2 幅值裁剪clip_by_value 与 clip_by_norm
x = tf.constant([2.6,-2.7])

tf.print(tf.math.round(x)) #保留整数部分,四舍五入[3 -3]
tf.print(tf.math.floor(x)) #保留整数部分,向下归整[2 -3]
tf.print(tf.math.ceil(x))  #保留整数部分,向上归整[3 -2]

clip_by_value 与 clip_by_norm

#tf.clip_by_value(t, clip_value_min, clip_value_max, name=None)
#小于小的 设置为小的  大于大的设置为大的

x = tf.constant([0.9,-0.8,100.0,-20.0,0.7])
y = tf.clip_by_value(x,clip_value_min=-1,clip_value_max=1)#[0.9 -0.8 1 -1 0.7]

#将张量值剪裁为最大L2范数。
z = tf.clip_by_norm(x,clip_norm = 3)
#[0.0264732055 -0.0235317405 2.94146752 -0.588293493 0.0205902718]

二、 向量运算

向量运算符都以reduce开头

1 reduce_sum、mean、max、min

#张量指定维度进行reduce
b = tf.reshape(a,(3,3))
#<tf.Tensor: shape=(3, 3), dtype=int32, numpy=
#array([[1, 2, 3],
#       [4, 5, 6],
#       [7, 8, 9]])>
tf.print(tf.reduce_sum(b, axis=1, keepdims=True))#
tf.print(tf.reduce_sum(b, axis=0, keepdims=True))

a = tf.range(1,10)
tf.print(tf.reduce_sum(a))#45
tf.print(tf.reduce_mean(a))#5
tf.print(tf.reduce_max(a))#9
tf.print(tf.reduce_min(a))#1
2 reduce_prob 乘积

指定axis 时 就是该维度的相乘 没有指定就是所有元素连乘法

#向量reduce
a = tf.range(1,10)
tf.print(tf.reduce_prod(a))#326880 指定axis 时 就是该维度的相乘 没有指定就是所有元素连乘法

3 reduce_all 与 reduce_any [逻辑符and or】

reduce_all
tf.math.logical_and
数学逻辑_和

reduce_any
tf.math.logical_or
数学元素在张量维度上的逻辑_或`。
在这里插入图片描述

4 foldr 实现匿名函数
#利用tf.foldr实现tf.reduce_sum
s = tf.foldr(lambda a,b:a+b,tf.range(10)) #45
5 cum累计
#cum扫描累积
a = tf.range(1,10)
tf.print(tf.math.cumsum(a))#累加
tf.print(tf.math.cumprod(a))#累乘
6 argmax 与 argmmin 极值索引

返回最大值最小值索引

7 top_k 排序
#tf.math.top_k可以用于对张量排序
a = tf.constant([1,3,7,5,4,8])

values,indices = tf.math.top_k(a,3,sorted=True)
tf.print(values)
tf.print(indices)


#利用tf.math.top_k可以在TensorFlow中实现KNN算法

三、 矩阵运算

矩阵运算包括:矩阵乘法矩阵转置矩阵逆矩阵求迹矩阵范数矩阵行列式矩阵求特征值矩阵分解等运算

1 矩阵乘法@、转置、逆、范数、行列式
a@b  #等价于
tf.matmul(a,b)
矩阵乘法a@b #等价于tf.matmul(a,b)
矩阵转置tf.transpose(a)
矩阵逆tf.linalg.inv(a)
矩阵求trace迹tf.linalg.trace(a)
矩阵求范数tf.linalg.norm(a)
矩阵行列式tf.linalg.det(a)
矩阵特征值tf.linalg.eigvals(a)
2 矩阵分解
1.矩阵正交三角(QR)分解
#矩阵QR分解, 将一个方阵分解为一个正交矩阵q和上三角矩阵r
#QR分解实际上是对矩阵a实施Schmidt正交化得到q
a = tf.constant([[1.0,2.0],[3.0,4.0]],dtype = tf.float32)
q,r = tf.linalg.qr(a)
tf.print(q)
tf.print(r)
tf.print(q@r)

在这里插入图片描述

2.矩阵SVD分解
#矩阵svd分解
#svd分解可以将任意一个矩阵分解为一个正交矩阵u,一个对角阵s和一个正交矩阵v.t()的乘积
#svd常用于矩阵压缩和降维
a  = tf.constant([[1.0,2.0],[3.0,4.0],[5.0,6.0]], dtype = tf.float32)
s,u,v = tf.linalg.svd(a)
tf.print(u,"\n")
tf.print(s,"\n")
tf.print(v,"\n")
tf.print(u@tf.linalg.diag(s)@tf.transpose(v))

#利用svd分解可以在TensorFlow中实现主成分分析降维

在这里插入图片描述

四、 广播机制

广播规则和numpy是一样的原理,使得维度相同 从而进行相关操作

tf.broadcast_to

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#计算广播后计算结果的形状,动态形状,Tensor类型参数
c = tf.constant([1,2,3])
d = tf.constant([[1],[2],[3]])
tf.broadcast_dynamic_shape(tf.shape(c),tf.shape(d))

#广播效果
c+d #等价于 tf.broadcast_to(c,[3,3]) + tf.broadcast_to(d,[3,3])
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elvis_hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值