一、 概述
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
微信掃一掃
支付寶掃一掃