为了获得 oneHot 编码,我使用了这段代码:
self.Y = tf.placeholder(tf.int32, [None, 1])
self.YY=tf.one_hot(self.Y,depth=5) gives us
给定 y=2,它给出 [0 0 1 0 0]。
现在我想要一个像 onehot 的编码,但是在索引 y 之后是所有的编码。例如,给定 y=2 那么它应该给出 [0 0 1 1 1]。
顺便说一下,我不想在 tensorflow 之外执行此操作。
请您参考如下方法:
您可以使用 tf.range()函数返回一个整数序列直到你的最大值然后使用 <=比较以计算出您想要的结果。
例如,对于您示例中的张量,[2] ,我们可以这样做:
tf.cast(Y <= tf.range(5),tf.int32)
产生所需的结果:[0,0,1,1,1] .
它还以我们期望的方式“广播”一批值。假设批量大小为 5,所以你有一个 batch_Y值(value)类似于:[[1], [0], [1], [4], [2]]然后:
tf.cast(batch_y <= tf.range(5),tf.int32)
产生正确的输出:
[[0, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[0, 1, 1, 1, 1],
[0, 0, 0, 0, 1],
[0, 0, 1, 1, 1]]
