多对一LSTM,多类分类

时间:2017-08-17 20:30:39

标签: keras lstm many-to-one rnn

我正在尝试训练一个有64个隐藏单位的LSTM-RNN。我的数据如下:

输入:具有尺寸(170000,50,500)的numpy数组 - > (例子,时间步骤,特征数量)
输出:具有尺寸(170000,10)的numpy数组

输出是一个包含10个类的分类变量(例如,类1对应于向量[1,0,0,0,0,0,0,0,0,0])

到目前为止,我已经尝试过这段代码,但是出现了一条错误,指出Dense图层应该有3D输入。

@Component({
    moduleId: module.id,
    templateUrl: 'account-list.component.html',
    providers: [AccountService],
    selector: 'account-list'
}).....

deleteAccount(Account: Account) {
    this.confirmationService.confirm({
        header: 'Delete Confirmation', message: 'Are you sure that you want to delete this account?',
        icon: 'fa fa-trash',
        accept: () => {
            this.AccountService.deleteAccount(Account.account_id).subscribe(
                res => {
                    let index: number = this.Accounts.findIndex(n => n.account_id === Account.mc_account_id);
                    if (~index) {
                        this.Accounts.splice(index, 1);
                    }
                    this.msgs.push({ severity: 'Info', summary: 'The account is deleted' });
                },
                err => {
                    this.msgs.push({ severity: 'Error', summary: err.message });
                }
            );

        }
    });
}

唯一可行的方法是改变输出,使其具有以下形式:(170000,50,10),除了第50个时间步之外基本上都是零。

这是正确的做法吗?如果是这样,有什么更有效的吗?我担心扩大产出的事实'形状可能会降低代码效率。

1 个答案:

答案 0 :(得分:1)

您所要做的就是将return_sequences=True更改为return_sequences=False。此外,如果每个项目只能适合一个类别,则需要将输出图层中的激活功能更改为activation='softmax'