2016-05-21 23 views
-1

我已经建立了一个可以从MNIST数据集中学习的基本多层感知器。 学习完成后,我想从输出中获得输入,这意味着反转前馈功能以获取由网络生成的图片。我怎样才能看到我的简单神经网络在Python的梦想?

我的整个代码类似于https://github.com/mnielsen/neural-networks-and-deep-learning/blob/master/src/network.py

前馈功能看起来像:

def feedforward(self, a): 
    """Return the output of the network if ``a`` is input.""" 
    for b, w in zip(self.biases, self.weights): 
     a = sigmoid(np.dot(w, a)+b) 
    return a 

如果我试图扭转它,使用np.linalg.pinv,它不会因为一些工作点我必须逆向量和解决方案不是唯一的,例如:

m = np.array([[3, 4]]) 
n = np.array([[1], [2]]) 
o = np.dot(m,n) 
print(np.dot(np.linalg.pinv(m),o)) #not n 

我被困在那里。我认为我需要一个破解来使np.linalg.pinv的输出更加连贯,因为因为它是我甚至不能设法检索一个真实的输入,因为sigmoid函数的反函数表达式中有对数,并且由于np.linalg.pinv给出的值,我最终得到负数,导致NaN无处不在。

任何想法?

PS:最终目标是随机噪声送入网络和观看数字出现,因此,梦表达这是我从http://googleresearch.blogspot.fr/2015/06/inceptionism-going-deeper-into-neural.html

回答

3

如果我理解正确的回升,也没有必要扭转在网络中任何方式,但你应该创建一个随机图像,并将其馈送到网络,看看它是如何执行的。 现在你逐渐改变输入图像的方式,使输出接近你想要的。此外,你应该尝试让相邻的像素在强度上彼此相似。

(这基本上是提供的链接状态,换句话说。)

+0

你说得对,我可能混淆了事情。我仍然想扭转网络,看看它可以生成什么样的图像,但我应该删除并重新翻译一下,因为无论如何,这个标题给我带来了一定的下降。 此外,我很想知道您是否有任何线索来逐渐改变输入图像的方式,使输出接近我想要的位置? – hggjvhkkfkhftrjghvgfgj

+1

坦率地说,我是ML新手,并试图自己找出这个问题(然而,关于扭转网络:我不太确定这是否会得到一个地方,即使是一个输出和两个输入的网络。你知道你正在寻找一个'z = 1'(在你想要的输出上反转sigmoid之后)。当x = y = 1作为权重,a,b作为你正在寻找的输入时,你可以有无限的解决方案对于积分产品'z = x * a + y * b',你不可以吗? –

+0

好吧,你说服了我,这实际上是不可能的,或者至少是看待事物的错误方式,我会回头看看一旦我有了更多的经验,谢谢你的回答。 – hggjvhkkfkhftrjghvgfgj