也许这个问题太笼统,但是谁能解释导致卷积神经网络发散的原因是什么?
细节:
我正在使用Tensorflow的iris_training模型处理一些自己的数据,并不断获取

回溯源于以下行:

 tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
                                        hidden_units=[300, 300, 300],
                                        #optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=0.001, l1_regularization_strength=0.00001),
                                        n_classes=11,
                                        model_dir="/tmp/iris_model")
我尝试过调整优化器,将学习率设置为零,并且不使用优化器。任何对网络层,数据大小等的见解都将受到赞赏。

最佳答案

我见过很多东西使模型产生分歧。

  • 学习率太高。您通常可以判断出损失是否开始增加然后发散到无穷大。
  • 我不熟悉DNNClassifier,但我猜想它使用了分类交叉熵代价函数。这涉及获取预测的对数,该对数随着预测接近零而发散。这就是为什么人们通常在预测中添加较小的ε值以防止这种差异。我猜测DNNClassifier可能会这样做或使用tensorflow opp。可能不是问题。
  • 可能存在其他数值稳定性问题,例如除以零会增加epsilon的作用。如果在处理有限精度数时未适当简化,则导数的平方根可以发散的另一种不那么明显的方法。我再次怀疑这是DNNClassifier的问题。
  • 您的输入数据可能有问题。尝试在输入数据上调用assert not np.any(np.isnan(x)),以确保您没有引入nan。还要确保所有目标值均有效。最后,确保数据正确归一化。您可能希望像素在[-1,1]而不是[0,255]范围内。
  • 标签必须在损失函数的域中,因此,如果使用基于对数的损失函数,则所有标签都必须为非负数(如evan pu和以下评论所指出)。
  • 08-25 00:34