例如,
# (m, 50) tensor a
print(a)
<tf.Tensor: id=11543, shape=(3, 50), dtype=int32, numpy=
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 32, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 11, 1, 1, 1, 11, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 421, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1,
1, 1, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0]], dtype=int32)>
# (m, 50) tensor b
print(b)
<tf.Tensor: id=20624, shape=(3, 50), dtype=int32, numpy=
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 11, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 142, 1]], dtype=int32)
張量形狀是(m, 50)
,它的一半都是 0,所以我想將張量減少到(m, 25)
所有 0 的一半部分。
我想知道如何在tf 1.10
.
uj5u.com熱心網友回復:
我假設已知每行中的零數正好代表列大小的一半。如果不是,則洗掉零將導致不支持的張量(具有不同尺寸大小的張量)在tf v1.10.0
.
您可以創建一個遮罩,其中張量中的元素大于 0,然后使用遮罩將它們屏蔽掉tf.boolean_mask
(而且我們將不得不重塑結果,因為 tensorflow 1.10 無法推斷新形狀)。
import tensorflow as tf
# using the `a` defined in your question
mask = tf.cast(a > 0, dtype=tf.int32)
result = tf.boolean_mask(a, mask)
result = tf.reshape(result, (3, 25))
with tf.Session() as sess:
print(result.eval())
# [[ 1 1 1 1 1 1 1 1 1 1 15 32 1 1 7 1 1 1
# 1 1 1 1 1 1 1]
# [ 1 1 1 1 1 11 1 1 1 11 1 1 1 1 1 8 1 1
# 1 1 1 1 1 1 1]
# [ 1 1 1 1 1 421 1 1 1 1 1 1 1 1 1 12 1 1
# 1 1 1 1 1 1 42]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/341017.html
上一篇:如何將gpflowGPR的批量訓練編譯為tf.function?
下一篇:如何修復InvalidArgumentError:logits和標簽必須是可廣播的:logits_size=[32,198]labels_size=[32,3]