Skip to content

Commit 667aa66

Browse files
authored
Add gather cn faq (#4082)
* add gather cn faq * follow comments * fix format again * fix again
1 parent 6b5e24f commit 667aa66

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

docs/faq/train_cn.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,47 @@
1212

1313
----------
1414

15+
##### 问题:请问`paddle.gather``torch.gather`有什么区别?
16+
17+
+ 答复:[`paddle.gather`](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/gather_cn.html#gather)`torch.gather`的函数签名分别为:
18+
19+
```python
20+
paddle.gather(x, index, axis=None, name=None)
21+
torch.gather(input, dim, index, *, sparse_grad=False, out=None)
22+
```
23+
24+
其中,`paddle.gather`的参数`x``index``axis`分别与`torch.gather`的参数`input``index``dim`意义相同。
25+
26+
两者在输入形状、输出形状、计算公式等方面都有区别,具体如下:
27+
28+
- `paddle.gather`
29+
30+
- 输入形状:`x`可以是任意的`N`维Tensor。但`index`必须是形状为`[M]`的一维Tensor,或形状为`[M, 1]`的二维Tensor。
31+
32+
- 输出形状:输出Tensor `out`的形状`shape_out``x`的形状`shape_x`的关系为:`shape_out[i] = shape_x[i] if i != axis else M`
33+
34+
- 计算公式:`out[i_1][i_2]...[i_axis]...[i_N] = x[i_1][i_2]...[index[i_axis]]...[i_N]`
35+
36+
- 举例说明:假设`x`的形状为`[N1, N2, N3]``index`的形状为`[M]``axis`的值为1,那么输出`out`的形状为`[N1, M, N3]`,且`out[i_1][i_2][i_3] = x[i_1][index[i_2]][i_3]`
37+
38+
- `torch.gather`
39+
40+
- 输入形状:`input`可以是任意的`N`维Tensor,且`index.rank`必须等于`input.rank`
41+
42+
- 输出形状:输出Tensor `out`的形状与`index`相同。
43+
44+
- 计算公式:`out[i_1][i_2]...[i_dim]...[i_N] = input[i_1][i_2]...[index[i_1][i_2]...[i_N]]...[i_N]`
45+
46+
- 举例说明:假设`x`的形状为`[N1, N2, N3]``index`的形状为`[M1, M2, M3]``dim`的值为1,那么输出`out`的形状为`[M1, M2, M3]`,且`out[i_1][i_2][i_3] = input[i_1][index[i_1][i_2][i_3]][i_3]`
47+
48+
- 异同比较
49+
50+
- 只有当`x.rank == 1``index.rank == 1`时,`paddle.gather``torch.gather`功能相同。其余情况两者无法直接互换使用。
51+
52+
- `paddle.gather`不支持`torch.gather``sparse_grad`参数。
53+
54+
----------
55+
1556
##### 问题:在模型组网时,inplace参数的设置会影响梯度回传吗?经过不带参数的op之后,梯度是否会保留下来?
1657

1758
+ 答复:inplace 参数不会影响梯度回传。只要用户没有手动设置`stop_gradient=True`,梯度都会保留下来。

0 commit comments

Comments
 (0)