我有一个多标签文本分类的任务。我的数据集有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)
问题:是否有任何科学的方法来确定Dense
和LSTM
的维数(在我的示例中为LSTM dimension=60
,I Dense dimension=2000
和{ {1}})?
如果没有科学的方法,也许会有一些启发式方法或技巧来解决如何使用相似维度的数据。
我随机选择了这些参数。我想提高模型的准确性,并正确解决类似问题。
答案 0 :(得分:0)
我听说优化超参数是一个np问题,即使有更好的方法也可以解决,考虑到间接费用,对于您的项目可能不值得。
对于LSTM层的尺寸,我在一些会议上听到了一些经验良好的工作数据,例如128或256个单元和3个堆叠的层。如果您可以在训练中绘制损失图,并且看到损失在前几个时期急剧下降,但随后又停止下降,则可能需要增加模型的容量。这意味着使其更深或更宽。否则,应尽可能减少参数。
对于密集层的尺寸,如果您的任务是多对多的,这意味着您具有特定尺寸的标签,则该尺寸的数量必须与密集层中的单位数量相同。