Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

onnx: fix pad, unsqueeze #2317

Merged
merged 4 commits into from
Jul 23, 2024
Merged

onnx: fix pad, unsqueeze #2317

merged 4 commits into from
Jul 23, 2024

Conversation

shua
Copy link
Contributor

@shua shua commented Jul 7, 2024

both implementations have off-by-one errors:

  • Pad 'reflect' cycle for eg dim==3 is [0,1,2,1] which has length of 4 (or dim*2 - 2) not 5 (current code dim*2 - 1)
  • Unsqueeze(-1) for tensor with dim==3 should be 3 (ie dim+index+1) not 2 (ie currently dim+index)

in addition, Pad is incorrectly calculating the starting padding. If we want to pad out 2 elements to the start, and we have this cycle of indices of length 6, then we should skip 4 elements, but currently we skip 2. A more visual representation of what's going on is below:

pad_start: 2
data:      [a,b,c,d]
indices:   [0, 1, 2, 3, 2, 1, 0, 1, 2, 3, 2, 1, 0, ..] // zigzag between 0..4
actual:    skip [ c  d| c  b  a  b]
expected:  ~  skip  ~ [ c  b| a  b  c  d]

The values between [ and | are padding and the values between | and ] in the example should match the original data being padded.

@shua shua mentioned this pull request Jul 7, 2024
9 tasks
shua and others added 4 commits July 7, 2024 21:33
both implementations have off-by-one errors:
- Pad 'reflect' cycle for eg `dim==3` is `[0,1,2,1]` which has length of
  4 (or `dim*2 - 2`) not 5 (current code `dim*2 - 1`)
- Unsqueeze(-1) for tensor with `dim==3` should be 3 (ie `dim+index+1`)
  not 2 (ie currently `dim+index`)

in addition, Pad is incorrectly calculating the starting padding.
If we want to pad out 2 elements to the start, and we have this cycle
of indices of length 6, then we should skip 4 elements, but currently
we skip 2. A more visual representation of what's going on is below:

```
pad_start: 2
data:      [a,b,c,d]
indices:   [0, 1, 2, 3, 2, 1, 0, 1, 2, 3, 2, 1, 0, ..] // zigzag between 0..4
actual:    skip [ c  d| c  b  a  b]
expected:  ~  skip  ~ [ c  b| a  b  c  d]
```

The values between `[` and `|` are padding and the values between
`|` and `]` in the example should match the original data being padded.
@LaurentMazare LaurentMazare merged commit 6056fd5 into huggingface:main Jul 23, 2024
10 checks passed
@LaurentMazare
Copy link
Collaborator

Thanks.

@shua shua deleted the pad branch July 25, 2024 05:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants