首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么只有亚当乐观主义者在我的情况下表现良好?

为什么只有亚当乐观主义者在我的情况下表现良好?
EN

Data Science用户
提问于 2019-09-20 09:35:15
回答 3查看 125关注 0票数 1

我试图将文本分类(一个文本可以有多个类别),为此,我使用了一个热编码标签(与sklearn.preprocessing.MultiLbaleBinarizer())。我的文本也是一个热编码,但与keras.preprocessing.text.one_hot

这是我的密码:

代码语言:javascript
复制
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看起来像预期的那样工作。

这是我的结果:

代码语言:javascript
复制
|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)|

这是精确性的张紧板:

EN

回答 3

Data Science用户

发布于 2019-09-20 18:32:57

可能有几个可能的原因:

  1. 其中一个原因可能是Adam优化器结合了其他几种优化技术(例如,动量和梯度平方的运行平均值)。这些技术的结合在多标签文本分类中发挥了良好的作用。
  2. 另一个原因可能是多标签文本分类是一个稀疏的问题。TensorFlow中的Adam优化器具有稀疏实现
票数 0
EN

Data Science用户

发布于 2019-09-20 19:15:23

原因可能是因为您选择的固定学习速率与数据不太匹配。如果您尝试回溯版本,在这个版本中,学习速度在每一步都得到了调整,而且对于许多功能来说,收敛性可以被严格地证明,那么事情可能会更好。您可以查看我在这个链接中的答案中的论文:

梯度下降总是收敛到最优吗?

还有,你试过唠叨吗?在我提到的这篇论文中,我们从实验中看到回溯导航工作得很好而且很稳定。

票数 0
EN

Data Science用户

发布于 2019-10-21 11:05:51

可能不是。你比较的东西不太公平。如果您想做的正确,您应该尝试为所有优化器找到最佳的超参数,并比较它们各自的性能。它现在告诉你的基本上是“哪个优化器在标准的超参数和一些我选择的任意参数中工作得最好”。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/60487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档