学习记录:神经网络之三维卷积conv3d操作(2)

PyTorch对2个2通道的5x4x3的体积数据,使用一个3x2x1的卷积核进行卷积,输出通道数变为3。

import torch

# 定义输入数据
input_data = torch.randn(2, 2, 5, 4, 3)
print(input_data.shape)
print(input_data)
# 定义卷积层
conv_layer = torch.nn.Conv3d(in_channels=2,
                             out_channels=3,
                             kernel_size=(3, 2, 1))

# 执行卷积操作
output_data = conv_layer(input_data)

print(output_data.shape)  # 输出数据大小为 [2, 3, 3, 3, 3]
print(output_data)

输出结果:

torch.Size([2, 2, 5, 4, 3])
tensor([[[[[-2.2551,  1.8762,  0.9093],
           [-1.7491,  0.4743,  1.0860],
           [ 0.4244,  0.2500,  0.5701],
           [ 0.0351, -0.1341,  0.5168]],

          [[-0.9098, -0.1177, -0.6377],
           [ 0.5954, -0.5134,  0.8410],
           [ 0.9537, -0.5295,  2.1060],
           [ 1.2345,  0.3172, -0.0933]],

          [[ 0.7846,  1.6091, -1.2342],
           [ 0.2019, -0.1042, -0.2088],
           [-1.5975, -0.2866,  1.8364],
           [ 1.2532, -0.8723,  1.5267]],

          [[-0.5136, -0.6781,  0.8217],
           [-0.1457, -0.0252,  0.9866],
           [-0.3281,  1.3499,  0.7433],
           [-0.8644,  2.3591,  2.0216]],

          [[-0.2558, -0.5571,  0.5808],
           [-0.7241,  0.0676,  0.3299],
           [ 0.6700, -0.0186, -1.0560],
           [ 2.0923,  0.3727,  0.6217]]],


         [[[-0.6137,  0.4911,  0.1814],
           [-0.9086, -0.4520, -1.0195],
           [ 0.1902,  1.7698, -0.4411],
           [ 0.0367, -2.1763, -1.8843]],

          [[ 0.2941,  2.2297,  0.2112],
           [-0.8202,  2.3166, -2.4794],
           [-1.4520,  0.1378,  0.0831],
           [ 0.2710, -0.1140,  0.2289]],

          [[ 1.0764,  0.8957,  0.3158],
           [ 0.8457, -0.1029,  0.3473],
           [-0.6704, -0.4978,  1.5054],
           [ 0.6096, -0.6333, -0.0687]],

          [[-1.5285, -2.1601,  0.3354],
           [-0.2245,  0.4753, -0.7743],
           [-0.4968, -0.0827,  0.0913],
           [ 0.0222,  1.9793,  0.6967]],

          [[-0.0547,  0.0232,  0.8391],
           [ 1.4277,  1.3289, -0.7146],
           [ 1.2303, -2.2422, -2.6630],
           [-0.5919, -1.8626, -0.5085]]]],



        [[[[-1.0477, -1.0734, -0.8632],
           [-0.9833, -0.4233,  0.5288],
           [-0.9997, -0.5527,  0.4101],
           [ 0.0374, -0.4946,  1.9740]],

          [[-0.5776,  0.3546,  0.3264],
           [-0.6250,  0.9828,  1.0864],
           [ 0.1073,  1.1729,  0.1233],
           [-0.3755, -1.3044,  0.0986]],

          [[-1.2472,  0.9524, -1.9337],
           [ 0.3735,  1.2111,  0.7463],
           [ 1.5011, -2.3658,  0.0341],
           [-0.3289,  1.1919,  0.1201]],

          [[ 0.2477, -0.7489, -0.7459],
           [-0.1654, -0.8519, -1.9785],
           [-0.2175,  1.2661,  0.2153],
           [ 1.5167,  0.7904,  1.6788]],

          [[-0.2949,  0.8620,  0.3485],
           [ 1.0321,  0.0322,  0.8339],
           [ 1.3897, -0.3010,  0.5383],
           [-0.0753, -0.4847, -0.2365]]],


         [[[-0.1044,  0.4620,  0.7319],
           [ 0.2302,  0.0262, -0.9037],
           [-0.3036, -0.8206,  0.2374],
           [ 0.2612,  0.8650, -1.3442]],

          [[ 0.3538,  1.1530,  0.3804],
           [-1.0026,  0.7600,  0.6268],
           [-0.5890,  0.5478, -0.7653],
           [-0.3495,  0.0538,  1.1723]],

          [[ 0.9474,  0.5959,  0.4884],
           [-1.2340, -0.5679, -0.8211],
           [ 0.0709, -0.9129, -0.2954],
           [-0.2687, -0.8606, -1.9036]],

          [[-0.4183, -0.5826,  0.6255],
           [-0.2705, -1.0747, -0.6064],
           [-0.2809,  0.6190,  0.7359],
           [-0.2480,  2.1299, -0.6461]],

          [[ 2.4983, -0.1545, -1.5769],
           [-0.3627, -0.6923,  1.0241],
           [ 0.8108,  1.4751, -0.9881],
           [-0.8135, -0.1123, -0.2111]]]]])
