毎回異なる共有変数を使用して数回呼び出される Theano 関数があります。現在の実装方法では、Theano 関数は実行されるたびに再定義されます。Theano関数が定義されるたびにグラフが再構築されるため、これによりプログラム全体が遅くなると思います。
def sumprod_shared(T_shared_array1, T_shared_array2):
f = theano.function([], (T_shared_array1 * T_shared_array2).sum(axis=0))
return f()
for factor in range(10):
m1 = theano.shared(factor * array([[1, 2, 4], [5, 6, 7]]))
m2 = theano.shared(factor * array([[1, 2, 4], [5, 6, 7]]))
print sumprod_shared(m1, m2)
非共有 (通常) 変数の場合、関数を一度定義してから、再定義せずに別の変数で呼び出すことができます。
def sumprod_init():
T_matrix1 = T.lmatrix('T_matrix1')
T_matrix2 = T.lmatrix('T_matrix2')
return theano.function([T_matrix1, T_matrix2], (T_matrix1 * T_matrix2).sum(axis=0))
sumprod = sumprod_init()
for factor in range(10):
np_array1 = factor * array([[1, 2, 4], [5, 6, 7]])
np_array2 = factor * array([[1, 2, 4], [5, 6, 7]])
print sumprod(np_array1, np_array2)
これは共有変数でも可能ですか?