Convolutional Highway 신경 네트워크
인터넷에서 찾을 수 있는 대부분은 전 연결층 버전의 실현이다.사실 권적판본도 매우 간단하다.
코드는 다음과 같습니다.
import torch
import torch.nn as nn
import torch.nn.functional as F
class ConvHighWay(nn.Module):
    """
    y = f(x)        ,     
    y = T(x, Wt) * x + (1 - T(x, Wt)) * H(x, Wh)
       highway      ,            。
       ,  x      (B,C,W,H)
        
    https://arxiv.org/abs/1505.00387
    """
    def __init__(self, in_channel, n_layers=1, activation_fn=F.relu):
        super(ConvHighWay, self).__init__()
        self.activation_fn = activation_fn
        self.n_layers = n_layers
        # kernel_size   padding       ,                 
        self.Wh = nn.ModuleList([nn.Conv2d(in_channels=in_channel, out_channels=in_channel, kernel_size=3, padding=1) for _ in range(n_layers)])
        self.Wt = nn.ModuleList([nn.Conv2d(in_channels=in_channel, out_channels=in_channel, kernel_size=3, padding=1) for _ in range(n_layers)])
        #              y = x, bt     ,  sigmoid(Wt * x + bt)   1
        for layer in self.Wt:
            layer.bias.data.fill_(1)
    def forward(self, x: torch.Tensor) -> torch.Tensor:
        for layer_i in range(self.n_layers):
            # H(x, Wh)
            nonlinear_part = self.activation_fn(self.Wh[layer_i](x))
            # T(x, Wt)
            gate = torch.sigmoid(self.Wt[layer_i](x))
            # T(x, Wt) * x + (1 - T(x, Wt)) * H(x, Wh)
            x = gate * x + (1 - gate) * nonlinear_part
        return x
if __name__ == "__main__":
    channel = 3
    highway = ConvHighWay(channel, n_layers=2)
    x = torch.rand((2, channel, 10, 10))
    print(x.size())
    y = highway(x)
    print(y.size())
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.