我从头开始创建了一个神经网络。它对于一些基准数据集工作得很好,例如Iris,Make Moons等,但对于MNIST数据集则失败了。我已经检查了代码几次,但找不到任何错误。
我尝试了激活函数的不同组合,以及非常高的学习率- 500,1000,等等。我也尝试了不同的体系结构;具有多个层和许多神经元。它们都不起作用。
请注意,calculate_delta_final和softmax函数的导数可能看起来有点奇怪,因为我试图同时促进均方误差和分类交叉熵。由于softmax的dZL直接为(Y_hat - Y),所以我为softmax的导数返回1,尽管softmax的导数不是1。
不幸的是,我分享了整个笔记本,因为我不知道是什么导致了这个问题。指向笔记本的链接在此处:
https://github.com/mcagriardic/Andrew-NG-Coursera/blob/master/ex4/NeuralNetwork_class.ipynb
发布于 2019-12-28 20:29:49
我已经解决了这个问题。这个问题源于我初始化权重的方式:
前面initialise_weights()函数的代码是:
def initialise_weights(self, layer=None):
self.W = np.empty_like(range(self.layers), dtype=object)
self.B = np.empty_like(range(self.layers), dtype=object)
self.W[0] = None
self.B[0] = None
for layer, (y, x) in zip(range(1, self.layers), self.weight_set_dimensions):
np.random.seed(self.seed)
self.W[layer] = np.random.rand(y, x)
self.B[layer] = np.random.rand(y, 1)在将初始权值除以np.sqrt(self.dimensionslayer - 1)项后,问题就解决了。
def initialise_weights(self, layer=None):
self.W = np.empty_like(range(self.layers), dtype=object)
self.B = np.empty_like(range(self.layers), dtype=object)
self.W[0] = None
self.B[0] = None
for layer, (y, x) in zip(range(1, self.layers), self.weight_set_dimensions):
np.random.seed(self.seed)
self.W[layer] = np.random.rand(y, x) / np.sqrt(self.dimensions[layer - 1])
self.B[layer] = np.random.rand(y, 1)https://stackoverflow.com/questions/59507005
复制相似问题