创建元素值为全 0 或全 1 的张量是非常常见的初始化手段,通过 torch.zeros() 和 torch.ones() 函数即可创建任意形状,且元素值全为 0 或全为 1 的张量。
torch.zeros(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False) 和 torch.ones(*size, out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False) 两个函数的参数相同,这里简单介绍一下这些参数:
torch.zeros([2, 2], out = tensor_a)
,相当于执行tensor_a = torch.zeros([2, 2])
;torch.zeros() 和 torch.ones() 两个函数中只有 *size 参数为必须指定的参数,其余参数都是可选参数,因此接下来只关注指定 *size 参数的 torch.zeros(*size) 和 torch.ones(*size)。
In[1]: import torch
# 创建全为0或1的0D张量(标量)
scalar_zero = torch.zeros([])
scalar_one = torch.ones([])
print("张量的维度:{},张量的值:{}".
format(scalar_zero.dim(), scalar_zero))
print("张量的维度:{},张量的值:{}".
format(scalar_one.dim(), scalar_one))
Out[1]: 张量的维度:0,张量的值:0.0
张量的维度:0,张量的值:1.0
In[2]: # 创建全为0或1的1D张量(向量)
vec_zero = torch.zeros([3])
vec_one = torch.ones([3])
print("张量的维度:{},张量的值:{}".
format(vec_zero.dim(), vec_zero))
print("张量的维度:{},张量的值:{}".
format(vec_one.dim(), vec_one))
Out[2]: 张量的维度:1,张量的值:tensor([0., 0., 0.])
张量的维度:1,张量的值:tensor([1., 1., 1.])
In[3]: # 创建全为0或1的2D张量(矩阵)
mat_zero = torch.zeros([2, 2])
mat_one = torch.ones([2, 2])
print("张量的维度:{},张量的值:{}".
format(mat_zero.dim(), mat_zero))
print("张量的维度:{},张量的值:{}".
format(mat_one.dim(), mat_one))
Out[3]: 张量的维度:2,张量的值:tensor([[0., 0.],
[0., 0.]])
张量的维度:2,张量的值:tensor([[1., 1.],
[1., 1.]])
通过 torch.zeros(*size) 和 torch.ones(*size) 函数创建了元素值全为 0 和全为 1 的 0D 张量、1D 张量和 2D 张量,创建 nD 张量与之类似,这里不再赘述。*size 参数指定创建张量的形状,不同维度张量的形状可以参考下表。
比如:
通过 torch.zeros_like(input) 和 torch.ones_like(input) 函数可以方便地创建与 input 张量形状一致,且元素值全为 0 或者 1 的张量,需要注意此时的 input 必须是张量。
In[4]: import torch
scalar_a = torch.tensor(1.)
vec_a = torch.tensor([1., 2., 3.])
mat_a = torch.tensor([[1., 2.], [3., 4.]])
print("张量的形状:{}".format(scalar_a.size()))
print("张量的形状:{}".format(vec_a.size()))
print("张量的形状:{}".format(mat_a.size()))
Out[4]: 张量的形状:torch.Size([])
张量的形状:torch.Size([3])
张量的形状:torch.Size([2, 2])
In[5]: # 创建和张量scalar_a相同形状的全为0或1的张量
scalar_zero = torch.zeros_like(scalar_a)
scalar_one = torch.ones_like(scalar_a)
print("张量的维度:{},张量的值:{}".
format(scalar_zero.dim(), scalar_zero))
print("张量的维度:{},张量的值:{}".
format(scalar_one.dim(), scalar_one))
Out[5]: 张量的维度:0,张量的值:0.0
张量的维度:0,张量的值:1.0
In[6]: # 创建和张量scalar_a相同形状的全为0或1的张量
vec_zero = torch.zeros_like(vec_a)
vec_one = torch.ones_like(vec_a)
print("张量的维度:{},张量的值:{}".
format(vec_zero.dim(), vec_zero))
print("张量的维度:{},张量的值:{}".
format(vec_one.dim(), vec_one))
Out[6]: 张量的维度:1,张量的值:tensor([0., 0., 0.])
张量的维度:1,张量的值:tensor([1., 1., 1.])
In[7]: # 创建和张量scalar_a相同形状的全为0或1的张量
mat_zero = torch.zeros_like(mat_a)
mat_one = torch.ones_like(mat_a)
print("张量的维度:{},张量的值:{}".
format(mat_zero.dim(), mat_zero))
print("张量的维度:{},张量的值:{}".
format(mat_one.dim(), mat_one))
Out[7]: 张量的维度:2,张量的值:tensor([[0., 0.],
[0., 0.]])
张量的维度:2,张量的值:tensor([[1., 1.],
[1., 1.]])
除了将张量的元素值初始化全为 0 或全为 1 的张量依然,有时候也需要全部初始化为某个自定义数值的张量。通过 torch.full(*size, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) 可以创建全为自定义数值 fill_value 的张量,形状由 size 参数指定。
torch.full() 函数中除了 size 和 fill_value 参数外,其余都是可选参数且和 torch.zeros() 和 torch.ones() 两个函数的参数一致,同样不再赘述。
In[8]: import torch
# 创建0D且元素值为5的张量
scalar_a = torch.full([], 5)
# 创建1D且元素值为5的张量
vec_a = torch.full([3], 5)
# 创建2D且元素值为5的张量
mat_a = torch.full([2, 2], 5)
print("张量的维度:{},张量的值:{}".
format(scalar_a.dim(), scalar_a))
print("张量的维度:{},张量的值:{}".
format(vec_a.dim(), vec_a))
print("张量的维度:{},张量的值:{}".
format(mat_a.dim(), mat_a))
Out[8]: 张量的维度:0,张量的值:5.0
张量的维度:1,张量的值:tensor([5., 5., 5.])
张量的维度:2,张量的值:tensor([[5., 5.],
[5., 5.]])
「通过 torch.full_like(input, fill_value) 函数来创建全为自定义数值 fill_value 的张量,形状由参数 input 的形状指定,input 必须是张量。」
本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有