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


本人也是小菜,记录下 学习知识点。
目前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 数据类型
TensorEg
scalardim=0 ,标量,eg:1.1,
vectordim=1,[1.],[1.1,2.2,]
matrixdim=2,[1.],[1.1,2.2,]
tensor???? > 2
2.2 tensor 属性
属性功能
tensor.device返回所有的设备名称cpu0/Gpu0
tensor.gpu返回GPU
tensor.numpytensor => 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,使其等比例缩小

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值