pytouchのnn.Moduleで簡単な全リンク層の例を作ります。


pythonバージョン3.7は、仮想環境にインストールされたpytochを使って、このようにむやみに振り回し、他のpythonフレームに影響を与えないようにします。
1、まず一つの種類のLinearを定義し、nn.Moduleを継承する。

import torch as t
from torch import nn
from torch.autograd import Variable as V
 
class Linear(nn.Module):

  '''  Variable    ,       backward()'''
  def __init__(self, in_features, out_features):
    super().__init__()
    self.w = nn.Parameter( t.randn( in_features, out_features ) ) #  w   Parameter      Variable
    self.b = nn.Parameter( t.randn( out_features ) )   #  b
  
  def forward( self, x ): #   x    Variable  
    x = x.mm( self.w )
    return x + self.b.expand_as( x ) # b         x   
2、検証してみます

layer = Linear( 4,3 )
input = V ( t.randn( 2 ,4 ) )#    Variable    
out = layer( input )
out
xiの運行が成功した結果、次のようになりました。
tenssor([-2.934,2.590,4.0233],[1.1098,-3.8182,0.848]]fn=
Linearを利用して多層ネットワークを構築します。

class Perceptron( nn.Module ):
  def __init__( self,in_features, hidden_features, out_features ):
    super().__init__()
    self.layer1 = Linear( in_features , hidden_features )
    self.layer2 = Linear( hidden_features, out_features )
  def forward ( self ,x ):
    x = self.layer1( x )
    x = t.sigmoid( x ) # sigmoid()    
    return self.layer2( x )
テストします

perceptron = Perceptron ( 5,3 ,1 )
 
for name,param in perceptron.named_parameters(): 
  print( name, param.size() )
出力は予想通りです

layer1.w torch.Size([5, 3])
layer1.b torch.Size([3])
layer2.w torch.Size([3, 1])
layer2.b torch.Size([1])
以上のpytouchのnn.Module構造で簡単な全リンク層の例は、小編集が皆さんに共有しているすべての内容です。参考にしていただきたいです。どうぞよろしくお願いします。