一、 概述
torch.matmul(input, other, *, out=None) 對矩陣或向量進行乘法運算,返回結果矩陣。
二、 用法
1. 用法示例
import torch A = torch.randn(2, 3) B = torch.randn(3, 4) # 結果矩陣為 (2, 4) C = torch.matmul(A, B) print(C)
2. 參數說明
input(tensor): 輸入的矩陣或者向量
other(tensor): 另一個矩陣或向量
out(tensor, optional): 輸出結果矩陣
3. 注意事項
輸入矩陣的最後一維的大小必須與另一個矩陣的倒數第二維相等。input為二維矩陣或高維張量時被視為堆疊的向量序列。另一個變量與輸入張量的積將被計算。注意:等價於調用torch.mm(),但maxtrix1和matrix2都必須是2D張量,而matmul則支持張量任意數量的維度,矩陣乘法將在後兩個維度中,這有助於通過廣播多個矩陣。這裡用一個例子來解釋:如果我們有一個形狀為(3,3,4)的三維矩陣和一個形狀為(4,5)的二維矩陣,並希望對前兩個維度執行矩陣乘法,則可以對這兩個矩陣分別使用transpose和reshape方法。
三、 應用
1. 線性回歸
在機器學習中,線性回歸是一個基礎的模型。簡單的可以使用矩陣運算來實現,例如:
import matplotlib.pyplot as plt import torch from torch.nn import Linear # 確定輸入和輸出的維度 x = torch.randn(100, 1) * 10 y = x + torch.randn(100, 1) * 3 # 定義模型 model = Linear(in_features=1, out_features=1) # 定義損失函數 loss_func = torch.nn.MSELoss() # 定義優化器 optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 訓練100次 for i in range(100): y_pred = model(x) loss = loss_func(y_pred, y) optimizer.zero_grad() loss.backward() optimizer.step() plt.scatter(x, y) plt.plot(x, y_pred.detach().numpy(), 'r') plt.show()
在每次訓練中,我們首先使用模型得到預測值,然後計算損失函數並更新優化器。這一部分可以使用matmul輕鬆實現。在我們的例子中,輸入x和模型權重將通過matmul方法相乘。
2. 卷積運算
卷積運算是在深度學習中使用廣泛的一種運算。我們可以使用matmul方法實現自定義卷積層。這裡給出一個簡單的例子:
import torch import torch.nn.functional as F # 定義自定義卷積層 class ConvLayer(torch.nn.Module): def __init__(self): super(ConvLayer, self).__init__() # 定義卷積核 self.filter = torch.randn((3, 3, 3)) / 9 self.filter.requires_grad = True def forward(self, x): # 將x切分成大小為3的窗口 patches = x.unfold(2, 3, 1).unfold(3, 3, 1) # 將窗口展開成大小為(1, 3*3*3)的向量 patches = patches.reshape((-1, 3*3*3)) # 與卷積核相乘 conv = torch.matmul(patches, self.filter.reshape(-1, 1)) # 將結果轉換回卷積層形狀 conv = conv.reshape(conv.shape[:-1] + (x.shape[2] - 2, x.shape[3] - 2)) return F.relu(conv) # 測試自定義卷積層 layer = ConvLayer() x = torch.randn(1, 3, 5, 5) y = layer(x) print(y.shape)
在這個例子中,x通過使用展開和矩陣乘法與卷積核相乘。然後,我們將結果轉換回原始形狀,以獲得輸出。這種方法相對於使用卷積實現的方法來說,可能會慢一些,但是如果我們希望實現一個非常特殊的數據處理操作,這種方法還是很有用的。
四、小結
在PyTorch中,torch.matmul()是一個非常重要的方法,我們可以利用它進行矩陣乘法運算。在機器學習中,線性回歸和卷積層都是使用matmul方法的常見應用案例。matmul()方法的使用要求我們對輸入和輸出的形狀有一定的了解,但只要掌握了這些基本方法,我們就能夠構建複雜的模型和算法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/306465.html