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 te
You can also try out this one
x = tf.slice(ph, [0,0], [3, 2])
As your starting point is (0,0)
second argument is [0,0]
.
You want to slice three raw and two column so your third argument is [3,2]
.
This will give you desired output.
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_}))
For me, I tried another example to let me understand the slice function
input = [
[[11, 12, 13], [14, 15, 16]],
[[21, 22, 23], [24, 25, 26]],
[[31, 32, 33], [34, 35, 36]],
[[41, 42, 43], [44, 45, 46]],
[[51, 52, 53], [54, 55, 56]],
]
s1 = tf.slice(input, [1, 0, 0], [1, 1, 3])
s2 = tf.slice(input, [2, 0, 0], [3, 1, 2])
s3 = tf.slice(input, [0, 0, 1], [4, 1, 1])
s4 = tf.slice(input, [0, 0, 1], [1, 0, 1])
s5 = tf.slice(input, [2, 0, 2], [-1, -1, -1]) # negative value means the function cutting tersors automatically
tf.global_variables_initializer()
with tf.Session() as s:
print s.run(s1)
print s.run(s2)
print s.run(s3)
print s.run(s4)
It outputs:
[[[21 22 23]]]
[[[31 32]]
[[41 42]]
[[51 52]]]
[[[12]]
[[22]]
[[32]]
[[42]]]
[]
[[[33]
[36]]
[[43]
[46]]
[[53]
[56]]]
The parameter begin indicates which element you are going to start to cut. The size parameter means how many element you want on that dimension.