2017-03-11 8 views
1

私は私のコードを実行すると、私は次のメッセージと値のエラーを取得:(ラザニア)とValueError:入力次元不整合

ValueError: Input dimension mis-match. (input[0].shape[1] = 1, input[2].shape[1] = 20) 
Apply node that caused the error: Elemwise{Composite{((i0 + i1) - i2)}}[(0, 0)](Dot22.0, InplaceDimShuffle{x,0}.0, InplaceDimShuffle{x,0}.0) 
Toposort index: 18 
Inputs types: [TensorType(float64, matrix), TensorType(float64, row), TensorType(float64, row)] 
Inputs shapes: [(20, 1), (1, 1), (1, 20)] 
Inputs strides: [(8, 8), (8, 8), (160, 8)] 
Inputs values: ['not shown', array([[ 0.]]), 'not shown'] 
Outputs clients: [[Elemwise{Composite{((i0 * i1)/i2)}}(TensorConstant{(1, 1) of 2.0}, Elemwise{Composite{((i0 + i1) - i2)}}[(0, 0)].0, Elemwise{mul,no_inplace}.0), Elemwise{Sqr}[(0, 0)](Elemwise{Composite{((i0 + i1) - i2)}}[(0, 0)].0)]] 

私のトレーニングデータは、このような..

としてエントリーの行列であります
[ 815.257786 320.447 310.841] 

そして、私は私のトレーニング機能に入力するよバッチがの形状を有している(BATCH_SIZE、3)とタイプTensorType(のfloat64、マトリックス)

私のニューラルネットは非常に簡単です:

self.inpt = T.dmatrix('inpt') 
    self.out = T.dvector('out') 

    self.network_in = nnet.layers.InputLayer(shape=(BATCH_SIZE, 3), input_var=self.inpt) 
    self.l0   = nnet.layers.DenseLayer(self.network_in, num_units=40, 
         nonlinearity=nnet.nonlinearities.rectify, 
    ) 
    self.network = nnet.layers.DenseLayer(self.l0, num_units=1, 
         nonlinearity=nnet.nonlinearities.linear 
    ) 

私の損失関数は次のとおりです。

pred = nnet.layers.get_output(self.network) 
    loss = nnet.objectives.squared_error(pred, self.out) 
    loss = loss.mean() 

私は次元のミスマッチを取得しています理由として少し困惑しています。私は正しい入力とラベルの型を(記号変数ごとに)渡しています。入力データの形状は、私がInputLayerに与えている予想される 'shape'パラメータに対応しています。バッチサイズを指定してバッチサイズを指定すると、ネットワークが問題なくトレーニングでき、エラーメッセージのinput [2] .shape [1]値が私のバッチサイズ。私は機械学習のために新しく、どんな助けも大いに評価されるでしょう!

答えて

0

私のラベルのディメンションが間違っていたことがわかりました。

x_train.shape == (batch_size, 3) 
y_train.shape == (batch_size,) 

そして、私のネットにシンボリックの入力は以下の通りであった::

私のデータは、形状を持っていた私はy_trainを再形成することにより、私の問題を解決することができました

self.inpt = T.dmatrix('inpt') 
self.out = T.dvector('out') 

。私はその後、これらの変化を説明するために記号的出力変数を行列に変更しました。

y_train = np.reshape(y_train, y_train.shape + (1,)) 
# y_train.shape == (batch_size, 1) 

self.out = T.dmatrix('out') 
関連する問題