主要作用:對輸入函數採用正則化。正則化的主要作用是加快神經網路的訓練速度。
class torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)
輸入引數:
num_features: 形狀為\((N, C, H, W)\)
其他引數預設即可
舉例:
# With Learnable Parameters
m = nn.BatchNorm2d(100)
# Without Learnable Parameters
m = nn.BatchNorm2d(100, affine=False)
input = torch.randn(20, 100, 35, 45)
output = m(input)
該函數用得不多
內含RNN、LSTM等函數,主要在nlp領域用的比較多
官方檔案: Recurrent Layers
class torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None
引數介紹:
in_features
out_features
bias(bool)
線性層具體引數解釋如下圖:
\(in\_features=d\),即指的是in_features的個數
\(out\_features=L\),即指的是out_features的個數
計算\(g\)的方法(以上圖\(g_1\)為例):
其中,\(b_i\)代表偏置,引數\(bias=True\),則加上\(b\);\(bias=False\),則不加\(b\)
在每次訓練神經網路的過程中,均會調整\(k_i\)、\(b_i\)的值,直到它變成一個合適的數值
由此可得:
以典型的VGG16 Model網路結構為例:
因此,設定in_features=4096; out_feature=1000
import torch
import torchvision
from torch.utils.data import DataLoader
from torch import nn
from torch.nn import Linear
dataset=torchvision.datasets.CIFAR10("./dataset",train=False,download=True,transform=torchvision.transforms.ToTensor())
dataloder=DataLoader(dataset,batch_size=64)
# for data in dataloder:
# imgs,targets = data
# #print(imgs.shape) #[Run] torch.Size([64, 3, 32, 32])
#
# #我們的目標是把影象尺寸變成1×1×1×根據前面計算得出的數,下面進行轉換
# output=torch.reshape(imgs,(1,1,1,-1))
# #print(output.shape) #[Run] torch.Size([1, 1, 1, 196608])
#根據上面output得出的196608尺寸資料,構造神經網路結構
class Demo(nn.Module):
def __init__(self):
super(Demo,self).__init__()
self.linear1=Linear(in_features=196608,out_features=10)
def forward(self,input):
output=self.linear1(input)
return output
#呼叫神經網路
demo=Demo()
for data in dataloder:
imgs,targets=data
output=torch.reshape(imgs,(1,1,1,-1))
output=demo.forward(output)
print(output.shape) #[Run] torch.Size([1, 1, 1, 10])
由此,成功將1×1×1×196608尺寸的影象轉化為1×1×1×10尺寸的影象
注意:
output=torch.reshape(imgs,(1,1,1,-1))
,為:output=torch.flatten(imgs)
# print(output.shape) #[Run] torch.Size([196608])
torch.flatten() 和torch.reshape() 的區別:
torch.flatten更方便,可以直接把影象變成一行
torch.reshape功能更強大,可任意指定影象尺寸
主要作用:在訓練的過程中隨機把一些input(輸入的tensor資料型別)變成0。變成0的概率由\(p\)決定
class torch.nn.Dropout(p=0.5, inplace=False)
主要用於自然語言處理中
class torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None,
max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False,
_weight=None, _freeze=False, device=None, dtype=None)
主要作用:計算兩個值之間的誤差,並指定誤差的衡量標準
主要作用:計算Loss的誤差大小
現在我們已經學會如何自己搭建神經網路模型了,下面介紹pytorch中神經網路模型的呼叫方法。根據官方檔案,我們可以呼叫自己需要的網路結構,而不需要自己寫程式碼
1.影象方面的網路結構
官網檔案:Models and pre-trained weights — Torchvision 0.15 documentation
2.語音方面的網路結構