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])