我试图将文本分类(一个文本可以有多个类别),为此,我使用了一个热编码标签(与sklearn.preprocessing.MultiLbaleBinarizer())。我的文本也是一个热编码,但与keras.preprocessing.text.one_hot。
这是我的密码:
csv_data_name = 'learning_base'
df = pd.read_csv('../../datasets/csv/' + csv_data_name + '.csv ')
df['label_list'] = np.array(df.labels.str.split('|'))
df = df.drop(columns=['labels'])
# Remove incomplete lines (lines without labels)
df = df.dropna()
encoder = MultiLabelBinarizer()
labels_binary = encoder.fit_transform(df.label_list)
output_dim = labels_binary.shape[1]
vocab_size = 200000
encoded_docs = [one_hot(d, vocab_size) for d in df.text]
max_length = 200
padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')
# Data division
training_set_data, testing_set_data_whole, training_set_target, testing_set_target_whole = train_test_split(
padded_docs,
labels_binary,
test_size=0.1,
random_state=0,
shuffle=False)
model = Sequential()
model.add(Embedding(vocab_size, 200, input_length=max_length))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(output_dim, activation='sigmoid'))
model.compile(optimizer=TFOptimizer(tf.train.AdamOptimizer()), loss='mean_squared_error',
metrics=['acc'])
model.fit(training_set_data, training_set_target, epochs=50, verbose=True, batch_size=200,
callbacks=[EarlyStopping(monitor='acc', patience=3, verbose=True), tensorboard])一切都很好,除了当我尝试另一个优化器时,学习似乎是不正确的,只有Adam看起来像预期的那样工作。
这是我的结果:
|Optimizer|Time by epoch|Strict classification succes|Precision|Recall|epoch|
|-------- | ----------- |--------------------------- | ------- |------|---|
|GradientDescent |00:21|0%|12.5%|0%|3 (ES)|
|GradientDescent (`learning_rate = 0.01`) |00:21|0%|3.9%|16.1%|7 (ES)|
|Adadelta |00:24|0%|3.1%|25.7%|3 (ES)|
|Adagrad |00:26|0%|/|/|13 (ES)|
|Ftrl |00:27|0%|/|/|8 (ES)|
|Momentum (`momentum = 0.01`) |00:22|0%|/|/|18 (ES)|
|Adam (`learning_rate = 0.01` : default) |02:37|53%|80%|60.54%|13 (ES)|这是精确性的张紧板:

发布于 2019-09-20 18:32:57
可能有几个可能的原因:
发布于 2019-09-20 19:15:23
原因可能是因为您选择的固定学习速率与数据不太匹配。如果您尝试回溯版本,在这个版本中,学习速度在每一步都得到了调整,而且对于许多功能来说,收敛性可以被严格地证明,那么事情可能会更好。您可以查看我在这个链接中的答案中的论文:
还有,你试过唠叨吗?在我提到的这篇论文中,我们从实验中看到回溯导航工作得很好而且很稳定。
发布于 2019-10-21 11:05:51
可能不是。你比较的东西不太公平。如果您想做的正确,您应该尝试为所有优化器找到最佳的超参数,并比较它们各自的性能。它现在告诉你的基本上是“哪个优化器在标准的超参数和一些我选择的任意参数中工作得最好”。
https://datascience.stackexchange.com/questions/60487
复制相似问题