pytorch学习笔记1

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()

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值