人工智能-机器学习-深度学习-深度学习框架TensorFlow之Tensor

基本概念

TensorFlow 中的 Tensor 表示张量,是多维数组、多维列表,用阶表示张量的维数。 0 阶张量叫做标量,表示的是一个单独的数,如 123; 1 阶张量叫作向量,表示的是一个一维数组如[1,2,3]; 2 阶张量叫作矩阵,表示的是一个二维数组,它可以有 i 行 j 列个元素,每个元素用它的行号和列号共同索引到,如在[[1,2,3],[4,5,6],[7,8,9]]中, 2 的索引即为第 0 行第 1 列。张量的阶数与方括号的数量相同, 0 个方括号即为 0 阶张量, 1 个方括号即为 1 阶张量。故张量可以表示0 阶到 n 阶的数组。

在这里插入图片描述
也可以通过 reshape 的方式得到更高维度数组,举例如下:

import  tensorflow as tf
import  numpy as np
c = np.arange(24).reshape(2,4,3)
print(c)

在这里插入图片描述
张量元素的数据类型
在这里插入图片描述
创建张量

创建Tensor对象,张量由Tensor类实现,每个张量都是一个Tensor对象
tf.constant()函数:创建张量
tf.constant(value, dtype, shape)
1.value:(张量内容)数字/Python列表/NumPy数组
2.dtype: 元素的数据类型(可选)
3.shape: 张量的形状

创建张量有若干种不同的方法:
(1)参数为Python列表,不指定数据类型

import  tensorflow as tf
a=tf.constant([[1,2],[3,4],[4,6]])
print(a)

在这里插入图片描述
会输出张量内容、形状与数据类型。创建了一个二维张量(因为shape的括号里面有两个数字,数量表示维度数,比如(3,)表示一维,(3,2)表示二维,(3,2,1)表示三维),上面的列子中第一个维度有三个元素,第二个维度有两个元素,并且数据类型默认为int32

(2)参数为Python列表,指定数据类型

a=tf.constant([[1,2],[3,4],[4,6]],dtype=tf.int64)
print(a)

在这里插入图片描述
此时dtype变成了我们指定的int64,其余都一样。
注:去掉 dtype 项,不同电脑环境不同导致默认值不同,可能导致后续程序 bug,所以我建议创建张量的时候,最好带上数据类型,以免造成不必要的麻烦。

(3)参数为数字

a=tf.constant(1.0)

在这里插入图片描述
(4)参数为字符串

a=tf.constant("Hello,World")

在这里插入图片描述
(5)参数为bool类型

a=tf.constant(True)

在这里插入图片描述
bool值可以放入数组中,再传给创建张量函数

a=tf.constant([True,False])

在这里插入图片描述

(6)参数为NumPy数组

此时可以通过如下函数将 numpy 格式化为 Tensor 格式: tf. convert_to_tensor(数据名, dtype=数据类型(可选))

a = np.arange(0, 5)
b = tf.convert_to_tensor( a, dtype=tf.int64 )
print(a)
print(b)

在这里插入图片描述
可见,将 numpy 格式的 a 转换成了 Tensor 格式的 b。

(7)其它创建张量的方法
7-1. tf. zeros(维度)创建全为 0 的张量

a = tf.zeros([2, 3])

在这里插入图片描述
创建了一个二维张量,第一个维度有两个元素,第二个维度有三个元素,元素的内容全是 0

7-2. tf.ones(维度)创建全为 1 的张量

a=tf.ones(4)

在这里插入图片描述
创建了一个一维张量,里边有 4 个元素,内容全是 1

7-3. tf. fill(维度,指定值)创建全为指定值的张量

tf.fill([2, 2], 9)

在这里插入图片描述
创建了一个两行两列的二维张量,第一个维度有两个元素,第二个维度也有两个元素,内容都是 9。

(8)创建随机数张量——正态分布

8-1.tf. random.normal (维度,mean=均值, stddev=标准差),生成正态分布的随机数,默认均值为 0,标准差为 1,即属于标准正太分布;
tf.random_normal()函数用于从“服从指定正态分布的序列”中随机取出指定个数的值。
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
(1).shape: 输出张量的形状,必选
(2).mean: 正态分布的均值,默认为0
(3).stddev: 正态分布的标准差,默认为1.0
(4).dtype: 输出的类型,默认为tf.float32
(5).seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样(当在代码中使用了随机数,但是希望代码在不同时间或者不同的机器上运行能够得到相同的随机数,以至于能够得到相同的结果,那么就需要到设置随机函数的seed 参数,对应的变量可以跨session生成 相同的随机数,也可以使用tf.random.set_seed(116)设置)
(6).name: 操作的名称

创建了一个2×2的张量,其元素服从标准正态分布

a = tf.random.normal ([2, 2], mean=0, stddev=1)
print(a)

