python - 如何在 tensorflow 中使用指定掩码对张量轴进行平均

标签 python tensorflow artificial-intelligence conv-neural-network

例如:

我有一个输入张量(input),形状为(?,10) dtype=float32,第一个维度表示批量大小

还有一个掩码张量(mask),形状为(?,10)mask[sample_number] 就像[True,True,False,...],表示掩码

标签张量(avg_label),形状为(?,),表示每个样本的掩码位置的正确平均值

我想训练模型,但找不到获得输出的好方法。

tf.reduce_...(例如tf.reduce_mean)函数似乎不支持关于屏蔽的论点。

我尝试tf.boolean_mask,但它会将输出形状展平为只有一维,抛出sample_number维度,因此无法区分样本

我考虑过tf.where,例如:

masked=tf.where(mask,input,tf.zeros(tf.shape(input)))
avg_out=tf.reduce_mean(masked,axis=1)
loss=tf.pow(avg_out-avg_label,2)

但是上面的代码肯定不起作用,因为 False 设置为 0 会改变 avg。如果使用 np.nan ,它总是会得到 nan。我想知道在进行reduce操作时是否有一个代表缺席的值。

我该怎么做?

最佳答案

您可以使用tf.ragged.boolean_mask来保持维度。

tf.reduce_mean(tf.ragged.boolean_mask(x, mask=mask), axis=1)

关于python - 如何在 tensorflow 中使用指定掩码对张量轴进行平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48375115/

相关文章:

python - Chainer - Python - 逻辑回归

Python 客户端保持 websocket 打开并对收到的消息使用react

python - 如何使用 python mypy 在 lambda 中输入正则表达式

python - 如何在输入深度神经网络模型之前对数据进行标准化

python - 梯度下降的代码在哪里?

algorithm - 为什么 IDA* 比 A* 快,但为什么 IDA* 访问的节点比 A* 更多?

ruby - Ruby 中的自然语言处理

python - 如何删除Selenium中的YouTube稍后观看视频?

Python 模块导入因未知原因失败

python - 零维数组无法串联,但我的数组不是零维