PyTorch怎么实现对猫狗二分类训练集进行读取
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,这篇文章主要介绍"PyTorch怎么实现对猫狗二分类训练集进行读取",在日常操作中,相信很多人在PyTorch怎么实现对猫狗二分类训练集进行读取问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2025年12月04日PyTorch怎么实现对猫狗二分类训练集进行读取
这篇文章主要介绍"PyTorch怎么实现对猫狗二分类训练集进行读取",在日常操作中,相信很多人在PyTorch怎么实现对猫狗二分类训练集进行读取问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PyTorch怎么实现对猫狗二分类训练集进行读取"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
从kaggle中下载猫狗二分类训练数据,自己编写一个DogCatDataset,使得pytorch可以对猫狗二分类训练集进行读取
猫狗大战代码
import osimport zipfilefor dirname, _, filenames in os.walk('/kaggle/input'): for filename in filenames: print(os.path.join(dirname, filename)) # unzip print(os.getcwd())os.makedirs('data', exist_ok=True)with zipfile.ZipFile('../input/dogs-vs-cats-redux-kernels-edition/train.zip') as train_zip: train_zip.extractall('data') with zipfile.ZipFile('../input/dogs-vs-cats-redux-kernels-edition/test.zip') as test_zip: test_zip.extractall('data')# show unzip dirtrain_dir = './data/train'test_dir = './data/test'print('len:', len(os.listdir(train_dir)), len(os.listdir(test_dir)))os.listdir(train_dir)[:5]os.listdir(test_dir)[:5]import numpy as np import pandas as pd import globimport osimport torchimport matplotlib.pyplot as pltfrom PIL import Imagefrom sklearn.model_selection import train_test_splitfrom torchvision import datasets, models, transformsimport torch.nn as nnimport torch.optim as optimbatch_size = 100device = 'cuda' if torch.cuda.is_available() else 'cpu'print(device)torch.manual_seed(1234)if device =='cuda': torch.cuda.manual_seed_all(1234) lr = 0.001train_list = glob.glob(os.path.join(train_dir,'*.jpg'))test_list = glob.glob(os.path.join(test_dir, '*.jpg'))print('show data:', len(train_list), train_list[:3])print('show data:', len(test_list), test_list[:3])fig = plt.figure()ax = fig.add_subplot(1,1,1)img = Image.open(train_list[0])plt.imshow(img)plt.axis('off')plt.show()print(type(img))img_np = np.asarray(img)print(img_np.shape)train_list, val_list = train_test_split(train_list, test_size=0.2)print(len(train_list), train_list[:3])print(len(val_list), val_list[:3])train_transforms = transforms.Compose([ transforms.Resize((224, 224)),# transforms.RandomCrop(224), transforms.ToTensor(),])val_transforms = transforms.Compose([ transforms.Resize((224, 224)),# transforms.RandomCrop(224), transforms.ToTensor(),])test_transforms = transforms.Compose([ transforms.Resize((224, 224)),# transforms.RandomCrop(224), transforms.ToTensor(),])class dataset(torch.utils.data.Dataset): def __init__(self,file_list,now_transform): self.file_list = file_list # list of path self.transform = now_transform def __len__(self): self.filelength = len(self.file_list) return self.filelength def __getitem__(self,idx): img_path = self.file_list[idx] img = Image.open(img_path)# print(img.size) img_transformed = self.transform(img) # test 没有标签? label = img_path.split('/')[-1].split('.')[0] if label == 'dog': label=1 elif label == 'cat': label=0 else: assert False return img_transformed,labeltrain_data = dataset(train_list, train_transforms)val_data = dataset(val_list, test_transforms)# test_data = dataset(test_list, transform=test_transforms)train_loader = torch.utils.data.DataLoader(dataset = train_data, batch_size=batch_size, shuffle=True )val_loader = torch.utils.data.DataLoader(dataset = val_data, batch_size=batch_size, shuffle=True)# test_loader = torch.utils.data.DataLoader(dataset = test_data, batch_size=batch_size, shuffle=True)print(len(train_data), len(train_loader))print(len(val_data), len(val_loader))print(train_data, type(train_data))t1, t2 = train_data[7]print(t1, t2)print(type(t1))print(t1.shape)class CNN_STD(nn.Module): def __init__(self): super(CNN_STD,self).__init__() self.layer1 = nn.Sequential( nn.Conv2d(3,16,kernel_size=3, padding=0,stride=2), nn.BatchNorm2d(16), nn.ReLU(), nn.MaxPool2d(2) ) self.layer2 = nn.Sequential( nn.Conv2d(16,32, kernel_size=3, padding=0, stride=2), nn.BatchNorm2d(32), nn.ReLU(), nn.MaxPool2d(2) ) self.layer3 = nn.Sequential( nn.Conv2d(32,64, kernel_size=3, padding=0, stride=2), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2) ) self.fc1 = nn.Linear(3*3*64,10) self.dropout = nn.Dropout(0.5) self.fc2 = nn.Linear(10,2) self.relu = nn.ReLU() def forward(self,x): out = self.layer1(x) out = self.layer2(out) out = self.layer3(out) out = out.view(out.size(0),-1) out = self.relu(self.fc1(out)) out = self.fc2(out) return outoptimizer = optim.Adam(params = model.parameters(),lr=lr)loss_f = nn.CrossEntropyLoss()epochs = 10print('start epoch iter, please wait...')for epoch in range(epochs): epoch_loss = 0 epoch_accuracy = 0 for data, label in train_loader: data = data.to(device) label = label.to(device) output = model(data) loss = loss_f(output, label) optimizer.zero_grad() loss.backward() optimizer.step() acc = ((output.argmax(dim=1) == label).float().mean()) epoch_accuracy += acc/len(train_loader) epoch_loss += loss/len(train_loader) print('Epoch : {}, train accuracy : {}, train loss : {}'.format(epoch+1, epoch_accuracy,epoch_loss)) with torch.no_grad(): epoch_val_accuracy=0 epoch_val_loss =0 for data, label in val_loader: data = data.to(device) label = label.to(device) val_output = model(data) val_loss = loss_f(val_output,label) acc = ((val_output.argmax(dim=1) == label).float().mean()) epoch_val_accuracy += acc/ len(val_loader) epoch_val_loss += val_loss/ len(val_loader) print('Epoch : {}, val_accuracy : {}, val_loss : {}'.format(epoch+1, epoch_val_accuracy,epoch_val_loss))
到此,关于"PyTorch怎么实现对猫狗二分类训练集进行读取"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
训练
学习
更多
帮助
实用
接下来
代码
大战
数据
文章
方法
标签
理论
知识
篇文章
网站
资料
跟着
问题
好用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么在数据库查询语句输入中文
阿里云服务器收费标准
绍兴软件开发优质推荐
奇威网络技术有限公司
enzu服务器
成都安卓软件开发费用是多少
数据库事务回滚举例
大华服务器机柜导轨安装
姜代红数据库原理答案
gmod服务器进不来
怎么启动服务器ftp
我国网络安全法的先后顺序
左云有名的网络安全创新服务
全球最新反倾销数据库
如何在钉钉上建立试题数据库
初级数据库和高级检索
上汽软件开发加班多吗
网络技术教学视屏
腾讯软件开发部门管理制度
上海办公系统软件开发价格
软件开发答辩报告ppt
5g时期的网络安全
胡啸 网络安全领袖峰会
服务器线整理
cod6在哪看服务器
dns服务器114
数据库实验中的问题
软件开发提成分配方案
图片能不能存数据库
电脑所有软件数据库转移到新电脑