1. 目的
这篇文档介绍了一个名为CNN Explainer的交互式可视化系统,旨在帮助非专业人士学习卷积神经网络(CNN)。该系统通过直观的方式展示了CNN的工作原理,使用户能够更好地理解复杂的神经网络结构和运算过程。
CNN ExplainerAn interactive visualization system designed to help non-experts learn about Convolutional Neural Networks (CNNs).https://poloclub.github.io/cnn-explainer/
2. 概念解释
2.1 并行度
PP, Pixel Parallel
ICP, Input Channel Parallel
OCP, Output Channel Parallel
虚线框内表示每周期同时执行的操作。
- ICP:此CNN第一层有3个通道(RGB),如果DPU的ICP=3(支持3个并行数),意味着单周期内同时执行三个通道的乘法运算;如果ICP=8,那么第一层并没有完全利用DPU的并行算力。
- OCP:此CNN的输出有三个kernel,意味着有三个输出通道;如果OCP=3,那么三个输出通道并行计算。
- PP:每个pixcel都会一次或者多次参与卷积运算,DPU每次处理的pixel数量。
- 卷积阵列都会执行一次乘法和一次累加,这计作 2 次运算。每个周期的峰值运算数量等于PP*ICP*OCP*2。
2.2 超参数
CNN ExplainerAn interactive visualization system designed to help non-experts learn about Convolutional Neural Networks (CNNs).https://poloclub.github.io/cnn-explainer/
3. Tiny-VGG
filters = 10
tiny_vgg = Sequential([Conv2D(filters, (3, 3), input_shape=(64, 64, 3), name='conv_1_1'),Activation('relu', name='relu_1_1'),Conv2D(filters, (3, 3), name='conv_1_2'),Activation('relu', name='relu_1_2'),MaxPool2D((2, 2), name='max_pool_1'),Conv2D(filters, (3, 3), name='conv_2_1'),Activation('relu', name='relu_2_1'),Conv2D(filters, (3, 3), name='conv_2_2'),Activation('relu', name='relu_2_2'),MaxPool2D((2, 2), name='max_pool_2'),Flatten(name='flatten'),Dense(NUM_CLASS, activation='softmax', name='output')
])
对这个模型的逐层分析:
1. Conv2D(filters, (3, 3), input_shape=(64, 64, 3), name='conv_1_1'):
- 第一层是一个卷积层,有10个过滤器(卷积核),每个核的大小是3x3。
- input_shape=(64, 64, 3) 指定了输入图像的尺寸为64x64像素,且是彩色的(3个颜色通道:RGB)。
2. Activation('relu', name='relu_1_1'):
- 这层使用ReLU(Rectified Linear Unit)激活函数。ReLU函数能帮助网络使用非线性变换,并且具有加速训练的效果。
3. Conv2D(filters, (3, 3), name='conv_1_2'):
- 第三层又是一个卷积层,配置与第一层相同,也使用10个3x3的过滤器。
4. Activation('relu', name='relu_1_2'):
- 同第二层,使用ReLU激活函数。
5. MaxPool2D((2, 2), name='max_pool_1'):
- 最大池化层,使用2x2的池化窗口来降低特征图的空间维度(高和宽),这有助于减少计算量并且提取重要特征。
6. Conv2D(filters, (3, 3), name='conv_2_1'):
- 第五层是又一个卷积层,参数与前面的卷积层相同。
7. Activation('relu', name='relu_2_1'):
- 使用ReLU激活函数。
8. Conv2D(filters, (3, 3), name='conv_2_2'):
- 第七层也是卷积层,与其他卷积层参数相同。
9. Activation('relu', name='relu_2_2'):
- 使用ReLU激活函数。
10. MaxPool2D((2, 2), name='max_pool_2'):
- 另一个最大池化层,使用2x2的池化窗口。
11. Flatten(name='flatten'):
- 将多维的输出展平成一维,这样可以作为全连接层(Dense)的输入。
12. Dense(NUM_CLASS, activation='softmax', name='output'):
- 全连接层,输出尺寸为NUM_CLASS,这应该是根据具体任务设定的类别数。
- 使用softmax激活函数,这是多分类任务中常用的激活函数,用于输出每个类别的预测概率。
4. 总结
这篇文档介绍了一个名为CNN Explainer的交互式可视化系统,旨在帮助非专业人士学习卷积神经网络(CNN)。该系统通过直观的方式展示了CNN的工作原理,使用户能够更好地理解复杂的神经网络结构和运算过程。
文档首先解释了并行度的概念,包括像素并行(PP)、输入通道并行(ICP)和输出通道并行(OCP)。这些并行度参数决定了在每个周期内同时执行的操作数量。例如,ICP表示输入通道的并行度,如果DPU的ICP=3,意味着单周期内可以同时处理三个输入通道的运算。
接下来,文档详细分析了一个名为Tiny-VGG的CNN模型。该模型由多个卷积层、激活层、池化层和全连接层组成。每个卷积层使用3x3的过滤器,通过ReLU激活函数进行非线性变换。最大池化层用于降低特征图的空间维度,从而减少计算量并提取重要特征。最后,全连接层使用softmax激活函数输出每个类别的预测概率。
通过这种逐层分析,读者可以清晰地了解每一层的功能和作用,以及它们如何协同工作来完成图像分类任务。