Chcę przypisać wartości w tensorze zgodnie z indeksami.W Tensorflow, jak przypisać wartości w Tensor według indeksów?
Na przykład Zgodnie z wartościami pulowania i odpowiadającymi im wartościami wyjściowymi z tf.nn.max_pool_with_argmax, chcę umieścić te wartości łączenia z powrotem w oryginalnym tensorze nie łączącym z indeksami.
Uważam, że indeksy wyjściowe tf.nn.max_pool_with_argmax
są spłaszczone. Jedno pytanie: jak rozłożyć je z powrotem na współrzędne w Tensorflow?
Kolejne pytanie: Jak przypisać każdą wartość tensora puli do pozycji oryginalnego tensora nie łączącego w Tensorflow, biorąc pod uwagę indeksy?
Dziękuję bardzo.
Próbowałem zrobić kody, aby to osiągnąć, ale mogę po prostu użyć numpy
. Nie wiem, jak uzyskać spłaszczone wskaźniki po tf.nn.max_pool_with_argmax
i przypisać do tensora nie łączącego w Tensorflow.
ksize = 3
stride = 1
input_image = tf.placeholder(tf.float32, name='input_image')
#conv1
kernel = tf.Variable(tf.truncated_normal([ksize, ksize, 3, 16],stddev=0.1),
name='kernel')
conv = tf.nn.conv2d(input_image, kernel, [1,stride,stride,1], padding='SAME')
biases = tf.Variable(tf.constant(0.0, shape = [16]), name = 'biases')
bias = tf.nn.bias_add(conv, biases)
conv1 = tf.nn.relu(bias, name='conv1')
#pool1
pool1, pool1_indices = tf.nn.max_pool_with_argmax(conv1, ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1],
padding='SAME', name='pool1')
#upsample by assigning the values of pool1 to the position in unpooling Tensor according to pool1_indices
indices = pool1_indices
unravel_pool1_indices = np.unravel_index(indices,[4,32,32,16])
unravel_pool1_coordinates = np.array(unravel_pool1_indices)
coor_shape = np.shape(unravel_pool1_coordinates)
unravel_pool1_coordinates = np.reshape(unravel_pool1_coordinates,(coor_shape[0],coor_shape[1]*coor_shape[2]*coor_shape[3]*coor_shape[4]))
unravel_pool1_coordinates = unravel_pool1_coordinates.T
values = pool1
values = np.reshape(values,(np.size(values)))
up1 = tf.constant(0.0, shape = [4,32,32,16])
delta = tf.SparseTensor(unravel_pool1_coordinates, values, shape = [4,32,32,16])
result = up1 + tf.sparse_tensor_to_dense(delta)
with tf.Session() as session:
session.run(tf.initialize_all_variables())
test_image = np.random.rand(4,32,32,3)
sess_outputs = session.run([pool1, pool1_indices],
{input_image.name: test_image})
Jeśli nadal szuka rozwiązania, można to sprawdzić: http://stackoverflow.com/questions/34685947/adjust-single-value-within-tensor-tensorflow/34686952#34686952][] –