我正在尝试按照https://huggingface.co/transformers/custom_datasets.html上的教程在自定义数据集上微调 Huggingface 的 distilbert 实现,以在自定义数据集上进行多类分类(100 个类)。
我正在使用 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)
,我得到的不是 shape 的输出,而是 shape 的输出(1, 1024000, 100)
,其中 1024000 是测试示例的数量 (2000) * 序列长度 (512)。
关于这里发生了什么的任何提示?(对不起,如果这很天真,我对 tensorflow 很陌生)。