CNN的可视化

前言

前文中已经实现了SimpleConvNet类,本文将通过把卷积层可视化,去了解在CNN层中到底实现了怎样的处理。

第一层权重的可视化

例如,假设第1层的卷积层的权重的形状是(30, 1, 5, 5),即30个大小为5 × 5、通道为1的滤波器。滤波器大小是5 × 5、通道数是1,意味着滤波器可以可视化为1通道的灰度图像。
通过对比学习前后的滤波器形状来比较权重的可视化。

代码如下:

# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
from simple_convnet import SimpleConvNet

def filter_show(filters, nx=8, margin=3, scale=10):
    """
    c.f. https://gist.github.com/aidiary/07d530d5e08011832b12#file-draw_weight-py
    """
    FN, C, FH, FW = filters.shape
    ny = int(np.ceil(FN / nx))

    fig = plt.figure()
    fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)

    for i in range(FN):
        ax = fig.add_subplot(ny, nx, i+1, xticks=[], yticks=[])
        ax.imshow(filters[i, 0], cmap=plt.cm.gray_r, interpolation='nearest')
    plt.show()

network = SimpleConvNet()
# 随机进行初始化后的权重
filter_show(network.params['W1'])

# 学习后的权重
network.load_params("params.pkl")
filter_show(network.params['W1'])

在这里插入图片描述

在这里插入图片描述

不同滤波器对应输出图像中 不同方向上的边缘响应情况。
卷积层的滤波器会提取边缘(颜色分界线)或斑块(局部的块状区域)等原始信息。而刚才实现的CNN会将这些原始信息传递给后面的层。

基于分层结构的信息提取

第1层的卷积层中提取了边缘或斑块等“低级”信息,那么在堆叠了多层的CNN中,各层中又会提取什么样的信息呢?
随着层次加深,反映强烈的神经元也越来越抽象
如图是一个物体识别的8层CNN。这个网络结构也称为AlexNet(堆叠了多层卷积层和池化层)
这个“抽象”的概念体现在随着层次的加深,提取的信息也越来越复杂,开始只是对简单的边缘有响应,接下来对纹理有响应。
在这里插入图片描述

几个具有代表性的CNN:AlexNet

在这里插入图片描述
AlexNet叠有多个卷积层和池化层,最后经由全连接层输出结果。
特点:
• 激活函数使用ReLU。
• 使用进行局部正规化的LRN(Local Response Normalization)层。
• 使用Dropout。

小结

① CNN在此前的全连接层的网络中新增了卷积层和池化层。
②使用im2col函数可以简单、高效地实现卷积层和池化层。
③通过CNN的可视化,可知随着层次变深,提取的信息愈加高级。
④ LeNet和AlexNet是CNN的代表性网络。

参考

《深度学习入门:基于Python的理论与实现 》斋藤康毅

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值