我目前正在阅读他的好书(http://neuralnetworksanddeeplearning.com/chap1.html),我认为到目前为止我已经很好地掌握了这些内容。数学需要一些思考,但易于管理。
对我来说根本不想理解的是前馈函数的作用以及它是如何工作的。现在我无法得到它,所以我决定我需要在这里创建一个 acc 并寻求帮助。
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
你现在可能会说:“嘿,这很简单,有什么不能理解的”,基本上你是对的。但让我感到困扰的是,这个网络应该对数字进行分类——而且代码似乎工作得很好。如果我在我的机器上运行它,它会向我显示它应该做的进度。所以结果net.feedforward(image)
应该是一个包含 10 个条目的数组,指示网络将我们的图片分类为哪个数字。但实际输出是一个包含 10 乘以 30 个条目的数组 --> 这让我很头疼。无论是对这些条目求和,还是对它们求平均值,似乎都没有给出接近 4 图像所需的 (0,0,0,0,1,0,0,0,0,0) 的值。偶数更奇怪的是,其余的代码似乎假设它会得到这个:
def evaluate(self, test_data):
"""Return the number of test inputs for which the neural
network outputs the correct result. Note that the neural
network's output is assumed to be the index of whichever
neuron in the final layer has the highest activation."""
test_results = [(np.argmax(self.feedforward(x)), y)
for (x, y) in test_data]
return sum(int(x == y) for (x, y) in test_results)
如果我这样做:test=net.feedforward(image)
然后使用np.argmax(test)
我得到一个任意结果,具体取决于 0 到 299 之间的输入,而不是函数中预期的 0 到 9。
尽管如此,代码似乎工作 - 这让我发疯。对此有何解释可以解决我脑海中的问题?