2017-06-22 47 views
0

我使用Tensorflow为MNIST数据集实现了一个简单的模型。每个时期的输出平均损失:奇怪的结果

这里是模型:

X = tf.placeholder(tf.float32, [None, 784]) 
Y_ = tf.placeholder(tf.float32, [None, 10]) 

W = tf.Variable(tf.random_normal(shape=[784, 10], stddev=0.01), name="Weigths") 
b = tf.Variable(tf.zeros([1,10]), name="Bias") 

Y = tf.nn.softmax(tf.add(tf.matmul(X,W), b)) 

下面是成本函数的样子:

entropy = tf.nn.softmax_cross_entropy_with_logits(labels=Y_, logits=Y) 
loss = tf.reduce_mean(entropy) 

的backprop:

optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss) 

这里是我的火车循环:

for epoch in range(n_epochs): 
    avg_loss = 0; 
    n_batches = int(MNIST.train.num_examples/batch_size) 
    for i in range(n_batches): 
     X_batch, Y_batch = MNIST.train.next_batch(batch_size) 
     _, l, summary = sess.run([optimizer, loss, merged_summary], feed_dict={X: X_batch, Y_: Y_batch}) 
     writer.add_summary(summary, pos) 
     avg_loss = l/n_batches 
    print('Epoch :', epoch, 'AvgLoss =', avg_loss) 
print ("Accuracy:", acc.eval(feed_dict={X: MNIST.test.images, Y_: MNIST.test.labels})) 

但我不明白,我对每个时期平均成本的结果:

Epoch : 0 AvgLoss = 0.0028913601962 
Epoch : 1 AvgLoss = 0.00283967841755 
Epoch : 2 AvgLoss = 0.0028030406345 
Epoch : 3 AvgLoss = 0.002759949294 
Epoch : 4 AvgLoss = 0.00283429449255 
Epoch : 5 AvgLoss = 0.00276749762622 
Epoch : 6 AvgLoss = 0.00276815457778 
Epoch : 7 AvgLoss = 0.00279549772089 
Epoch : 8 AvgLoss = 0.00277937347239 
Epoch : 9 AvgLoss = 0.00274000016126 
Epoch : 10 AvgLoss = 0.00275734966451 
Epoch : 11 AvgLoss = 0.00278236475858 
Epoch : 12 AvgLoss = 0.00275594126094 
Epoch : 13 AvgLoss = 0.0027651628581 
Epoch : 14 AvgLoss = 0.00275661511855 
Epoch : 15 AvgLoss = 0.00275890090249 
Epoch : 16 AvgLoss = 0.00273716428063 
Epoch : 17 AvgLoss = 0.00273372628472 
Epoch : 18 AvgLoss = 0.0027502430569 
Epoch : 19 AvgLoss = 0.00279064221816 
Epoch : 20 AvgLoss = 0.00273178425702 
Epoch : 21 AvgLoss = 0.00277335535396 
Epoch : 22 AvgLoss = 0.00276518474926 
Epoch : 23 AvgLoss = 0.00276605887847 
Epoch : 24 AvgLoss = 0.00275481895967 

这不是减少每个循环......但它给了我一个OK精度:

Accuracy: 0.9295 

任何为什么会这样想?

+0

你可以发布你的模型代码呢? – hars

+0

@hars编辑! –

+0

要看损失正在减少 - 每次迭代(每批)的印刷损失不是时代。通常情况下,它在少数时代达到极小值。 – hars

回答

1

损失: 要查看损失减少 - 打印亏损每次迭代(每批)或每100次迭代不是每一个时代。通常,它在少数时代达到极小值。

精度:

使用两层完全连接NN或者CNN,以获得较好的准确性。您可以添加ReLU图层和Dropout以获得更好的性能。

2层全连接NN:96-98%准确度; ConvNet:99%的准确性。

要查看统计:http://yann.lecun.com/exdb/mnist/

另外,尝试了CNN的代码,以及:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/convolutional_network.py

+0

我不是在问准确性,我知道我可以用2层ConvNets达到99%。 我尝试了只有1个纪元,你是对的,它在第一次迭代减少。然后停滞至1.5 –

+0

@BaptisteArnaud,对于有关准确度的信息抱歉。很高兴知道打印迭代有所帮助。 – hars