Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 神经网络张量流中误差值的求法_Tensorflow_Neural Network - Fatal编程技术网

Tensorflow 神经网络张量流中误差值的求法

Tensorflow 神经网络张量流中误差值的求法,tensorflow,neural-network,Tensorflow,Neural Network,我一直在尝试下面的代码来实现神经网络,但我在显示损失值方面面临挑战。有人能帮我吗 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data", one_hot=True) x_input = mnist.train.images[:100,:] y_input = mnist.train.lab

我一直在尝试下面的代码来实现神经网络,但我在显示损失值方面面临挑战。有人能帮我吗

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data", one_hot=True)

x_input = mnist.train.images[:100,:]
y_input = mnist.train.labels[:100,:]


LearningRate = 0.01
noOfEpocs = 10

#N/w params
hidden_1_Neurons = 50
hidden_2_Neurons = 50
inputNeurons = 784
noOfClasses = 10

X  = tf.placeholder(tf.float32, shape=[None, inputNeurons])
Y =  tf.placeholder(tf.float32, shape=[None, 10])

#Let's Fill Data

hidden_1_weights = tf.Variable(tf.random_normal([inputNeurons, hidden_1_Neurons]))
hidden_2_weights = tf.Variable(tf.random_normal([hidden_1_Neurons, hidden_2_Neurons]))
outLayer_weights = tf.Variable(tf.random_normal([hidden_2_Neurons, noOfClasses]))

hidden_1_Bias = tf.Variable(tf.random_normal([hidden_1_Neurons]))
hidden_2_Bias = tf.Variable(tf.random_normal([hidden_2_Neurons]))
outLayer_Bias = tf.Variable(tf.random_normal([noOfClasses]))


hidden_1 =  tf.add(tf.matmul(X ,hidden_1_weights), hidden_1_Bias)
hidden_2 =  tf.add (tf.matmul(hidden_1, hidden_2_weights), hidden_2_Bias)
outLayer  =  tf.add (tf.matmul(hidden_2, outLayer_weights), outLayer_Bias)

softMaxOutput = tf.nn.softmax(outLayer)

cross_entropy = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(softMaxOutput),reduction_indices=[1]))
training = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

sess.run(training, feed_dict={X:x_input, Y:y_input})
actualLoss = sess.run(cross_entropy, feed_dict={X:x_input, Y:y_input})
print ("actualLoss ", actualLoss)
我得到的输出如下:

#actualLoss  nan

我猜上面写的是nan(不是数字)。此编码是否正确以获得实际损失?

您应该删除
softmaxOutput
变量并使用tf内置
softmax\u cross\u熵
损失函数,它确实应用softmax激活并处理交叉熵损失

cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=outLayer, labels=Y))
但关于您的问题,这是由于
log(softmaxOutput)
如果输出为零,则会导致输出nan,因此您必须向其添加一个非常小的值以克服问题
1e-5

cross_entropy = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(softMaxOutput + 1e-5),reduction_indices=[1]))`

这不是绝对明确的解决方案,但交叉熵确实存在数值稳定性方面的问题,这可能导致这个问题。此外,无需删除
softmaxOutput
层,除非您不打算使用经过训练的模型,或者,您打算将权重加载到“预测”模型中,以节省几kb的内存,方法是在需要层的绝对秒数之前不定义层。@Scott这不是必需的,但在官方tensorflow文档中,这是在预测时仅应用softmax的方式,所以我指出了这一点