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에 따라 라이센스가 부여됩니다.