系列文章目錄
- pytorch學習1-數據加載以及Tensorboard可視化工具
- pytorch學習2-Transforms主要方法使用
- pytorch學習3-torchvisin和Dataloader的使用
- pytorch學習4-簡易卷積實現
- pytorch學習5-最大池化層的使用
- pytorch學習6-非線性變換(ReLU和sigmoid)
- pytorch學習7-序列模型搭建
- pytorch學習8-損失函數與反向傳播
- pytorch學習9-優化器學習
- pytorch學習10-網絡模型的保存和加載
- pytorch學習11-完整的模型訓練過程
文章目錄
- 系列文章目錄
- 一、簡易nn
- 二、簡簡易卷積
- 三、簡易卷積
- 總結
一、簡易nn
class MyNN(nn.Module):#創建一個神經網絡,需要繼承nn.Moudledef __init__(self, ):super().__init__()def forward(self,input):output=input+1#這個nn的作用就是把輸入自增一return output
mynn=MyNN()
x=torch.tensor(1.0)
output=mynn(x)
print(output)
二、簡簡易卷積
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))#torch卷積操作要求數據有四個參數,批次、通道數、高、寬,而原始的input這里只有高和寬兩個參數,所以需要reshape這個轉換函數來將數據轉換為想要的
kernel=torch.reshape(kernel,(1,1,3,3))
print(input.shape)
print(kernel.shape)#conv2d代表二維卷積,還有一維三維等等
output=F.conv2d(input,kernel,stride=1,padding=1)#進行卷積操作,padding=1代表進行一行列0填充,默認為0,不填充
print(output)
三、簡易卷積
dataset=torchvision.datasets.CIFAR10("../data",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader=DataLoader(dataset,batch_size=64)#這行代碼將整個數據集分割成許多批,每一批有64個樣本
class Mynn2(nn.Module):def __init__(self, ) :super(Mynn2,self).__init__()self.conv1=Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)#out_channels代表輸出的通道數(也就是代表經過卷積之后輸出多少個圖像(每一張圖像都由一個卷積核生成,所以這個輸出通道數也間接代表了有幾個卷積核))def forward(self,x):x=self.conv1(x)#進行卷積操作return x
mynn2=Mynn2()
#print(mynn2)#查看網絡結構
writer=SummaryWriter("logs")
step=0
for data in dataloader:imgs,target=dataoutput=mynn2(imgs)print(imgs.shape)print(output.shape)#這兩行可以看出,輸入的3通道輸出變成了6通道writer.add_images("我是輸入",imgs,step)output=torch.reshape(output,(-1,3,30,30))#這個是因為,輸出通道有六個,無法顯示,那么可以將輸出修改為3個通道,和輸入一樣,這個函數有四個參數,第一個參數設置為-1就會自動計算合適值writer.add_images("我是輸出",output,step)step=step+1
writer.close()
總結
以上就是今天要講的內容,從易到難進行簡易卷積實現