合并和培训Theano自动编码器

时间:2016-01-14 09:17:35

标签: python matrix-multiplication theano deep-learning autoencoder

我尝试使用Theano的自动编码器从两种不同类型的数据中发现特定于上下文的功能。

第一种类型有13种功能,第二种类型有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)开始直接应用于输出节点。

0 个答案:

没有答案