自制的神经网络检测手写数字失败,但工作良好的其他基准数据集

2024-09-30 16:38:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我从零开始创建了一个神经网络。它对于一些基准数据集(如Iris、Make Moons等)工作正常,但对于MNIST数据集则失败。我已经检查了几次代码,没有找到任何错误

我尝试过不同的激活函数组合以及非常高的学习率-500,1000等,我也尝试过不同的架构;多层的有许多神经元的多层的。他们都没用

请注意,计算△final和softmax函数的导数可能有点奇怪,这是因为我试图同时促进均方误差和分类交叉熵。 因为softmax的dZL直接是(Y\u hat-Y),所以我返回1表示softmax导数,尽管softmax的导数不是1

不幸的是,我分享了整个笔记本,因为我不知道是什么原因造成的问题。笔记本链接如下:

https://github.com/mcagriardic/Andrew-NG-Coursera/blob/master/ex4/NeuralNetwork_class.ipynb


Tags: 数据函数代码irismake架构错误基准
1条回答
网友
1楼 · 发布于 2024-09-30 16:38:07

我已经解决了这个问题。问题的起因是我初始化体重的方式:

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.dimensions[layer-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)

相关问题 更多 >