1. 程式人生 > >pytorch方法測試——卷積(二維)

pytorch方法測試——卷積(二維)

測試程式碼:

import torch
import torch.nn as nn
m = nn.Conv2d(2, 2, 3, stride=2)
input = torch.randn(1, 2, 5, 7)
output = m(input)

print("輸入圖片(2張):")
print(input)
print("卷積的權重:")
print(m.weight)
print("卷積的偏重:")
print(m.bias)

print("二維卷積後的輸出:")
print(output)
print("輸出的尺度:")
print(output.size())

convBlockOne = 0
convBlockTwo = 0 for i in range(3): for j in range(3): # 第一個卷積核與圖片對應相乘 convBlockOne += m.weight[0][0][i][j] * input[0][0][i][j] \ + m.weight[0][1][i][j] * input[0][1][i][j] # 第二個卷積核與圖片對應相乘 convBlockTwo += m.weight[1][0][i][j] * input[0][0][i][j] \ + m.weight[1
][1][i][j] * input[0][1][i][j] convBlockOne += m.bias[0] convBlockTwo += m.bias[1] print("第一個卷積核的輸出:") print(convBlockOne) print("第二個卷積核的輸出:") print(convBlockTwo)
輸出為:
輸入圖片(2張):
tensor([[[[ 2.4427, -0.2766,  1.0519, -1.6580, -0.8700, -0.8712, -0.7140],
          [-1.1698, -2.2573,  0.3525, -0.4197,  1.2041, -0.2023,  1.9264],
          [-0.0254,  0.9521,  1.0125,  0.0290,  0.1366,  0.0254, -0.1338],
          [-0.5112, -0.7758, -1.6293, -0.6308,  1.3666, -0.4817, -1.2356],
          [ 0.4078,  0.9890, -1.4422, -0.1429, -0.1279,  0.0739, -1.3344]],


         [[ 0.1312,  0.8048, -0.1161,  0.2302, -0.9466,  0.2319, -0.6043],
          [ 0.1986, -1.4481, -0.1419,  1.9776,  0.2299,  0.1118, -0.7816],
          [ 1.2489, -0.6024, -0.2227,  1.0146,  0.2186, -2.1565,  0.2137],
          [ 0.4975,  0.4443,  1.5600, -0.5297, -0.1383, -0.2127, -0.2384],
          [-0.7814, -0.4293, -0.1300,  0.6533, -0.1616, -2.1529,  0.4245]]]])
卷積的權重:
Parameter containing:
tensor([[[[ 0.1036,  0.0479, -0.2199],
          [-0.0706,  0.1298,  0.2060],
          [-0.1952, -0.0824, -0.1373]],


         [[ 0.0859,  0.0842, -0.0924],
          [-0.1088, -0.1166,  0.2203],
          [ 0.0604, -0.0275,  0.1634]]],


        [[[-0.0427, -0.0766, -0.1260],
          [ 0.0904, -0.0593,  0.1716],
          [ 0.0350, -0.0175,  0.0726]],

         [[-0.0993, -0.1414, -0.0991],
          [-0.0991, -0.1124, -0.0041],
          [ 0.2299, -0.1311, -0.0510]]]])
卷積的偏重:
Parameter containing:
tensor([-0.0496, -0.1585])
二維卷積後的輸出:
tensor([[[[-0.1300,  0.0479,  0.1419],
          [-0.3342,  0.5077, -0.2927]],


         [[ 0.1763,  0.0098,  0.8924],
          [-0.9849, -0.4986,  0.2118]]]])
輸出的尺度:
torch.Size([1, 2, 2, 3])
第一個卷積核的輸出:
tensor(-0.1300)
第二個卷積核的輸出:
tensor(0.1763)

結論:

        這個大家基本都懂,就不多說了,只說一點,

        [[[ 0.1036,  0.0479, -0.2199],
          [-0.0706,  0.1298,  0.2060],
          [-0.1952, -0.0824, -0.1373]],


         [[ 0.0859,  0.0842, -0.0924],
          [-0.1088, -0.1166,  0.2203],
          [ 0.0604, -0.0275,  0.1634]]]
  為一個卷積核,而不是
        [[ 0.1036,  0.0479, -0.2199],
          [-0.0706,  0.1298,  0.2060],
          [-0.1952, -0.0824, -0.1373]]
為一個卷積核。