卷积神经网络CNN与深度卷积神经网络DCNN

作为小白,看到DCNN,一直想知道与CNN的区别,也没找到明确的说法,以下是自己的一点想法,欢迎指正!

 

目录

一、CNN与DCNN

二、基于pytorch的实现

1.LeNet-5

2.AlexNet


一、CNN与DCNN

卷积神经网络,如:LeNet

深度卷积神经网络,如:AlexNet

AlexNet是第一个现代深度卷积网络模型,首次使用了许多现代深度卷积网络的技术方法,比如,采用ReLu作为非线性激活函数,使用Dropout防止过拟合,是用数据增强提高模型准确率,使用GPU进行并行训练等。

AlexNet与LeNet结构类似,但使用了更多的卷积层和更大的参数空间来拟合大规模数据集ImageNet。

卷积神经网络就是含卷积层的网络。AlexNet是浅层神经网络和深度神经网络的分界线。

(选自书《动手学深度学习》、《神经网络与深度学习》)

二、基于pytorch的实现

参考卷积神经网络之 – Lenet

LeNet、AlexNet模型实现(pytorch)

1.LeNet-5:

卷积神经网络CNN)与深度卷积神经网络DCNN)卷积神经网络CNN)与深度卷积神经网络DCNN)

来自《神经网络与深度学习》

Input -> conv1 6) -> pool1 -> conv2 16) -> pool2 -> fc3 120) -> fc4 84) -> fc5 10) -> softmax

代码实现与原文存在一定差异

import torch
import torch.nn as nn
import torch.nn.functional as func

class LeNet5nn.Module):
    def __init__self,num_classes, grayscale=False):
        """
              num_classes: 分类的数量
              grayscale:是否为灰度图
              """
        superLeNet5, self).__init__)

        self.grayscale = grayscale
        self.num_classes = num_classes

        if self.grayscale:  # 可以适用单通道和三通道的图像
            in_channels = 1
        else:
            in_channels = 3

        self.conv1 =self.conv1 = nn.Conv2din_channels, 6, kernel_size=5)
        self.conv2 = nn.Conv2d6, 16, kernel_size=5)
        self.fc1 = nn.Linear16*5*5, 120)
        self.fc2 = nn.Linear120, 84)
        self.fc3 = nn.Linear84, num_classes)

    def forwardself, x):
        x = func.max_pool2dself.conv1x), 2)   # 原始的模型使用的是 平均池化
        x = func.max_pool2dself.conv2x), 2)
        x = x.viewx.size0), -1)
        x = self.fc3self.fc2self.fc1x)))
        x = func.softmaxx,dim=1)
        return x

#(最后模拟了一个输入,输出一个分类器运算后 10 个 softmax 概率值)
num_classes = 10  # 分类数目
grayscale = True  # 是否为灰度图
data = torch.rand1, 1, 32, 32))
print"input data:\n", data, "\n")
model = LeNet5num_classes, grayscale)
x= modeldata)
printx)

卷积神经网络CNN)与深度卷积神经网络DCNN)卷积神经网络CNN)与深度卷积神经网络DCNN)

2.AlexNet

 

previewpreview

卷积神经网络CNN)与深度卷积神经网络DCNN)卷积神经网络CNN)与深度卷积神经网络DCNN)

来自《神经网络与深度学习》

 

假设输入为32*32大小图像,代码实现与上文所述存在一定差异。

import torch
import torch.nn as nn
class AlexNetnn.Module):
    def __init__self,num_classes, grayscale=False):

        superAlexNet, self).__init__)
        self.grayscale = grayscale
        self.num_classes = num_classes
        if self.grayscale:  # 可以适用单通道和三通道的图像
            in_channels = 1
        else:
            in_channels = 3

        self.features = nn.Sequential
            nn.Conv2din_channels, 96, kernel_size=11,padding=1),
            nn.ReLUinplace=True),
            nn.MaxPool2dkernel_size=2),
            nn.Conv2d96, 256, kernel_size=3, padding=1),
            nn.ReLUinplace=True),
            nn.MaxPool2dkernel_size=2),
            nn.Conv2d256, 384, kernel_size=3, padding=1),
            nn.ReLUinplace=True),
            nn.Conv2d384, 384, kernel_size=3, padding=1),
            nn.ReLUinplace=True),
            nn.Conv2d384, 256, kernel_size=3, padding=1),
            nn.ReLUinplace=True),
            nn.MaxPool2dkernel_size=2),
        )
        self.classifier = nn.Sequential
            nn.Dropout),
            nn.Linear256 * 3 * 3, 4096),
            nn.ReLUinplace=True),
            nn.Dropout),
            nn.Linear4096, 4096),
            nn.ReLUinplace=True),
            nn.Linear4096, 10),
        )

    def forwardself, x):
        x = self.featuresx)
        x = x.viewx.size0), 256 * 3 * 3)
        x = self.classifierx)
        return x

#最后模拟了一个输入,输出一个分类器运算后的值
num_classes = 10  # 分类数目
grayscale = True  # 是否为灰度图
data = torch.rand1, 1, 32, 32))
print"input data:\n", data, "\n")
model = AlexNetnum_classes,grayscale)
x=modeldata)
printx)

卷积神经网络CNN)与深度卷积神经网络DCNN)卷积神经网络CNN)与深度卷积神经网络DCNN)

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注