numpy tuple/array 索引的 tensorflow 等价物是什么?
What is the tensorflow equivalent of numpy tuple/array indexing?
问题
Numpy tuple/array 索引到 select 非连续索引的 Tensorflow 等价物是什么?使用 numpy,可以使用元组或数组 select 编辑多行/多列。
a = np.arange(12).reshape(3,4)
print(a)
print(a[
(0,2), # select row 0 and 2
1 # select col 0
])
---
[[ 0 1 2 3] # a[0][1] -> 1
[ 4 5 6 7]
[ 8 9 10 11]] # a[2][1] -> 9
[1 9]
查看 Multi-axis indexing 但似乎没有等效的方法。
Higher rank tensors are indexed by passing multiple indices.
使用元组或数组导致 ypeError: Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got (0, 2, 5)
。
from tensorflow.keras.layers.experimental.preprocessing import TextVectorization
training_data = np.array([["This is the 1st sample."], ["And here's the 2nd sample."]])
vectorizer = TextVectorization(output_mode="int")
vectorizer.adapt(training_data)
word_indices = vectorizer(training_data)
word_indices = tf.cast(word_indices, dtype=tf.int8)
print(f"word vocabulary:{vectorizer.get_vocabulary()}\n")
print(f"word indices:\n{word_indices}\n")
index_to_word = tf.reshape(tf.constant(vectorizer.get_vocabulary()), (-1, 1))
print(f"index_to_word:\n{index_to_word}\n")
# Numpy tuple indexing
print(f"indices to words:{words.numpy()[(0,2,5),::]}")
# What is TF equivalent indexing?
print(f"indices to words:{words[(0,2,5),::]}") # <--- cannot use tuple/array indexing
结果:
word vocabulary:['', '[UNK]', 'the', 'sample', 'this', 'is', 'heres', 'and', '2nd', '1st']
word indices:
[[4 5 2 9 3]
[7 6 2 8 3]]
index_to_word:
[[b'']
[b'[UNK]']
[b'the']
[b'sample']
[b'this']
[b'is']
[b'heres']
[b'and']
[b'2nd']
[b'1st']]
indices to words:[[b'']
[b'the']
[b'is']]
TypeError: Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got (0, 2, 5)
在 Tensorflow 中可以使用哪些索引来 select 非连续的多个索引?
您可以使用 tf.gather
.
>>> tf.gather(words,[0,2,5])
<tf.Tensor: shape=(3, 1), dtype=string, numpy=
array([[b''],
[b'the'],
[b'is']], dtype=object)>
在指南中阅读更多内容:Introduction to tensor slicing
问题
Numpy tuple/array 索引到 select 非连续索引的 Tensorflow 等价物是什么?使用 numpy,可以使用元组或数组 select 编辑多行/多列。
a = np.arange(12).reshape(3,4)
print(a)
print(a[
(0,2), # select row 0 and 2
1 # select col 0
])
---
[[ 0 1 2 3] # a[0][1] -> 1
[ 4 5 6 7]
[ 8 9 10 11]] # a[2][1] -> 9
[1 9]
查看 Multi-axis indexing 但似乎没有等效的方法。
Higher rank tensors are indexed by passing multiple indices.
使用元组或数组导致 ypeError: Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got (0, 2, 5)
。
from tensorflow.keras.layers.experimental.preprocessing import TextVectorization
training_data = np.array([["This is the 1st sample."], ["And here's the 2nd sample."]])
vectorizer = TextVectorization(output_mode="int")
vectorizer.adapt(training_data)
word_indices = vectorizer(training_data)
word_indices = tf.cast(word_indices, dtype=tf.int8)
print(f"word vocabulary:{vectorizer.get_vocabulary()}\n")
print(f"word indices:\n{word_indices}\n")
index_to_word = tf.reshape(tf.constant(vectorizer.get_vocabulary()), (-1, 1))
print(f"index_to_word:\n{index_to_word}\n")
# Numpy tuple indexing
print(f"indices to words:{words.numpy()[(0,2,5),::]}")
# What is TF equivalent indexing?
print(f"indices to words:{words[(0,2,5),::]}") # <--- cannot use tuple/array indexing
结果:
word vocabulary:['', '[UNK]', 'the', 'sample', 'this', 'is', 'heres', 'and', '2nd', '1st']
word indices:
[[4 5 2 9 3]
[7 6 2 8 3]]
index_to_word:
[[b'']
[b'[UNK]']
[b'the']
[b'sample']
[b'this']
[b'is']
[b'heres']
[b'and']
[b'2nd']
[b'1st']]
indices to words:[[b'']
[b'the']
[b'is']]
TypeError: Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got (0, 2, 5)
在 Tensorflow 中可以使用哪些索引来 select 非连续的多个索引?
您可以使用 tf.gather
.
>>> tf.gather(words,[0,2,5])
<tf.Tensor: shape=(3, 1), dtype=string, numpy=
array([[b''],
[b'the'],
[b'is']], dtype=object)>
在指南中阅读更多内容:Introduction to tensor slicing