python学习
- dir();打开
- help();说明书
pytorch获取数据
-
dataset
-
提供一种方式去获取数据及其label
-
功能1:如何获取每一个数据及其label
-
功能2:告诉我们总共有多少数据
form torch.utils.data import Dataset form PIL import Image import os 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) slef.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="dataset/train" ants_label_dir="ants" bees_lable_dir="bees" ants_dataset=nyData(root_dir,ants_label_dir) bees_dataset=MyData(root_dir,bees_label_dir) train_ddataset=ants_dataset+bees_dataset# 数据集拼接
-
-
dataloader
-
tensorboard
form torch.utils.tensorboard import SummaryWriter writer=SummaryWriter("logs") # writer.add_image() # y=x for i in range(100): writer.add_scalar("y=x",i,i) writer.close() 命令行输入 tensorboard --logdir=logs --port=6008 #指定读取的文件夹,端口号,默认为6006 from PIL import Image img=Image.open("1.jpg") type(img)# import opencv as cv2 import numpy as np img_array=np.array(img) writer.add_image("test",img_aray,1,dataformats='HWC')
-
torchvision 中的transforms
- 工具箱:totensor resize
from torchvision import transforms # transforms.totensor # 为什么需要tensor数据类型 img_path="1.jpg" img=Image.open(img_path) tensor_trans=transforms.ToTensor() tensor_img=tensor_trans(img) ```` - 常见的Transforms ```python 输入 PIL Image.open() 输出 tensor ToTensor() 作用 narrays cv2.imread() from PIL import Image form torchvision import transforms from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter('logs') img= Image.open('1.jpg') #ToTensor trans_totensor=transforms.ToTensor() img_tensor=trans_totensor(img) writer.add_image('ToTensor',img_tensor) # tensorboard --logdir=logs # Normalize trans_norm=transform.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5]) img_norm=trans_norm(img_tensor) writer.add_image("Normalize",img_norm) # Resize trans_resize=transforms.Resize(512,512) img_resize=trans_resize(img) img_resize=trans_totensor(img_resize) writer.add_image('Resize',img_resize) # Compose --resize trans_resize_2=transforms.Resize(512) trans_compose=transforms.Compose([trans_resize_2, trans_totensor]) img_resize_2=trans_compose(img) writer.add_image("resize",img_resize_2,2) # RandomCrop trans_random=transforms.RandomCrop(512) 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()
-
标准数据集的使用 torchvision
import torchvision
dataset_transform=torchvision.transform.Compose([
torchvision.transforms.ToTensor()
])
train_set=torchvision.datasets.CIFAR10(root='./datasets',train=True,download=True,transform=dataset_transform)
test_set=torchvision.datasets.CIFAR10(root='./datasets',train=False,download=True,transform=dataset_transform)
img,target=test_set[0]
import
writer=SummaryWriter('p10')
for i in range(10):
img,target=test_set[i]
writer.add_image("test_set",img,i)
writer.close()
# tensorboard --logdir="p10"
- DataLoader的使用
- 如何取数据,将数据与标签打包返回
import torchvision
form torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
test_data=torchvision.datasets.CIFAR10(root='./dataset',train=False,transform=torchvision.transforms.ToTensor())
test_loader=DataLoader(dataset=test_data,batch_size=4,shuttle=True,num_works=0,drop_last=False)
#测试数据集中第一张图片及target
img,target=test_data[0]
writer=SummaryWriter('dataloader')
step=0
for data in test_loader:
imgs,targets=data
writer.add_images('test_data',imgs,step)
step+=1
writer.close()
nn.module使用
import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module):
def __init__(self):
self.conv1=nn.Conv2d(1,20,5)
self.conv2-nn.Conv2d(20,20,5)
def forward(self,x):
x=F.relu(slef.conv1(x))
return F.relu(self.conv2(x))
- Convolution Layers
- 对应位置相乘相加。。卷积核大小,步长,padding;;;padding=1,stride=1,得到与输入相同尺度的输出
import torch
input=torch.tensor([[1,2,0,3,1],
[0,1,2,3,1],
[1,2,3,1,1],
[2,1,0,1,1]])
kernel=torch.tensor([[1,2,1],
[0,1,1],
[2,1,0]])
input=torch.reshape(input,(1,1,5,5))
kernel=torch.reshape(kernel,(1,1,3,3))
import torch.nn.functional as F
output=F.conv2d(input,kernel,stride=1)
print(output)
#conv2d
in_channel(int),out_channel(int),kernel_size(int or tuple)
stride(int),padding(int)
import torch
import torchvision
import torch.nn as nn
from torch.utils.data import Dataloader
dataset=torchvision.datasets.FIFAR10('./data',train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader=Dataloader(dataset,batch_size=64)
class Model(nn.Module):
def __init__(self):
super(Model,slef).__init__()
self.conv1=nn.Conv2d(3,6,3)
def forward(slef,x):
x=self.conv1(x)
return x
writer=SummaryWriter('./logs')
step=0
model=Model()
for data in dataloader:
imgs,targets=data
output=model(imgs)
writer.add_images('input',imgs,step)
writer.add_images('output', torch.reshape(output,(-1,3,30,30)),step)
step+=1
池化层
- 下采样
imoprt torch
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]],dtype=torch.float32)
input=torch.reshape(input,(-1,1,5,5))
class model(nn.Moule):
def __init__(self):
super(model,self).__init__()
self.maxpoll1=nn.MaxPool2d(kernel_size=3,ceil_mode=True)
def forward(self,input):
output=self.maxpool1(input)
return output
model=model()
output=model(input)
非线性激活
- 引入非线性 , relu sigmoid
import torch
import torch.nn as nn
input=torch.tensor([[1,-0.5],
[-1,3]])
torch.reshape(input,(-1,1,2,2))
class Model(nn.Module):
def __init__(self):
super(Model,self).__init__()
self.relu=nn.Relu()
def forward(self,x):
return self.relu(x)
Model=Model()
output=Model(input)
- Sequential
CIFAR10 model搭建
import torch
import torch.nn as nn
class Model(nn.module):
def __init__(self):
super(Model,self).__init__()
self.conv1=nn.Conv2d(3,32,5,padding=2)
self.maxpool1=nn.MaxPool2d(2)
self.conv2=nn.Conv2d(32,32,5,padding=2)
self.maxpool2=nn.MaxPool2d(2)
self.conv3=nn.Conv2d(32,64,5,padding=2)
self.maxpool3=nn.MaxPool2d(2)
self.flatten=nn.Flatten()
self.linear1=nn.Linear(1024,64)
self.linear2=nn.Linear(64,10)
#self.model1=nn.Sequential(nn.Conv2d(3,32,5,padding=2),
nn.Maxppool2d(2),
nn.Conv2d(32,32,5,padding=2),
nn.Maxppool2d(2),
nn.Conv2d(32,64,5,padding=2),
nn.Maxppool2d(2),
nn.Flatten(),
nn.Linear(1024,64)
nn.Linear(64,10))
def forward(self,x):
x=self.conv1(x)
x=self.maxpoo11(x)
x=self.conv2(x)
x=self.maxpool2(x)
x=self.conv3(x)
x=self.maxpool3(x)
x=self.flatten(x)
x=self.linear1(x)
x=self.linear2(x)
#x=self.model1(x)
return x
Model=Model()