2016-12-06 2 views
0

Я пытаюсь решить Titanic Problem on Kaggle, и я не уверен, как получить вывод для данных теста.TensorFlow - Не удалось получить прогноз

Я успешно обучить сеть и вызвать метод make_prediction(x, test_x)

x = tf.placeholder('float', [None, ip_features]) 
... 
def make_prediction(x, test_data): 
    with tf.Session() as sess : 
    sess.run(tf.global_variables_initializer()) 
    prediction = sess.run(y, feed_dict={x: test_data}) 
    return prediction 


Я не знаю, как передать np.array в этом случае test_data, чтобы получить обратно np.array, который содержит прогноз 0/1

Link to Full Code

ответ

1

Я собрал train_neural_network и make_prediction функции в одну функцию. Применяя tf.nn.softmax к функции модели, диапазон значений будет равен 0 ~ 1 (интерпретируется как вероятность), затем tf.argmax извлекает номер столбца с большей вероятностью. Обратите внимание, что placeholder для y в этом случае должен быть одним горячим. (Если вы не один горячий кодирования у здесь, то pred_y=tf.round(tf.nn.softmax(model)) бы преобразовать вывод softmax в 0 или 1)

def train_neural_network_and_make_prediction(train_X, test_X): 

    model = neural_network_model(x) 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(model, y)) 
    optimizer = tf.train.AdamOptimizer().minimize(cost) 
    pred_y=tf.argmax(tf.nn.softmax(model),1) 

    ephocs = 10 

    with tf.Session() as sess : 
     tf.initialize_all_variables().run() 
     for epoch in range(ephocs): 
      epoch_cost = 0 

      i = 0 
      while i< len(titanic_train) : 
       start = i 
       end = i+batch_size 
       batch_x = np.array(train_x[start:end]) 
       batch_y = np.array(train_y[start:end]) 

       _, c = sess.run([optimizer, cost], feed_dict={x: batch_x, y: batch_y}) 
       epoch_cost += c 
       i+=batch_size 
      print("Epoch",epoch+1,"completed with a cost of", epoch_cost) 
     # make predictions on test data 
     predictions = pred_y.eval(feed_dict={x : test_X}) 
    return predictions 
+0

Спасибо вам так много 'pred_y = tf.round (tf.nn.softmax (модель)) 'это то, что я искал :) –

Смежные вопросы