【发布时间】:2018-12-17 08:09:03
【问题描述】:
我有 38 个数据集,每个数据集包含不同长度的序列(每个数据集包含不同数量的 A-G (7))。这些数据来自不同的学生来执行任务。所以每个序列主要反映了相同的过程但不同的策略。
Group1 Group2............ Group 38
A B F
E C A
B E G
C D G
C F F
D G G
. . .
. . .
我已将每一组转换为一个热向量并得到 38 个 nx8 矩阵(n 是序列的长度)。 基于这些数据,我想实现 LSTM/GRU 来预测另一组中的下一个词。训练这些数据的最佳方法是什么?目前,我正在使用这些代码来计算损失:[主要代码的一部分] 认为, 训练数据集:28[Group 1 - Group 28] 测试数据集:10[Rest]
def calc_acc(series, skip=0):[#series will be training and testing data]
loss = 0
count = 0
max_len = np.amax([len(x) for x in series])
for k in range(min_context, max_len):
feat = np.array([x[0:k] for x in series if len(x) > k])
lab = np.array([x[k] for x in series if len(x) > k])
pred = np.argmax(model.predict(feat), axis=1)
actual = np.argmax(lab, axis=1)
count += len(pred)
loss += sum([x != y for x, y in zip(pred, actual)])
if count == 0:
return 1.0
else:
return 1. - loss / float(count)
我不确定它是否正确。我想以这样的方式训练模型,它首先进入第 1 组更新其权重,然后进入下一组[实际上我不明白如何训练这种情况]。我的模型如下:
def build_model(model, action_size, hidden_size=24, hidden_layers=3, dropout=True, activation='relu'):
x = Input(shape=(None, action_size+1))#action size is 7(seven word)
y = x
y = LSTM(hidden_size if hidden_layers > 1 else action_size,
activation='tanh')(y)
if dropout:
y = Dropout(0.3)(y)
if hidden_layers > 1:
y = Dense(action_size, activation=None)(y)
y = Activation('softmax')(y)
return Model(inputs=x,outputs=y)
有了这些,我的准确率达到了 57%。
- 有没有什么具体的方法可以训练这种多序列数据?请给出详细建议
- 如果我想像这篇文章一样添加其他与时间无关的特征[血型/性别][Adding static data( not changing over time) to sequence data in LSTM,我该如何使用建议的模型?
【问题讨论】:
标签: python tensorflow keras neural-network lstm