深度学习_TensorFlow2.0基础_张量创建,运算,维度变换,采样

Tensorflow2.0 基础

一:TensorFlow特性

1.TensorFlow

An end-to-end open source machine learning platform

  • end-to-end:端到端
  • open source:开放源代码,开放设计和实现框架
  • TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems. Wide & Deep Learning for Recommender Systems. The YouTube Video Recommendation System
  • machine learning:机器学习生态系统

TensorFlow1.x ——延迟执行机制(deferred execution)/静态图机制

  • 代码运行效率高,便于优化
  • 程序不够简洁
  • 重复、冗余的API
  • 构建神经网络:tf.slim,tf.layers,tf.contrib.layers,tf.keras混乱,不利于程序共享,维护的成本高

TensorFlow2.0 ——动态图机制(Eager Execution)

  • 无需首先创建静态图,可以立刻执行计算,并返回结果
  • 能够快速的建立和调试模型
  • 执行效率不高
  • 清理、整合了重复的API,将tf.keras作为构建和训练模型的标准高级API

TensorFlow2.0 兼顾易用性和执行效率

  • 在程序调试阶段使用动态图,快速建立模型、调试程序;
  • 在部署阶段,采用静态图机制,从而提高模型的性能和部署能力
2.TensorFlow2.0架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-daZ1UqYE-1597245690388)(attachment:image.png)]
TensorFlow框架特性

  • 多种环境支持
  • 可运行于移动设备、个人计算机、服务器、集群等云端、本地、浏览器、移动设备、嵌入式设备
  • 支持分布式模式
  • TensorFlow会自动检测GPU和CPU,并充分利用它们并行、分布的执行
  • 简洁高效
  • 构建、训练、迭代模型:Eager Execution,Keras ,部署阶段:转化为静态图,提高执行效率。
  • 社区支持

二:创建张量

1.更新版本

查看版本号:

import tensorflow as tf
print("tensorflow version:",tf.__version__)
tensorflow version: 2.0.0-beta0

更新到最新版本,在jupyter notebook中运行cmd命令

# !pip install --upgrade tensorflow

在TensorFlow2.0的环境中,运行TensorFlow1.x代码,常常会出现错误提示

在TensorFlow2.0的环境中,运行TensorFlow1.x,需要执行以下操作

import tensorflow.compat.v1 as tf

tf.disable_v2_behavior()

2.Python列表&Numpy数组#TensorFlow张量

Python列表(list):

  • 元素可以使用不同的数据类型,可以嵌套
  • 在内存中不是连续存放的,是一个动态的指针数组
  • 读写效率低,占用内存空间大
  • 不适合做数值计算

NumPy数组 (ndarray) :

  • 元素数据类型相同
  • 每个元素在内存中占用的空间相同,存储在一个连续的内存区域中
  • 存储空间小,读取和写入速度快
  • 不能够主动检测利用GPU进行运算

TensorFlow张量 (Tensor) :

  • 可以高速运行于GPU和TPU之上,实现神经网络和深度学习中的复杂算法
3.创建Tensor对象

张量由Tensor类实现,每个张量都是一个Tensor对象

tf.constant()函数:创建张量

tf.constant(value, dtype, shape)

  • value:数字/Python列表/NumPy数组

  • dtype: 元素的数据类型

  • shape: 张量的形状

  • 参数为Python列表

tf.constant([[1,2],[3,4]])
<tf.Tensor: id=6, shape=(2, 2), dtype=int32, numpy=
array([[1, 2],
       [3, 4]])>
  • TensorFlow2.0中的所有的张量,都可以通过.numpy()方法,得到它对应的数组.

  • TensorFlow创建浮点数张量时,默认是32位浮点数

  • numpy创建浮点数数组时,默认的浮点型是64位浮点数。当使用NumPy数组创建张量时,TensorFlow会接受数组元素的数据类型,使用64位浮点数保存数据。

改变张量中元素的数据类型

tf.cast(x,dtype)

  • 在进行数据类型转换时,一般是将低精度的数据类型向高精度转换,否则可能发生数据溢出,得到错误的结果。
4.创建张量&转换张量
类型函数功能
常量tf.constant(value, dtype, shape)创建张量
常量tf.convert_to_tensor()创建张量
常量tf.zeros(shape, dtype = tf.float32)创建全0张量
常量tf.ones(shape, dtype = tf.float32)创建全1张量
常量tf.fill(shape, value)创建元素值全部相同的张量
随机量tf.random.normal()创建元素取值符合正态分布的张量
随机量tf.random.truncated_normal( shape, mean, stddev, dtype )创建元素取值符合截断正态分布的张量
随机量tf.random.uniform(shape,minval,maxval, dtype)创建元素取值符合均匀分布的张量
序列tf.range(起始数字,结束数字,步长)创建元素取值为整数序列的张量

Tensor对象的属性 ——ndim、shape、dtype

  • 张量名.属性->维度;形状;类型

获得Tensor对象的形状、元素总数和维度

  • tf.shape/size/rank(张量名)

二:维度变换

1.张量的存储和视图

多维张量在物理上以一维的方式连续存储;通过定义维度和形状,在逻辑上把它理解为多维张量

