最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pytorch中的torch.nn.Linear()方法用法解讀

 更新時間:2024年02月26日 10:09:14   作者:擁抱晨曦之溫暖  
這篇文章主要介紹了Pytorch中的torch.nn.Linear()方法用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Pytorch torch.nn.Linear()方法

torch.nn.Linear()作為深度學習中最簡單的線性變換方法,其主要作用是對輸入數(shù)據(jù)應用線性轉(zhuǎn)換

看一下官方的解釋及介紹

class Linear(Module):
    r"""Applies a linear transformation to the incoming data: :math:`y = xA^T + b`
    This module supports :ref:`TensorFloat32<tf32_on_ampere>`.
    Args:
        in_features: size of each input sample
        out_features: size of each output sample
        bias: If set to ``False``, the layer will not learn an additive bias.
            Default: ``True``
    Shape:
        - Input: :math:`(N, *, H_{in})` where :math:`*` means any number of
          additional dimensions and :math:`H_{in} = \text{in\_features}`
        - Output: :math:`(N, *, H_{out})` where all but the last dimension
          are the same shape as the input and :math:`H_{out} = \text{out\_features}`.
    Attributes:
        weight: the learnable weights of the module of shape
            :math:`(\text{out\_features}, \text{in\_features})`. The values are
            initialized from :math:`\mathcal{U}(-\sqrt{k}, \sqrt{k})`, where
            :math:`k = \frac{1}{\text{in\_features}}`
        bias:   the learnable bias of the module of shape :math:`(\text{out\_features})`.
                If :attr:`bias` is ``True``, the values are initialized from
                :math:`\mathcal{U}(-\sqrt{k}, \sqrt{k})` where
                :math:`k = \frac{1}{\text{in\_features}}`
    Examples::
        >>> m = nn.Linear(20, 30)
        >>> input = torch.randn(128, 20)
        >>> output = m(input)
        >>> print(output.size())
        torch.Size([128, 30])
    """
    __constants__ = ['in_features', 'out_features']
    in_features: int
    out_features: int
    weight: Tensor
 
    def __init__(self, in_features: int, out_features: int, bias: bool = True) -> None:
        super(Linear, self).__init__()
        self.in_features = in_features
        self.out_features = out_features
        self.weight = Parameter(torch.Tensor(out_features, in_features))
        if bias:
            self.bias = Parameter(torch.Tensor(out_features))
        else:
            self.register_parameter('bias', None)
        self.reset_parameters()
 
    def reset_parameters(self) -> None:
        init.kaiming_uniform_(self.weight, a=math.sqrt(5))
        if self.bias is not None:
            fan_in, _ = init._calculate_fan_in_and_fan_out(self.weight)
            bound = 1 / math.sqrt(fan_in)
            init.uniform_(self.bias, -bound, bound)
 
    def forward(self, input: Tensor) -> Tensor:
        return F.linear(input, self.weight, self.bias)
 
    def extra_repr(self) -> str:
        return 'in_features={}, out_features={}, bias={}'.format(
            self.in_features, self.out_features, self.bias is not None
        )
 
 
# This class exists solely for Transformer; it has an annotation stating
# that bias is never None, which appeases TorchScript

這里我們主要看__init__()方法,很容易知道,當我們使用這個方法時一般需要傳入2~3個參數(shù),分別是in_features: int, out_features: int, bias: bool = True,第三個參數(shù)是說是否加偏置(bias),簡單來講,這個函數(shù)其實就是一個'一次函數(shù)':y = xA^T + b,(T表示張量A的轉(zhuǎn)置),首先super(Linear, self).__init__()就是老生常談的方法,之后初始化in_features和out_features,接下來就是比較重要的weight的設置,我們可以很清晰的看到weight的shape是(out_features,in_features)的,而我們在做xA^T時,并不是x和A^T相乘的,而是x和A.weight^T相乘的,這里需要大大留意,也就是說先對A做轉(zhuǎn)置得到A.weight,然后在丟入y = xA^T + b中,得出結(jié)果。

接下來奉上一個小例子來實踐一下:

import torch
 
# 隨機初始化一個shape為(128,20)的Tensor
x = torch.randn(128,20)
# 構(gòu)造線性變換函數(shù)y = xA^T + b,且參數(shù)(20,30)指的是A的shape,則A.weight的shape就是(30,20)了
y= torch.nn.Linear(20,30)
output = y(x)
# 按照以上邏輯使用torch中的簡單乘法函數(shù)進行檢驗,結(jié)果很顯然與上述符合
# 下面的y.weight可以理解為一個shape為(30,20)的一個可學習的矩陣,.t()表示轉(zhuǎn)置
# y.bias若為TRUE,則bias是一個Tensor,且其shape為out_features,在該程序中應為30
# 更加細致的表達一下y = (128 * 20) * (30 * 20)^T + (if bias (1,30) ,else: 0)
ans = torch.mm(x,y.weight.t())+y.bias
print('ans.shape:\n',ans.shape)
print(torch.equal(ans,output))

