Тензор потока: изменение формы и замена элементов из тензора (shape = [batchsize]) в тензор (shape = [batchsize, 2]) с определенным порядком - PullRequest
0 голосов
/ 02 июля 2018

У меня есть тензор (shape = [batchsize]). Я хочу изменить тензор в определенном порядке и в форму = [- 1,2]. Я хочу получить конкретный заказ:

  1. Элемент в [0,0]
  2. Элемент в [1,1]
  3. Элемент в [0,1]
  4. Элемент в [1,0]
  5. Элемент в [2,0]
  6. Элемент в [3,1]
  7. Элемент в [2,1]
  8. Элемент в [3,0] и т. Д. Для неизвестного размера пакета.

Вот пример кода с тензорным диапазоном = (от 0 до ввода = 8).

import tensorflow as tf
import numpy as np

batchsize = tf.placeholder(shape=[], dtype=tf.int32)
x = tf.range(0, batchsize, 1) 
x = tf.reshape(x, shape=[2, -1])
y = tf.transpose(x)
z = tf.reshape(y, shape=[-1, 2])

input = 8
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    msg = sess.run([z], feed_dict={batchsize: input})
    print(msg)

Теперь мой вывод:

[array([[0, 4],
       [1, 5],
       [2, 6],
       [3, 7]], dtype=int32)]

Но я хочу, чтобы результат был:

[array([[0, 2],
       [3, 1],
       [4, 6],
       [7, 5]], dtype=int32)]

В общем : важно то, что, глядя только на преобразование блока 4x1 в блок 2x2, первые 2 элемента входного тензора располагаются на одной диагонали, а остальные 2 элемента - на счетчик диагональ.

Имейте в виду, я не знаю, насколько велик размер пакета, я просто установил input = 8 по примерной причине. В моем реальном коде тензор ´x´ - это не массив диапазонов, а сложные случайные числа, поэтому вы не можете ни в коем случае сортировать w.r.t. ценности. Я только что сделал этот код для демонстрации.

Этот вопрос относится к этому вопросу , но с другим порядком или к этому вопросу , после выполнения обычного изменения формы с помощью транспонирования, чтобы просто поменять элементы в каждой 2-й строке.

...