在这里插入图片描述
创建一个三维张量,其元素服从正态分布

a = tf.random.normal ([3, 3,3], mean=0.0, stddev=2.0)

在这里插入图片描述

8-2.创建随机数张量——截断正态分布
tf. random.truncated_normal (维度或形状, mean=均值, stddev=标准差)生成截断式正态分布的随机数,能使生成的这些随机数更集中一些,如果随机生成数据的取值在(µ - 2σ, u + 2σ ) 之外则重新进行生成,保证了生成值在均值附近

a.返回一个截断的正态分布
b.截断的标准是2倍的标准差
例如,当均值为0,标准差为1时,
使用tf.truncated_normal(),不可能出现区间[-2,2]以外的点
使用tf.random_normal(),可能出现[-2,2]以外的点

创建随机数张量——截断正态分布

a=tf.random.truncated_normal([2, 2], mean=0.5, stddev=1)

在这里插入图片描述

a=tf.random.truncated_normal([3,3, 3], mean=0.0, stddev=2.0)

在这里插入图片描述

8-3.创建均匀分布张量
tf.random. uniform(维度, minval=最小值, maxval=最大值),生成指定维度的均匀分布随机数,用 minval 给定随机数的最小值,用 maxval 给定随机数的最大值,最小、最大值是前闭后开区间

a=tf.random.uniform([2, 2], minval=0, maxval=1)

在这里插入图片描述

(9)改变张量中元素的数据类型
利用 tf.cast (张量名, dtype=数据类型)强制将 Tensor 转换为该数据类型;
利用tf.reduce_min (张量名)计算张量维度上元素的最小值;利用tf.reduce_max (张量名)计算张量维度上元素的最大值

x1 = tf.constant([1., 2., 3.], dtype=tf.float64)
print(x1)
x2 = tf.cast(x1, tf.int32)
print(x2)
print(tf.reduce_min(x2), tf.reduce_max(x2))

在这里插入图片描述
(10)tf.reduce_mean (张量名, axis=操作轴)计算张量沿着指定维度的平均值,如不
指定 axis,则表示对所有元素进行操作

在这里插入图片描述
由上图可知对于一个二维张量,如果 axis=0 表示纵向操作(沿经度方向) , axis=1
表示横向操作(沿纬度方向)

x=tf.constant([[1,2,3],[2, 2, 3]])
print(x)
print(tf.reduce_mean(x))

在这里插入图片描述
可见是对所有元素求均值

(11).f.reduce_sum (张量名, axis=操作轴)计算张量沿着指定维度的和,如不指定 axis,则表示对所有元素进行操作

x=tf.constant([[1,2,3],[2, 2, 3]])
print(x)
print(tf.reduce_sum( x, axis=1 ))

在这里插入图片描述
(12).tf.Variable(initial_value,trainable,validate_shape,name)函数
可以将变量标记为“可训练”的,被它标记了的变量,会在反向传播中记录自己的梯度信息。其中 initial_value 默认为 None,可以搭配 tensorflow 随机生成函数来初始化参数; trainable 默认为 True,表示可以后期被算法优化的,如果不想该变量被优化,即改为 False; validate_shape 默认为 True,形状不接受更改,如果需要更改, validate_shape=False; name 默认为 None,给变量确定名称。举例如下:
w = tf.Variable(tf.random.normal([2, 2], mean=0, stddev=1)),表示首先随机生成正态分布随机数,再给生成的随机数标记为可训练,这样在反向传播中就可以通过梯度下降更新参数 w了。

(13).创建元素取值为整数序列的张量

print(tf.range(10))

在这里插入图片描述
(14)随机打乱——tf.random.shuffle()函数
在机器学习中,为了防止过拟合,经常会对数据进行随机打乱。

tf.random_shuffle(
    value,
    seed=None,
    name=None
)

随机地将张量沿其第一维度打乱.
张量沿着维度0被重新打乱,使得每个 value[j] 被映射到唯一一个 output[i].例如,一个 3x2 张量可能出现的映射是:

参数:
value:将被打乱的张量,可以是张量,Python列表,NumPy数组
seed:一个 Python 整数.用于为分布创建一个随机种子.查看 tf.set_random_seed 行为.
name:操作的名称(可选).

返回:
与 value 具有相同的形状和类型的张量,沿着它的第一个维度打乱.

a=tf.constant([[1,2],[3,4],[5,6]])

在这里插入图片描述
(15).Tensor对象的属性——ndim、shape、dtype
在这里插入图片描述
(16).获得Tensor对象的形状、元素总数和维度
在这里插入图片描述
张量和NumPy数组
a.在TensorFlow中,所有的运算都是在张量之间进行的NumPy数组仅仅是作为输入和输出来使用
b.张量可以运行于CPU,也可以运行于GPU和TPU而NumPy数组只能够在CPU中运行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值