我正在尝试使用 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) 开始分别直接应用于输出节点。