2017-02-23 7 views
0

Я пытаюсь использовать метод регрессии softmax, обсуждаемый в https://www.tensorflow.org/get_started/mnist/beginners, для распознавания символов.распознавание символа тензора с softmax приводит к точности 1 из-за предсказания [NaN ... NaN]

Мой код выглядит следующим образом.

train_data = pd.read_csv('CharDataSet/train.csv') 
print(train_data.shape) 
x = tf.placeholder(tf.float32, [None, 130]) 
W = tf.Variable(tf.zeros([130, 26])) 
b = tf.Variable(tf.zeros([26])) 

y = tf.nn.softmax(tf.matmul(x, W) + b) 
y_ = tf.placeholder(tf.float32, [None, 26]) 
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 
sess = tf.InteractiveSession() 
tf.global_variables_initializer().run() 

for _ in range(10): 
    batch_xs = train_data.iloc[:, 2:] 
    print(batch_xs) 
    batch_ys = getencodedbatch(train_data.iloc[:, 1]) 
    print(batch_ys) 
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) 

Однако, я получаю точность 1, что не должно быть. Причина, почему я получаю это так, потому что мой у Тензор результаты с массивом как

[nan, ..., nan] 

Может кто-нибудь объяснить мне, что это неправильно в моем коде?

я преобразовал каждый символ в один-горячее кодирование с использованием методы ниже

def getencodedbatch(param): 
    s = (param.shape[0],26) 
    y_encode = np.zeros(s) 
    row=0 
    # print(y_encode) 
    for val in param: 
     col = ord(val)-97 
     y_encode[row, col] = 1 
     row += 1 
    return pd.DataFrame(y_encode) 

ответ

0

Вот проблема, которую вы испытываете:

  • Вы устанавливаете свои начальные веса и уклоны до 0 (это неверно, поскольку ваша сеть не изучает).
  • Результат состоит в том, что y состоит из всех нулей
  • Вы берете журнал y .. и журнал 0 не определен ... Следовательно, NaN.

Удачи вам!

Редактировать, чтобы узнать, как это исправить: найдите пример по классификации символов MNIST и посмотрите, что они делают. Вероятно, вы хотите, чтобы ваши весы были случайными нормалями;)