欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

卷积神经网络

程序员文章站 2022-07-06 13:46:12
...

1.1 四层全连接网络如下:

卷积神经网络

 网络参数量的计算:

输入为n个节点,输出为m个节点。每个连接具有一个权重w(n*m个权重),且要加上一个常量b(m个)。因此一层的总参数量为n*m+m。

构建模型程序如下:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers,Sequential,losses,optimizers,datasets
#......# 此处插入内存按需分配代码
# 创建 4 层全连接网络
model = keras.Sequential([
    layers.Dense(256, activation='relu'),
    layers.Dense(256, activation='relu'),
    layers.Dense(256, activation='relu'),
    layers.Dense(10),
])
# build 模型,并打印模型信息
model.build(input_shape=(4, 784))
model.summary()

将TensorFlow 的显存使用方式设置为按需分配 :

该部分代码需要插入上述代码的建模前面!!!

# 将TensorFlow 的显存使用方式设置为按需分配
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        # 设置 GPU 显存占用为按需分配
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
    except RuntimeError as e:
        # 异常处理
        print(e)

运行结果如下: 

 

卷积神经网络

 

1.2 局部相关性

 全连接示意图如下:

卷积神经网络

这种全连接方式无疑增大了就算计内存的使用,深度学习无法向更深层次进行下去。

局部连接方式:

卷积神经网络

原理就是仅对一定欧氏距离范围内的节点进行连接。如下式:

卷积神经网络

 1.3 权值共享

如下图所示,在计算左上角位置的输出像素时,使用下式权值参数与对应感受野内部的像素相乘累加,作为左上角像素的输出值。在计算右下方感受野区域时,共享权值参数 W,即使用相同的权值参数 W 相乘累加,得到右下角像素的输出值,此时网络层的参数量只有 3*3=9 个,且与输入、输出节点数无关。

卷积神经网络

卷积神经网络

上述这种局部连接、权值共享的网络其实就是卷积神经网络。

数学角度分析卷积神经网络:

1.4 卷积

基于2D图片函数f(m,n)和2D卷积核g(m,n)卷积运算如下式:

卷积神经网络

 2D离散卷积运算可以用下面几幅图形象的描述:

卷积神经网络

[f*g](-1,-1)=2*5+3*-1+5*0+0*-1=7,将卷积核函数图向左和向上平移一格如下图所示: 

卷积神经网络

最终结果如下图所示:

卷积神经网络

至此成功完成一个图片与卷积核的卷积运算,得到一个新的图片。 在深度学习中,权值函数g(m,n)称为卷积核(Kernel)。正是基于卷积运算,卷积神经网络才能如此得名。

1.5 卷积神经网络

单通道输入,单卷积核:

对应元素相乘再相加放入对应位置,这里要注意起始红色框位置的移动,作为特征值得输入位置。卷积核矩阵的移动不超过图片有效像素矩阵的边界边界。

卷积神经网络

最终结果如下所示: 

卷积神经网络

 结论:卷积运算的输出矩阵大小由卷积核的大小 k,输入 X 的高宽 h/w,移动步长s,是否填充等因素决定。

相关标签: Python学习