Pytorch:一、对图片数据进行标准化(猫狗)

标准化

在我们把数据导入模型进行训练的时候,我们首先要对数据进行标准化处理,为什么需要进行标准化呢?
简要地说,为了保证网络可以良好的收敛,在不清楚各个维度的相对重要程度之前,标准化使得输入的各个维度分布相近,从而允许我们在网络训练过程中,对各个维度“一视同仁”(即设置相同的学习率、正则项系数、权重初始化、以及激活函数)。反过来,当我们使用全局相同的学习率、权重初始化、以及激活函数等网络设置时,方差更大的维度将获得更多的重视。
常用的标准化分为三种:

  • 规范化方法
  • 正规化方法
  • 归一化

正规化方法的标准化的公式如下:
在这里插入图片描述
x ̅ 为均值,s为标准差,标准化后我们数据的均值为0,方差为1
想要进行标准化,首先需要求出均值和标准差,对于猫狗数据集我们通过程序求出均值和标准差:

import numpy as np
import cv2
import os
from PIL import Image


# img_h, img_w = 32, 32
img_h, img_w = 32, 32    #经过处理后你的图片的尺寸大小
means, stdevs = [], []
img_list = []

imgs_path = r".\test"    #数据集的路径采用绝对引用
imgs_path_list = os.listdir(imgs_path)

len_ = len(imgs_path_list)
i = 0
for item in imgs_path_list:
    img = cv2.imread(os.path.join(imgs_path, item))
    img = cv2.resize(img, (img_w, img_h))
    img = img[:, :, :, np.newaxis]
    img_list.append(img)
    i += 1
    print(i, '/', len_)

imgs = np.concatenate(img_list, axis=3)
imgs = imgs.astype(np.float32) / 255.

for i in range(3):
    pixels = imgs[:, :, i, :].ravel()  # 拉成一行
    means.append(np.mean(pixels))
    stdevs.append(np.std(pixels))

# BGR --> RGB , CV读取的需要转换,PIL读取的不用转换
means.reverse()
stdevs.reverse()

print("normMean = {}".format(means))
print("normStd = {}".format(stdevs))

输入:

normMean = [0.4757419, 0.45063725, 0.39034033]
normStd = [0.26056913, 0.25479528, 0.25940257]

因为是RGB图片,有三个颜色通道,所以三个值;得到了均值和标准差我们就可以用transforms的Normalize函数来进行标准化了:

transform = transforms.Compose([
    transforms.Resize(32),  # 缩放图片,保持长宽比不变,最短边为32像素
    transforms.CenterCrop(32),  # 从图片中间开始切割出32*32大小的图片
    transforms.ToTensor(),  # 将图片转换成Tensor,归一化至[0,1]
    #标准化至[-1,1],规定均值和标准差
    transforms.Normalize(mean=[0.475, 0.451, 0.390], std=[0.261, 0.255, 0.259])
])
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丁天牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值