神经网络在第一次训练后产生NaN

我的神经网络在第一次训练后输出很快就变成了全部NaN。无论我如何调整学习率,所有的成本都是NaN。我已经在Stack Overflow和其他网站上查过了,我的这个问题不属于任何一种情况。在任何训练之前,我的网络确实会产生正确的(非NaN)输出。我不确定这是我的输入还是我的神经网络的问题,因为神经网络看起来没问题。

我的神经网络的输入是一些机器的特征,例如总计划数量、总库存数量等。输出是每个机器的总计划数量如何分配给其他机器的个体计划数量。我最大的担忧是输入和输出都有很多零,因为数据形式多样且不完整。我用零填充了所有空白,以便将其放入神经网络中。但即使如此,我认为网络在第一次训练后也不会产生NaN。谁能指出我的问题?以下是我的完整代码:

#load datald = Loader()X_train, y_train, X_val, y_val, X_test, y_test = ld.load_data() * 3tf.reset_default_graph()sess = tf.InteractiveSession()#placeholderx = tf.placeholder(tf.float32, shape=[None, 1306], name='x')y_ = tf.placeholder(tf.float32, shape=[None, 508], name='y_')#a single-layer neural networknet = tl.layers.InputLayer(x, name='input')net = tl.layers.DenseLayer(net, n_units=1300, act=tf.nn.relu, name='relu1')net = tl.layers.DenseLayer(net, n_units=508, act=None, name='output')y = net.outputs#cost = tf.nn.softmax_cross_entropy_with_logits_v2(labels=y_, logits=y, name='xentropy')cost = tf.reduce_mean(tf.square(y - y_))#trainn_epoch = 100batch_size = 30learning_rate = 10 ** -7print_freq = 1train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)tl.layers.initialize_global_variables(sess)net.print_params()net.print_layers()print('   learning_rate: %f' % learning_rate)print('   batch_size: %d' % batch_size)for epoch in range(n_epoch):    start_time = time.time()    for X_train_a, y_train_a in tl.iterate.minibatches(X_train, y_train, batch_size, shuffle=True):        feed_dict = {x: X_train_a, y_: y_train_a}        sess.run(train_op, feed_dict=feed_dict)    if epoch + 1 == 1 or (epoch + 1) % print_freq == 0:        print("Epoch %d of %d took %fs"  % (epoch + 1, n_epoch, time.time() - start_time))        train_loss, n_batch = 0, 0        for X_train_a, y_train_a in tl.iterate.minibatches(X_train, y_train, batch_size, shuffle=True):            feed_dict = {x: X_train_a, y_: y_train_a}            err = sess.run(cost, feed_dict=feed_dict)            train_loss += err            n_batch += 1        print("   train loss: %f" % (train_loss / n_batch))# Save modelif not os.path.isdir(path):    os.makedirs(path)saver = tf.train.Saver()save_path = saver.save(sess, "model/model.ckpt")print("Model saved in file: %s" % save_path)tl.files.save_npz(net.all_params, name='model.npz')sess.close()

这是样本输出:

output output-continued


回答:

首先,检查你的输入,任何NaNinf输入都会毁掉整个模型。

然后,如果输入正确,我建议你使用TensorFlow调试器(阅读这里的文档)来调试你的模型。在文档中,有一个关于如何调试NaN出现的教程。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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