import json | |
import torch.nn as nn | |
import torch | |
from model import MiniGPT | |
from dataset import DataLoader,ChatDataset,SimpleTokenizr | |
from tqdm import tqdm | |
with open("./customchatbot-v1/data/merged_data.jsonl", "r", encoding="utf-8") as f: | |
texts = [json.loads(line)["text"] for line in f if line.strip()] | |
tokenizer = SimpleTokenizr() | |
tokenizer.train(texts) | |
model = MiniGPT(vocab_size=100) | |
criterion = nn.CrossEntropyLoss() | |
optimizer = torch.optim.Adam(model.parameters(),lr=0.001) | |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
model.to(device) | |
dataset = ChatDataset("./customchatbot-v1/data/merged_data.jsonl", tokenizer) | |
dataloader = DataLoader(dataset, batch_size=100, shuffle=True) | |
def Train(epochs): | |
for epoch in range(epochs): | |
model.train() | |
loop = tqdm(enumerate(dataloader),total=len(dataloader),desc="Training") | |
tloss = 0 | |
for i,l in loop: | |
optimizer.zero_grad() | |
outputs = model(i) | |
loss = criterion(outputs,l) | |
loss.backward() | |
Train(epochs=1) |