cs231 Network Visualization (PyTorch)
在本笔记本中,我们将探索使用图像梯度来生成新图像。
在训练模型时,我们定义一个损失函数,用来测量我们当前对模型性能的损失程度,使用反向传播来计算损失相对于模型参数的梯度,并对模型参数执行梯度下降来最小化损失。在这里,我们会做一些稍微不同的事情。我们将从卷积神经网络模型开始,该模型已经被预训练用于对ImageNet数据集执行图像分类。我们将使用这个模型来定义一个损失函数,它量化我们当前对图像的损失度,然后使用反向传播来计算这个损失相对于图像的像素的梯度。然后,我们将保持模型固定,并对图像执行梯度下降以合成新图像,使损失最小化。
在本笔记本中,我们将探讨三种用于图像生成的技术: -Saliency Maps:Saliency Maps是一种快速方法,用来判断图像的哪个部分影响网络做出的分类决策。
-Fooling Images:我们可以干扰输入图像,使其看起来与人类观察的图片一样,但会被预先训练的网络误分类。
-分类可视化:我们可以合成一个图像来最大化一个特定类的分类分数;这可以让我们知道当网络对那个类的图像进行分类时,它在寻找什么。本笔记本使用PyTorch。
# -*- coding: utf-8 -*-
import torch
import torchvision
import torchvision.transforms as T
import random
import numpy as np
from scipy.ndimage.filters import gaussian_filter1d
import matplotlib.pyplot as plt
from cs231n.image_utils import SQUE