PyTorch中的torch.matmul()

一、 概述

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 12:01
下一篇 2025-01-02 12:01

相關推薦

  • PyTorch模塊簡介

    PyTorch是一個開源的機器學習框架,它基於Torch,是一個Python優先的深度學習框架,同時也支持C++,非常容易上手。PyTorch中的核心模塊是torch,提供一些很好…

    編程 2025-04-27
  • 動手學深度學習 PyTorch

    一、基本介紹 深度學習是對人工神經網絡的發展與應用。在人工神經網絡中,神經元通過接受輸入來生成輸出。深度學習通常使用很多層神經元來構建模型,這樣可以處理更加複雜的問題。PyTorc…

    編程 2025-04-25
  • 深入淺出torch.autograd

    一、介紹autograd torch.autograd 模塊是 PyTorch 中的自動微分引擎。它支持任意數量的計算圖,可以自動執行前向傳遞、後向傳遞和計算梯度,同時提供很多有用…

    編程 2025-04-24
  • 深入了解 PyTorch Transforms

    PyTorch 是目前深度學習領域最流行的框架之一。其提供了豐富的功能和靈活性,使其成為科學家和開發人員的首選選擇。在 PyTorch 中,transforms 是用於轉換圖像和數…

    編程 2025-04-24
  • 如何卸載torch——多方面詳細闡述

    一、卸載torch的必要性 隨着人工智能領域的不斷發展,越來越多的深度學習框架被廣泛應用,torch也是其中之一。然而,在使用torch過程中,我們也不可避免會遇到需要卸載的情況。…

    編程 2025-04-23
  • PyTorch SGD詳解

    一、什麼是PyTorch SGD PyTorch SGD(Stochastic Gradient Descent)是一種機器學習算法,常用於優化模型訓練過程中的參數。 對於目標函數…

    編程 2025-04-23
  • 深入了解PyTorch

    一、PyTorch介紹 PyTorch是由Facebook開源的深度學習框架,它是一個動態圖框架,因此使用起來非常靈活,而且可以方便地進行調試。在PyTorch中,我們可以使用Py…

    編程 2025-04-23
  • torch.mm詳解

    一、torch.mm的基礎知識 torch.mm(input, mat2, out=None)函數是計算兩個tensor的矩陣乘法。其中,input是第一個矩陣,mat2是第二個矩…

    編程 2025-04-22
  • Python3.7對應的PyTorch版本詳解

    一、PyTorch是什麼 PyTorch是一個基於Python的機器學習庫,它是由Facebook AI研究院開發的。PyTorch具有動態圖和靜態圖兩種構建神經網絡的方式,還擁有…

    編程 2025-04-22
  • 在PyCharm中安裝PyTorch

    一、安裝PyCharm 首先,需要下載並安裝PyCharm。可以在官網上下載安裝包,根據自己的系統版本選擇合適的安裝包下載。在完成下載後,可以根據嚮導完成安裝。 安裝完成後,打開P…

    編程 2025-04-20

發表回復

登錄後才能評論