python - 在 Tensorflow 中使用 2D 占位符遮盖 3D 占位符张量

标签 python tensorflow deep-learning tensor

我有一个占位符具有动态大小 A(批量大小、序列大小、5)和另一个具有零值和一个值以及动态大小 B(批量大小、序列大小)的占位符。我想使用第二个 2D 占位符来屏蔽第一个占位符,就好像张量 B[0][0]=0 的值那么 A[0][0][0:5] 将被设置为零,如果它是等于 B[0][0]=1 那么 A[0][0][0:5] 不会改变。

palceholder A:(shape=(2,2,5))    
   [[[ 1,  2,  3,  1,  4],
    [ 2,  3,  5,  2,  4]],
   [[ 2,  7,  5,  8,  1],
    [ 4,  5,  1,  3,  9]]] 

palceholder B:(shape=(2,2))
  [[ 1,  0],
   [ 0,  1]]

Tensor C= Mask(A,B)    
   [[[ 1,  2,  3,  1,  4],
    [ 0,  0,  0,  0,  0]],
   [[ 0,  0,  0,  0,  0],
    [ 4,  5,  1,  3,  9]]]

我已经尝试过 tf.boolean_mask,但它不适用于动态大小的 mask 。

最佳答案

怎么样

import numpy as np
import tensorflow as tf

a = tf.placeholder(tf.int32, [None, None, 5])
b = tf.placeholder(tf.int32, [None, None])
c = tf.multiply(a, tf.expand_dims(b, -1))

with tf.Session() as sess:
    in_a = np.reshape(np.arange(20, dtype=np.int32), [2, 2, 5])
    in_b = np.eye(2)
    print("A: {}".format(in_a))
    print("B: {}".format(in_b))
    out_c = sess.run(c, feed_dict={a: in_a, b: in_b})
    print("C: {}".format(out_c))

打印

A: [[[ 0  1  2  3  4]
  [ 5  6  7  8  9]]

 [[10 11 12 13 14]
  [15 16 17 18 19]]]
B: [[1. 0.]
 [0. 1.]]
C: [[[ 0  1  2  3  4]
  [ 0  0  0  0  0]]

 [[ 0  0  0  0  0]
  [15 16 17 18 19]]]

关于python - 在 Tensorflow 中使用 2D 占位符遮盖 3D 占位符张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52433995/

相关文章:

python - 设置理解没有按预期表现

python - 查询以使用 mysql 调用与本地数据框中的列匹配的值

python - 给定 (5,2) 张量,删除第二列中具有重复项的行

python - 为什么 conv2d 在不同的批量大小下会产生不同的结果

ubuntu - 安装EASGD Torch luarocks 模块找不到libmpiT.so?

python - 如何从 Keras 提供的 MNIST 数据集中仅选择特定数量的样本?

python - Replace() 方法在函数内不起作用

python - 如何使用 python,BeautifulSoup 获取跨度值

python - 按类别过滤 Tensorflow 数据集

python - Tensorflow tf.image.resize_image_with_crop_or_pad 用于 3D 图像