Skip to content

Pytorch基础

🕒 Published at:

环境配置

  • 下载anaconda
  • 创建虚拟环境
  • install torch
  • 下载PyCharm
  • 安装ipykernel:conda install ipykernel
  • 将环境写入Notebook的kernel中: python -m ipykernel install --user --name 环境名称 --display-name "Python (环境名称)"

Dataset类 加载数据集

import os
from torch.utils.data import Dataset
from  PIL import Image

class MyData(Dataset):

    def __init__(self,root_dir,label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir,self.label_dir)
        self.img_path = os.listdir(self.path)

    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)
        img = Image.open(img_item_path)
        label = self.label_dir

        return img,label

    def __len__(self):
        return len(self.img_path)


root_dir = "hymenoptera/hymenoptera_data/train_data"
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = MyData(root_dir,ants_label_dir)
bees_dataset = MyData(root_dir,bees_label_dir)

train_dataset = ants_dataset + bees_dataset

Tensorboard的使用

pip install tensorboard
 tensorboard --logdir=logs
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image

writer = SummaryWriter("logs")

img_path = "hymenoptera/hymenoptera_data/train_data/bees/16838648_415acd9e3f.jpg"
img = Image.open(img_path)
img_array = np.array(img)

writer.add_image("test",img_array,1,dataformats='HWC')

# for i in range(100):
#     writer.add_scalar("y=x*x",i*i,i)

writer.close()

Transforms的使用

from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
import os
os.makedirs("logs",exist_ok=True)
img_path = "hymenoptera/hymenoptera_data/train_data/bees/39747887_42df2855ee.jpg"
img = Image.open(img_path)

writer = SummaryWriter("logs")
# ToTensor
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
writer.add_image("Tensor_img",tensor_img)
#Normalize
print(tensor_img[0][0][0])
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(tensor_img)
print(img_norm[0][0][0])
writer.add_image("norm_img",img_norm)


writer.close()
tensor(0.6627)
tensor(0.3255)

(0.6627-0.5) / 0.5 = 0.3255

这些工具在图像数据的预处理增强以及准备输入到神经网络的过程中发挥着重要作用,能够帮助提升模型的训练效果以及泛化能力

torchvision里的数据集

https://docs.pytorch.org/vision/stable/datasets.html

  • 如何使用torchvision提供的标准数据集

下载慢:复制下载链接到迅雷下载

import torchvision

dataset_transform = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor()
])


train_dataset = torchvision.datasets.CIFAR10(root="./dataset",train=True,transform=dataset_transform,download=True)
test_dataset = torchvision.datasets.CIFAR10(root="./dataset",train=False,transform=dataset_transform,download=True)

DataLoader

https://docs.pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader

import torchvision
from torch.utils.data import DataLoader


test_data = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor())

test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=0,drop_last=True)

img,target = test_data[0]
print(img.shape)
print(target)

step = 0
for data in test_loader:
    imgs,targets = data
    print(imgs.shape)
    print(targets)
torch.Size([3, 32, 32])
3
torch.Size([64, 3, 32, 32])
tensor([2, 3, 5, 1, 4, 9, 1, 1, 1, 9, 0, 8, 9, 9, 1, 9, 6, 8, 9, 8, 1, 9, 5, 3,
        6, 5, 0, 7, 7, 1, 6, 4, 8, 2, 1, 8, 5, 3, 3, 5, 8, 6, 6, 2, 1, 7, 6, 6,
        5, 4, 6, 9, 9, 8, 3, 3, 0, 2, 5, 9, 7, 1, 3, 8])