卷积神经网络是个啥
1.简单卷积网络介绍
![](https://img.haomeiwen.com/i13880926/cad6762cf4c97928.png)
图片所述的是Lenet-5的网络结构,我们从中挑选我们需要理解的部分。(新手理解,找不到合适的图,暂且选用这个图进行说明。)
一个卷积神经网络由若干卷积层、Pooling层、全连接层组成。你可以构建各种不同的卷积神经网络,它的常用架构模式为:
INPUT -> [[CONV]*N -> POOL?]*M -> [FC]*K
也就是N个卷积层再叠加一个Pooling层,重复这个结构M次,最后叠加K个全连接层。
2.层结构介绍
从图1可以看出,卷积神经网络与全连接神经网络的层结构有很大不同,全连接层每层的神经元是按照一维排列的,也就是排成一条线的样子;而卷积神经网络每层的神经元是按照三维排列的,也就是排成一个长方体的样子,有宽度、高度和深度。
卷积神经网络过程
卷积层对图像进行了卷积操作,得到了Feature Map。卷积层包含一个超参数--Filter个数,有几个Filter个数,就会产生几个Feature Map,得到的Feature Map也被称为通道(channel)。
经历了卷积后,pooling层对得到的Feature Map进行了下采样,得到同样数量更小的Feature Map。接着,是第二个卷积层,它有5个Filter。每个Fitler都把前面下采样之后的3个Feature Map卷积在一起,得到一个新的Feature Map。*这样,5个Filter就得到了5个Feature Map。接着,是第二个Pooling,继续对5个Feature Map进行下采样,得到了5个更小的Feature Map。
后面接着为全连接层。第一个全连接层的每个神经元,和上一层得到的Feature Map中的每个神经元相连,第二个全连接层(也就是输出层)的每个神经元,则和第一个全连接层的每个神经元相连,这样得到了整个网络的输出。
卷积神经网络的简单pytorch定义实现
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 3x3 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 3)
self.conv2 = nn.Conv2d(6, 16, 3)
self.fc1 = nn.Linear(16 * 6 * 6, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:]
num_features = 1
for s in size:
num_features *= s
return num_features
网友评论