首页 > 解决方案 > 张量内容的逻辑运算

问题描述

我有一个名为“datastate”的列表,形状为 (?,10),其中填充了 tensorflow 中 10 个批次样本的结果(所有张量)。换句话说,批量大小为 256,这将填充 10 个大小为 256 的不同张量。

在下面的伪代码中......

datastate = {}

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

接下来我想做的是定义一个像“datastate_change”这样的变量,它将确定batch_results的第i个记录与batch_results的第(i-1)个记录是否发生了变化。如果 Pandas 样式语法有效,这可能类似于以下内容......但我不清楚如何在 sess.run 期间在 tf 内部执行此操作。

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]

标签: pythontensorflowdata-manipulationtensor

解决方案


我自己找到了一个令人满意的答案 - 关键是 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])

推荐阅读