极度基础的神经网络无法学习

我已经学习了一些CNTK Python教程,并且尝试编写一个极度基础的单层神经网络来计算逻辑与运算。我的代码是可以运行的,但是网络无法学习——实际上,每训练一个小批次,损失值就变得越来越糟糕。

训练输出示例

Minibatch: 0, Loss: -164.9998, Error: 0.75Minibatch: 20, Loss: -166.0998, Error: 0.75Minibatch: 40, Loss: -167.1997, Error: 0.75Minibatch: 60, Loss: -168.2997, Error: 0.75Minibatch: 80, Loss: -169.3997, Error: 0.75Minibatch: 100, Loss: -170.4996, Error: 0.75Minibatch: 120, Loss: -171.5996, Error: 0.75Minibatch: 140, Loss: -172.6996, Error: 0.75Minibatch: 160, Loss: -173.7995, Error: 0.75Minibatch: 180, Loss: -174.8995, Error: 0.75Minibatch: 200, Loss: -175.9995, Error: 0.75Minibatch: 220, Loss: -177.0994, Error: 0.75Minibatch: 240, Loss: -178.1993, Error: 0.75

我实在不明白这是怎么回事。错误率一直卡在0.75,我想这意味着网络的表现和随机猜测一样。我不确定是否是自己误解了人工神经网络架构的要求,还是误用了这个库。

任何帮助都将不胜感激。


回答:

你正在尝试用softmax作为最终层来解决一个二元分类问题。softmax层在这里并不合适,它只适用于多类别(类别数>=3)的问题。

对于二元分类问题,你应该进行以下两个修改:

  • 在输出层添加一个sigmoid层(这将使你的输出看起来像一个概率)
  • 使用binary_cross_entropy作为你的评判标准(你需要至少使用这个版本

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注