我一直在Keras中使用LSTM进行序列分类。 我有200个序列属于两个类0或1 每个序列都有一个从T1,T2,T3 ..... T50开始的时间步长
训练后如何在时间步骤T40(序列结束之前)更早地预测班级?
例如:培训
给出:1、2、3、4、5->预测:“好”
给出:6、7、8、9、10->预测:“不好”
预测:(我需要什么)
给出[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
)
答案 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中实现它,真的很简单