本文由 发布,转载请注明出处,如有问题请联系我们! 发布时间: 2021-07-24pytorch中网络特征图(feture map)、卷积核权重、卷积核最匹配样本、类别激活图(Class Activation Map/CAM)、网络结构的可视化方法

加载中

文件目录
  • 0,数据可视化的必要性:
  • 1,特点图(feture map)
  • 2,全连接层权重值
  • 3,全连接层最配对样版
  • 4,类型激话图(Class Activation Map/CAM)
  • 5,网络架构的数据可视化

0,数据可视化的必要性:

深度神经网络许多方位说白了改善实体模型、改善互联网全是在依照人的主观性观念在改善,经常在说实体模型的实质是获取特点,但并不了解它获取了哪些特点、什么地区针对鉴别真真正正起功效、也不知道互联网是依据哪些得到了归类結果。为了更好地提高結果的可实证性,必须 得出实体模型的一些数据可视化图来证实实体模型或新methods针对每日任务的功效,这一点不但能提升新实体模型或新methods真实度;还能够依据数据可视化某一互联网的結果剖析其存在的不足,进而明确提出新的改善方式。(写毕业论文还能够用于凑篇幅、凑劳动量:)

无独特表明,文中中常用的互联网是:

torchvision.models.resnet50(pretrained=True)

常用的照片为
案例16C1

1,特点图(feture map)

  • 定义
    特点图是一个在深度神经网络的研究过程中常常会碰到的定义,简易而言便是对键入开展一次测算解决后的輸出,根据对特点图的数据可视化能够 看得出键入样版在互联网中的转变状况。
  • 数据可视化方式:
    • 立即数据可视化:立即让键入数据信息历经各层互联网,获得各层互联网解决后的輸出,随后制作要想展现的特点图就可以。
    • 反卷积网络(deconvnet)From 'Visualizing and Understanding Convolutional Networks':对一个训炼好的神经元网络中随意一层feature map历经反卷积网络后重新构建出清晰度室内空间,关键实际操作是
      • Unpooling/反池化:将最高值放进原部位,而别的部位立即置零。
      • Rectification:一样应用Relu做为激活函数。
      • Filtering/反卷积:应用原互联网的全连接层的转置做为全连接层,对Rectification后的輸出开展卷积和。
    • 导向性反向传播(Guided-backpropagation)From 'Striving for simplicity: The all convolutional net':其与反卷积网络的差别取决于对ReLU的处理方法,在反卷积网络中应用ReLU解决梯度方向,只传回梯度方向超过0的部位;而在一般反向传播中只传回feature map中超过0的部位;在导向性反向传播中融合这二者,只传回键入和梯度方向都超过0的部位。
  • 事例
'''方式1,立即数据可视化'''
import torch
import torchvision
import cv2
from PIL import Image
import torchvision.models as models
import torch.nn as nn
from matplotlib import pyplot as plt
import math

'''1,载入训炼实体模型'''
resnet50 = models.resnet50(pretrained=True)
print(resnet50)

'''2,获取CNN层,非务必'''
conv_layers = []
model_weights = []
model_children = list(models.resnet50().children())
counter = 0

for i in range(len(model_children)):
    if type(model_children[i]) == nn.Conv2d:
        counter  = 1
        model_weights.append(model_children[i].weight)
        conv_layers.append(model_children[i])
    elif type(model_children[i]) == nn.Sequential:
        for j in range(len(model_children[i])):
            for child in model_children[i][j].children():
                if type(child) == nn.Conv2d:
                    counter  = 1
                    model_weights.append(child.weight)
                    conv_layers.append(child)

'''3,获取数据'''
img = cv2.cvtColor(cv2.imread('data.jpg'), cv2.COLOR_BGR2RGB)
img = torchvision.transforms.Compose([
    torchvision.transforms.ToPILImage(),
    torchvision.transforms.Resize((1050, 1680)),
    torchvision.transforms.ToTensor(),
    torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])(img).unsqueeze(0)

'''4,特点投射,这儿制作第一层卷积和的feature map'''
featuremaps = [conv_layers[0](img)]
plt.figure(1)
for i in range(64):
    plt.subplot(8, 8, i   1)
    plt.axis('off')
    plt.imshow(featuremaps[0][0, i, :, :].detach(), cmap='gray')
plt.show()
案例16C1

2,全连接层权重值

  • 定义
    全连接层的测算能够 当作是在预估相似性,二维全连接层自身能够 当作是一副缩列图,一维全连接层自身还可以当作是一段一维数据信号,全连接层权重值的数据可视化便是将这种数据可视化。(尽管这种信息内容基本上全是乱七八糟的,没有什么用:)
  • 数据可视化方式
    取下某一要想数据可视化的全连接层权重值,随后制图就可以。
  • 事例
    for i in range(64):
        plt.subplot(8, 8, i 1)
        plt.axis('off')
        plt.imshow(model_weights[0][i][0, :, :].detach(), cmap='gray')
    plt.show()
    
    案例16C1

