1
votes

I am learning TensorFlow and I stumble upon this example code for creating simple multi-layer sigmoid network. The program in the link is for MNIST database and hand written digit classification.

I want to train a network for regression task. I have 30 inputs(float) which is used to predict one output(float). So I tweaked the code to change the task from classification to regression.

My problem is that I'm getting an error in tf.Session.run(). The code and the error log is given below.

import test2
import tensorflow as tf

feed_input = test2.read_data_sets()

learning_rate = 0.001
training_epochs = 100
batch_size = 1716
display_step = 1

n_hidden_1 = 256
n_hidden_2 = 256
n_hidden_3 = 256
n_input = 30

x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None])

def multilayer_perceptron(_X, _weights, _biases):
    #Hidden layer with RELU activation
    layer_1 = tf.nn.relu(tf.add(tf.matmul(_X, _weights['h1']), _biases['b1'])) 
    #Hidden layer with RELU activationn_hidden_3
    layer_2 = tf.nn.relu(tf.add(tf.matmul(layer_1, _weights['h2']), _biases['b2'])) 
    layer_3 = tf.nn.relu(tf.add(tf.matmul(layer_2, _weights['h3']), _biases['b3']))     

    return tf.matmul(layer_3, weights['out']) + biases['out']

weights = {
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
    'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
    'h3': tf.Variable(tf.random_normal([n_hidden_2, n_hidden_3])),
    'out': tf.Variable(tf.random_normal([n_hidden_3, 1]))
}
biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'b3': tf.Variable(tf.random_normal([n_hidden_3])),
    'out': tf.Variable(tf.random_normal([1]))
}

pred = multilayer_perceptron(x, weights, biases)

n_pred = tf.mul(pred, tf.convert_to_tensor(10000.00))

cost = tf.nn.sigmoid_cross_entropy_with_logits(n_pred, y)

optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cost)

init = tf.initialize_all_variables()

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

    # Training cycle
    for epoch in range(training_epochs):
        avg_cost = 0
        total_batch = int(feed_input.train._num_examples / batch_size)
        # Loop over all batches
        for i in range(total_batch):
            batch_xs, batch_ys = feed_input.train.next_batch(batch_size)
            # Fit training using batch data
            sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys})
            # Compute average loss
            avg_cost += sess.run(cost, feed_dict={x: batch_xs, y: batch_ys}) / total_batch
        # Display logs per epoch step
        if epoch % display_step == 0:
            print "Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost)

    print "Optimization Finished!"

runfile('/mnt/sdb6/Projects/StockML/demo1.py',

wdir='/mnt/sdb6/Projects/StockML')

Reloaded modules: tensorflow.python.ops.nn_grad,

tensorflow.python.training.momentum,

. . . .

tensorflow.python.util.protobuf,

google.protobuf.internal.enum_type_wrapper,

tensorflow.python.ops.nn_ops, tensorflow.python,

tensorflow.python.platform.test,

google.protobuf.internal.api_implementation, tensorflow,

google.protobuf.internal.encoder

Traceback (most recent call last):

File "", line 1, in runfile('/mnt/sdb6/Projects/StockML/demo1.py', wdir='/mnt/sdb6/Projects/StockML')

File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile execfile(filename, namespace)

File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 78, in execfile builtins.execfile(filename, *where)

File "/mnt/sdb6/Projects/StockML/demo1.py", line 69, in sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys})

File "/home/rammak/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 345, in run results = self._do_run(target_list, unique_fetch_targets, feed_dict_string)

File "/home/rammak/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 406, in _do_run except tf_session.StatusNotOK as e:

AttributeError: 'module' object has no attribute 'StatusNotOK'

3

3 Answers

3
votes

Protobuf error is usually an installation issue , run it in a virtual env

# On Mac:
$ sudo easy_install pip  # If pip is not already installed
$ sudo pip install --upgrade virtualenv
Next, set up a new virtualenv environment. To set it up in the directory ~/tensorflow, run:
$ virtualenv --system-site-packages ~/tensorflow
$ cd ~/tensorflow
Then activate the virtualenv:
$ source bin/activate  # If using bash
$ source bin/activate.csh  # If using csh
(tensorflow)$  # Your prompt should change
Inside the virtualenv, install TensorFlow:
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
You can then run your TensorFlow program like:
(tensorflow)$ python tensorflow/models/image/mnist/convolutional.py

# When you are done using TensorFlow:
(tensorflow)$ deactivate  # Deactivate the virtualenv

$  # Your prompt should change back
0
votes

If you just begin to learn TensorFlow, I would suggest you trying out examples in TensorFlow/skflow first and then once you are more familiar with TensorFlow it would be fairly easy for you to insert TensorFlow code to build a custom model you want (there are also examples for this).

Hope those examples for images and text understanding could get you started and let us know if you encounter any issues! (post issues or tag skflow in SO).

0
votes

Change your logging level from WARN to INFO, so that can get a better visualization of the error you're getting.
For knowledge purpose, you should know there are 5 logging levels:

  1. DEBUG
  2. INFO
  3. WARN
  4. ERROR
  5. FATAL