从张量中随机删除

时间:2019-02-16 21:36:10

标签: python tensorflow

我正在尝试从张量中随机删除一行。到目前为止,我看到的最简单的方法如下(引用为here):

a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
a_vecs = tf.unstack(a, axis=1)
val = tf.constant(1)
del a_vecs[val]
a_new = tf.stack(a_vecs, 1)

我想将基于张量运算的随机整数传递给“ del”。但是当我使用时:

ran = tf.random_uniform((1,), minval=0, maxval=val, dtype=tf.int32)

我返回一个数组,而del不接受数组。另外,如果有从数组中删除的更简单方法,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以使用tf.boolean_mask所需的任何大小和形状。使用np.random.choice

创建所需形状的布尔值的numpy数组
#your_shape = int or array
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
ran = tf.random_uniform((1,), minval=0, maxval=2, dtype=tf.int32)
a_vecs = tf.unstack(a, axis=1)
rm = np.random.choice([True, False], your_shape)
a_new = tf.boolean_mask(a_vecs, rm)

或者您可以使用np.asscalar将数组转换为标量,但这需要在会话中运行。

a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
ran = tf.random_uniform((1,), minval=0, maxval=2, dtype=tf.int32)
a_vecs = tf.unstack(a, axis=1)
with tf.Session() as sess:
    r = ran.eval()
    val = np.asscalar(r)
    del a_vecs[val]
    a_new = tf.stack(a_vecs, 1)