【问题标题】:How to choose dimensionality of the Dense layer in LSTM?如何在 LSTM 中选择 Dense 层的维数?
【发布时间】:2019-02-06 12:00:27
【问题描述】:

我有一个多标签文本分类的任务。我的数据集有 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=2000II Dense dimension=1369)?

如果没有科学的方法,也许有一些启发式或技巧来说明如何处理具有相似维度的数据。

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

【问题讨论】:

  • 一般来说,DL中此类参数的选择主要是凭经验,通过反复试验确定的;至少就目前而言,它背后没有“科学”的理由,而这也是最近越来越多抱怨的根源……
  • @desertnaut,我只是确定我的方法(随机选择一个漂亮的数字)是错误的。我认为 DL 专业人士的做法有所不同。他们不会将一层的维度增加一层并检查哪个数字会提供最大的准确性。
  • 嗯,你会大吃一惊... :) 当然,随着经验的积累,更多有根据的猜测作为起点,但它们确实仍然是猜测...
  • @desertnaut,也许有一些关于如何使用类似维度的数据执行此操作的启发式或提示。
  • 你问有没有科学的方法;启发式和提示不属于此类别...

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


【解决方案1】:

我听说优化超参数是一个 np 问题,即使有更好的方法来做到这一点,考虑到间接成本,它对于您的项目可能不值得。

对于 LSTM 层的维度,我从一些会议演讲中听到了一些经验上很好的数字,例如 128 或 256 个单元和 3 个堆叠层。如果您可以在训练过程中绘制损失,并且您看到损失在前几个时期急剧下降,但随后停止下降,您可能需要增加模型的容量。这意味着使它更深或更宽。否则,应该尽可能少的参数。

对于密集层的维度,如果您的任务是多对多的,这意味着您有某个维度的标签,那么您必须具有与密集层中的单元数相同的维度数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2017-09-09
    • 2020-05-12
    • 2019-07-21
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多