昨天代碼中注意力熱圖的部分順移至今天
知識點回顧:
熱力圖
作業:對比不同卷積層熱圖可視化的結果
?以下是不同卷積層特征圖可視化的對比實現:
import torch
import matplotlib.pyplot as pltdef compare_conv_layers(model, input_tensor):# 注冊多個鉤子獲取不同層特征圖layer_outputs = {}def save_output(layer_name):def hook(module, input, output):layer_outputs[layer_name] = output.detach().cpu()return hook# 選擇三個不同卷積層hooks = [model.layer1[0].conv1.register_forward_hook(save_output('layer1_conv')),model.layer2[0].conv1.register_forward_hook(save_output('layer2_conv')),model.layer3[0].conv1.register_forward_hook(save_output('layer3_conv'))]# 前向傳播with torch.no_grad():model(input_tensor.unsqueeze(0))# 移除鉤子for hook in hooks:hook.remove()# 可視化對比fig, axes = plt.subplots(3, 5, figsize=(20, 12))for row, (layer_name, features) in enumerate(layer_outputs.items()):for col in range(5):axes[row, col].imshow(features[0, col].numpy(), cmap='viridis')axes[row, col].set_title(f"{layer_name}\nch{col}", fontsize=8)axes[row, col].axis('off')plt.tight_layout()plt.show()# 使用示例
from torchvision.models import resnet18
model = resnet18(pretrained=True).eval()
input_img = torch.randn(3, 224, 224) # 替換為實際輸入圖像
compare_conv_layers(model, input_img)
輸出結果如圖所示: