Theano에서 두 개의 배열로 구성된 sumproduct
을 계산하고 싶습니다. 두 배열은 공유 변수로 선언되며 이전 계산의 결과입니다. tutorial을 읽고, 나는 '정상적인'텐서 배열을 사용하여 원하는 것을 계산하기 위해 스캔을 사용하는 방법을 발견했지만 공유 배열에 코드를 적용하려고 시도했을 때 TypeError: function() takes at least 1 argument (1 given)
오류 메시지가 나타납니다. (아래의 최소 실행 코드 예제 참조)공유 변수가있는 Theano.scan 사용
내 코드에서 실수는 어디에서 발생합니까? 내 오해는 어디에서 왔습니까? 나는 또한 내 문제를 해결하기위한 다른 접근 방식에 열려있다.
일반적으로 공유 변수를 직접 사용하는 버전을 선호합니다. 이해하기에 처음으로 배열을 Numpy 배열로 변환하고 다시 Theano에 전달하는 것이 낭비이기 때문입니다.
import theano
import theano.tensor as T
import numpy
a1 = [1,2,4]
a2 = [3,4,5]
Ta1_shared = theano.shared(numpy.array(a1))
Ta2_shared = theano.shared(numpy.array(a2))
outputs_info = T.as_tensor_variable(numpy.asarray(0, 'float64'))
Tsumprod_result, updates = theano.scan(fn=lambda Ta1_shared, Ta2_shared, prior_value:
prior_value + Ta1_shared * Ta2_shared,
outputs_info=outputs_info,
sequences=[Ta1_shared, Ta2_shared])
Tsumprod_result = Tsumprod_result[-1]
Tsumprod = theano.function(outputs=Tsumprod_result)
print Tsumprod()
오류 메시지 :
TypeError: function() takes at least 1 argument (1 given)
작업 sumproduct
코드를 사용하여 비공유 변수 :
import theano
import theano.tensor as T
import numpy
a1 = [1, 2, 4]
a2 = [3, 4, 5]
Ta1 = theano.tensor.vector("a1")
Ta2 = theano.tensor.vector("coefficients")
outputs_info = T.as_tensor_variable(numpy.asarray(0, 'float64'))
Tsumprod_result, updates = theano.scan(fn=lambda Ta1, Ta2, prior_value:
prior_value + Ta1 * Ta2,
outputs_info=outputs_info,
sequences=[Ta1, Ta2])
Tsumprod_result = Tsumprod_result[-1]
Tsumprod = theano.function(inputs=[Ta1, Ta2], outputs=Tsumprod_result)
print Tsumprod(a1, a2)
사용하여
sumproduct
코드를 생성 오류 메시지
는 변수를 공유 항상 입력의 목록이 필요
Tsumprod = theano.function([], outputs=Tsumprod_result)
theano.function() :