【TensorFlow2.0】(2) 创建tensor的方法

各位同学好,今天和大家分享一下TensorFlow2.0中的tensor变量的创建方法。内容有:

(1) 通过numpy和list创建tensor;(2) 创建全部为某个值的tensor;(3) 随机化创建:正态分布、均匀分布;(4) 重新洗牌;(5) tf.constant()

那我们开始吧。


1. 通过numpy和list创建tensor

方法: tf.convert_to_tensor(value, dtype=None)

np.ones([2,3]) 使用numpy创建2行3列全为1的数组,将该数组全部变成tensor类型,指定数据类型维tf.float32

import tensorflow as tf
import numpy as np
#(1)通过numpy和list创建tensor
# 将2行3列全为1的numpy类型数据转换成tensor类型,原数据类型为float32
tf.convert_to_tensor(np.ones([2,3]),dtype=tf.float32)

# 将2行3列全为0的numpy类型数据转换成tensor类型,类型为float64
tf.convert_to_tensor(np.zeros([2,3]))

创建一个一维列表[2,3],和一个二维列表[[2],[2.]],转换成tensor类型

注意:此处的convert_to_tensor([2,3]) 括号内代表data一维数组[2,3],一定要和下面第2、3节的方法区分开

# 将1维列表变成tensor类型,int32
tf.convert_to_tensor([2,3])  #得到1维长度为2的tensor
# 将2维列表变成tensor类型,float32
tf.convert_to_tensor([[2],[2.]])


2. 创建全为某种值的tensor

2.1 创建全为0的tensor

方法: tf.zeros([shape])

注意:这里的 tf.zeros([ ])括号里填的是形状shape;而上一节中的列表转tensor括号里面是一维数组。

# ==1== 初始化为0的tensor
tf.zeros([])  # 只有一个数字0  
# ==2== 创建一个1维的,长度为2,元素全为0的tensor
tf.zeros([2])  # 一维,长度维2,全0
# ==3== 创建m行n列全为0的tensor
tf.zeros([2,3]) # 2行3列,全0
# ==4== 创建三维tensor,全为0的tensor
tf.zeros([2,3,4]) 

根据输入的tensor变量的shape来创建一个全为0的tensor

方法: tf.zeros_like(tensor变量)

等同于: tf.zeros(tensor变量.shape)

a = tf.zeros([2,3])  #a的shape是2行3列
# 法一:
tf.zeros_like(a)     #创建一个2行3列全0的tensor
# 法二:
tf.zeros(a.shape)  


2.2 创建全为1的tensor

方法: tf.ones([shape])

# 创建只有数字1的tensor
tf.ones([])   
# 创建一个1维的,长度维2,只有数字1的tensor
tf.ones(2)    
# 创建一个1维的长度为2的全为1的tensor
tf.ones([2])  
#创建2行3列全为1的tensor
tf.ones([2,3]) 

根据输入的tensor变量的shape来创建一个全为1的tensor

方法: tf.ones_like(tensor变量)

等同于: tf.ones(tensor变量.shape)

# 根据返回对象的shape创建全为1的tensor
a = tf.ones([1,3])  #2维全0的tensor
tf.ones_like(a)
tf.ones_like(a.shape)


2.3 全为某元素的tensor

方法: tf.fill([shape], 元素)

用某个元素填充指定形状

# 这个tensor标量,只有一个值1.2
tf.fill([],1.2) 
# 创建1维长度为3的tensor向量,以1.2填充
tf.fill([3],1.2)  
# 创建2维的2行2列的tensor矩阵,以1.2填充
tf.fill([2,2],1.2)  


3. 随机化初始

3.1 正态分布初始

方法: tf.random.normal(shape, mean=0, stddev=1, dtype=None, seed=None)

shape 张量的形状shape,必选

mean 正态分布的均值,默认为0

stddev 正态分布的标准差,默认为1.0

dtype 输出的类型,默认为tf.float32

seed随机数种子,是一个整数1,2,当设置之后,每次生成的随机数都一样

# 创建一个2行2列的tensor,每个元素满足均值为1,标准差为1的正态分布
tf.random.normal([2,2],mean=1,stddev=1)


3.2 截断正态分布初始

方法: tf.random.truncated_normal()

在原来分布的基础上,截去某一部分元素,限制变量x的取值范围。后续可以优化sigmoid函数。

正态分布则可视为不进行任何截断的截断正态分布,也即自变量的取值为负无穷到正无穷。

# 创建一个2行2列的tensor,每个元素满足均值为0,标准差为1的截断正态分布
tf.random.truncated_normal([2,2],mean=0,stddev=1)


3.3 均匀分布

方法: tf.random.uniform(shape, minval, maxval, dtype=None, seed=None)

shape: 输出张量的形状。

minval: 生成的随机值范围的下限。默认为0。

maxval: 要生成的随机值范围的上限。若dtype是浮点类型,默认是1。

dtype: 输出的类型,默认 tf.float32

seed:  整数,当设置之后,每次生成的随机数都一样。

tensor中每个元素的范围在最小值和最大值之间,包含最小值,不包含最大值

# 每个元素都是[0,1)之间随机采样,生成2行2列的tensor
tf.random.uniform([2,2]) 
# 每个元素都是从1,10之间随机采用,整型
tf.random.uniform([2,2],minval=1,maxval=10,dtype=tf.int32)


4. 重新洗牌

对一组数据随机重新排序,可用于打散有相对关系的两组数据

方法: tf.random.shuffle(value,seed=None)

idx = tf.range(10)  #一维tensor,包含0-9的10个数
tf.random.shuffle(idx)  #对a重新洗牌


5. tf.constant() 方法

将输入的标量、列表、矩阵变成指定数据类型的tensor

方法: tf.constant(value, dtype=None, shape=None, verify_shape=False)

value 数值、列表、矩阵

dtype 指定数据类型

shape形状,指维数以及每一维的大小。当value是数字时,张量的所有元素都会用该数字填充。当value是一个列表时,注意列表的长度必须小于等于shape的大小(即各维大小的乘积)

verify_shape如果修改为True的话,表示检查value的形状与shape是否相符,符合就输出结果,如果不符会报错。

#传入一个标量,2行2列全为1
tf.constant(1,shape=[2,2]) 
 #传入一个列表,指定数据类型
tf.constant([1,2.],dtype=tf.float32) 
#传入一个矩阵,判断这个矩阵是否是2行2列
tf.constant([[1.1,2.2],[3.3,4.4]],shape=[2,2])  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立Sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值