Логическая операция над содержимым тензора - PullRequest
0 голосов
/ 03 июня 2018

У меня есть список с именем 'datastate' формы (?, 10), который заполняется результатами 10 серийных выборок в тензорном потоке (все тензоры).Другими словами, с размером пакета 256, это будет заполнено 10 различными тензорами размера 256.

в псевдокоде ниже ....

datastate = {}

for sample in range(num_samples):
    datastate[sample] = batch_results

Что я хотел быДалее следует определить переменную типа 'datastate_change', которая будет определять, была ли изменена i-я запись batch_results по сравнению с (i-1) -ой записью batch_results.Это может выглядеть примерно так, если бы синтаксис в стиле Pandas работал ... но я не понимаю, как это сделать внутри tf во время sess.run.

for sample in range(num_samples):
    datastate[sample] = batch_results
    datastate_change[sample] = batch_results - batch_results.shift(1)

Чтобы быть более конкретным, если один экземпляр batch_results равен [1,1,1,0,1], я хотел бы иметь datastate [1] = [1,1,1, 0,1] и datastate_change [1] = [1,0,0, -1,1]

1 Ответ

0 голосов
/ 05 июня 2018

Сам нашел удовлетворительный ответ - ключ был numpy, лучше аналоговый плагин, чем pandas .... Сначала я создаю копию моего состояния данных, которая дополняется нулями сверху, затем я вырезаю нижний ряд этой копии.Наконец, я вычесть два.

top_paddings = tf.constant([[1, 0]]) #New tensor with the 'top' being zeros
top_padded_datastate_[sample] = tf.pad(datastate[sample], top_paddings, "CONSTANT")
top_padded_datastate[sample] = top_padded_datastate_[sample][:-1]
datastate_changes[sample] = tf.subtract(datastate[sample], top_padded_datastate[sample])
...