Nimitz14 - 3 months ago 296

Python Question

I'm trying to split my input layer into different sized parts. I'm trying to use tf.slice to do that but it's not working.

Some sample code:

`import tensorflow as tf`

import numpy as np

ph = tf.placeholder(shape=[None,3], dtype=tf.int32)

x = tf.slice(ph, [0, 0], [3, 2])

input_ = np.array([[1,2,3],

[3,4,5],

[5,6,7]])

with tf.Session() as sess:

sess.run(tf.initialize_all_variables())

print sess.run(x, feed_dict={ph: input_})

Output:

`[[1 2]`

[3 4]

[5 6]]

This works and is roughly what I want to happen, but I have to specify the first dimension (

`3`

`placeholder`

`None`

Is it possible to use

`slice`

I've tried using a

`placeholder`

`ph.get_shape()[0]`

`x = tf.slice(ph, [0, 0], [num_input, 2])`

Answer

You can specify one negative dimension in the `size`

parameter of `tf.slice`

. The negative dimension tells Tensorflow to dynamically determine the right value basing its decision on the other dimensions.

```
import tensorflow as tf
import numpy as np
ph = tf.placeholder(shape=[None,3], dtype=tf.int32)
# look the -1 in the first position
x = tf.slice(ph, [0, 0], [-1, 2])
input_ = np.array([[1,2,3],
[3,4,5],
[5,6,7]])
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
print(sess.run(x, feed_dict={ph: input_})
```

Source (Stackoverflow)

Comments