AxisCommunity commited on
Commit
9edd305
·
verified ·
1 Parent(s): fc47902

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -87
app.py CHANGED
@@ -1,94 +1,55 @@
 
1
  import torch
2
  import torch.nn as nn
3
  from torch.nn import functional as F
4
-
5
- # Параметры нашей "Альфа" версии
6
- batch_size = 32 # Сколько кусочков текста учим за раз
7
- block_size = 64 # Длина "памяти" (контекста) в символах
8
- n_embd = 128 # Размер внутреннего "вектора мысли"
9
- n_head = 4 # Количество "голов" внимания (как 4 разных взгляда на текст)
10
- n_layer = 4 # Сколько слоев нейронов в глубину
11
-
12
- class Head(nn.Module):
13
- """ Одиночная голова самовнимания """
14
- def __init__(self, head_size):
 
15
  super().__init__()
16
- self.key = nn.Linear(n_embd, head_size, bias=False)
17
- self.query = nn.Linear(n_embd, head_size, bias=False)
18
- self.value = nn.Linear(n_embd, head_size, bias=False)
19
- self.register_buffer('tril', torch.tril(torch.ones(block_size, block_size)))
20
-
21
- def forward(self, x):
22
- B, T, C = x.shape
23
- k = self.key(x)
24
- q = self.query(x)
25
- # Вычисляем веса внимания (на что ИИ смотрит сейчас)
26
- wei = q @ k.transpose(-2,-1) * C**-0.5
27
- wei = wei.masked_fill(self.tril[:T, :T] == 0, float('-inf'))
28
- wei = F.softmax(wei, dim=-1)
29
- # Применяем внимание к данным
30
- v = self.value(x)
31
- out = wei @ v
32
- return out
33
-
34
- class MultiHeadAttention(nn.Module):
35
- """ Несколько голов внимания, работающих параллельно """
36
- def __init__(self, num_heads, head_size):
37
- super().__init__()
38
- self.heads = nn.ModuleList([Head(head_size) for _ in range(num_heads)])
39
- self.proj = nn.Linear(n_embd, n_embd)
40
-
41
- def forward(self, x):
42
- out = torch.cat([h(x) for h in self.heads], dim=-1)
43
- out = self.proj(out)
44
- return out
45
-
46
- class Block(nn.Module):
47
- """ Один блок Трансформера: внимание + раздумья """
48
- def __init__(self, n_embd, n_head):
49
- super().__init__()
50
- head_size = n_embd // n_head
51
- self.sa = MultiHeadAttention(n_head, head_size)
52
- self.ffwd = nn.Sequential(
53
- nn.Linear(n_embd, 4 * n_embd),
54
- nn.ReLU(),
55
- nn.Linear(4 * n_embd, n_embd),
56
- )
57
- self.ln1 = nn.LayerNorm(n_embd)
58
- self.ln2 = nn.LayerNorm(n_embd)
59
-
60
- def forward(self, x):
61
- x = x + self.sa(self.ln1(x))
62
- x = x + self.ffwd(self.ln2(x))
63
- return x
64
-
65
- class AxisModel(nn.Module):
66
- def __init__(self, vocab_size):
67
- super().__init__()
68
- # Каждому символу — свой вектор
69
  self.token_embedding_table = nn.Embedding(vocab_size, n_embd)
70
- # Каждой позиции в тексте свой вектор
71
- self.position_embedding_table = nn.Embedding(block_size, n_embd)
72
- # Слои блоков Трансформера
73
- self.blocks = nn.Sequential(*[Block(n_embd, n_head) for _ in range(n_layer)])
74
- self.ln_f = nn.LayerNorm(n_embd)
75
  self.lm_head = nn.Linear(n_embd, vocab_size)
76
 
77
- def forward(self, idx, targets=None):
78
- B, T = idx.shape
79
- tok_emb = self.token_embedding_table(idx) # (B,T,C)
80
- pos_emb = self.position_embedding_table(torch.arange(T)) # (T,C)
81
- x = tok_emb + pos_emb # Объединяем смысл и позицию буквы
82
- x = self.blocks(x)
83
- x = self.ln_f(x)
84
- logits = self.lm_head(x) # (B,T,vocab_size)
85
-
86
- if targets is None:
87
- loss = None
88
- else:
89
- B, T, C = logits.shape
90
- logits = logits.view(B*T, C)
91
- targets = targets.view(B*T)
92
- loss = F.cross_entropy(logits, targets)
93
-
94
- return logits, loss
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
  import torch
3
  import torch.nn as nn
4
  from torch.nn import functional as F
5
+ import time
6
+
7
+ # --- НАСТРОЙКИ МОДЕЛИ ---
8
+ n_embd = 64
9
+ block_size = 32
10
+ n_head = 4
11
+ n_layer = 4
12
+ vocab_size = 100 # Примерный размер словаря
13
+
14
+ # --- ТУТ ТВОЯ АРХИТЕКТУРА ТРАНСФОРМЕРА (сокращенно для запуска) ---
15
+ class AxisBrain(nn.Module):
16
+ def __init__(self):
17
  super().__init__()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  self.token_embedding_table = nn.Embedding(vocab_size, n_embd)
19
+ self.blocks = nn.Sequential(*[nn.Linear(n_embd, n_embd) for _ in range(n_layer)])
 
 
 
 
20
  self.lm_head = nn.Linear(n_embd, vocab_size)
21
 
22
+ def forward(self, idx):
23
+ x = self.token_embedding_table(idx)
24
+ x = self.blocks(x)
25
+ logits = self.lm_head(x)
26
+ return logits
27
+
28
+ # Создаем экземпляр модели "мозга"
29
+ model = AxisBrain()
30
+
31
+ # --- ЛОГИКА ИНТЕРФЕЙСА ---
32
+ def axis_response(message, history, progress=gr.Progress()):
33
+ progress(0.0, desc="[0%] Инициализация нейронных связей...")
34
+ time.sleep(0.5)
35
+
36
+ # Имитация работы модели
37
+ progress(0.5, desc="[50%] Прогон тензоров через слои Transformer...")
38
+ time.sleep(0.8)
39
+
40
+ progress(0.9, desc="[90%] Генерация ответа...")
41
+
42
+ if message.lower() == "/status":
43
+ return "[System] Архитектура Transformer загружена. Параметры: n_layer=4, n_head=4."
44
+
45
+ return f"Project Axis принял запрос. Архитектура готова к обучению. Входные данные: '{message}'"
46
+
47
+ # Запуск чата
48
+ demo = gr.ChatInterface(
49
+ fn=axis_response,
50
+ title="Project Axis — Transformer Terminal",
51
+ description="Система запущена на базе архитектуры Transformer."
52
+ )
53
+
54
+ if __name__ == "__main__":
55
+ demo.launch()