PyTorch实战:Tensor转换与数据预处理——从numpy到归一化、resize

from torchvision import transforms
tensor = transforms.Tensor() #初始化对象
#img_or_np为“PIL Image”或者"numpy.",即你要转化的对象
data = tensor(img_or_np) 
trans_resize = transforms.Resize(512,512)
data = trans_resize(data)
#下面将数据data归一化,计算方法为:image=(image-mean)/std
'''
其中mean和std分别通过(0.5,0.5,0.5)和(0.5,0.5,0.5)进行指定。
原来的0-1最小值0则变成(0-0.5)/0.5=-1,而最大值1则变成(1-0.5)/0.5=1.
'''
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_normal = trans_norm(data)


### 实现张量归一化的方法 #### 使用 PyTorch 的内置函数进行张量归一化 PyTorch 提供了多种方式来执行张量归一化,其中最常用的是 `torch.nn.BatchNorm2d` 和其他变体用于不同维度的输入。这些模块自动处理前向传播和反向传播中的均值和方差计算。 对于简单的 L2 归一化,可以使用如下代码: ```python import torch from torch import nn def l2_normalize(tensor, dim=0): norm = tensor.norm(p=2, dim=dim, keepdim=True) normalized_tensor = tensor.div(norm.expand_as(tensor)) return normalized_tensor ``` 这段代码定义了一个名为 `l2_normalize` 的函数,它接受一个张量作为参数并返回该张量沿指定维度按L2范数归一化的版本[^1]。 #### 批量归一化 (Batch Normalization) 批量归一化是通过标准化每一批次的小批数据来减少内部协变量偏移的一种技术。这有助于加快收敛速度,并允许更高的学习率设置。在 PyTorch 中可以通过调用 `nn.BatchNorm2d(num_features)` 来创建一个新的 BatchNorm 层实例,这里的 `num_features` 表示特征图的数量或通道数量。 ```python batch_norm_layer = nn.BatchNorm2d(num_features=64) # 假设有64个输出通道 output = batch_norm_layer(input_tensor) # input_tensor 应为形状 [N,C,H,W] ``` 此代码片段展示了如何初始化一个带有特定数目特征的地图的批量归一层以及如何将其应用于给定的输入张量。 #### 同步批量归一化 (SyncBatchNorm) 当涉及到分布式训练或多 GPU 训练时,为了保持各设备间的一致性,推荐使用同步批量归一化 (`nn.SyncBatchNorm`)。这种方式可以在多个 GPU 上共享统计信息,从而提高模型性能。 ```python sync_batch_norm_layer = nn.SyncBatchNorm.convert_sync_batchnorm(batch_norm_layer).cuda() distributed_output = sync_batch_norm_layer(distributed_input_tensor) ``` 这里先将现有的批量归一层转换成同步版,再迁移到 CUDA 设备上运行[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值