卷积神经网络可视化

1、卷积神经网络中间层可视化

当可视化卷积神经网络的中间层时,只考虑卷积层和池化层,因为只有这两类网络层的输出是特征图;但到了全连接层,输入已经被“压平”成一个数组,不适合可视化了。

import numpy as np
import keras
from keras.datasets import mnist
from keras.models import load_model,Model
from keras import backend as K
from matplotlib import pyplot as plt

(x_train,y_train),(x_test,y_test)=mnist.load_data()
image=x_train[0]
plt.imshow(image)

#把训练好的卷积神经网络模型加载出来
model=load_model('mnist_cnn.h5')
print(model.summary())
# 中间层的可视化 首先提取前3层的输出,因为这个模型只有前3层是卷积层和池化层
layer_outputs=[layer.output for layer in model.layers[:3]]
#使用Model创建一个模型,这个模型的输入和原模型一致,但有多个输出 就是所提取的前3层
activation_model=Model(inputs=model.input,outputs=layer_outputs)
#此时输入一张图像 模型将会返回原模型前3层的结果
'''
先将这张图像转换成要求的输入形状和尺寸
然后再输入到定义好的新模型中
这个模型会有3个输出 对应前3层中每一层网络的结果
first_layer_activation 第一层 (1,26,26,32)矩阵 特征图的尺寸26*26 有32个通道即32个特征图  
'''
image=np.reshape(image,(1,28,28,1))
activations=activation_model.predict(image)
# first_layer_activation=activations[0]
# plt.matshow(first_layer_activation[0,:,:,1],cmap='viridis')
layer_names=[]
for layer in model.layers[:3]:
    layer_names.append(layer.name)
images_per_row=16#绘图时将16张图放在一行
for layer_name,layer_activation in zip(layer_names,activations):
    #特征图的形状为 (1,size,size,n_features)
    n_features=layer_activation.shape[-1]
    size=layer_activation.shape[1]
    #定义一个网格 把特征图平铺在这个上面
    n_cols=n_features//images_per_row
    display_grid=np.zeros((size*n_cols,images_per_row*size))
    for col in range(n_cols):
        for row in range(images_per_row):
            channel_image=layer_activation[0,:,:,col*images_per_row+row]
            channel_image-=channel_image.mean()
            channel_image/=channel_image.std()
            channel_image*=64
            channel_image+=128
            channel_image=np.clip(channel_image,0,255).astype('uint8')
            display_grid[col*size:(col+1)*size,row*size:(row+1)*size]=channel_image
        scale=1./size
        plt.figure(figsize=(scale*display_grid.shape[1],scale*display_grid.shape[0]))
        plt.title(layer_name)
        plt.grid(False)
        plt.imshow(display_grid,aspect='auto',cmap='viridis')
    plt.savefig("layer_name"+layer_name+".jpg")
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 24, 24, 64)        18496     
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 12, 12, 64)        0         
_________________________________________________________________
dropout (Dropout)            (None, 12, 12, 64)        0         
_________________________________________________________________
flatten (Flatten)            (None, 9216)              0         
_________________________________________________________________
dense (Dense)                (None, 128)               1179776   
_________________________________________________________________
dropout_1 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                1290      
=================================================================
Total params: 1,199,882
Trainable params: 1,199,882
Non-trainable params: 0
_________________________________________________________________
None

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2、卷积神经网络过滤器可视化

思想:对输入图像做梯度上升。
先输入一个空白图像,并通过梯度来更新该输入图像的值,目的是使指定的过滤器的损失值最大化,这代表了过滤器对输入图像的响应最大化。经过这一梯度上升的过程,将会得到使指定过滤器具有最大响应的图像。即指定过滤器对这一类型的图像非常敏感,对于给定的输入图像,该过滤器更容易提取到图像中这方面的特征。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Python中可视化BP神经网络,你可以使用各种可视化工具和库。其中一个常用的库是matplotlib,它提供了丰富的绘图功能。另一个常用的库是Graphviz,它可以帮助你绘制神经网络的结构图。 在进行可视化之前,你需要先安装这些库。你可以使用pip命令来安装它们。比如,要安装matplotlib,你可以运行以下命令: ``` pip install matplotlib ``` 安装完成后,你可以按照以下步骤在Python中可视化BP神经网络: 1. 导入所需的库: ```python import matplotlib.pyplot as plt import networkx as nx ``` 2. 创建一个空的有向图: ```python G = nx.DiGraph() ``` 3. 添加神经元节点到图中,可以使用`add_node`方法: ```python G.add_node("Input") G.add_node("Hidden") G.add_node("Output") ``` 4. 添加边连接节点,可以使用`add_edge`方法: ```python G.add_edge("Input", "Hidden") G.add_edge("Hidden", "Output") ``` 5. 绘制神经网络图: ```python pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=1000, font_size=12) plt.show() ``` 这样,你就可以在Python中可视化BP神经网络了。这个图将显示输入层、隐藏层和输出层之间的连接关系。你可以根据需要添加更多的节点和边来表示更复杂的神经网络结构。 请注意,以上的代码仅仅是一个示例,你可以根据自己的需求进行适当的修改和调整。这里提供的代码链接可以作为参考,其中包含了更详细的BP神经网络的Python代码。 : https://github.com/lawlite19/MachineLearning_Python/blob/master/NeuralNetwok/NeuralNetwork.py<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [用Python实现BP神经网络(附代码)](https://download.csdn.net/download/weixin_38611388/13990750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [python matplotlib可视化BP神经网络拟合过程](https://download.csdn.net/download/zyxhangiian123456789/11133315)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值