Я пытаюсь использовать реализацию Pytorch X LNet и получил «Попытка создать тензор с отрицательным измерением -1: [-1, 768]» при загрузке XLNet - PullRequest
0 голосов
/ 29 апреля 2020

Я начал работать над этим около двух месяцев go в Google Colab для среднесрочного проекта, и все работало отлично. Теперь я модифицирую его для окончательного проекта и продолжаю получать сообщение об ошибке «RuntimeError: Попытка создать тензор с отрицательным измерением -1: [-1, 768]». Похоже, что pytorch недавно выпустил новую версию 1.5, поэтому я опустился до версии 1.4 и все еще получил ту же ошибку. То же самое с 1,3, и я знаю, что я не использовал ничего ниже, так как это вышло в прошлом году. Я проверил это с помощью своего промежуточного кода и все еще получил ту же ошибку, поэтому я не знаю, что происходит. Вот фрагмент кода, связанный с загрузкой и использованием модели.

    train_inputs, validation_inputs, train_labels, validation_labels = train_test_split(inputIds, 
                                                                                        labels, 
                                                                                        random_state=2020, 
                                                                                        test_size=0.2)
    train_masks, validation_masks, _, _ = train_test_split(attention_masks, inputIds, random_state=2020, 
                                                           test_size=0.2)
    # Turn data into torch tensors
    train_inputs = torch.tensor(train_inputs)
    validation_inputs = torch.tensor(validation_inputs)
    train_labels = torch.tensor(train_labels)
    validation_labels = torch.tensor(validation_labels)
    train_masks = torch.tensor(train_masks)
    validation_masks = torch.tensor(validation_masks)

    # Create Iterators of the datasets
    train_data = TensorDataset(train_inputs, train_masks, train_labels)
    train_sampler = RandomSampler(train_data)
    train_dataloader = DataLoader(train_data, sampler=train_sampler, batch_size=batch_size)
    validation_data = TensorDataset(validation_inputs, validation_masks, validation_labels)
    validation_sampler = SequentialSampler(validation_data)
    validation_dataloader = DataLoader(validation_data, sampler=validation_sampler, batch_size=batch_size)

    model = XLNetForSequenceClassification.from_pretrained('xlnet-base-cased', num_labels=2)
    # Loads model into GPU memory
    model.cuda()

    param_optimizer = list(model.named_parameters())
    no_decay = ['bias','gamma','beta']
    optimizer_grouped_parameters = [
        {'params':[p for n, p in param_optimizer if not any(nd in n for nd in no_decay)],
         'weight_decay_rate':0.01},
        {'params':[p for n, p in param_optimizer if any(nd in n for nd in no_decay)],
         'weight_decay_rate':0.0}
    ]
    optimizer = AdamW(optimizer_grouped_parameters, lr=2e-5)

Ошибка происходит в строке model = XLNetForSequenceClassification.from_pretrained('xlnet-base-cased', num_labels=2). Пакеты, которые я использую:

from pandas import to_datetime
import torch
from torch.utils.data import TensorDataset, DataLoader, RandomSampler, SequentialSampler
from keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
# MUST INSTALL PYTORCH-TRANSFORMERS
from pytorch_transformers import XLNetTokenizer, XLNetForSequenceClassification, AdamW
from tqdm import trange
from numpy import argmax, sum 
import nltk
nltk.download('punkt')

Спасибо всем, кто пытается помочь.

1 Ответ

0 голосов
/ 29 апреля 2020

Вы можете попробовать трансформаторы вместо pytorch_transformers.

! pip install transformers (Google Colab)

В терминале,

pip install transformers

import torch

from transformers import XLNetForSequenceClassification

model = XLNetForSequenceClassification.from_pretrained('xlnet-base-cased', num_labels=2)

model.cuda()

param_optimizer = list(model.named_parameters())
no_decay = ['bias','gamma','beta']
optimizer_grouped_parameters = [
    {'params':[p for n, p in param_optimizer if not any(nd in n for nd in no_decay)],
      'weight_decay_rate':0.01},
    {'params':[p for n, p in param_optimizer if any(nd in n for nd in no_decay)],
      'weight_decay_rate':0.0}
]

Вот код без ошибок в Google Colab: https://colab.research.google.com/drive/1A8edGYyFuE7d1Z-ZJusz5zU_7yCevF2L

...