0

私は次のように私のシーケンシャルモデルを定義したとします入力例(複数可)指定された中間層活性値を取得

require 'nn' 
net = nn.Sequential() 
net:add(nn.SpatialConvolution(1, 6, 5, 5)) -- 1 input image channel, 6 output channels, 5x5 convolution kernel 
net:add(nn.ReLU())      -- non-linearity 
net:add(nn.SpatialMaxPooling(2,2,2,2))  -- A max-pooling operation that looks at 2x2 windows and finds the max. 
net:add(nn.SpatialConvolution(6, 16, 5, 5)) 
net:add(nn.ReLU())      -- non-linearity 
net:add(nn.SpatialMaxPooling(2,2,2,2)) 
net:add(nn.View(16*5*5))     -- reshapes from a 3D tensor of 16x5x5 into 1D tensor of 16*5*5 
net:add(nn.Linear(16*5*5, 120))    -- fully connected layer (matrix multiplication between input and weights) 
net:add(nn.ReLU())      -- non-linearity 
net:add(nn.Linear(120, 84)) 
net:add(nn.ReLU())      -- non-linearity 
net:add(nn.Linear(84, 10))     -- 10 is the number of outputs of the network (in this case, 10 digits) 
net:add(nn.LogSoftMax())      -- converts the output to a log-probability. Useful for classification problems 

そしてここでは、印刷されたモデルです。

単に net:forward(input)戻っ使っ
net 
nn.Sequential { 
    [input -> (1) -> (2) -> (3) -> (4) -> (5) -> (6) -> (7) -> (8) -> (9) -> (10) -> (11) -> (12) -> (13) -> output] 
    (1): nn.SpatialConvolution(1 -> 6, 5x5) 
    (2): nn.ReLU 
    (3): nn.SpatialMaxPooling(2x2, 2,2) 
    (4): nn.SpatialConvolution(6 -> 16, 5x5) 
    (5): nn.ReLU 
    (6): nn.SpatialMaxPooling(2x2, 2,2) 
    (7): nn.View(400) 
    (8): nn.Linear(400 -> 120) 
    (9): nn.ReLU 
    (10): nn.Linear(120 -> 84) 
    (11): nn.ReLU 
    (12): nn.Linear(84 -> 10) 
    (13): nn.LogSoftMax 
} 

LogSoftMaxが適用された後の最後のレイヤの出力は、私が望まないものです。代わりに、いくつかの中間層(例:モジュール6)のアクティベーションを取得したいと考えています。

入力を入力する際に​​、中間層のそれぞれの活性化を取得するにはどうすればよいですか?すなわち、入力例をネットワークに供給し、最終層だけでなく、第6層(畳み込み層)の活性化結果を抽出したい。

おかげnet:get(6).output経由

答えて

関連する問題