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()
输出显示如下:
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()