"""本课独立实验；在仓库根目录执行 .venv/bin/python lessons/07/experiment.py。"""
import sys, json, math
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
import torch
from torch import nn
from torch.nn import functional as F
from poetry_gpt.common import ROOT, DEFAULT_DATA, read_json, read_jsonl
from poetry_gpt.model import ModelConfig, PoetryGPT, CausalAttention, Block
from poetry_gpt.data import Tokenizer, SPECIAL, clean_record, keywords_for
from poetry_gpt.labs import show
torch.set_num_threads(2)
torch.manual_seed(26)

parameter = nn.Parameter(torch.tensor(0.0))
opt = torch.optim.SGD([parameter], lr=0.2)
for step in range(10):
    opt.zero_grad()
    loss = (parameter - 3) ** 2
    loss.backward()
    print(f'第{step}次 数字={parameter.item():.4f} 误差={loss.item():.4f} 梯度={parameter.grad.item():.4f}')
    opt.step()