当对多维张量进行维度变换时,只是改变了逻辑上索引的方式,没有改变内存中的存储方式

2.改变张量的形状

tf.reshape (tensor, shape)

  • 没有封装到Tensor对象中,前缀是tf,而不是张量对象
  • shape参数=-1:自动推导出长度
3.多维张量的轴 :张量的维度

张量中的轴的概念和用法,和NumPy数组是完全一样的

轴也可以是负数,表示从后向前索引

4.增加和删除维度

增加维度

  • tf.expand_dims(input,axis)

删除维度

  • tf.squeeze( input, axis=None )
  • 只能删除长度为 1 的维度,省略时删除所有长度为1的维度

增加维度和删除维度,只是改变了张量的视图,不会改变张量的存储

5.交换维度

tf.transpose( a, perm )

  • 对二维张量交换维度,就是矩阵的转置
  • 交换维度,不仅改变了张量的视图,同时也改变了张量的存储顺序
6.拼接和分割

拼接张量tf.concat( tensors, axis )

  • 将多个张量在某个维度上合并
  • 拼接并不会产生新的维度

分割张量tf.split( value, num_or_size_splits, axis=0 )

  • 将一个张量拆分成多个张量,分割后维度不变
  • 是一个数值时,表示等长分割,数值是切割的份数;
  • 是一个列表时,表示不等长切割,列表中是切割后每份的长度
  • 举例:2 :分割成2个张量;[1:2:1]:就表示分割成3个张量,长度分别是1,2,1

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

7.堆叠和分解

堆叠张量tf.stack( values, axis )

  • 在合并张量时,创建一个新的维度
  • 和NumPy中堆叠函数的功能完全一样

分解张量tf.unstack( values, axis )

  • 是张量堆叠的逆运算
  • 张量分解为多个张量
  • 分解后得到的每个张量,和原来的张量相比,维数都少了一维

三:部分采样

1.索引和切片

起始位置:结束位置: 步长

  • 起始位置:结束位置,是前闭后开的,切片中不包含结束位置
  • 起始位置、结束位置、步长都可以省略
  • 步长可以是负数,这时起始位置的索引号,应该大于结束位置
2. 数据提取

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

一维张量采样

gather( params, indices )

  • params输入张量,indices索引值列表
  • 用一个索引列表,将给定张量中对应索引值的元素提取出来

对多维张量采样

gather()、gather_nd()函数

gather( params, axis, indices )

  • gather()函数一次对一个维度进行索引

gather_nd()函数

  • 通过指定坐标,同时采样多个点
  • 可以同时对多个维度进行索引

四:张量运算

1.基本数学运算

加减乘除运算

算术操作描述
tf.add(x, y)将x和y逐元素相加
tf.subtract(x, y)将x和y逐元素相减
tf.multiply(x, y)将x和y逐元素相乘
tf.divide(x, y)将x和y逐元素相除
tf.math.mod(x, y)对x逐元素取模
2.幂指对数运算
算术操作描述
tf.pow(x, y)对x求y的幂次方
tf.square(x)对x逐元素求计算平方
tf.sqrt(x)对x逐元素开平方根
tf.exp(x)计算e的x次方
tf.math.log(x)计算自然对数,底数为e
3.自然指数和自然对数运算
  • TensorFlow中只有以e为底的自然对数,没有提供以其他数值为底的对数运算函数
  • 要计算其他底数的对数,可以利用对数的换底公式,间接的通过 tf.math.log(x)函数来实现。

其他运算

算术操作描述
tf.sign(x)返回x的符号
tf.abs(x)对x逐元素求绝对值
tf.negative(x)对x逐元素求相反数,y = -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)返回两tensor中的最大值
tf.minimum(x, y)返回两tensor中的最小值
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+ytf.add( )x&ytf.logical_and( )
x-ytf.subtract( )x|ytf.logical_or( )
x*ytf.multiply( )x^ytf.logical_xor( )
x/y(python2.0)tf.divide( )~xtf.logical_not()
x/y(python3.0)tf.truediv( )x<ytf.less( )
X//y(python3.0)tf.floordiv( )x<=ytf.less_equal( )
x%ytf.math.mod( )x>ytf.greater( )
x**ytf.pow( )x>=ytf.greater_equal( )
-xtf.neg( )
abs(x)tf.abs()
6.张量乘法
  • 元素乘法 :tf.multiply(), *运算符
  • 向量乘法 :tf.matmul(),@运算符
7.数据统计

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

函 数 |描 述
tf.reduce_sum(input_tensor,axis) |求和
tf.reduce_mean(input_tensor,axis) |求平均值
tf.reduce_max(input_tensor,axis) |求最大值
tf.reduce_min(input_tensor,axis) |求最小值

8.求最大值、最小值函数

tf.max(), tf.min()

五:张量和NumPy 数组之间的相互转换

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

张量转换为NumPy数组 :Tensor.numpy()

当张量和NumPy数组共同参与运算时:

  • 执行TensorFlow操作,TensorFlow将自动的把NumPy数组转换为张量
  • 执行NumPy操作,NumPy将自动的张量转换为NumPy数组

使用运算符操作

  • 只要操作数中有一个Tensor对象,就把所有的操作数都转化为张量,然后再进行运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值