pytorch 对图片进行归一化处理

如题,神经网络通常使用浮点数张量作为输入,我们要做的第一件事情就是将图片转化为浮点数,并且做归一化操作。

import torch
import imageio
import os

data_dir='F:\\work\\deep_learning\\pytorch\\dlwpt-code-master\\data\\p1ch4\\image-cats'
print(data_dir)
file_names=[name for name in os.listdir(data_dir) ] #if os.path.splitext(name)[-1]=='png'

batch_size=3
batch=torch.zeros(batch_size,3,256,256,dtype=torch.uint8)

for i ,file_name in enumerate(file_names):
    img_arr=imageio.imread(os.path.join(data_dir,file_name))
    img_t=torch.from_numpy(img_arr)
    img_t=img_t.permute(2,0,1)

    img_t=img_t[:3]
    batch[i]=img_t
    
#获取通道数量
n_channels=batch.shape[1]

#print(n_channels)#一般为3

#将图片转为float类型
batch=batch.float()

for c in range(n_channels):
    print(batch[:,c].shape)
    #对3张图片所有的c通道求平均值和方差
    mean=torch.mean(batch[:,c])
    std=torch.std(batch[:,c])
    batch[:,c]=(batch[:,c]-mean)/std
    print(mean)
    print(std)

print(batch.shape)

print(batch)


结果如下:

torch.Size([3, 256, 256])
tensor(147.8829)
tensor(56.4011)
torch.Size([3, 256, 256])
tensor(114.5765)
tensor(52.7250)
torch.Size([3, 256, 256])
tensor(90.6373)
tensor(49.2352)

torch.Size([3, 3, 256, 256])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用torchvision.transforms.Normalize()函数对数据进行归一化。 该函数需要传入两个参数:mean和std。mean表示数据的均值,std表示数据的标准差。 示例代码如下: ``` from torchvision import transforms # 定义归一化函数 normalize = transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) # 使用归一化函数对数据进行归一化 data = normalize(data) ``` 在上面代码中,数据的均值设置为0.5,标准差设置为0.5,如果需要更改参数可以将 mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5] 替换为其他参数。 ### 回答2: 下面是一个利用PyTorch对数据进行归一化的函数: ```python import torch def normalize_data(data): """ 对数据进行归一化处理 参数: - data: 待归一化的数据(torch.Tensor) 返回值: 归一化后的数据(torch.Tensor) """ mean = torch.mean(data) # 计算数据的平均值 std = torch.std(data) # 计算数据的标准差 normalized_data = (data - mean) / std # 归一化公式 return normalized_data # 示例 data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]) normalized_data = normalize_data(data) print(normalized_data) ``` 该函数首先使用`torch.mean()`计算数据的平均值,然后使用`torch.std()`计算数据的标准差。然后,根据归一化公式 `(data - mean) / std` 对数据进行归一化处理。最后返回归一化后的数据。可以通过将数据传入`normalize_data()`函数中进行归一化。 在示例中,我们输入了一组数据 `[1.0, 2.0, 3.0, 4.0, 5.0]`,然后输出了归一化后的数据。 ### 回答3: 利用PyTorch对数据进行归一化的函数可以使用torchvision库中的transforms模块。transforms模块提供了多种对数据进行处理的操作,其中包括归一化操作。 首先需要导入相关的库: ``` import torchvision.transforms as transforms ``` 然后,可以定义一个函数来对数据进行归一化: ``` def normalize_data(data): transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) normalized_data = transform(data) return normalized_data ``` 在这个函数中,我们使用了transforms.Compose来组合多个数据预处理操作。首先,我们使用transforms.ToTensor来将输入数据转换为Tensor类型。然后,我们使用transforms.Normalize来进行归一化操作。在Normalize中,我们传入了均值和标准差,这些值通常是根据数据集的特性进行计算得到的。这里的均值和标准差为ImageNet数据集的均值和标准差,可以根据具体数据集的特性进行调整。 最后,我们将归一化后的数据返回。 使用这个函数时,只需要将需要进行归一化的数据作为参数传入即可: ``` normalized_data = normalize_data(data) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值