cjavapy编程之程

PyTorch 卷积神经网络(Convents)的可视化

PyTorch 中对卷积神经网络(CNN, Convolutional Neural Networks)的特征图、卷积核、中间层输出等进行可视化,有助于我们理解模型如何提取图像特征。本文主要介绍卷积神经网络(Convents)帮助下的数据可视化模型。用传统的神经网络获得理想的可视化图像的方法步骤。

1、导入模块

导入必要的模块,这对于传统神经网络的可视化非常重要。

import os
import numpy as np
import pandas as pd
from scipy.misc import imread
from sklearn.metrics import accuracy_score
import keras
from keras.models import Sequential, Model
from keras.layers import Dense, Dropout, Flatten, Activation, Input
from keras.layers import Conv2D, MaxPooling2D
import torch

2、得到数据集

为了停止训练和测试数据的潜在随机性,调用下面代码中给出的各自的数据集.

seed = 128
rng = np.random.RandomState(seed)
data_dir = "../../datasets/MNIST"
train = pd.read_csv('../../datasets/MNIST/train.csv')
test = pd.read_csv('../../datasets/MNIST/Test_fCbTej3.csv')
img_name = rng.choice(train.filename)
filepath = os.path.join(data_dir, 'train', img_name)
img = imread(filepath, flatten=True)

3、绘制图像

绘制必要的图像,以获得训练和测试数据,以完美的方式定义使用下面的代码:

pylab.imshow(img, cmap ='gray')
pylab.axis('off')
pylab.show()

输出显示如下:

httpswwwcjavapycom

4、可视化卷积核(Filters / Weights)

可视化模型中第一层卷积的权重,有助于理解模型学到了哪些边缘或纹理。

import matplotlib.pyplot as plt

# 假设 model 是你的 CNN 模型
weights = model.conv1.weight.data.cpu()

# 可视化前6个卷积核(输入为3通道RGB)
for i in range(6):
    plt.imshow(weights[i][0], cmap='gray')  # 只看第一个通道
    plt.title(f'Filter {i}')
    plt.show()

5、可视化中间层特征图(Feature Maps)

将某一层的输出激活图可视化,帮助理解图像在经过该层后发生了什么变化。

import torch
import torchvision.transforms as transforms
from PIL import Image

# 图像预处理
transform = transforms.Compose([
    transforms.Resize((64, 64)),
    transforms.ToTensor(),
])

img = Image.open('your_image.jpg')
img_tensor = transform(img).unsqueeze(0)  # 添加 batch 维度

# 前向传播到特定层
with torch.no_grad():
    x = model.conv1(img_tensor)
    x = torch.relu(x)  # 如果有激活函数
    feature_maps = x.squeeze(0)  # 去掉 batch 维度

# 可视化前6个特征图
for i in range(6):
    plt.imshow(feature_maps[i].cpu(), cmap='gray')
    plt.title(f'Feature Map {i}')
    plt.show()
推荐阅读
cjavapy编程之路首页