卷积神经网络

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,是否填充等因素决定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值