Intellipaat Back

Explore Courses Blog Tutorials Interview Questions
0 votes
3 views
in AI and Deep Learning by (50.2k points)

I have a prediction tensor (the actual network)

(Pdb) pred

<tf.Tensor 'transpose_1:0' shape=(?, 200, 200) dtype=float32>

and a y tensor

y = tf.placeholder("float", [None, n_steps, n_classes])

(Pdb) y

<tf.Tensor 'Placeholder_1:0' shape=(?, 200, 200) dtype=float32>

I want to feed it into

f.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))

However, it requires the dimensions to be [batch_size, num_classes]

So I want to reshape both pred and y so that they look like this

<tf.Tensor 'transpose_1:0' shape=(?, 40000) dtype=float32>

But when I run reshape I get

(Pdb) tf.reshape(pred, [40000])

<tf.Tensor 'Reshape_1:0' shape=(40000,) dtype=float32>

instead of (?,40000) how can I maintain that None dimension? (the batch size dimension)

I've also posted all of the relevant code...

# tf Graph input

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

y = tf.placeholder("float", [None, n_steps, n_classes])


 

# Define weights

weights = {

    'hidden': tf.Variable(tf.random_normal([n_hidden, n_classes]), dtype="float32"),

    'out': tf.Variable(tf.random_normal([n_hidden, n_classes]), dtype="float32")

}

biases = {

    'hidden': tf.Variable(tf.random_normal([n_hidden]), dtype="float32"),

    'out': tf.Variable(tf.random_normal([n_classes]), dtype="float32")

}


 

def RNN(x, weights, biases):

    # Prepare data shape to match `rnn` function requirements

    # Current data input shape: (batch_size, n_steps, n_input)

    # Permuting batch_size and n_steps

    x = tf.transpose(x, [1, 0, 2])

    # Reshaping to (n_steps*batch_size, n_input)

    x = tf.reshape(x, [-1, n_input])

    # Split to get a list of 'n_steps' tensors of shape (batch_size, n_hidden)

    # This input shape is required by `rnn` function

    x = tf.split(0, n_steps, x)

    # Define a lstm cell with tensorflow

    lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0, state_is_tuple=True)

    outputs, states = rnn.rnn(lstm_cell, x, dtype=tf.float32)

    output_matrix = []

    for i in xrange(n_steps):

        temp = tf.matmul(outputs[i], weights['out']) + biases['out']

        # temp = tf.matmul(weights['hidden'], outputs[i]) + biases['hidden']

        output_matrix.append(temp)

    pdb.set_trace()

    return output_matrix

pred = RNN(x, weights, biases)

# temp = RNN(x)

# pdb.set_trace()

# pred = tf.shape(temp)

pred = tf.pack(tf.transpose(pred, [1,0,2]))

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))

1 Answer

0 votes
by (107k points)

shape = x.get_shape().as_list()# a list: [None, 9, 2]

 You can proceed it easily with tf.reshape() without knowing the batch size.

follow the below syntax:

x = tf.placeholder(tf.float32, shape=[None, 9,2])

dim = numpy.prod(shape[1:])# dim = prod(9,2) = 18

x2 = tf.reshape(x, [-1, dim])# -1 means "all"

The -1 in the last line means the whole column no matter what the batch size is in the runtime. You can see it in tf.reshape().

If you wish to learn about TensorFlow visit this TensorFlow Tutorial.

 

31k questions

32.8k answers

501 comments

693 users

Browse Categories

...