MRdev2 commited on
Commit
757f210
·
1 Parent(s): 3a15979

First commit

Browse files
Files changed (1) hide show
  1. IA-4.py +98 -0
IA-4.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.optim as optim
4
+ import numpy as np
5
+
6
+ # Modelo
7
+ class SimpleChat(nn.Module):
8
+ def __init__(self, input_size, hidden_size, output_size):
9
+ super(SimpleChat, self).__init__()
10
+
11
+ # Camada de codificador RNN
12
+ self.encoder = nn.GRU(input_size, hidden_size)
13
+
14
+ # Camada de decodificador RNN
15
+ self.decoder = nn.GRU(hidden_size, hidden_size)
16
+
17
+ # Mapeamento linear para a saída
18
+ self.linear = nn.Linear(hidden_size, output_size)
19
+
20
+ def forward(self, input_seq, hidden=None):
21
+ # Codificador RNN
22
+ encoder_output, encoder_hidden = self.encoder(input_seq, hidden)
23
+
24
+ # Decodificador RNN
25
+ decoder_output, _ = self.decoder(encoder_output)
26
+
27
+ # Mapeamento linear da saída
28
+ output = self.linear(decoder_output)
29
+
30
+ return output
31
+
32
+ # Treinamento do modelo
33
+ def train(model, input_data, target_data, criterion, optimizer, epochs=1000):
34
+ for epoch in range(epochs):
35
+ optimizer.zero_grad()
36
+ output = model(input_data)
37
+ loss = criterion(output, target_data)
38
+ loss.backward()
39
+ optimizer.step()
40
+
41
+ if (epoch + 1) % 100 == 0:
42
+ print(f'Epoch [{epoch + 1}/{epochs}], Loss: {loss.item():.4f}')
43
+
44
+ # Chat em tempo real
45
+ def chatbot(model, input_size):
46
+ model.eval()
47
+ hidden = None
48
+
49
+ # Mapeamento de respostas em texto
50
+ text_responses = {
51
+ 0: "Me chamo Theo",
52
+ 1: "Como posso ajudar?",
53
+ 2: "Desculpe, não consigo responder a isso.",
54
+ 3: "Isso parece interessante!",
55
+ 4: "Não entendi o que você disse.",
56
+ 5: "Qual é o seu endereço?",
57
+ 6: "Qual o seu nome completo?",
58
+ # Adicione mais respostas
59
+ }
60
+
61
+ while True:
62
+ user_input = input("\n=> ")
63
+ if user_input.lower().strip() == "sair":
64
+ print("__Encerrando Chat__")
65
+ break
66
+
67
+ # Convertendo entrada do usuário em um tensor
68
+ input_tensor = torch.rand((len(user_input), 1, input_size))
69
+ output = model(input_tensor, hidden)
70
+
71
+ # Arredondando as saídas para inteiros
72
+ rounded_output = np.round(output.squeeze().detach().numpy()).astype(int)
73
+
74
+ # Obtendo resposta em texto
75
+ text_response = text_responses.get(rounded_output[0], "Desculpe, não sei o que dizer.")
76
+
77
+ print(f'Chatbot: {text_response}')
78
+
79
+ # Uso
80
+ input_size = 10
81
+ hidden_size = 20
82
+ output_size = 1
83
+
84
+ # Instâncias
85
+ model = SimpleChat(input_size, hidden_size, output_size)
86
+ criterion = nn.MSELoss()
87
+ optimizer = optim.Adam(model.parameters(), lr=0.001)
88
+
89
+ # Dados de entrada e de saída de exemplo
90
+ input_data = torch.rand(5, 1, input_size)
91
+ target_data = torch.rand(5, 1, output_size)
92
+
93
+ train(model, input_data, target_data, criterion, optimizer)
94
+
95
+ print('Fim do treinamento!')
96
+
97
+ # Iniciar interação em tempo real
98
+ chatbot(model, input_size)