私はBlocks(とTheano)で本当に単純なリカレントニューラルネットワークを設計しました。コスト関数として、私は平方誤差関数を使用することに決めました。これは単に(y-y')^2
と定義されています。私はミニバッチ全体の平均コストを計算したいと思います。Block(Theano、Python)でSquaredError brickを使用するには?
次のコードは、ブロッククラス/メソッドSquaredError
を使用したほとんどの動作例です。これは、私が関係する限り、正確に目的の操作を行うことになっています。
float64
を無効にして無視してください。eval
の実行を簡略化するために使用しています。問題は、32bを使用しても維持されます。
import theano.tensor as tt
from blocks.bricks.cost import SquaredError
if __name__ == '__main__':
a = tt.vector('a', dtype='float64')
b = tt.vector('b', dtype='float64')
cost = SquaredError().apply(a, b)
print(cost.eval({a: [1.0, 2.0, 3.0, 4.0],
b: [0.5, 2.1, 3.4, 3.8]}))
# Expected: mean(0.5^2 + 0.1^2 + 0.4^2 + 0.2^2)
# Got: ValueError: Not enough dimensions on squarederror_cost_matrix_output_0 to reduce on axis 1
問題のある行を下の行に変更すると、すべて正常に動作します。
cost = tt.sqr(tt.abs_(a - b)).mean()
私は間違っていますか?私はブロックをもっと学ぼうとしていますが、これは私の理解を超えています。別のレンガを使うはずですか?あるいは、何らかの形でテンソルを前処理しますか?
P.S.ブロックはStackOverflowを積極的に監視するのに十分なほど普及していませんが、ブロックユーザーのGoogleグループで一般的なオープンエンドの使用に関する質問や、問題が明らかに壊れている場合は問題追跡ツールを試すことができます。 – dwf
ご説明いただきありがとうございます。次回はSOの代わりにユーザーグループを使用します。 – petrbel