在不使用 tf.RaggedTensor 的情况下从张量流中的张量中删除某些行

Removing certain rows from tensor in tensorflow without using tf.RaggedTensor

给定张量数据

   [[[ 0.,  0.],
    [ 1.,  1.],
    [-1., -1.]],

   [[-1., -1.],
    [ 4.,  4.],
    [ 5.,  5.]]]

我想删除[-1,-1]并得到

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

   [[ 4.,  4.],
    [ 5.,  5.]]]

如何在不使用 tensorflow 中的粗糙特征的情况下获得上述内容?

你可以这样做:

import tensorflow as tf
import numpy as np

data = [[[ 0.,  0.],
         [ 1.,  1.],
         [-1., -1.]],
        [[-1., -1.],
         [ 4.,  4.],
         [ 5.,  5.]]]
data = tf.constant(data)
indices = tf.math.not_equal(data, tf.constant([-1., -1.]))
res = data[indices]

shape = tf.shape(data)
total = tf.reduce_sum(
    tf.cast(tf.math.logical_and(indices[:, :, 0], indices[:, :, 1])[0], tf.int32))

res = tf.reshape(res, (shape[0], total, shape[-1]))

with tf.Session() as sess:
    print(sess.run(res))
# [[[0. 0.]
#   [1. 1.]]

#  [[4. 4.]
#   [5. 5.]]]

你可以试试这个:

x = tf.constant(
      [[[ 0.,  0.],
      [ 1.,  1.],
      [-1., -2.]],

     [[-1., -2.],
      [ 4.,  4.],
      [ 5.,  5.]]])

mask = tf.math.not_equal(x, np.array([-1, -1]))

result = tf.boolean_mask(x, mask)
shape = tf.shape(x)
result = tf.reshape(result, (shape[0], -1, shape[2]))