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的方式,所以我指出了这一点