1

Theano のオートエンコーダーを使用して、2 つの異なるタイプのデータからコンテキスト固有の機能を発見しようとしています。

最初のタイプには 13 の機能があり、2 番目のタイプには 60 の機能があります。

    n_ins=[13,60], 
    n_hiddens=[20, 20, 20],

どちらも、オートエンコーダーの独自の独立したスタックを持っています。

最上位レイヤーの出力をマージし、これらを教師ありトレーニング用の回帰レイヤーにフィードします。

self.logLayer = LogisticRegression(
        input=(self.sigmoid_layers[0][-1].output+self.sigmoid_layers[1][-1].output),
        n_in=self.n_modes*n_hiddens[-1],
        n_out=n_outs
    )

各コンテキストの事前トレーニングは正しく機能しているようですが、チュートリアルの標準トレーニング機能を使用して微調整中に問題が発生しました。

     train_fn = theano.function(
        inputs=[index],
        outputs=self.finetune_cost,
        updates=updates,
        givens={
            self.x: train_set_x[
                index * batch_size: (index + 1) * batch_size
            ],
            self.y: train_set_y[
                index * batch_size: (index + 1) * batch_size
            ]
        },
        name='train'
    )

次のエラーが表示されます。

ValueError: dimension mismatch in args to gemm (5,73)x(13,20)->(5,20)
Apply node that caused the error: GpuDot22(GpuSubtensor{int64:int64:}.0, W)
Inputs types: [CudaNdarrayType(float32, matrix), CudaNdarrayType(float32, matrix)]
Inputs shapes: [(5, 73), (13, 20)]
Inputs strides: [(73, 1), (20, 1)]
Inputs values: ['not shown', 'not shown']

これは、トレーニング中に Theano ノードが処理される方法と関係があると思います。トレーニング バッチ (5, 73) が、最初のコンテキスト (13, 20) から個別に出力ノードに直接適用されているようです。

4

0 に答える 0