Пожалуйста, как это сделать с тензорным потоком?

Angivare спросил: 12 мая 2018 в 04:30 в: python

Представьте, что у меня такой тензор как вход:

[[1,1,1,1,1,1,0,0,0,0,0,0,0],
[[1,1,1,1,1,1,0,0,0,0,0,0,0],
[[1,1,1,1,1,1,0,0,0,0,0,0,0],
[[1,1,1,1,1,1,0,0,0,0,0,0,0],
[[1,1,1,1,1,1,0,0,0,0,0,0,0],
[[1,1,1,1,1,1,0,0,0,0,0,0,0],
[[1,1,1,1,1,1,0,0,0,0,0,0,0]
[[1,1,1,1,1,1,0,0,0,0,0,0,0]]

И я хочу это сделать:

[[1,1,1,1,1,1,0,0,0,0,0,0,0],
[[0,1,1,1,1,1,1,0,0,0,0,0,0],
[[0,0,1,1,1,1,1,1,0,0,0,0,0],
[[0,0,0,1,1,1,1,1,1,0,0,0,0],
[[0,0,0,0,1,1,1,1,1,1,0,0,0],
[[0,0,0,0,0,1,1,1,1,1,1,0,0],
[[0,0,0,0,0,0,1,1,1,1,1,1,0]
[[0,0,0,0,0,0,0,1,1,1,1,1,1]]

любой способ, используя только tf-операции (преобразовать в numpy, выполнить операцию и переключиться обратно в tf-тензор, запрещено, потому что я выполняю градиентный спуск с оптимизаторами tf)


2 ответа

P-Gn ответил: 12 мая 2018 в 05:31

Вот решение с нулевым заполнением - его просто заменить случайным заполнением.

import numpy as np
import tensorflow as tfx = np.zeros((8, 13), dtype=np.float32)
x[:, :6] = 1
x = tf.constant(x)s0 = tf.shape(x)[0]
# add an extra zero column on the right
x2 = tf.concat([x, tf.zeros((s0, 1), dtype=x.dtype)], axis=-1)
# flatten the result and remove as many elements as we just added
x2 = tf.reshape(x2, [-1])[:-s0]
# reshape the result to the original shape
x2 = tf.reshape(x2, [s0, -1])sess = tf.InteractiveSession()
print(x.eval())
print(x2.eval())
Angivare ответил: 15 мая 2018 в 08:51

Спасибо user1735003

Другой способ сделать это, что я нашел:

def roll(tensor):
    T=tf.expand_dims(tf.zeros([tensor.shape[1]),0)
        for i in range(tensor.shape[0]):
            row=tf.manip.roll(tensor[i,], shift=i, axis=0)
            T = tf.concat([T,row],axis=1)
    return T