繁体   English   中英

理解具有不同序列的keras中的lstm输入形状

[英]Understanding lstm input shape in keras with different sequence

我对keras和python都很新。 我有一个不同序列长度的时间序列数据集(例如第一个序列是484000x128,第二个序列是563110x128等)我把序列放在3D数组中。

我的问题是如何定义输入形状,因为我很困惑。 我使用的是DL4J,但概念在定义网络配置方面有所不同。

这是我的第一个试用代码:

import numpy as np
from keras.models import Sequential
from keras.layers import Embedding,LSTM,Dense,Dropout


## Loading dummy data
sequences = np.array([[[1,2,3],[1,2,3]], [[4,5,6],[4,5,6],[4,5,6]]])
y = np.array([[[0],[0]], [[1],[1],[1]]])
x_test=np.array([[2,3,2],[4,6,7],[1,2,1]])
y_test=np.array([0,1,1])

n_epochs=40

# model configration
model = Sequential()
model.add(LSTM(100, input_shape=(3,1), activation='tanh', recurrent_activation='hard_sigmoid')) # 100 num of LSTM units
model.add(LSTM(100, activation='tanh', recurrent_activation='hard_sigmoid'))
model.add(Dense(1, activation='softmax'))
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

print(model.summary())

## training with batches of size 1 (each batch is a sequence)
for epoch in range(n_epochs):
    for seq, label in zip(sequences, y):
        model.train(np.array([seq]), [label]) # train a batch at a time..
        scores=model.evaluate(x_test, y_test) # evaluate batch at a time..

以下是LSTM输入形状的文档:

输入形状

具有形状的3D张量(batch_size,timesteps,input_dim),(可选)具有形状的2D张量(batch_size,output_dim)。

这意味着您将需要每个批次具有恒定大小的时间步长。

这样做的规范方法是使用keras的填充实用程序填充序列

然后你可以尝试:

# let say timestep you choose: is 700000 and dimension of the vectors are 128

timestep = 700000
dims = 128 

model.add(LSTM(100, input_shape=(timestep, dim),
         activation='tanh', recurrent_activation='hard_sigmoid'))

我编辑了删除batch_size参数的答案。 使用此设置时,批量大小未指定,您可以在拟合模型时设置(在model.fit() )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM