0
respostas

Erro na hora de treinar

Quando eu tento treinar o modelo segue esse erro:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [155], in <cell line: 4>()
      1 loss_treino, loss_test = [], []
      2 acc_treino, acc_test = [], []
----> 4 dados_test, rotulos_test = amostrar(50)
      6 for epoca in range(100):
      8     dados_tns, rotulos_tns = amostrar(50) #chamar funcao de amostrar dados selecionados

Input In [154], in amostrar(num_amostras)
     10     dados_amostra.extend([dado for idx, dado in enumerate(dados[categorias.index(cat)]) if idx in indices])
     11     rotulos_amostra.extend([rotulo for idx, rotulo in enumerate(rotulos[categorias.index(cat)]) if idx in indices])
---> 13 dados_amostra = [name2tensor(nome) for nome in dados_amostra] #converter a tensor
     14 rotulos_amostra = [label2tensor(rotulo) for rotulo in rotulos_amostra]  
     16 return dados_amostra, rotulos_amostra

Input In [154], in <listcomp>(.0)
     10     dados_amostra.extend([dado for idx, dado in enumerate(dados[categorias.index(cat)]) if idx in indices])
     11     rotulos_amostra.extend([rotulo for idx, rotulo in enumerate(rotulos[categorias.index(cat)]) if idx in indices])
---> 13 dados_amostra = [name2tensor(nome) for nome in dados_amostra] #converter a tensor
     14 rotulos_amostra = [label2tensor(rotulo) for rotulo in rotulos_amostra]  
     16 return dados_amostra, rotulos_amostra

Input In [133], in name2tensor(name)
      4 name_tns = torch.zeros(len(name), len(dicionario)) #tensor preechido de zeros do tamanho de nome e dicionario
      5 for k, letra in enumerate(name.decode('utf-8')): #para cada letra do nome, transformar em str de volta
----> 6     name_tns[k][dicionario.index(letra)] = 1 #pegando no index do dicionario onde esta a letra mapeada e sua posicao e marcando com 1
      7 return name_tns

ValueError: substring not found

Tentei por horas resolver, uma vez que o código disponibilizado pela professor é diferente do que ela escreveu na aula....... Abaixo segue o DEF amostrar e name2tensor

def amostrar(num_amostras):
    dados_amostra, rotulos_amostra = [], []

    for cat in categorias: #cada categoria na minha lista de categorias
        #selecionar 50 amostras aleatorias
        num_nomes = len(dados[categorias.index(cat)])

        indices = np.random.choice(range(num_nomes), size=num_amostras)
        #pega todos os dados daquela categoria e copia o dado para dados_amostra se o indice estiver na lista de indices
        dados_amostra.extend([dado for idx, dado in enumerate(dados[categorias.index(cat)]) if idx in indices])
        rotulos_amostra.extend([rotulo for idx, rotulo in enumerate(rotulos[categorias.index(cat)]) if idx in indices])

    dados_amostra = [name2tensor(nome) for nome in dados_amostra] #converter a tensor
    rotulos_amostra = [label2tensor(rotulo) for rotulo in rotulos_amostra]  

    return dados_amostra, rotulos_amostra

num_amostras = 50 #quantidade de amostras

dados_tns, rotulos_tns = amostrar(num_amostras)
dicionario = string.ascii_letters + " '-"

def name2tensor(name): #separar letras da palavra e passar em tensor
    name_tns = torch.zeros(len(name), len(dicionario)) #tensor preechido de zeros do tamanho de nome e dicionario
    for k, letra in enumerate(name.decode('utf-8')): #para cada letra do nome, transformar em str de volta
        name_tns[k][dicionario.index(letra)] = 1 #pegando no index do dicionario onde esta a letra mapeada e sua posicao e marcando com 1
    return name_tns 

name2tensor(dados[0][10])