对自定义数据集进行多类分类的微调拥抱面DistilBERT在预测时产生奇怪的输出形状

问题描述

我正在按照https://huggingface.co/transformers/custom_datasets.html上的教程,对自定义数据集上的多类别分类(100个类别)的distilbert进行huggingface的实现微调。

我正在使用Tensorflow进行此操作,并在本机tensorflow中进行了微调,也就是说,我将本教程的以下部分用于数据集的创建:

import tensorflow as tf
train_dataset = tf.data.Dataset.from_tensor_slices((
    dict(train_encodings),train_labels
))
val_dataset = tf.data.Dataset.from_tensor_slices((
    dict(val_encodings),val_labels
))
test_dataset = tf.data.Dataset.from_tensor_slices((
    dict(test_encodings),test_labels
))

这是用于微调的:

from transformers import TFDistilBertForSequenceClassification
model = TFDistilBertForSequenceClassification.from_pretrained('distilbert-base-uncased')
optimizer = tf.keras.optimizers.Adam(learning_rate=5e-5)
model.compile(optimizer=optimizer,loss=model.compute_loss) # can also use any keras loss fn
model.fit(train_dataset.shuffle(1000).batch(16),epochs=3,batch_size=16)

一切似乎都可以很好地进行微调,但是当我尝试使用model.predict(test_dataset)作为参数(带有2000个示例)在测试数据集上进行预测时,该模型似乎每个令牌产生一个预测,而不是一个预测每个序列...

也就是说,我没有得到形状为(1,2000,100)的输出,而是得到形状为(1,1024000,100)的输出,其中1024000是测试示例数(2000)*序列长度(512)。

这里发生了什么暗示吗? (很抱歉,如果这很幼稚,我对tensorflow还是陌生的。)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)