TensorFlow2.0使用方法

TensorFlow2.0

1 使用技巧

  1. 更新到最新版本:

    pip install --upgrade tensorflow
    pip install --upgrade tensorflow-gpu
    
  2. 导入TensorFlow模块:

    import tensorflow as tf
    
  3. 查看版本号:

    print('TensorFlow版本号为:', tf.__version__)
    
  4. 查看是否支持GPU运算:

    rint('GPU是否可用:', tf.test.is_gpu_available())
    print('GPU设备名称:', tf.test.gpu_device_name())
    
  5. 查看模式:

    print('是否为动态模式(EagerExecution):', tf.executing_eagerly())
    
  6. 在TensorFlow2.0环境中,运行TensorFlow1.x版本:

    import tensorflow.compat.v1 as tf
    tf.disable_v2_behavior()
    

2 TensFlow基础

1 创建张量

  1. 创建张量Tensor对象:

    tf.constant(value, dtype, shape)
    
    • value:数字、Python列表、Numpy数组
    • dtype:元素的数据类型
    • shape:张量的形状
    tf.convert_to_tensor(数组/列表/数字/布尔型/字符串)
    
  2. 判断数据对象是否为张量:

    tf.is_tensor(x)
    
    • x:数据对象
  3. Python验证数据对象是否为张量:

    isinstance(x)
    
    • x:数据对象
  4. 张量转换为Numpy数组:

    x.numpy()
    
    • x:TensorFlow的张量
  5. 张量元素的数据类型:

    数据类型 描述
    tf.int8 8位有符号整数
    tf.int16 16位有符号整数
    tf.int32 32位有符号整数
    tf.int64 64位有符号整数
    tf.uint8 8位无符号整数
    tf.float32 32位浮点数
    tf.float64 64位浮点数
    tf.string 字符串(非Unicode编码的字节数组)
    tf.bool 布尔型
    tf.complex64 复数,实部和虚部分别为32位浮点型
  6. 更改元素的数据类型:

    tf.cast(x, dtype)
    
    • x:TensorFlow的张量
    • dtype:目标类型

    注:

    1. 在进行数据类型转换时,一般是将低精度的数据类型向高精度转换,否则可能发生数据溢出,得到错误的结果。
    2. 布尔型转为整型,0:False, 1:True;
    3. 整型变量转换为布尔型,将非0数字都视为True。

2 维度变换改变张量的形状:

  1. 改变张量的形状:

    tf.reshape(tensor, shape)
    
    • tensor:原始张量
    • shape:目标张量的形状

    注:shape参数等于-1时,自动推导出长度。

  2. 增加张量的维度:

    tf.expand(input, axis)
    
    • input:输入的张量
    • axis:增加的轴位置
  3. 删除张量维度

    tf.squeeze(input, axis)
    

    注:只能删除长度为1的维度

  4. 交换张量的维度:

    tf.transpose(x, perm)
    
    • x:原始张量
    • perm:各个轴的顺序
  5. 拼接张量:

    tf.concat(tensors, axis)
    
    • tensors:列表,包含所有需要拼接的张量
    • axis:制定在哪个轴上拼接
  6. 分割张量

    tf.spllt(value, num_or_size_splits, axis=0)
    
    • value:待分割的张量
    • num_or_size_splits:分割的方案
    • axis:指定按照哪个轴进行分割

    注:图像的分割与拼接,改变的是张量的视图,张量的存储顺序并没有改变。

  7. 张量的堆叠

    tf.stack(values, axis)
    
    • values:要堆叠的多个张量
    • axis:指定插入新维度的位置
  8. 张量分解

    tf.unstack(values, axis)
    
    • values:要分解的张量
    • axis:指定要分解的轴

3 部分采样

  1. 索引

    x[:][:]
    
  2. 切片

    x[起始位置:结束位置:步长]
    

    注:

    1. 起始位置:结束位置,是前闭后开的 ,切片中不包含结束位置。
    2. 起始位置、结束位置、步长都可以省略。
    3. 步长可以是负数,这时起始位置的索引号,应该大于结束位置。
    4. 纬度之间用逗号隔开。
  3. 数据提取

    根据索引,抽取没有规律的、特定的数据。

    tf.gather(params, axis, indices)
    
    • params:原始张量
    • axis:说明在哪个轴上采样
    • indices:索引值列表

    同时采样多个点:

    tf.gather_nd(params, indices)
    
    • params:原始张量
    • indices:采样点的位置

