2014-11-20 2 views
2

나는 Theano에서 스파 스 입력을 사용하여 자동 인코딩을 구현하려고합니다.스파 스 매트릭스 곱셈의 Theano 그래디언트

제 곱한 오류 비용 기능을 사용하는 스파 스 자동 코드가 있습니다. 내가 행렬 곱셈을 포함하는 교차 엔트로피 오류를 적용 할 경우에, 나는 다음과 같은 오류가 발생합니다 :

AsTensorError: ('Variable type field must be a TensorType.', SparseVariable{csr,float64}, Sparse[float64, csr]) 

나는 http://nbviewer.ipython.org/urls/gist.githubusercontent.com/peterroelants/4946cdbf189c5e75f2b7/raw/2ee7d3e533a4a6ac2707a2ffa310b81a86e70afd/gistfile1.json에 문제를 보여주는 예를 들어 노트북을 업로드했습니다.

문제를 매트릭스 곱셈 으로 증류했습니다. 이것은 조밀 한 경우에 효과적이지만 (셀 2 참조), 드문 드문 경우에 오류를 발생시킵니다 (셀 3 참조). 스파 스 케이스 [셀 3]에서이 비용 함수를 제곱 오류 (cost = T.sum((x-z)**2))로 변경하면 작업 결과가 발생합니다.

누군가 내가 잘못하고있는 것을 지적 할 수 있습니까? 그리고 Theano에서 작동하는 교차 엔트로피 오류가있는 희소 한 입력 자동 인코딩을 얻는 방법을 보여 주시겠습니까?

답변

1

스파 스 변수에 T. * 기능을 사용할 수 없습니다. 이 경우 사용할 수 있습니다 Theano에서

theano.sparse.sp_sum((x * T.log(z)) 

\ 편집이 사랑하는 수정이 충돌을 해결 :

diff --git a/theano/sparse/basic.py b/theano/sparse/basic.py 
index 4620c5a..a352b9a 100644 
--- a/theano/sparse/basic.py 
+++ b/theano/sparse/basic.py 
@@ -2244,7 +2244,7 @@ class MulSD(gof.op.Op): 
    def grad(self, (x, y), (gz,)): 
     assert _is_sparse_variable(x) and _is_dense_variable(y) 
     assert _is_sparse_variable(gz) 
-  return y * gz, x * gz 
+  return y * gz, dense_from_sparse(x * gz) 

    def infer_shape(self, node, shapes): 
     return [shapes[0]] 

내가 수정을 얻기 위해 노력하겠습니다 이번 주 Theano에 합병했다.

+0

'cost = T.sum (x * T.log (z))'를'cost = theano.sparse.sp_sum (x * T.log (z)) '로 변경하면 여전히 다음 오류가 발생합니다. :'AsTensorError : ('변수 유형 필드는 TensorType이어야합니다.', SparseVariable {csr, float64}, Sparse [float64, csr])'. 나는 다음과 같은 노트북에서 이것을 설명 :이 Theano 마스터 수정되었습니다 http://nbviewer.ipython.org/urls/gist.githubusercontent.com/peterroelants/22990100d2c2973e75dc/raw/f30f2921789bd837df8e3021a1c2f6503e1fc6cc/gistfile1.txt – Xochipilli

+1

. 보고서 주셔서 감사합니다. – nouiz

관련 문제