torch.Size([2, 3, 3, 3, 3])
tensor([[[[[-0.1662, -0.2569, -0.7138],
           [-0.7776,  0.6162, -0.5957],
           [ 0.6610, -0.2079, -0.6501]],

          [[ 0.9971,  1.8393, -0.2067],
           [-0.1489,  0.7793, -0.4629],
           [-0.7375,  0.4156,  0.1187]],

          [[-0.2325, -0.3271,  0.0641],
           [ 0.1209, -0.4605, -0.0308],
           [ 0.5098,  0.7675,  0.7138]]],


         [[[ 1.3187, -1.5053,  0.3868],
           [ 1.0014, -0.7746,  2.0975],
           [ 1.7284, -0.3720,  0.4202]],

          [[ 0.0904,  0.5301, -0.5519],
           [-0.7908,  0.5951, -0.1777],
           [-0.1958,  0.7541,  0.6435]],

          [[ 0.5478,  0.6514,  0.8858],
           [ 1.2833,  0.1298, -0.5012],
           [ 0.4759,  0.5628, -0.1031]]],


         [[[-0.0203, -0.1382, -0.2519],
           [-0.1873, -0.0148, -0.3380],
           [-0.4782, -0.0333, -1.0595]],

          [[-0.9037, -0.5245, -0.5286],
           [-0.8268, -0.3960, -0.2062],
           [ 0.4748, -0.9875, -0.3498]],

          [[-0.0092,  0.1123, -0.2730],
           [-0.2261,  0.4015, -0.0370],
           [-0.9644,  0.2676, -0.2092]]]],



        [[[[ 0.5949,  0.5485,  0.8341],
           [ 0.6573, -0.6114, -0.0787],
           [-0.2610,  1.9108, -0.1707]],

          [[-0.0754,  0.2263, -0.7392],
           [-0.3371,  1.0639,  0.4181],
           [ 0.6580, -0.9818, -0.0117]],

          [[-0.0329, -0.6175,  1.1982],
           [-0.1406, -0.5078, -0.7542],
           [-1.2171,  0.3305, -0.4895]]],


         [[[ 0.6026,  0.5057,  1.0142],
           [ 0.7969, -0.2565, -0.0621],
           [ 0.1117,  0.8590, -0.7177]],

          [[-0.1182,  0.0791, -0.5745],
           [ 1.0970,  0.0877,  0.9835],
           [ 0.8267,  0.6727,  0.6993]],

          [[ 1.0547, -0.9257, -0.1850],
           [ 0.0687,  1.0054, -0.4995],
           [-0.1187,  1.0915,  0.1494]]],


         [[[-0.0869, -0.2858, -0.7185],
           [-0.0740,  0.2515, -0.3514],
           [-0.2124, -0.9353, -0.5132]],

          [[ 0.1691, -0.1786,  0.5258],
           [-0.0710, -1.3946, -0.6208],
           [-0.7662,  0.9605, -0.1005]],

          [[-0.9194, -0.1611, -1.3769],
           [-0.7140,  0.9090,  0.6599],
           [ 0.7931, -1.3090, -0.0885]]]]], grad_fn=<ConvolutionBackward0>)

