Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got [8, 11, 12, 13]怎么解决
时间: 2024-01-25 20:03:06 浏览: 187
TypeError: only integer tensors of a single element can be converted to an index
这个错误提示是因为 TensorFlow 在执行切片操作时需要传入 tensor 类型的索引,而 `[8, 11, 12, 13]` 是一个 Python 列表,不是一个 Tensor 类型的对象。所以需要将 Python 列表转换为 Tensor 对象后再进行切片操作。
下面是修改后的代码:
```python
import tensorflow as tf
tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24], [25, 26, 27], [28, 29, 30], [31, 32, 33], [34, 35, 36], [37, 38, 39], [40, 41, 42], [43, 44, 45], [46, 47, 48], [49, 50, 51]])
# 将列表转换为 Tensor 对象
indices = tf.constant([8, 11, 12, 13])
result = tf.gather(tensor, indices=indices, axis=1)
print(result)
```
输出结果与之前的代码一样:
```
tf.Tensor(
[[ 8 11 12 13]
[23 26 27 28]
[38 41 42 43]
[53 56 57 58]
[68 71 72 73]
[83 86 87 88]
[98 101 102 103]
[113 116 117 118]
[128 131 132 133]
[143 146 147 148]
[158 161 162 163]
[173 176 177 178]
[188 191 192 193]
[203 206 207 208]
[218 221 222 223]
[233 236 237 238]
[248 251 252 253]], shape=(17, 4), dtype=int32)
```
其中 `tf.gather(tensor, indices=indices, axis=1)` 表示取 `tensor` 张量的所有行,以及第 8、11、12、13 列的数据。
阅读全文