PyTorch怎么实现对猫狗二分类训练集进行读取
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,这篇文章主要介绍"PyTorch怎么实现对猫狗二分类训练集进行读取",在日常操作中,相信很多人在PyTorch怎么实现对猫狗二分类训练集进行读取问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2024年09月21日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安全错误
数据库的锁怎样保障安全
数据库绑定照片
计算机图像与网络安全
华为敏捷网络技术方案
怀化java程序软件开发培训
面试问你数据库运用
网络技术盗取案例
网络安全的重要性科普视频
网络安全大检查情况汇报
烈火皇城有几个服务器
公交车wod文档数据库12图
extjs 树 数据库
数据库运用什么技术
公司服务器 信息
sci数据库收录图书
我的世界服务器未启动
软件开发环境表格
旗帜数据库提示系统不兼容
数据库维度
杭州豪霆网络技术有限公司
微信总服务器在哪
网络安全工程师职业培训
云服务器能做吗
南京益康信达软件开发公司
战地4服务器筛选
美国博彩软件开发合作公司
网络安全知识大讲堂
黑客网络安全书籍推
网络安全自主投资
即时通讯服务器有安卓版吗
微信总服务器在哪