dog_cat 目标识别程序中计算mean、std的测试程序
2021/7/2 17:21:47
本文主要是介绍dog_cat 目标识别程序中计算mean、std的测试程序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import torch import os import numpy as np from PIL import Image from torch.utils.data import Dataset, DataLoader import matplotlib.pyplot as plt i=0 class MyDataSet(Dataset): def __init__(self, path): # print("__init__",path) """根据路径获得数据集""" self.path = path """读取路径下的所有文件""" self.dataset = os.listdir(self.path) # 均值和方差的求解过程下面会交代 self.mean = [0.4878, 0.4545, 0.4168] self.std = [0.2623, 0.2555, 0.2577] def __len__(self): # print("__len__",len(self.dataset)) """获取数据集的长度""" return len(self.dataset) def __getitem__(self, index): """根据索引获得数据集""" # print(index) # print("__getitem__",self.dataset[index]) # 获得数据的标签 name = self.dataset[index] # 数据集的文件名为i.j.jpeg, 这个标签的第i个位置如果是0表示猫,1则表示狗,第j个位置是图片的个数 name_list = name.split(".") target = int(name_list[0]) # 这里需要注意,tensor(target) 和Tensor([target])的区别,否则在one-hot解码的时候会出现错误 target = torch.tensor(target) """数据预处理""" # 打开图片 img = Image.open(os.path.join(self.path, name)) # 设置图片大小 # img = np.resize(img, (3, 10, 10)) # 归一化,先将图片转化为一个矩阵,然后除以255 img = np.array(img) / 255 global i if i==0: input() print(img[0]) i+=1 print(type(img)) # # 去均值 # img = (img - self.mean) / self.std # 换轴 H W C 转换为 C H W ,这里需要注意下,其实我们可以不这么处理,在前面设置图片大小的时候设置为3 * 100 * 100 的就可以。 train_data = torch.tensor(img, dtype=torch.float32).permute(2, 0, 1) return train_data, target if __name__ == '__main__': """注意:求均值和标准差时,首先把上面去均值的那一行代码注释了""" dataset = MyDataSet(r'./cat_dog/img') # print("70周年") # 求均值,将DataLoader进行打包,这里batch_size的数量应该是训练图片的总数 data_loader = DataLoader(dataset=dataset, batch_size=12000, shuffle=True) # print("万岁") # input() # 将data_loader作为一个迭代器进行运算,这里面包含了输入数据和标签,所以后面取第0个位置的数,也就是取输入数据 # for x,y in data_loader: # print("hello world") # input() # print(x.dtype,type(x),x.size(),y.size(),x[0][0]) # plt.imshow(x[0][0]) # plt.show() # print(x,y) # input() # print(data_loader) # input() # print("china 100 birthday") # a=next(iter(data_loader))[0] # input() data = next(iter(data_loader))[0] print(data[0],data.size()) input() # 这里图片N(每批的数量) C(通道数) H(高) W(宽) 几个维度,求的.0是通道层面的均值,所以dim=(0, 2, 3) mean = torch.mean(data, dim=(0, 2, 3)) std = torch.std(data, dim=(0, 2, 3)) print(mean) print(std)
这篇关于dog_cat 目标识别程序中计算mean、std的测试程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享
- 2024-07-03微信支付提示订单号重复-icode9专业技术文章分享
- 2024-07-02微服务启动nacos注册上去了,但是一直没有收到请求-icode9专业技术文章分享
- 2024-07-02如何检查文件的编码格式-icode9专业技术文章分享
- 2024-07-02sublime 更改编码格式-icode9专业技术文章分享
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享