4 张量运算

  1. 基本数学运算

    算术操作 描述 公式
    tf.add(x, y) 将x和y逐元素相加 \(x+y\)
    tf.subract(c, y) 将x和y逐元素相减 \(x-y\)
    tf.multiply(x, y) 将x和y逐元素相乘 \(x\times y\)
    tf.divide(x, y) 将x和y逐元素相除 \(\frac{x}{y}\)
    tf.math.mod(x, y) 对x和y逐元素取模 \(\sqrt{x^2+y^2}\)
  2. 幂指对数运算

    算术操作 描述 公式
    tf.pow(x, y) 对x求y的幂次方 \(x^y\)
    tf.square(x) 对x逐元素求平方 \(x^2\)
    tf.sqrt(x) 对x逐元素求开平方 \(\sqrt{x}\)
    tf.exp(x) 计算e的x次方 \(e^x\)
    tf.math.log(x) 计算x的自然对数(底数为e) \(\log_{e}{x}\)
  3. 其他运算

    函数 描述
    tf.sign(x) 返回x的符号
    tf.abs() 对x逐元素求绝对值
    tf.negative(x) 对x逐元素求相反数
    tf.reciprocal(x) 取x的倒数
    tf.logical_not(x) 对x逐元素求的逻辑非
    tf.ceil(x) 向上取整
    tf.floor(x) 向下取整
    tf.rint(x) 取最接近的整数
    tf.round(x) 对x逐元素求舍入最接近的整数
    tf.maximum(x, y) 返回两个向量中的最大值
    tf.minimum(x, y) 返回两个向量中的最小值
  4. 三角函数和反三角函数运算

    函数 描述
    tf.cos(x) 三角函数cos
    tf.sin(x) 三角函数sin
    tf.tan(x) 三角函数tan
    tf.acos(x) 反三角函数arccos
    tf.asin(x) 反三角函数arcsin
    tf.atan(x) 反三角函数arctan
  5. 重载运算

    运算符 构造方法 运算符 构造方法
    x+y tf.add(x, y) x&y tf.logical_and(x, y)
    x-y tf.subtract(x, y) x|y tf.logical_or(x, y)
    x*y tf.multiply(x, y) x^y tf.logical_xor(x, y)
    x/y(python2.0) tf.divide(x, y) ~x tf.logical_not(x)
    x/y(python3.0) tf.truediv(x, y) x<y tf.less(x, y)
    x//y(python3.0) tf.floordiv(x, y) x<=y tf.less_equal(x, y)
    x%y tf.math.mod(x, y) x>y tf.greater(x, y)
    x**y tf.pow(x, y) x>=y tf.greater_equal(x, y)
    -x tf.neg(x)
    abs(x) tf.abs(x)
  6. 广播机制

    1. 一维张量+二维张量

      两个张量最后一个维度的长度必须相等。

    2. 一维张量+三维张量

      最有一个维度的长度相等。

    3. 数字+N维张量:

      桑张量和一个数字进行运算时,会将这个数字值广播到张量的各个元素。

  7. 张量和Numpy数组

    1. Numpy数组转化为张量:tf.constant(); tf.convert_to_tensor()

    2. 张量转化为Numpy数组:Tensor.numpy()

    3. 当张量和Numpy数组共同参与运算时:

      1. 执行TensorFlow操作,TensorFlow将自动的把Numpy数组转换为张量;
      2. 执行Numpy操作,Numpy将自动的把张量转换为Numpy数组。
    4. 使用运算符操作:

      只要操作数中有一个Tensor张量对象,就把所有的操作数都转化为张量,然后再进行运算。

  8. 张量乘法:

    1. 元素乘法:

      tf.multiply(),*运算符。

    2. 向量乘法:

      tf.matmul(),@运算符。

    3. 多维张量乘法:

      1. 三维张量x二维张量
        • 最后两维作向量乘法
        • 高维采用广播机制
      2. 三维张量x三维张量
        • 最后两维作向量乘法
        • 高维采用广播机制
  9. 数据统计:

    求张量在某个维度上、或者全部的统计值

    函数 描述
    tf.reduce_sum(input_tensor, axis) 求和
    tf.reduce_mean(input_tensor, axis) 求平均值
    tf.reduce_max(input_tensor, axis) 求最大值
    tf.reduce_min(input_tensor, axis) 求最小值
    tf.argmax(input_tensor, axis) 求最大值的索引
    tf.argmin(input_tensor, axis) 求最小值的索引

待更新...


posted @ 2021-03-12 19:01  風之子  阅读(470)  评论(0编辑  收藏  举报