簡體   English   中英

如何在 Pytorch 的 CNN 中訪問卷積層的權重和 L2 范數?

[英]How to access weight and L2 norm of conv layers in a CNN in Pytorch?

是否有 PyTorch 函數可以訪問這些函數?

您可以使用

torch.div(model[i].weight, torch.norm(model[i].weight), out=model[i].weight)

玩具示例(內聯記錄)。

import torch
from torch.nn import Linear, ReLU, CrossEntropyLoss, Sequential, Conv2d, MaxPool2d, Module, Softmax, BatchNorm2d, Dropout
from torch.optim import Adam

# Define model
model = Sequential(
            Conv2d(1, 4, kernel_size=3, stride=1, padding=1),
            BatchNorm2d(4),
            ReLU(inplace=True),
            MaxPool2d(kernel_size=2, stride=2),
            # Defining another 2D convolution layer
            Conv2d(4, 4, kernel_size=3, stride=1, padding=1),
            BatchNorm2d(4),
            ReLU(inplace=True),
            MaxPool2d(kernel_size=2, stride=2),
        )

optimizer = Adam(model.parameters(), lr=0.07)
criterion = CrossEntropyLoss()

# Train loop
for epoch in range(10):
    optimizer.zero_grad()

    # Forward
    # y_hat = model(X_train)
    # loss = criterion(y_train, y_hat)

    # Backward
    # loss.backward()
    #  optimizer.step()

    # Now maunually update the weights
    for i in range(len(model)):
      with torch.no_grad():
        if hasattr(model[i], 'weight'):
          torch.div(model[i].weight, torch.norm(model[i].weight), out=model[i].weight)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM