在機器學習中,線性層(Linear Layer)?是一種基礎的神經網絡組件,也稱為全連接層(Fully Connected Layer)?或密集層(Dense Layer)。
其嚴格的數學定義為:對輸入數據執行線性變換,生成輸出向量。
具體形式為:
????????????????Y=XW+b??
其中:
-
X?是輸入張量,通常形狀為?
[批次大小, 輸入維度]
; -
W?是可學習的權重矩陣,形狀為?
[輸入維度, 輸出維度]
; -
b?是可學習的偏置向量,形狀為?
[輸出維度]
; -
Y?是輸出張量,形狀為?
[批次大小, 輸出維度]
。
核心特性:
-
參數共享:同一層內的所有輸入神經元都通過權重矩陣?W?與輸出神經元相連,權重在整個輸入空間中共享。
-
線性變換:僅能表示線性函數,因此通常與非線性激活函數(如 ReLU)組合使用,以增強模型表達能力。
-
特征投影:本質上是將輸入特征投影到新的特征空間,輸出維度決定了新空間的維度。
線性網絡:?
?
?
參數
in_features?(int) – 每個輸入樣本的大小
out_features?(int) – 每個輸出樣本的大小
bias?(bool) – 如果設置為?
False
,該層將不學習加性偏置。默認值:?True
?
?代碼舉例
import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10("../torchvision_dataset", train=False,transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(dataset, batch_size=64)class MyModule(nn.Module):def __init__(self):super().__init__()"""下文:展開前:torch.Size([64, 3, 32, 32])展開后:torch.Size([1, 1, 1, 196608])"""self.linear = Linear(196608, 10)def forward(self, input):output = self.linear(input)return outputmodule = MyModule()for data in dataloader:imgs, targets = dataprint("原本圖像尺寸", imgs.shape)# 把二維圖片展開成一維的# imgs=torch.reshape(imgs,(1,1,1,-1))imgs = torch.flatten(imgs)print("展平后圖像尺寸", imgs.shape)output = module(imgs)print("經過線性層處理后圖像尺寸", output.shape)
?