张量相关知识
简介
张量(Tensor):多维数组(列表)
阶:张量的维数
张量可以表示0阶到n阶数组(列表)如图:
0阶张量叫做标量 表示的是一个单独的数 如123。Tensorflow中的Tensor就是张量,是多维数组(列表)。阶表示张量的维数。
1阶张量叫做向量 表示的是一个一维数组 比如列表[1,2,3]
2阶张量叫做矩阵 表示二维数组 可以有i行j列个元素 每个元素可用行号列号索引找到 如矩阵m
判断张量是几阶的就看有几个[] 可以有n阶
张量可以表示0阶到n阶的数组
Tensorflow的数据类型
Tensorf low的数据类型有32位整型,32位浮点、64位浮点,布尔型 字符串型等等
如何创建一个Tensor(张量)
constant()
tf.constant(张量内容,dtype=数据类型(可选))
我们可以使用constant()创建一个张量
第一个参数指定这个张量的内容
第二个参数指定这个张量的数据类型
举例:
import tensorflow as tf a=tf.constant([1,5],dtype=tf.int64) print(a) print(a.dtype) print(a.shape) 运行结果: <tf.Tensor([1,5], shape=(2 , ) , dtype=int64) <dtype: 'int64'> (2,)
这个例子是创建一个一阶张量 里面有两个元素 指定数据类型是64为整型赋值给a
打印出a 打印出a的数据类型 打印出a的形状
运行结果:
直接打印a会输出张量的所有信息
包括张量的内容、 张量的形状和张量的数据类型
张量的形状看shape的逗号隔开了几个数字 逗号隔开了几个数字 这个张量就是几维的
在这个例子中隔开了一个数字 说明是以为张量 这个数字是2说明张量里有两个元素
也就是这里的数值1 和 5
将numpy的数据类型转换为Tensor数据类型
tf. convert_to_tensor(数据名,dtype=数据类型((可选))
很多时候数据是由numpy格式给出
我们可以使用convert to tensor ()把它变成Tensor格式
b = tf.convert_to_tensor( a, dtype=tf.int64 )
这条语句就把numpy格式a变成了Tensor格式b
举例:
import tensorflow as tf import numpy as np a = np.arange(0,5) b = tf.convert_to_tensor(a,dtype=tf.int64) print(a) print(b) 运行结果: [0 1 2 3 4] tf.Tensor([0 1 2 3 4], shape=( 5 , ), dtype=int64)
创建特殊张量
创建全为0的张量tf. zeros(维度)
创建全为1的张量tf. ones(维度)
创建全为指定值的张量tf. fill(维度,指定值)指定值)
同样我们可以用zeros ()创建全为0的张量
如:tf. zeros([2, 3])创建了一个二维张量
一维:直接写数字
二维:【行列】
多维度:方括号里写每个维度的元素个数 中间用逗号隔开
举例:
a = tf.zeros([2, 3]) b = tf.ones(4) c = tf.fill([2, 2], 9) print(a) print(b) print(c) 运行结果: tf.Tensor([[0. 0. 0.] [0. 0. 0.]], shape=(2, 3), dtype=float32) tf.Tensor([1. 1. 1. 1.], shape=(4, ), dtype=float32) tf.Tensor([[9 9] [9 9]], shape=(2, 2), dtype=int32)
如上代码:创建了一个 两行三列 的 全0 的 二维张量a
创建了一个 一行四列 的 全1 的 一维张量b
创建了一个 二行二列 的 全9 的 一维张量b
创建符合正态分布的张量
生成正态分布的随机数,默认均值为0,标准差为1
在编写代码时:我们常常随机生成初始化参数 要符合正态分布
可用函数 random.normal 生成指定维度的符合正太分部的张量
tf. random.normal (维度,mean=均值,stddev=标准差)
集中
有时候我们希望生成的随机数更集中一些
所以可以使用 random. truncated_normal () 函数
tf. random.truncated_normal (维度,mean=均值,stddev=标准差)
在tf.truncated_normal中如果随机生成数据的取值在(μ-2σ,μ+2σ)之外 则重新进行生成,保证了生成值在均值附近。
这个函数可以保证生成的随机数在u士2σ(均值正负两倍标准差)之内
举例:
d = tf.random.normal ([2, 2], mean=0.5, stddev=1) print(d) e = tf.random.truncated_normal ([2, 2], mean=0.5, stddev=1) print(e) 运行结果: tf.Tensor( [[0.7925745 0.643315 ] [1.4752257 0.2533372]], shape=(2, 2), dtype=float32) tf.Tensor( [[ 1.3688478 1.0125661 ] [ 0.17475659 -0.02224463]], shape=(2, 2), dtype=float32) 元素都在两倍标准差之内,数据更向均值0.5集中
比如random. normal ()生成两行两列的张量
里面的元素符合以0.5为均值1为标准差的分布
用random. Truncated_mormal ()生成两行两列的张量
里面的元素符合以0.5为均值 1为标准差的随机数
(数据会更向0.5集中) 生成的随机数在u士2σ(均值正负两倍标准差)之内
创建均匀分布的张量
生成均匀分布随机数 ( minval, maxval )
tf. random. uniform(维度,minval=最小值,maxval=最大值)
可以用random. uni form生成指定维度的均匀分布随机数
用minvalue给定随机数的最小值
用maxvalue给定随机数的最大值 注意:前闭后开区间
如这个例子就生成了两行两列的张量
其中的每个元素都符合在0和1之间的平均分布
举例:
f = tf.random.uniform([2, 2], minval=0, maxval=1) print(f) 运行结果: tf.Tensor( [[0.28219545 0.15581512] [0.77972126 0.47817433]], shape=(2, 2), dtype=float32)