2016-12-27 1 views
0

저는 Theano dvector에 100 개의 요소가 있습니다. 또한 5 행 100 행 (즉, 각 열에는 100 개의 요소가 포함 된 행렬)이 있습니다.행렬의 각 열에 벡터로 요소를 곱하는 방법 Theano에서?

이제 벡터별로 각 열의 요소 별 곱셈을 적용해야합니다. Theano에서 올바른 방법은 무엇입니까?

내 벡터를 5 번 반복하고이 값을 전 환한 다음 요소 모양이 같은 두 행렬을 곱하면 새 행렬을 만들어야합니까?

내가 한 열이있는 2 차원 배열로 내 벡터를 선언 할 필요가, 내가 NumPy와에, 원하는 동작을 달성하는 것을 배웠습니다

을 추가했습니다. 즉, "열"- 벡터로 "행"벡터를 대체해야합니다 (또는 가로로 값 대신 세로로 값을 써야 함). 이 경우 numpy는 원하는대로 벡터 (열)를 브로드 캐스팅합니다 (내 행렬의 각 열에 내 벡터 요소를 현저하게 곱함). 이것은 내가 오류입니다

X = T.dmatrix('X') 

w = np.array([ 
    [10.0, 0.0, 0.0, 0.0, 0.0], 
    [0.0, 10.0, 0.0, 0.0, 0.0], 
    [0.0, 0.0, 10.0, 0.0, 0.0] 
    ], dtype=th.config.floatX) 
w = np.transpose(w) 

W = th.shared(w, name='W', borrow=True) 

R = W + X 

f = th.function([X], R) 

x = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]]) 
print f(x) 

: Theano는 NumPy와의이 동작을 상속하지 않습니다처럼 그러나 보이는

ValueError: Input dimension mis-match. (input[0].shape[1] = 3, input[1].shape[1] = 1) 
Apply node that caused the error: Elemwise{add,no_inplace}(W, X) 
Toposort index: 0 
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)] 
Inputs shapes: [(5, 3), (5, 1)] 
Inputs strides: [(8, 40), (8, 8)] 

을 그건 그렇고을 나는 다음에 x를 정의 할 경우, 코드가 작동 방법 :

x = np.array([[1.0, 1.0, 1.0], [2.0, 2.0, 2.0], [3.0, 3.0, 3.0], [4.0, 4.0, 4.0], [5.0, 5.0, 5.0]]) 

답변

0

내가 찾아낸 "기본"솔루션 theano.tensor.extra_ops.repeat 작업을 사용하는 것입니다. 자세한 내용을 보려면 사용해야합니다

Xr = T.extra_ops.repeat(X, 3, axis=1) 

이 작업은 열 벡터를 세 번 반복합니다. 결과적으로 우리는 3 개의 동일한 열이있는 행렬을 얻게되며이 행렬은 W 행렬 요소와 현저하게 곱해질 수 있습니다.

관련 문제