可变序列长度数据的分类

时间:2017-08-01 23:02:08

标签: python tensorflow lstm recurrent-neural-network

我的这些数据连续有不同数量的元素

sample feat1  feat2 feat3 feat4 feat5 feat6 feat7
 1       1      200  250    312   474  
 1       2      170  280    370
 ...
 1       12     220  400    470   520  620   720
 2       1      130  320    430   580  612   
 ...
 N       12     70   180    270   410

我发现了这个序列分类

from keras.datasets import imdb
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers.convolutional import Convolution1D
from keras.layers.convolutional import MaxPooling1D
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
numpy.random.seed(7)
top_words = 5000
(X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words=top_words)
# truncate and pad input sequences
max_review_length = 500
X_train = sequence.pad_sequences(X_train, maxlen=max_review_length)
X_test = sequence.pad_sequences(X_test, maxlen=max_review_length)
# create the model
embedding_vecor_length = 32
model = Sequential()
model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length))
model.add(Convolution1D(nb_filter=32, filter_length=3, border_mode='same', activation='relu'))
model.add(MaxPooling1D(pool_length=2))
model.add(LSTM(100))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(X_train, y_train, nb_epoch=3, batch_size=64)

我可以使用它还是修改使用它?一些方向会很好。

此外,如果您有更好的建议使用哪种算法或如何操作,请建议。

1 个答案:

答案 0 :(得分:0)

一般方法是指定一个特定值,表示“未知”。例如,如果您的所有值都是正数,则可以将其选为-1。

sample feat1  feat2 feat3 feat4 feat5 feat6 feat7
 1       1      200  250    312   474    -1    -1
 1       2      170  280    370    -1    -1    -1
 ...
 1       12     220  400    470   520   620   720
 2       1      130  320    430   580   612    -1  
 ...
 N       12     70   180    270   410    -1    -1

然后网络学会忽略这个值。

甚至有一个名为pad_sequences的内置函数可以为您完成此任务。