私はTheanoを初めて使用しています...これが明らかな場合は申し訳ありません。
LeNet チュートリアルに基づいて、CNN をトレーニングしようとしています。チュートリアルとの主な違いは、データセットが大きすぎてメモリに収まらないため、トレーニング中に各バッチを読み込む必要があることです。
元のモデルには次のものがあります。
train_model = theano.function(
[index],
cost,
updates=updates,
givens={
x: train_set_x[index * batch_size: (index + 1) * batch_size],
y: train_set_y[index * batch_size: (index + 1) * batch_size]
}
)
train_set_x
...完全にメモリにロードされていると想定しているため、これはうまくいきません。
だから私はこれに切り替えました:
train_model = theano.function([x,y], cost, updates=updates)
そしてそれを呼び出そうとしました:
data, target = load_data(minibatch_index) # load_data returns typical numpy.ndarrays for a given minibatch
data_shared = theano.shared(np.asarray(data, dtype=theano.config.floatX), borrow=True)
target_shared = T.cast(theano.shared(np.asarray(target, dtype=theano.config.floatX), borrow=True), 'int32')
cost_ij = train_model(data_shared ,target_shared )
しかし得た:
TypeError: ('名前 ":103" のインデックス 0 (0 ベース) の theano 関数への入力引数が正しくありません', '配列のようなオブジェクトが必要でしたが、変数が見つかりました: おそらく、(おそらく共有)数値配列の代わりに変数?')
したがって、共有変数を Theano 関数への入力として使用することはできないと思います。では、どうすればいいのでしょうか…?