首页 > 解决方案 > 如何训练反叛神经元?

问题描述

我正在 mmnist 时尚数据集上训练一个非常基本的 NN。我正在使用我自己的代码,这并不重要。我使用类似于 ADAM 的相当简化的算法和一个 cuadratic 公式 (train_value - real_value)**2 进行训练和误差计算。我为每个权重应用一个基本的反向传播算法,并为每个训练图像分析 1/5 的网络权重。我只使用了 128 层,就像 tensorflow 中初学者的基本示例一样,加上输入和输出层(最后一个使用 softmax,第一个归一化为 0-1)

我根本不是专家,我只能训练我的网络在测试集上达到 77% 的准确率。

如下图所示,我检测到我的大多数神经元的权重梯度在几个 epoch 后收敛到 cero。但是很少有明显的例外仍然是反叛的(第一张图像上的垂直线将权重除以神经元)。

你能推荐我一些在不影响其他神经元的情况下训练流氓神经元的通用技术吗?

在此处输入图像描述

在此处输入图像描述

标签: pythonnumpyneural-networkjupyterbackpropagation

解决方案


您可以将约束添加到给定的内核(密集层中的权重矩阵)。使用这些约束之一,可以将权重归一化为给定的用户定义范围。请参阅:TensorFlow.Keras 约束

此外,您可以尝试使用正则化器,以防止模式过度拟合,这可能由一些非常大(绝对)的权重值表示。例如,请参阅 L1 或 L2 正则化器:TensorFlow.Keras 正则化器


推荐阅读