>  기사  >  백엔드 개발  >  여러 매개변수를 사용하는 JAX `vmap` 예기치 않은 동작

여러 매개변수를 사용하는 JAX `vmap` 예기치 않은 동작

王林
王林앞으로
2024-02-09 09:21:071037검색

JAX `vmap` 对于多个参数的意外行为

질문 내용

Jax의 vmap이 여러 매개변수에 적용될 때 예상대로 작동하지 않는 것을 발견했습니다. 예를 들어 다음 기능을 고려해보세요.

으아악

를 위해 x = jnp.arange(7), y = jnp.arange(5), z = jnp.arange(3),该函数的输出形状为 (7, 5, 3). 그러나 다음 vmap 버전의 경우:

으아악

다음 오류가 출력됩니다:

으아악

이 오류의 원인을 설명해 줄 수 있는 사람이 있나요?


정답


vmap 的语义是它对一个或多个数组执行单个批处理操作。当您指定 in_axes=(none, 0, 0) 时,含义是“同时沿 yz 的前导维度映射”:您看到的错误告诉您 yy의 의미는 하나 이상의 배열에서 단일 배치 작업을 수행한다는 것입니다. in_axes=(none, 0, 0)을 지정하면 "yz 모두의 선행 차원을 따라 매핑"된다는 의미입니다. 당신이 보는 오류는 yy의 선행 차원의 크기가 다르기 때문에 배치 호환이 불가능하다는 것을 알려줍니다.

f1 함수는 기본적으로 브로드캐스팅을 사용하여 세 가지 배치 작업을 인코딩하므로 f1 本质上使用广播来编码三个批处理操作,因此要使用 vmap 复制该逻辑,您将需要 vmap를 사용하여 해당 논리를 복제하려면

의 세 가지 응용 프로그램이 필요합니다. 다음과 같이 표현할 수 있습니다: 🎜 으아악

위 내용은 여러 매개변수를 사용하는 JAX `vmap` 예기치 않은 동작의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제