[
  {
    "lesson": 1,
    "exit_code": 0,
    "stdout": "{\n  \"Python\": \"3.12.12\",\n  \"PyTorch\": \"2.8.0\",\n  \"平台\": \"macOS-15.7.9-arm64-arm-64bit\",\n  \"Mac加速可用\": true,\n  \"NVIDIA加速可用\": false,\n  \"默认设备\": \"mps\",\n  \"材料已准备\": true,\n  \"模型已训练\": true,\n  \"课程入口\": \"/Users/saymagic/workspace/chinese-poetry/course/dist/index.html\"\n}\n",
    "stderr": ""
  },
  {
    "lesson": 2,
    "exit_code": 0,
    "stdout": "tang： {'title': '帝京篇十首 一', 'author': '太宗皇帝', 'paragraphs': ['秦川雄帝宅，函谷壯皇居。', '綺殿千尋起，離宮百雉餘。', '連甍遙接漢，飛觀迥凌虛。', '雲日隱層闕，風煙出綺疎。']}\nsong： {'title': '日詩', 'author': '宋太祖', 'paragraphs': ['欲出未出光辣達，千山萬山如火發。', '須臾走向天上來，逐却殘星趕却月。']}\n",
    "stderr": ""
  },
  {
    "lesson": 3,
    "exit_code": 0,
    "stdout": "整理结果： {'id': '0deda14630f4bd9661d957d8e0c422fc89d2b3ed16a774c354ca765cf3efab0a', 'title': '示例', 'author': '课程', 'form': 5, 'text': '春风吹细雨，明月照归舟。远客思乡里，清江入梦流。', 'lines': ['春风吹细雨', '明月照归舟', '远客思乡里', '清江入梦流'], 'keywords': ['归舟', '思乡', '明月', '春风', '客', '归', '春', '月', '梦', '江', '舟', '雨', '风']}\n加入缺字后的隔离原因： 缺字或夹注等非汉字\n",
    "stderr": ""
  },
  {
    "lesson": 4,
    "exit_code": 0,
    "stdout": "字编号： [9, 10, 11, 12, 13]\n输入： [9, 10, 11, 12]\n目标： [10, 11, 12, 13]\n春 → 江\n春江 → 花\n春江花 → 月\n春江花月 → 夜\n",
    "stderr": ""
  },
  {
    "lesson": 5,
    "exit_code": 0,
    "stdout": "输入 [批,字,特征]： [2, 3, 2]\n变换 [入,出]： [2, 4]\n输出尺寸： [2, 3, 4]\n第一首第一个字的输出： [0.0, 1.0, 1.0, 2.0]\n",
    "stderr": ""
  },
  {
    "lesson": 6,
    "exit_code": 0,
    "stdout": "候选 月 山 水： [[0.6652409434318542, 0.2447284758090973, 0.09003057330846786]]\n正确字为 月 的误差： 0.40760594606399536\n手算 -ln(正确字概率)： 0.4076059829985112\n",
    "stderr": ""
  },
  {
    "lesson": 7,
    "exit_code": 0,
    "stdout": "第0次 数字=0.0000 误差=9.0000 梯度=-6.0000\n第1次 数字=1.2000 误差=3.2400 梯度=-3.6000\n第2次 数字=1.9200 误差=1.1664 梯度=-2.1600\n第3次 数字=2.3520 误差=0.4199 梯度=-1.2960\n第4次 数字=2.6112 误差=0.1512 梯度=-0.7776\n第5次 数字=2.7667 误差=0.0544 梯度=-0.4666\n第6次 数字=2.8600 误差=0.0196 梯度=-0.2799\n第7次 数字=2.9160 误差=0.0071 梯度=-0.1680\n第8次 数字=2.9496 误差=0.0025 梯度=-0.1008\n第9次 数字=2.9698 误差=0.0009 梯度=-0.0605\n",
    "stderr": ""
  },
  {
    "lesson": 8,
    "exit_code": 0,
    "stdout": "查表后的三行： [[1.516991376876831, 0.19771979749202728, 0.2839916944503784, -0.8565762042999268], [-0.70428866147995, 1.9863539934158325, 0.36823558807373047, 0.6972273588180542], [1.516991376876831, 0.19771979749202728, 0.2839916944503784, -0.8565762042999268]]\n相同字编号得到相同向量： True\n",
    "stderr": ""
  },
  {
    "lesson": 9,
    "exit_code": 0,
    "stdout": "原序列第一个位置： [1.1626288890838623, 1.1961150169372559, -0.4784020185470581, -1.0057748556137085]\n换序列第一个位置： [-1.058651089668274, 2.9847493171691895, -0.39415812492370605, 0.5480286478996277]\n位置编号： [0, 1, 2]\n",
    "stderr": ""
  },
  {
    "lesson": 10,
    "exit_code": 0,
    "stdout": "分数： [2.0, 1.0, 0.0]\n权重： [0.6652409434318542, 0.2447284758090973, 0.09003057330846786]\n权重之和： 1.0\n汇总后的信息： [0.8453021049499512, 0.6695181131362915]\n",
    "stderr": ""
  },
  {
    "lesson": 11,
    "exit_code": 0,
    "stdout": "Q： [[1.0, 1.0], [0.0, 1.0], [1.0, 2.0]]\nK： [[1.0, 0.0], [1.0, 1.0], [2.0, 1.0]]\nV： [[2.0, 0.0], [0.0, 1.0], [2.0, 1.0]]\nQK转置/根号2： [[0.7071067690849304, 1.4142135381698608, 2.1213204860687256], [0.0, 0.7071067690849304, 0.7071067690849304], [0.7071067690849304, 2.1213204860687256, 2.8284270763397217]]\n",
    "stderr": ""
  },
  {
    "lesson": 12,
    "exit_code": 0,
    "stdout": "前两个位置最大变化： 0.0\n第一个头权重： [[1.0, 0.0, 0.0], [0.5828116536140442, 0.4171883463859558, 0.0], [0.20538784563541412, 0.4117547273635864, 0.38285741209983826]]\n",
    "stderr": ""
  },
  {
    "lesson": 13,
    "exit_code": 0,
    "stdout": "权重 [批,头,查询位置,被看位置]： [1, 2, 3, 3]\n合并输出： [1, 3, 8]\n",
    "stderr": ""
  },
  {
    "lesson": 14,
    "exit_code": 0,
    "stdout": "归一化后的均值： 0.0\n整体加100后的结果： [[-1.3416354656219482, -0.4472118318080902, 0.4472118318080902, 1.3416354656219482]]\n残差相加： [[1.100000023841858, 1.899999976158142, 3.200000047683716, 3.799999952316284]]\n",
    "stderr": ""
  },
  {
    "lesson": 15,
    "exit_code": 0,
    "stdout": "输出 [批,字,字表]： [1, 3, 100]\n参数数量： 29184\n",
    "stderr": ""
  },
  {
    "lesson": 16,
    "exit_code": 0,
    "stdout": "第0次，同一道练习题误差： 2.50443\n第10次，同一道练习题误差： 1.01474\n第20次，同一道练习题误差： 0.24908\n第30次，同一道练习题误差： 0.05519\n这只是验证程序能学会一道题，不是新诗质量证明。\n",
    "stderr": ""
  },
  {
    "lesson": 17,
    "exit_code": 0,
    "stdout": "第1步调整幅度： 6e-06\n第10步调整幅度： 6e-05\n第100步调整幅度： 0.0006\n第300步调整幅度： 0.00054034\n第600步调整幅度： 0.00030072\n第1000步调整幅度： 9e-05\n",
    "stderr": ""
  },
  {
    "lesson": 18,
    "exit_code": 0,
    "stdout": "保存恢复后输出完全相同： True\n",
    "stderr": ""
  },
  {
    "lesson": 19,
    "exit_code": 0,
    "stdout": "真实材料分卷： {'train': 87236, 'val': 4869, 'test': 4790}\n示意 学习/验证误差： [7.2, 7.3]\n示意 学习/验证误差： [5.1, 5.3]\n示意 学习/验证误差： [3.2, 5.6]\n最后一次学习误差下降而验证误差升高，应回看最佳验证版本；这三组数字是教学示意。\n",
    "stderr": ""
  },
  {
    "lesson": 20,
    "exit_code": 0,
    "stdout": "变化程度 0.5： [0.8668133020401001, 0.11731041967868805, 0.01587623916566372]\n变化程度 0.8： [0.7306791543960571, 0.2093430906534195, 0.05997779592871666]\n变化程度 1.2： [0.6159631013870239, 0.26769647002220154, 0.11634040623903275]\n",
    "stderr": ""
  },
  {
    "lesson": 21,
    "exit_code": 0,
    "stdout": "5言标点位置（从0起算）： [5, 11, 17, 23]\n7言标点位置（从0起算）： [7, 15, 23, 31]\n字数和标点由程序约束，选哪个汉字仍来自模型。\n",
    "stderr": ""
  },
  {
    "lesson": 22,
    "exit_code": 0,
    "stdout": "教学示例的自动关键词： ['夜雨', '归舟', '思乡', '故乡', '明月', '夜', '客', '归', '愁', '月', '江', '舟', '雨', '风']\n思乡 是线索规则给出的弱标签；明月、故乡 是正文原有词。\n",
    "stderr": ""
  },
  {
    "lesson": 23,
    "exit_code": 0,
    "stdout": "明月照归舟： 0.5\n故乡明月： 1.0\n千山万水： 0.0\n字面线索得分只能辅助筛选，不能判断诗的意境和自然程度。\n",
    "stderr": ""
  },
  {
    "lesson": 24,
    "exit_code": 0,
    "stdout": "解析后的参数： {'command': 'write', 'checkpoint': PosixPath('/Users/saymagic/workspace/chinese-poetry/artifacts/runs/poet/best.pt'), 'data': PosixPath('/Users/saymagic/workspace/chinese-poetry/artifacts/data'), 'device': 'auto', 'start': '春', 'keywords': '', 'form': 'five', 'count': 1, 'temperature': 0.8, 'top_k': 40, 'candidates': 12, 'seed': 2026, 'json': False, 'output': None}\n",
    "stderr": ""
  },
  {
    "lesson": 25,
    "exit_code": 0,
    "stdout": "学习与验证同组交集： 0\n学习与测试同组交集： 0\n",
    "stderr": ""
  },
  {
    "lesson": 26,
    "exit_code": 0,
    "stdout": "tiny 参数数量： 1453952\npoet 参数数量： 4877312\n同一材料、同一评估题，只改一个设置，另开训练目录记录。\n",
    "stderr": ""
  }
]
