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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值