ValueError: невозможно создать тензорную проблему для модели трансформатора.Python

Программы на Python
Ответить
Anonymous
 ValueError: невозможно создать тензорную проблему для модели трансформатора.

Сообщение Anonymous »

Я пытаюсь обучить конформную модель на аудиоданных и постоянно получаю следующую ошибку.
"ValueError: невозможно создать тензор, возможно, вам следует активировать усечение и/или заполнение с 'padding=True' 'truncation=True', чтобы иметь пакетные тензоры одинаковой длины. Возможно, ваши функции (.

Код: Выделить всё

input_ids
в данном случае) имеют чрезмерную вложенность (список входных типов, где ожидается тип int)."
Хотя я активировал усечение и заполнение значения True в функции DataCollator и в функцияхprepree_dataset, как показано ниже, проблема сохраняется.
DataCollator:

Код: Выделить всё

def __call__(self, features: List[Dict[str, Union[List[int], torch.Tensor]]]) -> Dict[str, torch.Tensor]:
if not features:
return {}
# split inputs and labels since they have to be of different lenghts and need
# different padding methods
input_features = [{"input_values": feature["input_values"]} for feature in features]
label_features = [{"input_ids": feature["labels"]} for feature in features]

batch = self.processor.pad(
input_features,
padding=self.padding,
max_length=self.max_length,
truncation=True,  # added truncation parameter
pad_to_multiple_of=self.pad_to_multiple_of,
return_tensors="pt",
)
with self.processor.as_target_processor():
labels_batch = self.processor.pad(
label_features,
padding=self.padding,
max_length=self.max_length_labels,
pad_to_multiple_of=self.pad_to_multiple_of_labels,
return_tensors="pt",
)

# replace padding with -100 to ignore loss correctly
labels = labels_batch["input_ids"].masked_fill(labels_batch.attention_mask.ne(1), -100)

batch["labels"] = labels

return batch
функция prepare_dataset:

Код: Выделить всё

MAX_TRANSCRIPTION_LENGTH=128

def prepare_dataset(batch):
speech, transcription = batch["audio"], batch["text"]

#speech_tensors = [torch.tensor(s["array"]) for s in speech]
speech_tensors = []
for s in speech:
tensor = torch.tensor(s["array"])[:MAX_SPEECH_LENGTH] if isinstance(s, dict) else torch.zeros((1,))
speech_tensors.append(tensor)

inputs = torch.nn.utils.rnn.pad_sequence(speech_tensors, batch_first=True, padding_value=0.0)

with tokenizer.as_target_tokenizer():
labels = tokenizer(transcription, padding=True, truncation=True,add_special_tokens=True,max_length=MAX_TRANSCRIPTION_LENGTH,return_tensors="pt").input_ids

with tokenizer.as_target_tokenizer():
input_ids = tokenizer(transcription, padding=True,truncation=True,add_special_tokens=True,max_length=MAX_TRANSCRIPTION_LENGTH, return_tensors="pt").input_ids

return {"input_values": inputs, "attention_mask": inputs != 0.0, "input_ids": input_ids, "labels": labels}
Пожалуйста, помогите решить эту проблему.

Подробнее здесь: https://stackoverflow.com/questions/756 ... rmer-model
Ответить

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

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

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

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

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