关于图片读写的操作
from torch.utils.data import Dataset
from PIL import Image
import os
class Mydata(Dataset):
def __init__(self, root_dir, label_dir):
#根目录和标签目录合成path,获得图片路径地址
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):
#获取功能,需要输入index
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 = "dataset/train"
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = Mydata(root_dir, ants_label_dir)
bees_dataset = Mydata(root_dir, bees_label_dir)
tensorboard的可视化功能演示(绘制一张函数图像)
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
for i in range(100):
writer.add_scalar("y=x", i, i)
writer.close()
P12_transform的应用
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
writer = SummaryWriter("logs")
img = Image.open("dataset/train/ants/0013035.jpg")
print(img)
#Totensor把图片集转化成tensor类型
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)
#标准化操作
#归一化的公式:output[channel] = (input[channel] - mean[channel]) / std[channel]
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
#0.5对应RGB三层的均值和标准差
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm)
#设置大小
print(img.size)
trans_resize = transforms.Resize((300, 300))
#img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
#img_resize PIL -> totensor -> img_resize.tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)
#Compose,把列表里的函数for执行
trans_resize_2 = transforms.Resize((200, 400))
#PIL->PIL->tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize_2", img_resize_2, 1)
#RandomCrop,随机裁剪
trans_random = transforms.RandomCrop((20, 10))
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
img_crop = trans_compose_2(img)
writer.add_image("RandomCrop", img_crop, i)
writer.close()
注:在新版中可以直接对PIL格式进行处理
#Compose,把列表里的函数for执行
trans_resize_2 = transforms.Resize((200, 400))
#PIL->PIL->tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize_2", img_resize_2, 1)
P14_在线数据集的下载
import torchvision
#定义训练集和测试集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, download=True)
print(test_set[0])
print(test_set.classes)
#test_set数据集由几个class组成
img, target = test_set[0]
print(img)
print(target)
#第一张图片是3,对应猫
print(test_set.classes[target])
img.show()
P14_对下载数据集可视化处理
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=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transform, download=True)
writer = SummaryWriter("p10")
for i in range(10):
img, target = test_set[i]
writer.add_image("test_set", img, i)
writer.close()
P15_DataLoader的使用
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
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=False)
#测试数据集中第一张图片及target,测试集数据由一张图片img和它所属的类别target组成
img, target = test_data[0]
print(img.shape)
print(target)
writer = SummaryWriter("dataloader")
step = 0
#把测试集的图片输出到tensorboard
for data in test_loader:
imgs, targets = data
writer.add_images("test_data", imgs, step)
step = step + 1
writer.close()
P16_神经网络的基本模板
import torch
from torch import nn
class Tudui(nn.Module):
def __init__(self):
super().__init__()
def forward(self, input):
output = input + 1
return output
tudui = Tudui()
#进行土堆的初始化
x = torch.tensor(1.0)
#输入到forward的input中
output = tudui(x)
print(output)