python - 如何训练反叛神经元?
问题描述
我正在 mmnist 时尚数据集上训练一个非常基本的 NN。我正在使用我自己的代码,这并不重要。我使用类似于 ADAM 的相当简化的算法和一个 cuadratic 公式 (train_value - real_value)**2 进行训练和误差计算。我为每个权重应用一个基本的反向传播算法,并为每个训练图像分析 1/5 的网络权重。我只使用了 128 层,就像 tensorflow 中初学者的基本示例一样,加上输入和输出层(最后一个使用 softmax,第一个归一化为 0-1)
我根本不是专家,我只能训练我的网络在测试集上达到 77% 的准确率。
如下图所示,我检测到我的大多数神经元的权重梯度在几个 epoch 后收敛到 cero。但是很少有明显的例外仍然是反叛的(第一张图像上的垂直线将权重除以神经元)。
你能推荐我一些在不影响其他神经元的情况下训练流氓神经元的通用技术吗?
解决方案
您可以将约束添加到给定的内核(密集层中的权重矩阵)。使用这些约束之一,可以将权重归一化为给定的用户定义范围。请参阅:TensorFlow.Keras 约束
此外,您可以尝试使用正则化器,以防止模式过度拟合,这可能由一些非常大(绝对)的权重值表示。例如,请参阅 L1 或 L2 正则化器:TensorFlow.Keras 正则化器
推荐阅读
- xml - 获取 Cassandra 数据源失败,原因是未注入 Spring 应用程序上下文
- laravel - 在每个查询构建器调用 Laravel 中的模型之前应用过滤器
- sql-server - 服务器在几乎所有图像上都给出 503
- ios - 将线性转换为 Apple Display P3 颜色空间的方程式,反之亦然
- java - Docker for Windows、Alpine 容器 + JRE、Java 运行时环境内存不足无法继续
- r - R绘制基于提供的索引值选择列的值
- c++ - 如何解决 C++ 中文件的输入和输出问题?
- android - Xamarin:ADB 二进制文件已过时
- certificate - certutil 未导入所有证书
- mongodb - MongoDB 平均聚合无法正常工作