torch.empty()和torch.Tensor.random_()的使用举例

参考链接: torch.empty(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) → Tensor
参考链接: random_(from=0, to=None, *, generator=None) → Tensor

在这里插入图片描述
在这里插入图片描述

函数使用说明:

torch.empty(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False)
根据给定形状和类型,返回一个包含未经初始化数据的张量.

函数使用说明:

random_(from=0, to=None, *, generator=None) → Tensor
用一个离散均匀分布[from, to - 1]来填充当前自身张量.

代码实验展示:

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0

(ssd4pytorch1_2_0) C:\Users\chenxuqi>python
Python 3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> input = torch.empty(2, 3)
>>> input
tensor([[0., 0., 0.],
        [0., 0., 0.]])
>>> input = torch.empty(2, 3)
>>> input
tensor([[0., 0., 0.],
        [0., 0., 0.]])
>>> torch.empty(2, 3)
tensor([[0., 0., 0.],
        [0., 0., 0.]])
>>> torch.empty(2, 3)
tensor([[0.0000e+00, 0.0000e+00, 8.4078e-45],
        [0.0000e+00, 1.4013e-45, 0.0000e+00]])
>>> torch.empty(2, 3)
tensor([[0., 0., 0.],
        [0., 0., 0.]])
>>> torch.empty(2, 3)
tensor([[0.0000e+00, 0.0000e+00, 8.4078e-45],
        [0.0000e+00, 1.4013e-45, 0.0000e+00]])
>>>
>>>
>>>
>>>
>>> torch.manual_seed(seed=20200910)
<torch._C.Generator object at 0x00000211B490D330>
>>>
>>> output = input.random_(0, to=10)
>>> output
tensor([[3., 8., 4.],
        [7., 8., 5.]])
>>> input
tensor([[3., 8., 4.],
        [7., 8., 5.]])
>>>
>>> input.random_(0, to=10)
tensor([[0., 8., 8.],
        [1., 6., 4.]])
>>> input.random_(0, to=10)
tensor([[2., 7., 9.],
        [0., 5., 0.]])
>>> input.random_(0, to=10)
tensor([[9., 9., 2.],
        [0., 4., 2.]])
>>>
>>>
>>>
### 如何在 PyTorch 的 BCEWithLogitsLoss 中设置类别权重 在 PyTorch 中,`BCEWithLogitsLoss` 是一种常用的损失函数,适用于二分类或多标签分类问题。为了应对不同类别的样本不平衡现象,可以通过 `weight` 参数来调整各个类别的权重。 #### 设置类别权重的方法 当实例化 `BCEWithLogitsLoss` 类时,可以传递一个包含各类别权重的一维 Tensor 给其构造器中的 `weight` 参数[^3]。这个一维 Tensor 应该具有与目标相同数量的元素,即对于每一个可能的目标值都有对应的权重。下面给出具体的实现方式: ```python import torch import torch.nn as nn # 假设有两个类别,定义它们各自的权重 weights = torch.tensor([0.7, 0.3]) # 这里只是举例说明,实际应用中应根据具体情况进行设定 # 创建带权的 BCEWithLogitsLoss 实例 criterion = nn.BCEWithLogitsLoss(weight=weights) # 随机生成一些输入目标作为例子 input_tensor = torch.randn(10, 2, requires_grad=True) # 输入大小 (batch_size, num_classes) target_tensor = torch.empty(10, dtype=torch.long).random_(2) # 目标大小 (batch_size),取值范围 {0, ..., C-1} # 计算加权后的损失 loss = criterion(input_tensor, target_tensor.float().unsqueeze(-1)) print(loss.item()) ``` 这段代码创建了一个带有自定义权重的 `BCEWithLogitsLoss` 对象,并利用随机产生的数据进行了测试。注意这里的 `target_tensor` 被转换成了浮点型并增加了维度以匹配预期格式;这是因为原始的目标张量是以整数形式存储类别索引而并非概率分布的形式。 #### 关于权重的选择 选择合适的权重非常重要,通常可以根据训练集中各类型的频率反比分配权重,从而让模型更加关注那些较少见但是重要的事件。如果某个特定类型的数据远少于其他类型,则应该赋予更高的权重以便使模型能够更好地学习到这些稀有模式下的特征。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值