первым делом я создал свой собственный набор данных, где то же самое с форматом из ljspeech набор данных с такими же метаданными, как этот:
Код: Выделить всё
audio1-0056|You guys want to see my tablet? of course because, you know interesting case you're curious. I wouldn't mind showing it.
audio1-0219|we send them because we love you okay what about the, what about the unchy sticker?
Код: Выделить всё
audio1-0056, audio1-0056.pt
audio1-0219, audio1-0219.pt
Что мне делать дальше после того, как я подготовил набор данных? я прочитал некоторую документацию и руководство от ИИ, которые рассказывали об этой теме, но я все еще не понимаю, как их переобучить.
в моем случае я пытаюсь начать код с создания набора такотронов набор данных:
Код: Выделить всё
import os
import torch
import torchaudio
import torch.nn as nn
import pandas as pd
from torch.utils.data import Dataset
from torch.utils.data import DataLoader, Dataset
from torch.utils.tensorboard import SummaryWriter
from transformers import AutoTokenizer
from scipy.io.wavfile import write
from IPython.display import Audio
bert_tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
class TacotronDataset(Dataset):
def __init__(self, metadata, audiofile):
self.text_data = metadata
self.audio_data = audiofile
self.tokenizer = bert_tokenizer
def __len__(self):
return len(self.text_data)
def encode_text_into_tensor(self, text):
inputs = self.tokenizer(text, return_tensors="pt")
return inputs
def __getitem__(self, index):
text = self.text_data[index]
audio, sample_rate = torchaudio.load(os.path.join(voice_dir, self.audio_data[index]))
encoded_text = self.encode_text_into_tensor(text)
return encoded_text, audio
def collate_fn(batch):
inputs = [item[0] for item in batch]
targets = [item[1] for item in batch]
return inputs, targets
train_tensor= TacotronDataset(tacotron_train[0], audiofiles)
train_dataloader = DataLoader(train_tensor, batch_size=32, shuffle=True, num_workers=4, collate_fn=collate_fn)
Код: Выделить всё
tacotron2model = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_tacotron2', model_math ='fp16')
tacotron2model = tacotron2model.to('cuda')
tacotron2model.train()
Код: Выделить всё
# define loss function
loss_funct = nn.L1Loss()
# define optimizers
optimizer = torch.optim.Adam(tacotron2model.parameters(), lr=0.001)
# add summary writer
loss_writer = SummaryWriter()
# Define Epoch
num_epochs = 100
# train models
for epoch in range(num_epochs):
running_loss = 0.0
for i, data in enumerate(train_dataloader):
inputs, targets = data
inputs = [item.to('cuda') for item in inputs]
targets = [item.to('cuda') for item in targets]
optimizer.zero_grad()
outputs= tacotron2model(inputs)
loss = loss_funct(outputs, targets)
loss.backward()
optimizer.step()
running_loss += loss.item()
epoch_loss = running_loss / len(train_dataloader)
loss_writer.add_scalar('Loss/train', epoch_loss, epoch)
loss_writer.close()
Код: Выделить всё
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
8 optimizer.zero_grad()
9
---> 10 outputs= tacotron2model(inputs)
11 loss = loss_funct(outputs, targets)
12 loss.backward()
2 frames
~/.cache/torch/hub/NVIDIA_DeepLearningExamples_torchhub/PyTorch/SpeechSynthesis/Tacotron2/tacotron2/model.py in forward(self, inputs)
658
659 def forward(self, inputs):
--> 660 inputs, input_lengths, targets, max_len, output_lengths = inputs
661 input_lengths, output_lengths = input_lengths.data, output_lengths.data
662
ValueError: too many values to unpack (expected 5)
Большое спасибо
Подробнее здесь: https://stackoverflow.com/questions/792 ... dan-wavegl
Мобильная версия