您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何创建简单的三层神经网络并使用监督学习进行教学?

如何创建简单的三层神经网络并使用监督学习进行教学?

您的方法有四个问题,在阅读《神经网络常见问题》后都可以轻松找到:

为什么要使用偏置/阈值?:您应该添加一个偏置节点。偏见的缺乏使学习非常有限:网络代表的分离的超平面只能通过原点。使用bias节点,它可以自由移动并更好地拟合数据:

bias = BiasUnit()

n.addModule(bias)

bias_to_hidden = FullConnection(bias, hiddenLayer) n.addConnection(bias_to_hidden)

为什么不将二进制输入编码为0和1?:所有样本都位于样本空间的一个象限中。移动它们使其分散在原点周围:

ds = SupervisedDataSet(2, 1)

ds.addSample((-1, -1), (0,)) ds.addSample((-1, 1), (1,)) ds.addSample((1, -1), (1,)) ds.addSample((1, 1), (0,))

(相应地,将验证码固定在脚本的末尾。)

trainUntilConvergence方法使用验证工作,并且执行类似于早期停止方法的操作。对于这么小的数据集,这没有任何意义。使用trainEpochs代替。1000对于这个问题,时代对于网络而言已经足够了:

trainer.trainEpochs(1000)

反向传播应使用哪种学习率?:调整学习率参数。每当您使用神经网络时,便会执行此操作。在这种情况下,该值0.1甚至会0.2大大提高学习速度:

trainer = BackpropTrainer(n, dataset=ds, learningrate=0.1, verbose=True)

(请注意verbose=True参数。调整参数时,观察错误的行为至关重要。)

有了这些修复程序,我就可以针对具有给定数据集的给定网络获得一致且正确的结果,并且误差小于1e-23

其他 2022/1/1 18:42:58 有245人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