我开始学习神经网络,刚制作了一个通过反向传播训练识别手写数字的程序,准确率相当不错。现在我想看看网络认为完美数字的样子(也就是获取一个像素数组,可以产生所需数字但不在数据集中)。我的研究没有发现相关信息,但在另一个网站上发布后,有人建议我尝试反向传播到输入层。由于我数学基础不强,所以请问如何实现这一方法(或任何其他达成目标的方法)?
z*
时的最佳输入x*
,但你只知道从输入到目标的(可能复杂的)正向映射z = f(x)
。你可以将其视为一个优化问题:你正在尝试计算x* = f^-1(z*)
,并且你知道f
和z*
。如果你对f
的了解允许你计算闭合形式的符号反演,那么你只需将z*
插入即可获得x*
。如果你不能这样做,你可以始终使用迭代优化过程来计算给定x0
的逐步改进近似值x1
、x2
、...、xn
。以下是使用scipy.optimize
进行此操作的Python伪代码:import numpy as np
import scipy.optimize
# our forward model, paired layers of already-trained
# weights and biases.
weights = [np.array(...) ...]
biases = [np.array(...) ...]
def f(x):
for W, b in zip(weights, biases):
# relu activation.
x = np.clip(np.dot(W, x) + b, 0, np.inf)
return x
# set our sights on class #4.
zstar = np.array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0])
# the loss we want to optimize: minimize difference
# between zstar and f(x).
def loss(x):
return abs(f(x) - zstar).sum()
x0 = np.zeros(784)
result = scipy.optimize.minimize(loss, x0)
stats
上提问。回答这个问题需要对统计学有相当深入的理解。可能不太适合在stackoverflow上提问。 - cel