0

I am trying to predict the classification of a new instance of data using the feed forward DNN graph in tensorflow.

This is a continuation of this thread, which was solved ValueError when trying to evaluate a new data instance in tensorflow

The code is:

import tensorflow as tf
import pandas as pd

dataframe = pd.read_csv("jfkspxstrain.csv") # Let's have Pandas load our dataset as a dataframe
dataframe = dataframe.drop(["Field6", "Field9", "rowid"], axis=1) # Remove columns we don't care about
dataframe.loc[:, ("y2")] = dataframe["y1"] == 0           # y2 is the negation of y1
dataframe.loc[:, ("y2")] = dataframe["y2"].astype(int)    # Turn TRUE/FALSE values into 1/0
trainX = dataframe.loc[:, ['Field2', 'Field3', 'Field4', 'Field5', 'Field7', 'Field8', 'Field10']].as_matrix()
trainY = dataframe.loc[:, ["y1", 'y2']].as_matrix()

dataframe = pd.read_csv("jfkspxstest.csv") # Let's have Pandas load our dataset as a dataframe
dataframe = dataframe.drop(["Field6", "Field9", "rowid"], axis=1) # Remove columns we don't care about
dataframe.loc[:, ("y2")] = dataframe["y1"] == 0           # y2 is the negation of y1
dataframe.loc[:, ("y2")] = dataframe["y2"].astype(int)    # Turn TRUE/FALSE values into 1/0
testX = dataframe.loc[:, ['Field2', 'Field3', 'Field4', 'Field5', 'Field7', 'Field8', 'Field10']].as_matrix()
testY = dataframe.loc[:, ["y1", 'y2']].as_matrix()

n_nodes_hl1 = 10
n_nodes_hl2 = 10
n_nodes_hl3 = 10

n_classes = 2
batch_size = 1

x = tf.placeholder('float',[None, 7])
y = tf.placeholder('float')

def neural_network_model(data):
    hidden_1_layer = {'weights':tf.Variable(tf.random_normal([7, n_nodes_hl1])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl1]))}

    hidden_2_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl2]))}

    hidden_3_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl3]))}

    output_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1, n_classes])),
                      'biases':tf.Variable(tf.random_normal([n_classes]))}
    l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), hidden_1_layer['biases'])
    l1 = tf.nn.relu(l1)

    l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases'])
    l2 = tf.nn.relu(l2)

    l3 = tf.add(tf.matmul(l2, hidden_3_layer['weights']), hidden_3_layer['biases'])
    l3 = tf.nn.relu(l3)

    output = tf.matmul(l3, output_layer['weights']) + output_layer['biases']    
    return output

def train_neural_network(x):
    prediction = neural_network_model(x)
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction,y))
    optimizer = tf.train.AdamOptimizer().minimize(cost)

    hm_epochs = 5

    with tf.Session() as sess:
        sess.run(tf.initialize_all_variables())

        for epoch in range(hm_epochs):
            epoch_loss = .1
            for _ in range(399):
                _, c = sess.run([optimizer, cost], feed_dict = {x: trainX, y: trainY})
                epoch_loss += c
            print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss)

        correct = tf.equal(tf.argmax(prediction,1), tf.argmax(y,1))
        accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
        print('Accuracy:',accuracy.eval({x: testX, y: testY}))
        classification = y.eval(feed_dict={x: [[51.0,10.0,71.0,65.0,5.0,70.0,30.06]]})
        print (classification)
train_neural_network(x)

The error is:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

on this line

classification = y.eval(feed_dict={x: [[51.0,10.0,71.0,65.0,5.0,70.0,30.06]]})

Code and data is here: https://github.com/jhsmith12345/tensorflow

I see that this is asking for float values, which I thought I had fed it. Any help is appreciated!

1
  • 1
    Should it be classification = prediction.eval(...) instead of classification = y.eval(...) ? y is a tf.placeholder as targets of the neural network. Commented Feb 12, 2017 at 8:49

1 Answer 1

1

So assuming that y is your target data, during training you need to provide a value for the target data so that the error can be calculated. The line classification = y.eval is obtaining a prediction, so there should be no requirement to provide training data - so should be classification = prediction.eval ...

 def train_neural_network(x):
  prediction = neural_network_model(x)
  cost =tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction,y))
optimizer = tf.train.AdamOptimizer().minimize(cost)

  hm_epochs = 5

  with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())

    for epoch in range(hm_epochs):
        epoch_loss = .1
        for _ in range(399):
            _, c = sess.run([optimizer, cost], feed_dict = {x: trainX, y: trainY})
            epoch_loss += c
        print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss)

    correct = tf.equal(tf.argmax(prediction,1), tf.argmax(y,1))
    accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
    print('Accuracy:',accuracy.eval({x: testX, y: testY}))
    classification = prediction.eval(feed_dict={x: [[51.0,10.0,71.0,65.0,5.0,70.0,30.06]]})
    print (classification)

 train_neural_network(x)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.