對torch.nn.Linear的理解

torch.nn.Linear是pytorch的線性變換層

定義如下:

Linear(in_features: int, out_features: int, bias: bool = True, device: Any | None = None, dtype: Any | None = None)

全連接層 Fully Connect 一般就就用這個函數(shù)來實現(xiàn)。

因此在潛意識里,變換的輸入張量的 shape 為 (batchsize, in_features),輸出張量的 shape 為 (batchsize, out_features)。

當然這是常用的方式,但是 Linear 的輸入張量的維度其實并不需要必須為上述的二維,多維也是完全可以的,Linear 僅是對輸入的最后一維做線性變換,不影響其他維。

可以看下官網(wǎng)的解釋

Linear — PyTorch 1.11.0 documentation

一個例子

如下:

import torch
input = torch.randn(30, 20, 10)  # [30, 20, 10]
linear = torch.nn.Linear(10, 15)  # (*, 10) --> (*, 15)
output = linear(input)
print(output.size()) # 輸出 [30, 20, 15]

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 用PyInstaller把Python代碼打包成單個獨立的exe可執(zhí)行文件

    用PyInstaller把Python代碼打包成單個獨立的exe可執(zhí)行文件

    這篇文章主要介紹了用PyInstaller把Python代碼打包成單個獨立的exe可執(zhí)行文件,需要的朋友可以參考下
    2018-05-05
  • python基礎中的文件對象詳解

    python基礎中的文件對象詳解

    這篇文章主要為大家介紹了python基礎中的文件對象,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python 提取html文本的方法

    python 提取html文本的方法

    在解決自然語言處理問題時,有時你需要獲得大量的文本集。互聯(lián)網(wǎng)是文本的最大來源,但是從任意HTML頁面提取文本是一項艱巨而痛苦的任務。本文將講述python高效提取html文本的方法
    2021-05-05
  • Python使用RPC例子

    Python使用RPC例子

    本文主要介紹了Python使用RPC例子,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Python 在OpenCV里實現(xiàn)仿射變換—坐標變換效果

    Python 在OpenCV里實現(xiàn)仿射變換—坐標變換效果

    這篇文章主要介紹了Python 在OpenCV里實現(xiàn)仿射變換—坐標變換效果,本文通過一個例子給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 使用Python Tkinter創(chuàng)建一個動態(tài)祝福彈窗的詳細教程

    使用Python Tkinter創(chuàng)建一個動態(tài)祝福彈窗的詳細教程

    本文手把手教你用Python的Tkinter庫創(chuàng)建一個浪漫的彈窗程序,包含淡入淡出動畫、多線程管理、隊列控制等高級特性,通過完整的代碼解析和配置指南,帶你掌握GUI編程的核心技巧,需要的朋友可以參考下
    2025-11-11
  • Python中__init__方法使用的深度解析

    Python中__init__方法使用的深度解析

    在Python的面向?qū)ο缶幊蹋∣OP)體系中,__init__方法如同建造房屋時的"奠基儀式"——它定義了對象誕生時的初始狀態(tài),下面我們就來深入了解下__init__方法吧
    2025-04-04
  • python使用正則篩選信用卡

    python使用正則篩選信用卡

    這篇文章主要為大家詳細介紹了python使用正則篩選信用卡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺談django2.0 ForeignKey參數(shù)的變化

    淺談django2.0 ForeignKey參數(shù)的變化

    今天小編就為大家分享一篇淺談django2.0 ForeignKey參數(shù)的變化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python+Kepler.gl實現(xiàn)時間輪播地圖過程解析

    Python+Kepler.gl實現(xiàn)時間輪播地圖過程解析

    這篇文章主要介紹了Python+Kepler.gl實現(xiàn)時間輪播地圖過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論

嵊州市| 平顶山市| 宁晋县| 云林县| 山东省| 巴彦淖尔市| 鄢陵县| 乐昌市| 吴旗县| 交城县| 通州市| 银川市| 南木林县| 云安县| 仁化县| 临江市| 革吉县| 南丹县| 望城县| 广昌县| 平阳县| 平塘县| 锡林郭勒盟| 五家渠市| 安国市| 临沭县| 如东县| 清新县| 阿拉善左旗| 清原| 清镇市| 卫辉市| 威远县| 于都县| 库车县| 神农架林区| 三江| 通化市| 太白县| 盘锦市| 南皮县|