2017-05-13 7 views
1

92 % 정확도로 MNIST 데이터 세트에서 선형 분류기를 교육했습니다. 그런 다음 8 개의 softmax 확률이 최대가되도록 가중치를 고정하고 입력 이미지를 최적화했습니다. 그러나 Softmax 손실은 2.302 (-log (1/10)) 이하로 떨어지지 않습니다. 이는 내 훈련이 쓸모 없다는 것을 의미합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 가중치를 훈련에 대한Tensorflow : MNIST 데이터 세트의 선형 분류기에 대한 훈련 된 가중치 시각화

코드 : 고정 가중치 이미지를 훈련에 대한

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

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 
trX, trY, teX, teY = mnist.train.images, mnist.train.labels,  
mnist.test.images, mnist.test.labels 

X = tf.placeholder("float", [None, 784]) 
Y = tf.placeholder("float", [None, 10]) 

w = tf.Variable(tf.random_normal([784, 10], stddev=0.01)) 
b = tf.Variable(tf.zeros([10])) 

o = tf.nn.sigmoid(tf.matmul(X, w)+b) 

cost= tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=o, labels=Y)) 
train_op = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost) 
predict_op = tf.argmax(o, 1) 

sess=tf.Session() 
sess.run(tf.global_variables_initializer()) 
for i in range(100): 
    for start, end in zip(range(0, len(trX), 256), range(256, len(trX)+1, 256)): 
     sess.run(train_op, feed_dict={X: trX[start:end], Y: trY[start:end]}) 
    print(i, np.mean(np.argmax(teY, axis=1) == sess.run(predict_op, feed_dict={X: teX}))) 

코드 : 당신은 당신의 그물의 출력에 tf.sigmoid를 호출해서는 안

#Copy trained weights into W,B and pass them as placeholders to new model 
W=sess.run(w) 
B=sess.run(b) 

X=tf.Variable(tf.random_normal([1, 784], stddev=0.01)) 
Y=tf.constant([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]) 

w=tf.placeholder("float") 
b=tf.placeholder("float") 

o = tf.nn.sigmoid(tf.matmul(X, w)+b) 

cost= tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=o, labels=Y)) 
train_op = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost) 
predict_op = tf.argmax(o, 1) 

sess.run(tf.global_variables_initializer()) 
for i in range(1000): 
    sess.run(train_op, feed_dict={w:W, b:B}) 
    if i%50==0: 
    sess.run(cost, feed_dict={w:W, b:B}) 
    print(i, sess.run(predict_op, feed_dict={w:W, b:B})) 

답변

1

. softmax_cross_entropy_with_logits은 귀하의 입력이 로지, 즉 제약되지 않은 실수라고 가정합니다. 사용

o = tf.matmul(X, w)+b 

정확도가 92.8 %로 향상됩니다.

이 수정으로 두 번째 교육이 작동합니다. 결과 이미지가 매력적이지만 비용은 0에 도달합니다. 도움말 : 대한

enter image description here

+0

감사합니다. –