多对一 LSTM,多类分类
Many to one LSTM, multiclass classification
我正在尝试训练具有 64 个隐藏单元的 LSTM-RNN。我的数据如下:
输入: 尺寸为 (170000, 50, 500) ->(示例、时间步长、特征数量)的 numpy 数组
输出: 维数为 (170000, 10) 的 numpy 数组
输出是一个分类变量,有10个classes(例如,class1对应向量[1,0,0,0,0,0,0,0,0 ,0])
到目前为止,我已经尝试过此代码,但出现错误,指出密集层应具有 3D 输入。
model = Sequential()
model.add(LSTM(64, input_shape=(50, 500), return_sequences=True,dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(units = 10,activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(input, output, epochs=1, batch_size=64)
唯一似乎有效的方法是更改输出,使其具有以下形式:(170000,50,10),除了第 50 个时间步之外基本上全为零。
这是正确的做法吗?如果是这样,有没有更有效的方法?我担心扩展输出的形状可能会降低代码效率。
您只需将 return_sequences=True
更改为 return_sequences=False
。此外,如果每个项目只能放在一个 class 中,您需要将输出层中的激活函数更改为 activation='softmax'
我正在尝试训练具有 64 个隐藏单元的 LSTM-RNN。我的数据如下:
输入: 尺寸为 (170000, 50, 500) ->(示例、时间步长、特征数量)的 numpy 数组
输出: 维数为 (170000, 10) 的 numpy 数组
输出是一个分类变量,有10个classes(例如,class1对应向量[1,0,0,0,0,0,0,0,0 ,0])
到目前为止,我已经尝试过此代码,但出现错误,指出密集层应具有 3D 输入。
model = Sequential()
model.add(LSTM(64, input_shape=(50, 500), return_sequences=True,dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(units = 10,activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(input, output, epochs=1, batch_size=64)
唯一似乎有效的方法是更改输出,使其具有以下形式:(170000,50,10),除了第 50 个时间步之外基本上全为零。
这是正确的做法吗?如果是这样,有没有更有效的方法?我担心扩展输出的形状可能会降低代码效率。
您只需将 return_sequences=True
更改为 return_sequences=False
。此外,如果每个项目只能放在一个 class 中,您需要将输出层中的激活函数更改为 activation='softmax'