Невозможно получить точность обучения, потери обучения, точность проверки, график потерь проверки модели SentenceTransfoPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно получить точность обучения, потери обучения, точность проверки, график потерь проверки модели SentenceTransfo

Сообщение Anonymous »

Я создаваю модель Seedencetransformer ('All-Minilm-L6-V2'), используя словарь (JSON) с названием Category_Descriptions в качестве набора данных.
Ниже приведен Структура данных Category_descriptions :
{
"CategoryA": {
"CategorySearch": "Description for CategoryA",
"SubCategory1": "Description for SubCategory1 of CategoryA",
"SubCategory2": "Description for SubCategory2 of CategoryA",
...
},
"CategoryB": {
"CategorySearch": "Description for CategoryB",
"SubCategory1": "Description for SubCategory1 of CategoryB",
"SubCategory2": "Description for SubCategory2 of CategoryB",
...
},
...
}

Я не могу получить точность обучения, потерю обучения, точность проверки, потерю проверки. Я пробовал много способов, но результат обычно заканчивается TypeError: FitMixin.smart_batching_collate() отсутствует 1 обязательный позиционный аргумент: 'batch'
Использовал ли я неправильный collate_fn или определите неверную функцию потерь?
Ниже приведены мои процессы точной настройки:
  • Читать категорию описания и описания подкатегорий из файла json.
  • Преобразуйте данные в объекты InputExample.
  • Преобразуйте текстовые метки в числовые индексы.
  • Разделить набор данных на 80% обучающих данных и 20% проверочных данных.
  • Используйте SentenceTransformer('all-MiniLM-L6-v2') в качестве предварительного обученный model.
  • Создайте загрузчик данных для данных обучения и данных проверки.
  • Используйте SoftmaxLoss в качестве функции потерь.
  • Модель точной настройки.
  • Построение результатов.
Ниже приведена часть кода, предназначенная для точной настройки:
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'Embedding Dictionary.json'), 'r', encoding='utf-8') as f:
category_descriptions = json.load(f)

training_data = []

for category, subcats in category_descriptions.items():

if 'CategorySearch' in subcats:
training_data.append(InputExample(texts=[subcats["CategorySearch"], ''], label=category))

for subcat, description in subcats.items():
if subcat != "CategorySearch":
training_data.append(InputExample(texts=[description, ''], label=subcat))

all_labels = list(set(example.label for example in training_data))

label_to_index = {label: idx for idx, label in enumerate(all_labels)}
index_to_label = {idx: label for label, idx in label_to_index.items()}

for example in training_data:
example.label = label_to_index[example.label]

train_data, valid_data = train_test_split(training_data, test_size=0.2, random_state=42)

org_model = SentenceTransformer('all-MiniLM-L6-v2')

train_dataloader = DataLoader(train_data, shuffle=True, batch_size=8, collate_fn=SentenceTransformer.smart_batching_collate)
valid_dataloader = DataLoader(valid_data, shuffle=False, batch_size=8, collate_fn=SentenceTransformer.smart_batching_collate)

loss_function = losses.SoftmaxLoss(model=org_model, num_labels=len(all_labels), sentence_embedding_dimension=org_model.get_sentence_embedding_dimension())

epochs = 5
warmup_steps = 20

train_losses, valid_losses = [], []
train_accuracies, valid_accuracies = [], []

for epoch in range(epochs):

org_model.train()
train_loss, train_correct, train_total = 0, 0, 0
for batch in train_dataloader:
loss_value = loss_function(batch)
loss_value.backward()
org_model.optimizer.step()
org_model.optimizer.zero_grad()
train_loss += loss_value.item()
predictions = loss_function.get_prediction(batch)
train_correct += (predictions == batch['labels']).sum().item()
train_total += len(batch['labels'])

train_losses.append(train_loss / len(train_dataloader))
train_accuracies.append(train_correct / train_total)

org_model.eval()
valid_loss, valid_correct, valid_total = 0, 0, 0
with torch.no_grad():
for batch in valid_dataloader:
loss_value = loss_function(batch)
valid_loss += loss_value.item()
predictions = loss_function.get_prediction(batch)
valid_correct += (predictions == batch['labels']).sum().item()
valid_total += len(batch['labels'])

valid_losses.append(valid_loss / len(valid_dataloader))
valid_accuracies.append(valid_correct / valid_total)

print(f"Epoch {epoch + 1}/{epochs}")
print(f"Training Loss: {train_losses[-1]:.4f}, Training Accuracy: {train_accuracies[-1]:.4f}")
print(f"Validation Loss: {valid_losses[-1]:.4f}, Validation Accuracy: {valid_accuracies[-1]:.4f}")

plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.plot(range(1, epochs + 1), train_losses, label='Training Loss', marker='o')
plt.plot(range(1, epochs + 1), valid_losses, label='Validation Loss', marker='o')
plt.title('Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

plt.subplot(1, 2, 2)
plt.plot(epochs_range, train_accuracies, label='Training Accuracy', marker='o')
plt.plot(epochs_range, valid_accuracies, label='Validation Accuracy', marker='o')
plt.title('Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()

plt.tight_layout()
plt.show()


Подробнее здесь: https://stackoverflow.com/questions/793 ... cy-validat
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»