首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自制的神经网络无法检测手写数字,但适用于其他基准数据集

自制的神经网络无法检测手写数字,但适用于其他基准数据集
EN

Stack Overflow用户
提问于 2019-12-28 07:39:01
回答 1查看 33关注 0票数 0

我从头开始创建了一个神经网络。它对于一些基准数据集工作得很好,例如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

EN

回答 1

Stack Overflow用户

发布于 2019-12-28 20:29:49

我已经解决了这个问题。这个问题源于我初始化权重的方式:

前面initialise_weights()函数的代码是:

代码语言:javascript
复制
    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)项后,问题就解决了。

代码语言:javascript
复制
    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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59507005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档