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()