首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿尔伯特不收敛- HuggingFace

阿尔伯特不收敛- HuggingFace
EN

Stack Overflow用户
提问于 2020-06-20 18:36:23
回答 1查看 701关注 0票数 4

我正在尝试将经过预先训练的HuggingFace阿尔伯特转换器模型应用到我自己的文本分类任务中,但损失不会超过某个点。

这是我的密码:

在我的文本分类数据集中有四个标签,它们是:

代码语言:javascript
复制
0, 1, 2, 3

定义令牌程序

代码语言:javascript
复制
maxlen=25
albert_path = 'albert-large-v1'
from transformers import AlbertTokenizer, TFAlbertModel, AlbertConfig
tokenizer = AlbertTokenizer.from_pretrained(albert_path, do_lower_case=True, add_special_tokens=True,
                                                max_length=maxlen, pad_to_max_length=True)

使用标记程序对文本中的所有句子进行编码

代码语言:javascript
复制
encodings = []
for t in text:
  encodings.append(tokenizer.encode(t, max_length=maxlen, pad_to_max_length=True, add_special_tokens=True))

定义了预训练的变压器模型,并在顶部添加了密集层

代码语言:javascript
复制
    from tensorflow.keras.layers import Input, Flatten, Dropout, Dense
    from tensorflow.keras import Model

    optimizer = tf.keras.optimizers.Adam(learning_rate= 1e-4)
    token_inputs = Input((maxlen), dtype=tf.int32, name='input_word_ids')
    config = AlbertConfig(num_labels=4, dropout=0.2, attention_dropout=0.2)
    albert_model = TFAlbertModel.from_pretrained(pretrained_model_name_or_path=albert_path, config=config)

    X = albert_model(token_inputs)[1] 
    X = Dropout(0.2)(X)
    output_= Dense(4, activation='softmax', name='output')(X)

    bert_model2 = Model(token_inputs,output_)
    print(bert_model2.summary())
    
    bert_model2.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy')

最后,将编码的文本和标签提供给模型。

代码语言:javascript
复制
encodings = np.asarray(encodings)
labels = np.asarray(labels)
bert_model2.fit(x=encodings, y = labels, epochs=20, batch_size=128)


Epoch 11/20
5/5 [==============================] - 2s 320ms/step - loss: 1.2923
Epoch 12/20
5/5 [==============================] - 2s 319ms/step - loss: 1.2412
Epoch 13/20
5/5 [==============================] - 2s 322ms/step - loss: 1.3118
Epoch 14/20
5/5 [==============================] - 2s 319ms/step - loss: 1.2531
Epoch 15/20
5/5 [==============================] - 2s 318ms/step - loss: 1.2825
Epoch 16/20
5/5 [==============================] - 2s 322ms/step - loss: 1.2479
Epoch 17/20
5/5 [==============================] - 2s 321ms/step - loss: 1.2623
Epoch 18/20
5/5 [==============================] - 2s 319ms/step - loss: 1.2576
Epoch 19/20
5/5 [==============================] - 2s 321ms/step - loss: 1.3143
Epoch 20/20
5/5 [==============================] - 2s 319ms/step - loss: 1.2716

损失已经从6下降到1.23左右,但似乎没有进一步减少,即使在30+时代之后。

我做错了什么?

所有的建议都非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-06-30 05:42:59

您可以尝试使用SGD Optimizer

  • Introduce批处理Normalization

  • Try在Albert层的顶部添加几个层(未经预训练)。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62490113

复制
相关文章

相似问题

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