TensorFlow2.0
1 使用技巧
-
更新到最新版本:
pip install --upgrade tensorflow pip install --upgrade tensorflow-gpu
-
导入TensorFlow模块:
import tensorflow as tf
-
查看版本号:
print('TensorFlow版本号为:', tf.__version__)
-
查看是否支持GPU运算:
rint('GPU是否可用:', tf.test.is_gpu_available()) print('GPU设备名称:', tf.test.gpu_device_name())
-
查看模式:
print('是否为动态模式(EagerExecution):', tf.executing_eagerly())
-
在TensorFlow2.0环境中,运行TensorFlow1.x版本:
import tensorflow.compat.v1 as tf tf.disable_v2_behavior()
2 TensFlow基础
1 创建张量
-
创建张量Tensor对象:
tf.constant(value, dtype, shape)
- value:数字、Python列表、Numpy数组
- dtype:元素的数据类型
- shape:张量的形状
tf.convert_to_tensor(数组/列表/数字/布尔型/字符串)
-
判断数据对象是否为张量:
tf.is_tensor(x)
- x:数据对象
-
Python验证数据对象是否为张量:
isinstance(x)
- x:数据对象
-
张量转换为Numpy数组:
x.numpy()
- x:TensorFlow的张量
-
张量元素的数据类型:
数据类型 描述 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位浮点型 -
更改元素的数据类型:
tf.cast(x, dtype)
- x:TensorFlow的张量
- dtype:目标类型
注:
- 在进行数据类型转换时,一般是将低精度的数据类型向高精度转换,否则可能发生数据溢出,得到错误的结果。
- 布尔型转为整型,0:False, 1:True;
- 整型变量转换为布尔型,将非0数字都视为True。
2 维度变换改变张量的形状:
-
改变张量的形状:
tf.reshape(tensor, shape)
- tensor:原始张量
- shape:目标张量的形状
注:shape参数等于-1时,自动推导出长度。
-
增加张量的维度:
tf.expand(input, axis)
- input:输入的张量
- axis:增加的轴位置
-
删除张量维度
tf.squeeze(input, axis)
注:只能删除长度为1的维度
-
交换张量的维度:
tf.transpose(x, perm)
- x:原始张量
- perm:各个轴的顺序
-
拼接张量:
tf.concat(tensors, axis)
- tensors:列表,包含所有需要拼接的张量
- axis:制定在哪个轴上拼接
-
分割张量
tf.spllt(value, num_or_size_splits, axis=0)
- value:待分割的张量
- num_or_size_splits:分割的方案
- axis:指定按照哪个轴进行分割
注:图像的分割与拼接,改变的是张量的视图,张量的存储顺序并没有改变。
-
张量的堆叠
tf.stack(values, axis)
- values:要堆叠的多个张量
- axis:指定插入新维度的位置
-
张量分解
tf.unstack(values, axis)
- values:要分解的张量
- axis:指定要分解的轴
3 部分采样
-
索引
x[:][:]
-
切片
x[起始位置:结束位置:步长]
注:
- 起始位置:结束位置,是前闭后开的 ,切片中不包含结束位置。
- 起始位置、结束位置、步长都可以省略。
- 步长可以是负数,这时起始位置的索引号,应该大于结束位置。
- 纬度之间用逗号隔开。
-
数据提取
根据索引,抽取没有规律的、特定的数据。
tf.gather(params, axis, indices)
- params:原始张量
- axis:说明在哪个轴上采样
- indices:索引值列表
同时采样多个点:
tf.gather_nd(params, indices)
- params:原始张量
- indices:采样点的位置
4 张量运算
-
基本数学运算
算术操作 描述 公式 tf.add(x, y) 将x和y逐元素相加 (x+y) tf.subract(c, y) 将x和y逐元素相减 (x-y) tf.multiply(x, y) 将x和y逐元素相乘 (x imes y) tf.divide(x, y) 将x和y逐元素相除 (frac{x}{y}) tf.math.mod(x, y) 对x和y逐元素取模 (sqrt{x^2+y^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}) -
其他运算
函数 描述 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) 返回两个向量中的最小值 -
三角函数和反三角函数运算
函数 描述 tf.cos(x) 三角函数cos tf.sin(x) 三角函数sin tf.tan(x) 三角函数tan tf.acos(x) 反三角函数arccos tf.asin(x) 反三角函数arcsin tf.atan(x) 反三角函数arctan -
重载运算
运算符 构造方法 运算符 构造方法 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) -
广播机制
-
一维张量+二维张量
两个张量最后一个维度的长度必须相等。
-
一维张量+三维张量
最有一个维度的长度相等。
-
数字+N维张量:
桑张量和一个数字进行运算时,会将这个数字值广播到张量的各个元素。
-
-
张量和Numpy数组
-
Numpy数组转化为张量:
tf.constant(); tf.convert_to_tensor()
-
张量转化为Numpy数组:
Tensor.numpy()
-
当张量和Numpy数组共同参与运算时:
- 执行TensorFlow操作,TensorFlow将自动的把Numpy数组转换为张量;
- 执行Numpy操作,Numpy将自动的把张量转换为Numpy数组。
-
使用运算符操作:
只要操作数中有一个Tensor张量对象,就把所有的操作数都转化为张量,然后再进行运算。
-
-
张量乘法:
-
元素乘法:
tf.multiply()
,*运算符。 -
向量乘法:
tf.matmul()
,@运算符。 -
多维张量乘法:
- 三维张量x二维张量
- 最后两维作向量乘法
- 高维采用广播机制
- 三维张量x三维张量
- 最后两维作向量乘法
- 高维采用广播机制
- 三维张量x二维张量
-
-
数据统计:
求张量在某个维度上、或者全部的统计值
函数 描述 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) 求最小值的索引
待更新...