CuPy 및 Dirichlet은 TypeError : + =에 대해 지원되지 않는 피연산자 유형 : 'int'및 'tuple'을 제공합니다.

DimitrisMel

Dirichlet 분포에서 벡터를 추출한 랜덤 행렬 A를 만들고 싶습니다. 이 함수는 numpy에서 잘 작동합니다 .

import numpy as np
A = np.random.dirichlet(np.ones(n), n)

큐피 랑 똑같이 할 때

import cupy as cp
A = cp.random.dirichlet(cp.ones(n), n)

아래 오류가 발생합니다.

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-45a4f64a8b6e> in <module>
      6 n = 10000 #Size of the square matrix
      7 
----> 8 A = cp.random.dirichlet(cp.ones(n), n)
      9 
     10 print("--- %s seconds ---" % (time.time() - start_time))

~\anaconda3\envs\tensorflow\lib\site-packages\cupy\random\_distributions.py in dirichlet(alpha, size, dtype)
    112     """
    113     rs = _generator.get_random_state()
--> 114     return rs.dirichlet(alpha, size, dtype)
    115 
    116 

~\anaconda3\envs\tensorflow\lib\site-packages\cupy\random\_generator.py in dirichlet(self, alpha, size, dtype)
    144             size = alpha.shape
    145         else:
--> 146             size += alpha.shape
    147         y = cupy.empty(shape=size, dtype=dtype)
    148         _kernels.standard_gamma_kernel(alpha, self._rk_seed, y)

TypeError: unsupported operand type(s) for +=: 'int' and 'tuple'

입력이 이와 같은 numpy 배열 일 때

import cupy as cp
import numpy as np

A = cp.random.dirichlet(np.ones(n), n)

그런 다음 동일한 오류가 발생합니다.

alpha.shapeI 수동으로 검사 할 때 라인 146은 (N)이다. 큐피 버그입니까, 아니면 뭔가 빠졌습니까?

CUDA 10.1에 cupy-cuda101 버전 8.5.0을 사용하고 있습니다. cupy 및 tensorflow와 관련된 다른 모든 것은 내 GPU (2080ti)에서 완벽하게 작동합니다.

아리아 매카시

이것은 GitHub에보고해야하는 cupy의 버그입니다.

문서에도 불구하고 정수 인수의 대소 문자를 제대로 처리하지 못합니다. 튜플 또는 None. 이것이 당신이보고있는 행동을 보는 이유입니다. (튜플을 제공했다면 (a, b)결과 모양은 (a, b, n).

여기서 해결 방법은 원하는 모양을 길이 1 튜플로 제공하는 것 (n,)입니다.. 쉼표가 필요합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관