对于输入2个2通道的5x4x3的体积数据,可以说明共有240个元素

-----------------------------------------------------------------------------------------------

          [[-2.2551,  1.8762,  0.9093],
           [-1.7491,  0.4743,  1.0860],
           [ 0.4244,  0.2500,  0.5701],
           [ 0.0351, -0.1341,  0.5168]]   

可以表示体积数据第一层的12个元素,也就是4x3,四行三列,用2个[ ]表示

-----------------------------------------------------------------------------------------------

         [[[-2.2551,  1.8762,  0.9093],
           [-1.7491,  0.4743,  1.0860],
           [ 0.4244,  0.2500,  0.5701],
           [ 0.0351, -0.1341,  0.5168]],

          [[-0.9098, -0.1177, -0.6377],
           [ 0.5954, -0.5134,  0.8410],
           [ 0.9537, -0.5295,  2.1060],
           [ 1.2345,  0.3172, -0.0933]],

          [[ 0.7846,  1.6091, -1.2342],
           [ 0.2019, -0.1042, -0.2088],
           [-1.5975, -0.2866,  1.8364],
           [ 1.2532, -0.8723,  1.5267]],

          [[-0.5136, -0.6781,  0.8217],
           [-0.1457, -0.0252,  0.9866],
           [-0.3281,  1.3499,  0.7433],
           [-0.8644,  2.3591,  2.0216]],

          [[-0.2558, -0.5571,  0.5808],
           [-0.7241,  0.0676,  0.3299],
           [ 0.6700, -0.0186, -1.0560],
           [ 2.0923,  0.3727,  0.6217]]]

可以表示体积数据第一个通道的5层4x3大小的60个元素,用3个[ ]表示

同理第二个通道也是5层4x3大小的60个元素,用3个[ ]表示

-----------------------------------------------------------------------------------------------

两个通道的元素构成一个2通道的5x4x3的体积数据,共有120个元素,用4个[ ]表示

-----------------------------------------------------------------------------------------------

共有两个2通道的5x4x3的体积数据,共有240个元素,用5个[ ]表示

对于输出的2个3通道的3x3x3大小的体积数据,也是同样的道理,共有162个元素。

-----------------------------------------------------------------------------------------------

体积数据第一层有9个元素,也就是3x3,三行三列,用2个[ ]表示

-----------------------------------------------------------------------------------------------

体积数据第一个通道有3层3x3大小的27个元素,用3个[ ]表示

同理第二个通道也是3层3x3大小的27个元素,用3个[ ]表示

同理第三个通道也是3层3x3大小的27个元素,用3个[ ]表示

-----------------------------------------------------------------------------------------------

三个通道的元素构成一个3通道的3x3x3的体积数据,共有81个元素,用4个[ ]表示

-----------------------------------------------------------------------------------------------

共有两个3通道的3x3x3的体积数据,共有162个元素,用5个[ ]表示

对5x4x3的输入体积数据使用3x2x1的卷积核进行卷积,输出大小3x3x3

对5x5x5的输入体积数据使用3x3x3的卷积核进行卷积,输出大小3x3x3

对5x6x7的输入体积数据使用3x3x3的卷积核进行卷积,输出大小3x4x5

由此可知,把axbxc想象成一个a层的bxc大小的体积数据,采用mxnxk的卷积核进行卷积,输出大小为(a-m+1)x(b-n+1)x(c-k+1),这样计算大小很快。

猜你喜欢

转载自blog.csdn.net/weixin_47247597/article/details/130583489