当前位置: 代码迷 >> 综合 >> tensorflow2.0 常用必备基础函数+知识点(一)
  详细解决方案

tensorflow2.0 常用必备基础函数+知识点(一)

热度:44   发布时间:2023-10-28 12:22:14.0

文章目录

      • 1、自动求导 *gradient*
      • 2、Tensor
          • 2.1 数据类型
          • 2.2 *tensor* 属性
          • 2.3 类型转换
      • 3、*Tensor* 创建
      • 4、索引和切片
        • 4.1 索引选择相关函数
        • 4.2 维度变换
        • 4.3 维度拓展
        • 4.4 维度压缩
      • 5、合并与分割
        • 5.1 合并
        • 5.2 分割
      • 6、数据统计
        • 6.1 范数
        • 6.2 最值|均值
        • 6.3 比较是否相等
      • 7、张量排序
      • 8、数据的填充与复制
      • 9、张量限幅

本人也是小菜,记录下 学习知识点。
目前tensorflow与pytorch都比较流行,我觉得两者都应该掌握,但是应该选择一门主修。tensorflow2.0修复了tensorflow1.0好多缺点,现在用起来比较方便。

1、自动求导 gradient

    x = tf.ones((2,2))# 需要计算梯度的操作with tf.GradientTape() as t:t.watch(x)y = tf.reduce_sum(x)z = tf.multiply(y,y)# 计算z关于x的梯度dz_dx = t.gradient(z, x)print(dz_dx)tf.Tensor([[8. 8.][8. 8.]], shape=(2, 2), dtype=float32)

2、Tensor

2.1 数据类型
Tensor Eg
scalar dim=0 ,标量,eg:1.1,
vector dim=1,[1.],[1.1,2.2,]
matrix dim=2,[1.],[1.1,2.2,]
tensor ???? > 2
2.2 tensor 属性
属性 功能
tensor.device 返回所有的设备名称cpu0/Gpu0
tensor.gpu 返回GPU
tensor.numpy tensor => numpy
tensor.ndim 返回维度 <==>tf.rank(tensor)
tensor.shape 返回tensor的形状信息
tensor.dtype 返回数据类型
tf.is_tensor(x) 判断x是否是tensorflow类型
2.3 类型转换

numpy 默认float32
tensor 默认 int64

tf.convert_to_tensor (x,dtype=tf.int332)
# 将 x 转换成 int32 位tensor,若不指定dtype,会默认转化为 int64

tf.cast() 非常 常用 !!!!!

tf.cast(x,dtype = 要转化的类型)
tf.variable(x)
# variable 型变量,梯度信息会记录,可导

tensor运行在GPU上面,要想进行一些具体的控制 逻辑(在CPU)必须将tensor返回一些具体数据。
eg.tensor.numpy() 或者 int(tensor)float(tensor)tensor
scalar 时成立

3、Tensor 创建

? from numpy

tf.conver_to_tensor(np.ones([2,3])) 
# 创建shape=(2,3),dtype=float64的全一tensor

? from list

tf.conver_to_tensor([12]) 
# 创建shape=(2,),dtype =int32,numpy=array([1,2])的tensor

? zeros, ones

tf.ones([shape])
tf.zeros([shape])
tf.zeros_like(a) <=> tf.zeros(a.shape)
tf.ones_like(b)  <=> tf.ones(b.shape)

? fill

tf.fill([2,3],3)    # 向2行3列的tensor全部写入3

? random

tf.random.narmal([2,2],mean =1, stddev=1)              # 正态分布
tf.random.truncated_normal([2,2],mean =0, stddev=1)    # 避免均值为0
tf.random.uniform([2,2],minval=0,maxval=1)             # 0~1均匀分布

? constant

tf.constant(x)  # 创建常量

4、索引和切片

  • 索引从0开始
  • [start : end] <=> 索引编号 [0,1,2,…,-3,-2,-1]
  • [start : end :step] => 他们的默认值依次是 0,-1,1
  • [::-1] => 倒序
  • => 任意可推断出的冒号,a[0,…] =>第0维所有

4.1 索引选择相关函数

tf.gather() => 针对某个维度 # 根据提供的 indicesaxis 这个轴上对 params 进行索引,拼接成一个新的张量。

tf.gather()         # 针对单个维度
tf.gather_nd()      # 针对多个维度
tf.boolean_mask()          

4.2 维度变换

  tf.reshape()tf.tranpose()

4.3 维度拓展

   tf.expand_dim()tf.broadcast_to()  # 内存没有复制,速度快

4.4 维度压缩

   tf.squeeze()

5、合并与分割

5.1 合并

tf.concat([a,b],axis=0)  
# 将a,b在axis=0的维度上面合并,其他维度不变
tf.stack([a,b],axis=0)
# 创建一个新的维度,a,b的 shape 必须相同

5.2 分割

tf.unstack(c, axis=0)
# 返回axis=0所在维度上的tensor个数的tensor,其shape都相同 
tf.split(c, axis=0,num_or_size_splits=2)  
# 与tf.unstack()类似,用来打散tensor,但是其可指定打散个数
# 此处表示,将 axis=3维 均分成2份

6、数据统计

6.1 范数

tf.norm()
# 求范数,默认2-范数

6.2 最值|均值

tf.reduce_min(a,axis=0)
tf.reduce_max(a,axis=0)
tf.reduce_mean(a,axis=0)
# 求指定维度的op,若不指定,默认求全局值op
tf.argmax()
tf.argmin()
# 返回最值的 索引

6.3 比较是否相等

unique,idx = tf.unique(a)
# 找到不同的元素,并返回元素与索引
res = tf.equal(a,b)
# 比较a,b对应元素,返回布尔值,一般将res转化成int32,方便计算精度

tf.reduce_sum(tf.cast(res,dtype=tf.int32))
一般用来比较 预测值 与 真值

7、张量排序

  tf.sort(a, direction='DESCENDING')# 返回 a 的降序排列,升序为 ASCENDING
 tf.argsort(a, direction='DESCENDING')# 返回排序后的索引index
  tf.math.top_k(k)# 返回前 k 大的值及其索引

8、数据的填充与复制

  tf.pad()tf.tile()

9、张量限幅

tf.clip_by_value(a,2,8)  <=> tf.minimum(tf.maximun(a,2),8)
# 将a限制到一个 2~8 的范围
tf.clip_by_norm() # 按照比例进行放缩
tf.clip_by_global_norm()
# 实现全局不同梯度下降方向的等比例缩放,方向不变

将学习率 lr 设置的较大,则可能出现gradient vanish/explore ,使 norm大,故需要裁剪norm,使其等比例缩小

  相关解决方案