Theano(CNN)の追加機能を追加する
-
21-12-2019 - |
質問
分類のためにTheanoを使っています(畳み込みニューラルネットワーク)
以前は、NNの機能として(平坦化)画像のピクセル値を使用しています。
今、私は追加の機能を追加したいです。
平坦化された画像機能に追加の機能のベクトルを連結してから、完全に接続されたレイヤへの入力としてそれを使用することができると言われましたが、私はそれに問題があります。
まず第一に、正しいアプローチは?
これはいくつかのコードスニペットと私のエラーです:
いくつかの修正を伴う彼らのサイトからの提供された例と同様に
(モデルを構築するクラスから)
# allocate symbolic variables for the data
self.x = T.matrix('x') # the data is presented as rasterized images
self.y = T.ivector('y') # the labels are presented as 1D vector of [int] labels
self.f = T.matrix('f') # additional features
.
下記の変数v
およびrng
は以前に定義されています。重要なのはlayer2_input
:
layer2_input = self.layer1.output.flatten(2)
layer2_input = T.concatenate([layer2_input, self.f.flatten(2)])
self.layer2 = HiddenLayer(rng, input=layer2_input, n_in=v, n_out=200, activation=T.tanh)
.
(列車のクラスから)
train_model = theano.function([index], cost, updates=updates,
givens={
model.x: train_set_x[index * batch_size: (index + 1) * batch_size],
model.y: train_set_y[index * batch_size: (index + 1) * batch_size],
model.f: train_set_f[index * batch_size: (index + 1) * batch_size]
})
.
しかし、train_modelが呼び出されたときにエラーが発生します。
ValueError: GpuJoin: Wrong inputs for input 1 related to inputs 0.!
Apply node that caused the error: GpuJoin(TensorConstant{0}, GpuElemwise{tanh,no_inplace}.0, GpuFlatten{2}.0)
Inputs shapes: [(), (5, 11776), (5, 2)]
Inputs strides: [(), (11776, 1), (2, 1)]
Inputs types: [TensorType(int8, scalar), CudaNdarrayType(float32, matrix), CudaNdarrayType(float32, matrix)]
.
入力形状は、それぞれx
、y
、f
の形状を表しますか?
もしそうであれば、3番目は正しいと思われる(BatchSize= 5,2の追加機能)ですが、なぜ最初のスカラーと2番目のマトリックスはなぜですか?
詳細:
train_set_x.shape = (61, 19200) [61 flattened images (160x120), 19200 pixels]
train_set_y.shape = (61,) [61 integer labels]
train_set_f.shape = (61,2) [2 additional features per image]
batch_size = 5
.
正しい考えを持っているか、これを達成するためのより良い方法はありますか? なぜ私がエラーを得ているのかへの洞察?
解決
問題は私が間違った軸を連結していたことです。
layer2_input = T.concatenate([layer2_input, self.f.flatten(2)])
.
は
でしたlayer2_input = T.concatenate([layer2_input, self.f.flatten(2)], axis=1)
. 所属していません StackOverflow