卷积神经网络(Convolutional Neural Network,CNN)是深度学习中一种非常流行的模型,广泛应用于图像识别、视频分析等领域。本文将简要介绍CNN的数学原理。

卷积操作

CNN的核心操作是卷积。卷积操作可以看作是一种特殊的线性变换,它通过滑动一个称为卷积核(或滤波器)的窗口在输入数据上,与窗口内的数据元素进行加权求和,从而生成输出特征图。

import numpy as np

def conv2d(x, W, b):
    out = np.zeros_like(x)
    for i in range(x.shape[0]):
        for j in range(x.shape[1]):
            for k in range(x.shape[2]):
                out[i, j] += np.sum(x[i:i+W.shape[0], j:j+W.shape[1], k]*W[k])
    out += b
    return out

激活函数

卷积操作后,通常会使用激活函数来引入非线性,使得模型能够学习更复杂的特征。常用的激活函数有Sigmoid、ReLU、Tanh等。

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def relu(x):
    return np.maximum(0, x)

卷积神经网络结构

CNN的结构通常包括卷积层、池化层和全连接层。

  1. 卷积层:通过卷积操作提取输入数据的特征。
  2. 池化层:降低特征图的分辨率,减少参数数量,提高计算效率。
  3. 全连接层:将所有特征图中的特征进行拼接,并连接到全连接层进行分类。
def conv_block(x, W, b, activation):
    out = conv2d(x, W, b)
    return activation(out)

本站链接

更多关于CNN的内容,请参考深度学习教程

图片

CNN