python_pytorch
小土堆pytotch学习视频链接
from的是一个个的包(package)
import 的是一个个的py文件(file.py)
所使用的一般是文件中的类(.class)
第一步实例化所使用的类,然后调用类中的方法(def)
nn.Module
import torch.nn as nn
import torch.nn.functional as F
import torch
class Module(nn.Module):
def __init__(self):
super().__init__()
def forward(self,input):
output=input+1
return output
Mod=Module()
x=torch.tensor(1.0)
output=Mod(x)
print(output)
卷积层示例
import torch
import torch.nn as nn
import torchvision
from torch.utils.data import DataLoader
dataset=torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)
data_loader=DataLoader(dataset,batch_size=64,shuffle=True)
class mod(nn.Module):
def __init__(self):
super(mod,self).__init__()
# 输入通道,输出通道,卷积核大小(卷积中的数值初始不重要,在后续的反向传播时候会一直根据梯度来更新这里的参数)
self.conv2d1=nn.Conv2d(3,6,3,stride=1)
def forward(self,x):
x=self.conv2d1(x)
return x
mod=mod()
for data in data_loader:
img, target=data
output=mod(img)
print(img.shape,output.shape)
池化层示例
正是因为有了池化,才使得我们神经网络的训练成为了可能。有了池化,可以大大减小我们网络的运算量,进而可以在短时间训练出我们想要的神经网络模型。
import torch
from torch import nn
input=torch.tensor(
[
[1,2,3,4,5],
[2,3,4,5,6],
[3,33,3,3,3],
[3,3,3,3,3],
[2,2,2,2,2]
],dtype=torch.float32
)
input=torch.reshape(input,(1,1,5,5))
print(input.shape)
class Mydata(nn.Module):
def __init__(self):
super(Mydata,self).__init__()
self.maxpool=nn.MaxPool2d(kernel_size=3,ceil_mode=True)
def forward(self,input):
output=self.maxpool(input)
return output
mydata=Mydata()
output=mydata(input)
print(output)
非线性激活
非线性激活对于神经网络来说非常重要。这是因为这些非线性激活,我们的神经网络才可以去拟合任意的模型用于预测。
import torch
from torch import nn
input=torch.tensor(
[
[1,-1],
[2,-4]
],dtype=torch.float32
)
input=torch.reshape(input,(1,1,2,2))
print(input.shape)
class Mydata(nn.Module):
def __init__(self):
super(Mydata,self).__init__()
#self.maxpool=nn.MaxPool2d(kernel_size=3,ceil_mode=True)
self.relu=nn.ReLU() #relu激活函数
self.sigmoid=nn.Sigmoid() #sigmoid激活函数
def forward(self,input):
#output=self.maxpool(input)
output=self.relu(input)
output2=self.sigmoid(input)
return output,output2
mydata=Mydata()
output1,output2=mydata(input)
print(output1,output2)
线性层
import torch
from torch import nn
import torchvision
from torch.utils.data import DataLoader
dataset=torchvision.datasets.CIFAR10("./content",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader=DataLoader(dataset,batch_size=64,drop_last=True)
class Mymodel(nn.Module):
def __init__(self):
super(Mymodel,self).__init__()
self.linear=nn.Linear(196608,10)
def forward(self,input):
output=self.linear(input)
return output
mymodel=Mymodel()
for data in dataloader:
img,target=data
print(img.shape)
output=torch.flatten(img)
print(output.shape)
output=mymodel(output)
print(output.shape)