如何在LSTM中选择密集层的尺寸?

时间:2018-08-31 12:40:53

标签: python neural-network keras nlp deep-learning

我有一个多标签文本分类的任务。我的数据集有1369个类:

# data shape
print(X_train.shape)
print(X_test.shape)
print(Y_train.shape)
print(Y_test.shape)
(54629, 500)
(23413, 500)
(54629, 1369)
(23413, 1369)

对于此任务,我决定将LSTM NN与以下参数一起使用:

# define model
maxlen = 400
inp = Input(shape=(maxlen, ))
embed_size = 128
x = Embedding(max_features, embed_size)(inp)
x = LSTM(60, return_sequences=True,name='lstm_layer')(x)
x = GlobalMaxPool1D()(x)
x = Dropout(0.1)(x)
x = Dense(2000, activation="relu")(x)
x = Dropout(0.1)(x)
x = Dense(1369, activation="sigmoid")(x)
model = Model(inputs=inp, outputs=x)
model.compile(loss='binary_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy']
batch_size = 32
epochs = 2
model.fit(X_train, Y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)

问题:是否有任何科学的方法来确定DenseLSTM的维数(在我的示例中为LSTM dimension=60I Dense dimension=2000和{ {1}})?

如果没有科学的方法,也许会有一些启发式方法或技巧来解决如何使用相似维度的数据。

我随机选择了这些参数。我想提高模型的准确性,并正确解决类似问题。

1 个答案:

答案 0 :(得分:0)

我听说优化超参数是一个np问题,即使有更好的方法也可以解决,考虑到间接费用,对于您的项目可能不值得。

对于LSTM层的尺寸,我在一些会议上听到了一些经验良好的工作数据,例如128或256个单元和3个堆叠的层。如果您可以在训练中绘制损失图,并且看到损失在前几个时期急剧下降,但随后又停止下降,则可能需要增加模型的容量。这意味着使其更深或更宽。否则,应尽可能减少参数。

对于密集层的尺寸,如果您的任务是多对多的,这意味着您具有特定尺寸的标签,则该尺寸的数量必须与密集层中的单位数量相同。