PyTorch教程——小土堆笔记
PyTorch代码笔记
跟着B站小土堆PyTorch教程写的代码笔记
完整代码:
链接:https://pan.baidu.com/s/1-ZePujIeVjeZeCdq7Xek0Q
提取码:4vse
1_tensorboard
Tensorboard是一个可视化工具,能够可视化神经网络内部的组织、结构、及其训练过程。
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np
#tensorboard --logdir=logs/xxxlogs
writer = SummaryWriter("logs")
img_path = "dataset/antbee/train/ants/0013035.jpg"
img_PIL = Image.open(img_path)
img_array = np.array(img_PIL)
#img_PIL.show()
print(type(img_array))
print(img_array.shape)
writer.add_image("ant", img_array, 2, dataformats='HWC')
for i in range(100):
writer.add_scalar(tag="y=2x", scalar_value=2*i, global_step=i)
writer.flush()
writer.close()
2_transform
Transforms是pytorch的图像处理工具包,是torchvision模块下的一个一个类的集合,可以对图像或数据进行格式变换,裁剪,缩放,旋转等。
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
import cv2
img_path = "dataset/antbee/train/ants/0013035.jpg"
img = Image.open(img_path)
writer = SummaryWriter("logs")
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
#print(tensor_img)
writer.add_image("tensor_img", tensor_img)
writer.close()
#cv_img = cv2.imread(img_path)
#print(cv_img)
3_useful_transform
常用transform
ToTensor:把PIL.Image或ndarray从 (H x W x C)形状转换为 (C x H x W) 的tensor
Normalize:对图像进行标准化
Resize:调整PILImage对象的尺寸,注意不能是用io.imread或者cv2.imread读取的图片,这两种方法得到的是ndarray
Compose:串联多个图片变换的操作
RandomCrop:随机裁剪图片
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img = Image.open("dataset/antbee/train/ants/0013035.jpg")
print(img)
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("Normalize", img_norm)
#Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
img_resize = trans_resize(tensor_img)
writer.add_image("Resize", img_resize, 0)
print(img_resize)
#Compose
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, tensor_trans])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)
#RandomCrop
trans_random = transforms.RandomCrop((500, 600))
trans_compose_2 = transforms.Compose([trans_random, tensor_trans])
for i in range(20):
img_crop = trans_compose_2(img)
writer.add_image("RandomCrop", img_crop, i)
writer.close()
4_data
torchvision中的数据集使用
import torchvision
from torch.utils.tensorboard import SummaryWriter
dataset_transform = torchvision.transforms.Compose([
torchvision.transforms.ToTensor()
])
train_set = torchvision.datasets.CIFAR10(root="dataset", train=True, transform=dataset_transform, download=False)
test_set = torchvision.datasets.CIFAR10(root="dataset", train=False, transform=dataset_transform, download=False)
# print(train_set[0])
# print(train_set.classes)
#
# img, target = train_set[0]
# print(img)
# print(target)
# print(train_set.classes[target])
# img.show()
#print(train_set[0])
writer = SummaryWriter("logs/datalogs")
for i in range(10):
img, target = train_set[i]
writer.add_image("data", img, i)
writer.close()
5_dataloader
DataLoader是Pytorch中用来处理模型输入数据的一个工具类。
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
train_data = torchvision.datasets.CIFAR10("dataset", train=True, transform=torchvision.transforms.ToTensor())
test_data = torchvision.datasets.CIFAR10("dataset", train=False, transform=torchvision.transforms.ToTensor())
trian_loader = DataLoader(dataset=train_data, batch_size=64, shuffle=True, num_workers=0, drop_last=False)
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=False)
img, target = train_data[0]
print(img.shape)
print(target)
writer = SummaryWriter("logs/dataloadlogs")
for epoh in range(2):
step = 0
for data in test_loader:
imgs, targets = data
#print(imgs.shape)
#print(targets)
writer.add_images("epoh {}".format(epoh), imgs, step)
step = step+1
print(step)
writer.close()
6_module
神经网络的基本骨架——nn.Module的使用
import torch
import torch.nn as nn
class Model(nn.Module):
def __init__(self):
super().__init__()
def forward(self, input):
output = input + 1
return output
model = Model()
x = torch.tensor(1.0)
output = model(x)
print(output)
7_conv
卷积理解
import torch
import torch.nn.functional as F
input = torch.tensor([[1, 2, 0, 3, 1],
[0, 1, 2, 3, 1],
[1, 2, 1, 0, 0],
[5, 2, 3, 1, 1],
[2, 1, 0, 1, 1]])
kernel = torch.tensor([[1, 2, 1],
[0, 1, 0],
[2, 1, 0]])
input = torch.reshape(input, (1, 1, 5, 5))
kernel = torch.reshape(kernel, (1, 1, 3, 3)