前言
随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了pytorch中三维卷积神经网络的使用。
一、三维卷积是什么?
在一般的图像卷积神经网络中,均使用的是二维的卷积神经网络,而在三维数据中比如高光谱数据以及视频数据,就很难将不同通道上的信息进行融合。因此使用三维卷积神经网络就能够很好的解决此问题。
二、相关代码和分析
1.引入库
代码如下(示例):
import torch.nn as nn
import torch
from pytorch_model_summary import summary
2.添加网络
代码如下(示例):
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv3d(in_channels=1, out_channels=128,
kernel_size=(3, 3, 3),stride=(2, 2, 2),padding=(3 // 2, 3, 3))
#self.pool = nn.MaxPool3d(kernel_size=(1, 3, 3), stride=(1, 2, 2),padding=(1//2,1,1))
def forward(self, x):
x = self.conv1(x)
#x = self.pool(x)
return x
该处使用的url网络请求的数据。
3.添加数据并运行网络
print(summary(Net(), torch.zeros((1, 1, 88, 75, 55)), show_input=True))
model = Net()
pred = model(video)
print(pred.shape)
4.运行,并输出结果
--------------------------------------------------------------------------
Layer (type) Input Shape Param # Tr. Param #
==========================================================================
Conv3d-1 [1, 1, 88, 75, 55] 3,584 3,584
==========================================================================
Total params: 3,584
Trainable params: 3,584
Non-trainable params: 0
--------------------------------------------------------------------------
torch.Size([1, 128, 44, 40, 30])
网络参数分析
N
=
(
(
H
−
k
e
r
n
e
l
s
i
z
e
+
2
∗
p
a
d
d
i
n
g
)
/
s
t
r
i
d
e
)
+
1.
N =((H-kernelsize+2*padding)/stride)+1.
N=((H−kernelsize+2∗padding)/stride)+1.
以上网络的参数量计算:
3
∗
3
∗
3
∗
128
+
128
=
3584
3*3*3*128+128=3584
3∗3∗3∗128+128=3584
2D:
(
B
,
C
,
H
,
W
)
(B,C,H,W)
(B,C,H,W),在进行2维卷积的时候卷积核作用的维度为:H,W
3D:
(
B
,
C
,
D
,
H
,
W
)
(B,C,D,H,W)
(B,C,D,H,W),在进行3维卷积的时候卷积核作用的维度为:D,H,W