如何在序列结束之前预测类别:序列分类(在Keras中使用RNN / LSTM)?

时间:2019-07-16 11:17:52

标签: python keras deep-learning lstm recurrent-neural-network

我一直在Keras中使用LSTM进行序列分类。 我有200个序列属于两个类0或1 每个序列都有一个从T1,T2,T3 ..... T50开始的时间步长

训练后如何在时间步骤T40(序列结束之前)更早地​​预测班级?

例如:培训

给出:1、2、3、4、5->预测:“好”

给出:6、7、8、9、10->预测:“不好”

enter image description here

预测:(我需要什么)

给出[1,2,3]->预测:“好”

我确信我的上述要求将会有一些方法/论文/资源。

我的工作模型

我的数据包含车辆CAN信号,动态数据。

X.shape = (195,100,4) 
# 195 segments, each segment is of shape 100*4 
# every row in 100*4 corresponds to each Time step 
# each time step in 100*4 represented as t1, t2, t3,.....t100

Y.shape(195,)
# each segment out of 195 segments belongs to either 0 or 1 (2 classes)

Keras代码

input_ = Input(shape=(100,4))

x = LSTM(10, return_sequences= True, activation='tanh')(input_)

x = GlobalMaxPool1D()(x) 

output = Dense(1, activation="sigmoid")(x)

model = Model(inputs=input_, outputs=output)

model.compile(
  loss='binary_crossentropy',
  optimizer=Adam(lr=1e-3),
  metrics=['accuracy']
)

# Training
r = model.fit(
  X,
  Y,
  batch_size=5,
  epochs=100,
  validation_split=0.1
)

1 个答案:

答案 0 :(得分:0)

做任何教程如何在您的API中进行一维卷积。我没有和Keras合作,但是就像:

1)具有大小(批次,序列,项目)的数据集,其中项目的大小为1,您可能会喜欢:[[[1],[2],[3],[4],[5] ] ... [[1],[2],[0]] [[1],[0],[0]] ...]等一批。如果convo的大小为1,则将其填充为零。 例如,将大小为3的Convo层应用于每个序列: [[1],[2],[3],[4],[5]]-> convo1d->(1,2,3)(2,3,4)(3,4,5),其中( 1,2,3)是地图套用的结果

2)然后,大小为conv的输出(批处理,sequence-map_size + 1,项)进入某个递归层,在您的情况下将是多对多,这意味着在每个输入之后创建输出并反向传播项目顺序。

如果您要发送数据给我,我可以在Pytorch中实现它,真的很简单