import torch
from torch import nn
import matplotlib.pyplot as plt
defcorr2d(X,k):#計算二維互相關運算h,w=k.shape#卷積核的長和寬Y=torch.zeros((X.shape[0]-h+1,X.shape[1]-w+1))#創建(X-H+1,X-W+1)的全零矩陣for i inrange(Y.shape[0]):for j inrange(Y.shape[1]):Y[i,j]=(X[i:i+h,j:j+w]*k).sum()#不指定dim的話是全部都加載一起#print(X[i:i+h,j:j+w]*k)return Y
X = torch.tensor([[0.0,1.0,2.0],[3.0,4.0,5.0],[6.0,7.0,8.0]])
K = torch.tensor([[0.0,1.0],[2.0,3.0]])
Y=corr2d(X, K)
8.2 卷積核邊緣計算
import torch
from torch import nn
import matplotlib.pyplot as plt
defcorr2d(X,k):#計算二維互相關運算h,w=k.shape#卷積核的長和寬Y=torch.zeros((X.shape[0]-h+1,X.shape[1]-w+1))#創建(X-H+1,X-W+1)的全零矩陣for i inrange(Y.shape[0]):for j inrange(Y.shape[1]):Y[i,j]=(X[i:i+h,j:j+w]*k).sum()#不指定dim的話是全部都加載一起#print(X[i:i+h,j:j+w]*k)return Y
X = torch.ones((6,8))
X[:,2:6]=0
K=torch.tensor([[1.0,-1.0]])
Y=corr2d(X,K)#這樣檢測之后如果兩個水平相鄰的元素相同則輸出為0,否則則是非0元素print(Y)
8.3 卷積核學習設計
#卷積層設計--學習卷積核import torch
from torch import nn
import matplotlib.pyplot as plt
defcorr2d(X,k):#計算二維互相關運算h,w=k.shape#卷積核的長和寬Y=torch.zeros((X.shape[0]-h+1,X.shape[1]-w+1))#創建(X-H+1,X-W+1)的全零矩陣for i inrange(Y.shape[0]):for j inrange(Y.shape[1]):Y[i,j]=(X[i:i+h,j:j+w]*k).sum()#不指定dim的話是全部都加載一起#print(X[i:i+h,j:j+w]*k)return Y
classConv2D(nn.Module):def__init__(self, kernel_size):super().__init__()self.weight=nn.Parameter(torch.rand(kernel_size))self.bias=nn.Parameter(torch.zeros(1))defforward(self,x):return corr2d(x,self.weight)+self.bias
X = torch.ones((6,8))
X[:,2:6]=0
K=torch.tensor([[1.0,-1.0]])
Y = corr2d(X, K)
conv2d=Conv2D(kernel_size=(1,2))
optimizer=torch.optim.SGD(conv2d.parameters(),lr=0.05)for epoch inrange(500):out=conv2d(X)loss=((out-Y)**2).mean()optimizer.zero_grad()loss.backward()optimizer.step()print(f"Epoch {epoch+1}, loss = {loss.item():.4f}")print(conv2d.weight.data)print(conv2d.bias.data)
文章目錄一、背景二、實現方式1、電腦A(主)2、電腦B3、防火墻4、驗證三、踩坑1、有時候B上不了網一、背景
兩臺windows電腦A和B,想通過**微軟無界鼠標(Mouse without Borders)**實現一套鍵盤鼠標控制兩臺電腦…