3,全连接层最配对样版

  • 定义
    如同2中提及的,全连接层的测算能够 当作是在预估相似性,那麼在一批样版中历经全连接层测算之后的相似性值毫无疑问有高有底,那麼类似值越高就就越达到这一全连接层的“口感”,这也代表着该样版与该全连接层越配对。那麼,是否有方式可以超过比较有限的训练样本,转化成与特殊全连接层最配对的样版呢?回答是毫无疑问的。一个行得通的构思是:任意复位转化成一个样版(指的是对样版的每个数据信息点任意选值,而不是在数据信息集中化任意选一个样版),随后历经前向散播到该全连接层;大家期待这一随机生成的样版在历经这一层全连接层时响应值能尽量的大(响应值较为大的样版是这一全连接层较为认同的,是与鉴别每日任务更有关的);我们要做的便是持续调节样版每个数据信息点的值,直至响应值充足大,大家就可以觉得这时的样版就是这个全连接层所认同的,进而做到转化成全连接层最配对样版的目地。
  • 数据可视化方式
    设计方案一个损失函数(比如:历经转换后的响应值),应用梯度方向升高,升级数据信息点的值,使响应值较大 。
  • 事例
    下面的图展现的是pytorch中的resnet50中的layer1的最后一次卷积和实际操作中的256个全连接层中的0,10,...,150这16个全连接层的最配对样版。提升全过程选用了二种方式,結果如图所示:
    方式1
    案例16C1
    方式2,能够 显著看得出方式2的結果差别性更高
    案例16C1

4,类型激话图(Class Activation Map/CAM)

  • 定义
    特点图数据可视化、全连接层权重值数据可视化、全连接层最配对样版这种方式大量是用以分析法在某一层学习培训到的物品;可是针对不一样的类,大家又如何知道实体模型是依据什么信息内容开展鉴别的?是不是能将这种信息内容在原始记录上表明出去(例如热力地图)?回答依然是毫无疑问的。这一方式主要是CAM系列产品,现阶段有CAM, Grad-CAM, Grad-CAM 。在其中CAM必须 特殊的构造-GAP,但绝大多数目前的实体模型沒有这一构造,要想应用该方式便必须 改动原实体模型构造,并再次训炼,因而应用领域比较有限。对于CAM的缺点,拥有以后Grad-CAM的明确提出。
  • 数据可视化方式
    Grad-CAM的较大 特性便是不会再必须 改动目前的实体模型构造,也不用再次训炼,能够 立即在原实体模型上数据可视化。Grad-CAM针对要想数据可视化的类型C,使最终輸出的类型C的几率值根据反向传播到最终一层feature maps,获得类型C对该feature maps的每一个清晰度的梯度方向值;对每一个清晰度的梯度方向值取全局性均值池化,就可以获得对feature maps的权重计算指数alpha;下面对特点图加权求和,应用ReLU开展调整,再开展上采样。应用ReLU的缘故是针对这些负数,可觉得与鉴别类型C不相干,这种负数可能是与别的类型相关,而恰逢才算是对鉴别C有正脸危害的。
案例16C1

测算梯度方向及全局性均值池化:

\[\alpha_k^c=\overbrace{\frac{1}{Z}\displaystyle{\sum_i\sum_j}}^{global~average~pooling}\underbrace{\frac{\partial{y^c}}{\partial{A^k_{ij}}}}_{grdients~via~backprop} \]

权重计算:

\[L^c_{Grad-CAM}=ReLU\underbrace{\left(\displaystyle\sum_k\alpha^c_kA^k\right)}_{linear~combination} \]

  • 事例
    1,由蓝到红,越红意味着认知度越高,针对类型分派的結果危害越大,这一事例将识别图片为n02909870 纯净水桶,从关心的地区还可以看得出预测分析是不成功的,沒有关心到合理的信息内容
    案例16C1
    这一预训练模型眼中仿佛并不是纯净水桶便是勾子。。。

2,从在网上找了一个实体模型,实际效果就挺不错的
案例16C1案例16C1

案例16C1案例16C1案例16C1

案例16C1案例16C1案例16C1案例16C1

鉴别小青蛙的結果很有趣,这代表着互联网关心的关键不取决于小青蛙,反倒取决于小青蛙周边的自然环境,并且互联网的预测分析結果或是恰当的!
案例16C1案例16C1

5,网络架构的数据可视化

  • 数据可视化方式
    用tensorboard立即制作就可以了,留意二点
    • 途径不必有汉语
    • pytorch版本在1.3.0及之上(低版无法显示)
  • 事例
from torch.utils.tensorboard import SummaryWriter
import torch
import torch.nn as nn
import torch.nn.functional as F

'''
1,复位writer
'''
writer = SummaryWriter('runs/resnet50')    # 特定载入文档的部位

'''
2,载入实体模型
'''
class Net(nn.Module):
    def ._init._(self):
        super(Net, self).._init._()
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(6 * 12 * 12, 120)
        self.fc2 = nn.Linear(120, 84)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = x.view(-1, 6 * 12 * 12)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        return x
net = Net()

'''
3,加上网络架构
'''
writer.add_graph(net, torch.randn(1, 1, 28, 28))
writer.close()
案例16C1
行動是痊愈害怕的灵丹妙药,而迟疑推迟将持续滋润害怕。

评论(0条)

刀客源码 游客评论