猫狗数据集的制作并完成对猫狗预测识别

一、猫狗数据集的制作

#在数据集制作过程中需要加载的模块
import torch
import os
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from torchvision.transforms import ToPILImage
from torch.utils.data import Dataset, DataLoader

""" 
Pytorch中数据集被抽象为一个抽象类torch.utils.data.Dataset,所有的数据集都应该继承这个类,并override以下两项:
	.__len__
	.__getitem__
"""
class Datasets(Dataset):
    mean = [0.4878, 0.4545, 0.4168]
    std = [0.2623, 0.2555, 0.2577]
    def __init__(self,path):
        #获取数据集所在的路径,注意不能把该路径设置太深
        self.path = path
        #把数据集下的所有图片的文件名列出来,返回的结果是一个列表
        self.dataset = os.listdir(self.path)
     """代表样本数量,len(obj)等价于obj.__len__()"""
    def __len__(self):
        return len(self.dataset)
 	"""__getitem__返回一条数据或一个样本,obj[index]等价于obj.__getitem__"""
    def __getitem__(self,index):
        """
        :param item:index
        :return: data,target
        """
        # 获得数据的标签
        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编码的时候可能会出错
   		#a=[1,2,3]
   		#torch.tensor(a)------[1,2,3]
   		#torch.Tensor(a)------[1.,2.,3.]
   		target = torch.tensor(target)
        "数据预处理"
        #打开图片(路径的拼接)
        img = Image.open(os.path.join(self.path,name))
        #归一化
        img = np.array(img) / 255
        #去均值
        img = (img - self.mean) / self.std
        datasets = torch.tensor(img, dtype=torch.float32).permute(2, 0, 1)
        return datasets, target

```python
"""数据预处理中方差和均值的求解:"""
if __name__ == '__main__':
    path = r"E:/cat-dog/datasets/"
    dataset = Datasets(path= path)
    # 制作加载器,batch_size=7264,相当于把整体的训练图片打包成了一个整体,data_loader包含两坨东西(data,target)
    data_loader = DataLoader(dataset= dataset, batch_size=7246, shuffle=True)
    # 将data_loader作为一个迭代器进行运算,这里面包含了输入数据和标签,所以后面取第0个位置的数,也就是取输入数据
    data = next
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值