diff --git a/chapter_08_recurrent-neural-networks/1_sequence.ipynb b/chapter_08_recurrent-neural-networks/1_sequence.ipynb index a95af33..6027f79 100644 --- a/chapter_08_recurrent-neural-networks/1_sequence.ipynb +++ b/chapter_08_recurrent-neural-networks/1_sequence.ipynb @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": { "origin_pos": 4, "tab": [ @@ -44,11 +44,11 @@ " \n", " \n", " \n", - " 2023-03-05T10:14:08.397323\n", + " 2025-12-06T16:11:06.109877\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.6.2, https://matplotlib.org/\n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -80,16 +80,16 @@ " \n", " \n", + "\" clip-path=\"url(#pd072ac50d9)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -152,11 +152,11 @@ " \n", " \n", + "\" clip-path=\"url(#pd072ac50d9)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -193,11 +193,11 @@ " \n", " \n", + "\" clip-path=\"url(#pd072ac50d9)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -245,11 +245,11 @@ " \n", " \n", + "\" clip-path=\"url(#pd072ac50d9)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -306,11 +306,11 @@ " \n", " \n", + "\" clip-path=\"url(#pd072ac50d9)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -443,23 +443,23 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -531,18 +531,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -552,18 +552,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -572,18 +572,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -592,18 +592,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -612,18 +612,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -655,947 +655,925 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1636,16 +1614,18 @@ ], "source": [ "%matplotlib inline\n", - "import mindspore\n", + "import mindspore as ms\n", "import numpy as np\n", "import mindspore.nn as nn\n", + "from mindspore import Tensor, mint\n", "import mindspore.ops as ops\n", - "from mindspore import Tensor\n", "from d2l import mindspore as d2l\n", "\n", "T = 1000 # 总共产生1000个点\n", "time = np.arange(1, T + 1)\n", + "# 使用正弦函数和噪声生成数据\n", "x = np.sin(0.01 * time) + np.random.normal(0, 0.2, (T,))\n", + "# 绘制生成的时间序列数据\n", "d2l.plot(time, [x], 'time', 'x', xlim=[1, 1000], figsize=(6, 3))" ] }, @@ -1662,7 +1642,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "origin_pos": 9, "tab": [ @@ -1696,7 +1676,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "origin_pos": 12, "tab": [ @@ -1729,7 +1709,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "origin_pos": 16, "tab": [ @@ -1741,11 +1721,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "epoch 1, loss: 0.066597\n", - "epoch 2, loss: 0.057237\n", - "epoch 3, loss: 0.057924\n", - "epoch 4, loss: 0.054592\n", - "epoch 5, loss: 0.049818\n" + "..epoch 1, loss: 0.144945\n", + "epoch 2, loss: 0.143720\n", + "epoch 3, loss: 0.129794\n", + "epoch 4, loss: 0.134318\n", + "epoch 5, loss: 0.127524\n" ] } ], @@ -1764,6 +1744,7 @@ " for X, y in train_iter.create_tuple_iterator():\n", " (l), grads = grad_fn(X, y)\n", " trainer(grads)\n", + " # 使用 d2l.evaluate_loss 进行损失评估\n", " print(f'epoch {epoch + 1}, '\n", " f'loss: {d2l.evaluate_loss(net, train_iter, loss):f}')\n", "\n", @@ -1784,7 +1765,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "origin_pos": 19, "tab": [ @@ -1803,11 +1784,11 @@ " \n", " \n", " \n", - " 2023-03-05T10:15:36.988808\n", + " 2025-12-06T16:16:07.521823\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.6.2, https://matplotlib.org/\n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -1839,16 +1820,16 @@ " \n", " \n", + "\" clip-path=\"url(#p13f670455c)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1911,11 +1892,11 @@ " \n", " \n", + "\" clip-path=\"url(#p13f670455c)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1952,11 +1933,11 @@ " \n", " \n", + "\" clip-path=\"url(#p13f670455c)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2004,11 +1985,11 @@ " \n", " \n", + "\" clip-path=\"url(#p13f670455c)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2065,11 +2046,11 @@ " \n", " \n", + "\" clip-path=\"url(#p13f670455c)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2202,23 +2183,23 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2290,18 +2271,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2311,18 +2292,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2331,18 +2312,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2351,18 +2332,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2371,18 +2352,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2414,1872 +2395,1832 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4517,7 +4458,7 @@ } ], "source": [ - "onestep_preds = net(Tensor(features, mindspore.float32))\n", + "onestep_preds = net(Tensor(features, ms.float32))\n", "d2l.plot([time, time[tau:]], [x, onestep_preds.asnumpy()], 'time',\n", " 'x', legend=['data', '1-step preds'], xlim=[1, 1000], figsize=(6, 3))" ] @@ -4535,7 +4476,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "origin_pos": 23, "tab": [ @@ -4554,11 +4495,11 @@ " \n", " \n", " \n", - " 2023-03-05T10:15:38.467906\n", + " 2025-12-06T16:16:10.384942\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.6.2, https://matplotlib.org/\n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -4590,16 +4531,16 @@ " \n", " \n", + "\" clip-path=\"url(#p9d8c4bb65e)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4662,11 +4603,11 @@ " \n", " \n", + "\" clip-path=\"url(#p9d8c4bb65e)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4703,11 +4644,11 @@ " \n", " \n", + "\" clip-path=\"url(#p9d8c4bb65e)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4755,11 +4696,11 @@ " \n", " \n", + "\" clip-path=\"url(#p9d8c4bb65e)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4816,11 +4757,11 @@ " \n", " \n", + "\" clip-path=\"url(#p9d8c4bb65e)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4953,23 +4894,23 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5041,18 +4982,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5062,18 +5003,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5082,18 +5023,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5102,18 +5043,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5122,18 +5063,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5165,1900 +5106,1842 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7357,7 +7240,7 @@ "multistep_preds[: n_train + tau] = x[: n_train + tau]\n", "for i in range(n_train + tau, T):\n", " result = net(\n", - " Tensor(multistep_preds[i - tau:i].reshape((1, -1)), mindspore.float32))\n", + " Tensor(multistep_preds[i - tau:i].reshape((1, -1)), ms.float32))\n", " multistep_preds[i] = result.asnumpy()\n", "\n", "d2l.plot([time, time[tau:], time[n_train + tau:]],\n", @@ -7380,7 +7263,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "origin_pos": 28, "tab": [ @@ -7399,11 +7282,11 @@ " \n", " \n", " \n", - " 2023-03-05T10:15:39.238773\n", + " 2025-12-06T16:16:12.706108\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.6.2, https://matplotlib.org/\n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -7435,16 +7318,16 @@ " \n", " \n", + "\" clip-path=\"url(#p3b2147d274)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7507,11 +7390,11 @@ " \n", " \n", + "\" clip-path=\"url(#p3b2147d274)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7548,11 +7431,11 @@ " \n", " \n", + "\" clip-path=\"url(#p3b2147d274)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7600,11 +7483,11 @@ " \n", " \n", + "\" clip-path=\"url(#p3b2147d274)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7661,11 +7544,11 @@ " \n", " \n", + "\" clip-path=\"url(#p3b2147d274)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7798,23 +7681,23 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7970,3227 +7867,1764 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11359,13 +9793,13 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11382,13 +9816,13 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11406,13 +9840,13 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11434,7 +9868,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11456,7 +9890,7 @@ " features[:, i] = x[i: i + T - tau - max_steps + 1]\n", "\n", "for i in range(tau, tau + max_steps):\n", - " features[:, i] = net(Tensor(features[:, i - tau:i], mindspore.float32)).reshape(-1).asnumpy()\n", + " features[:, i] = net(Tensor(features[:, i - tau:i], ms.float32)).reshape(-1).asnumpy()\n", "\n", "steps = (1, 4, 16, 64)\n", "d2l.plot([time[tau + i - 1: T - max_steps + i] for i in steps],\n", @@ -11469,9 +9903,9 @@ "metadata": { "celltoolbar": "Slideshow", "kernelspec": { - "display_name": "ms_d2l", + "display_name": "Python 3.10", "language": "python", - "name": "ms_d2l" + "name": "py310" }, "language_info": { "codemirror_mode": { @@ -11483,7 +9917,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.16" + "version": "3.10.14" }, "rise": { "autolaunch": true, diff --git a/chapter_08_recurrent-neural-networks/4_rnn.ipynb b/chapter_08_recurrent-neural-networks/4_rnn.ipynb index 27ed43d..b7197b8 100644 --- a/chapter_08_recurrent-neural-networks/4_rnn.ipynb +++ b/chapter_08_recurrent-neural-networks/4_rnn.ipynb @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "063866c2-8250-4b8b-b381-aa5fcb0b366e", "metadata": {}, "outputs": [ @@ -29,29 +29,29 @@ "data": { "text/plain": [ "Tensor(shape=[3, 4], dtype=Float32, value=\n", - "[[ 2.46109203e-01, 1.19690724e-01, 3.20074916e-01, -6.64670229e-01],\n", - " [ 2.33567357e-01, 1.56107545e+00, -2.48459220e-01, 1.18619502e-02],\n", - " [ 1.24855638e+00, -4.85641670e+00, 1.65460122e+00, -1.75428629e+00]])" + "[[-3.39013159e-01, -1.00202858e+00, -1.87027231e-01, -3.71970654e+00],\n", + " [ 1.77698231e+00, -8.22008550e-02, -7.30265856e-01, 1.31694555e+00],\n", + " [-1.75439298e-01, 1.53404427e+00, -1.31514513e+00, 2.31721973e+00]])" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import mindspore\n", - "import mindspore.ops as ops\n", + "import mindspore.mint as mint\n", "from d2l import mindspore as d2l\n", "\n", - "X, W_xh = ops.normal((3, 1), d2l.tensor(0), d2l.tensor(1)), ops.normal((1, 4), d2l.tensor(0), d2l.tensor(1))\n", - "H, W_hh = ops.normal((3, 4), d2l.tensor(0), d2l.tensor(1)), ops.normal((4, 4), d2l.tensor(0), d2l.tensor(1))\n", - "d2l.matmul(X, W_xh) + d2l.matmul(H, W_hh)" + "X, W_xh = mint.randn((3, 1)), mint.randn((1, 4))\n", + "H, W_hh = mint.randn((3, 4)), mint.randn((4, 4))\n", + "mint.matmul(X, W_xh) + mint.matmul(H, W_hh)" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "c94a55e7-4bb8-46b2-833c-5f0095bdeafb", "metadata": {}, "outputs": [ @@ -59,34 +59,26 @@ "data": { "text/plain": [ "Tensor(shape=[3, 4], dtype=Float32, value=\n", - "[[ 2.46109217e-01, 1.19690716e-01, 3.20074975e-01, -6.64670289e-01],\n", - " [ 2.33567417e-01, 1.56107545e+00, -2.48459250e-01, 1.18619502e-02],\n", - " [ 1.24855638e+00, -4.85641718e+00, 1.65460122e+00, -1.75428629e+00]])" + "[[-3.39013159e-01, -1.00202847e+00, -1.87027231e-01, -3.71970654e+00],\n", + " [ 1.77698243e+00, -8.22008550e-02, -7.30265796e-01, 1.31694543e+00],\n", + " [-1.75439283e-01, 1.53404438e+00, -1.31514513e+00, 2.31721973e+00]])" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "d2l.matmul(d2l.concat((X, H), 1), d2l.concat((W_xh, W_hh), 0))" + "mint.matmul(mint.cat((X, H), 1), mint.cat((W_xh, W_hh), 0))" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1e42472f-1c1a-4601-89c1-a297dfcd2791", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "ms_d2l", + "display_name": "Python 3.10", "language": "python", - "name": "ms_d2l" + "name": "py310" }, "language_info": { "codemirror_mode": { @@ -98,7 +90,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.16" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/chapter_08_recurrent-neural-networks/5_rnn-scratch.ipynb b/chapter_08_recurrent-neural-networks/5_rnn-scratch.ipynb index 33eaff1..117fb7b 100644 --- a/chapter_08_recurrent-neural-networks/5_rnn-scratch.ipynb +++ b/chapter_08_recurrent-neural-networks/5_rnn-scratch.ipynb @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "origin_pos": 4, "tab": [ @@ -36,14 +36,15 @@ "source": [ "%matplotlib inline\n", "import math\n", - "import mindspore\n", + "import mindspore as ms\n", "import numpy as np\n", "import mindspore.nn as nn\n", + "from mindspore import Tensor, Parameter, ParameterTuple, mint\n", "import mindspore.ops as ops\n", - "from mindspore import Tensor\n", "from d2l import mindspore as d2l\n", "\n", "batch_size, num_steps = 32, 35\n", + "# 加载数据 (Time Machine)\n", "train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)" ] }, @@ -60,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "origin_pos": 8, "tab": [ @@ -76,13 +77,13 @@ " [ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00 ... 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]])" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ops.one_hot(Tensor([0, 2], mindspore.int32), len(vocab), Tensor(1.0, mindspore.float32), Tensor(0.0, mindspore.float32))" + "ops.one_hot(Tensor([0, 2], ms.int32), len(vocab), Tensor(1.0, ms.float32), Tensor(0.0, ms.float32))" ] }, { @@ -98,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "origin_pos": 12, "tab": [ @@ -112,14 +113,21 @@ "(5, 2, 28)" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "." + ] } ], "source": [ - "X = d2l.reshape(d2l.arange(10), (2, 5))\n", - "ops.one_hot(Tensor(X.T, mindspore.int32), 28, Tensor(1.0, mindspore.float32), Tensor(0.0, mindspore.float32)).shape" + "X = d2l.reshape(mint.arange(10), (2, 5))\n", + "ops.one_hot(Tensor(X.T, ms.int32), 28, Tensor(1.0, ms.float32), Tensor(0.0, ms.float32)).shape" ] }, { @@ -135,7 +143,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "origin_pos": 16, "tab": [ @@ -144,8 +152,6 @@ }, "outputs": [], "source": [ - "from mindspore import Parameter, ParameterTuple\n", - "\n", "def get_params(vocab_size, num_hiddens):\n", " num_inputs = num_outputs = vocab_size\n", " \n", @@ -155,11 +161,11 @@ " # 隐藏层参数\n", " W_xh = Parameter(normal((num_inputs, num_hiddens)), name=\"W_xh\")\n", " W_hh = Parameter(normal((num_hiddens, num_hiddens)), name=\"W_hh\")\n", - " b_h = Parameter(d2l.zeros(num_hiddens), name=\"b_h\")\n", + " b_h = Parameter(mint.zeros(num_hiddens), name=\"b_h\")\n", " # 输出层参数\n", " W_hq = Parameter(normal((num_hiddens, num_outputs)), name=\"W_hq\")\n", - " b_q = Parameter(d2l.zeros(num_outputs), name=\"b_q\")\n", - " # 附加梯度\n", + " b_q = Parameter(mint.zeros(num_outputs), name=\"b_q\")\n", + " \n", " params = [W_xh, W_hh, b_h, W_hq, b_q]\n", " return ParameterTuple(params)" ] @@ -177,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "origin_pos": 20, "tab": [ @@ -203,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "origin_pos": 24, "tab": [ @@ -213,16 +219,15 @@ "outputs": [], "source": [ "def rnn(inputs, state, params):\n", - " # inputs的形状:(时间步数量,批量大小,词表大小)\n", " W_xh, W_hh, b_h, W_hq, b_q = params\n", " H, = state\n", " outputs = []\n", - " # X的形状:(批量大小, 词表大小)\n", + " \n", " for X in inputs:\n", - " H = ops.tanh(ops.matmul(X, W_xh) + ops.matmul(H, W_hh) + b_h)\n", - " Y = ops.matmul(H, W_hq) + b_q\n", + " H = mint.tanh(mint.matmul(X, W_xh) + mint.matmul(H, W_hh) + b_h)\n", + " Y = mint.matmul(H, W_hq) + b_q\n", " outputs.append(Y)\n", - " return d2l.concat(outputs, axis=0), (H, )" + " return mint.cat(outputs, dim=0), (H, )" ] }, { @@ -238,7 +243,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "origin_pos": 28, "tab": [ @@ -257,7 +262,7 @@ " self.init_state, self.forward_fn = init_state, forward_fn\n", " \n", " def construct(self, X, state):\n", - " X = ops.one_hot(X.T, self.vocab_size, Tensor(1.0, mindspore.float32), Tensor(0.0, mindspore.float32))\n", + " X = ops.one_hot(X.T, self.vocab_size, Tensor(1.0, ms.float32), Tensor(0.0, ms.float32))\n", " return self.forward_fn(X, state, self.params)\n", "\n", " def begin_state(self, batch_size):\n", @@ -277,7 +282,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "origin_pos": 32, "tab": [ @@ -291,7 +296,7 @@ "((10, 28), 1, (2, 512))" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -318,7 +323,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "origin_pos": 39, "tab": [ @@ -329,10 +334,10 @@ { "data": { "text/plain": [ - "'time traveller w w w w w '" + "'time traveller amqjgvhnfy'" ] }, - "execution_count": 10, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -342,13 +347,13 @@ " \"\"\"在`prefix`后面生成新字符\"\"\"\n", " state = net.begin_state(batch_size=1)\n", " outputs = [vocab[prefix[0]]]\n", - " get_input = lambda: d2l.reshape(Tensor([outputs[-1]], mindspore.int32), (1,1))\n", + " get_input = lambda: d2l.reshape(Tensor([outputs[-1]], ms.int32), (1,1))\n", " for y in prefix[1:]: # 预热期\n", " _, state = net(get_input(), state)\n", " outputs.append(vocab[y])\n", " for _ in range(num_preds): # 预测num_preds步\n", " y, state = net(get_input(), state)\n", - " outputs.append(int(y.argmax(axis=1).reshape(1).asnumpy()))\n", + " outputs.append(int(y.argmax(dim=1).reshape(1).asnumpy()))\n", " return ''.join([vocab.idx_to_token[i] for i in outputs])\n", "\n", "predict_ch8('time traveller ', 10, net, vocab)" @@ -368,7 +373,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "origin_pos": 43, "tab": [ @@ -379,7 +384,8 @@ "source": [ "def grad_clipping(grads, theta): #@save\n", " \"\"\"裁剪梯度。\"\"\"\n", - " norm = ops.sqrt(sum(ops.sum((g ** 2)) for g in grads))\n", + " norm = mint.sqrt(sum(mint.sum(g ** 2) for g in grads))\n", + " \n", " if norm > theta:\n", " for g in grads:\n", " g[:] *= theta / norm" @@ -398,7 +404,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "origin_pos": 47, "tab": [ @@ -412,17 +418,16 @@ " \"\"\"训练网络一个迭代周期(定义见第8章)。\"\"\"\n", " state, timer = None, d2l.Timer()\n", " metric = d2l.Accumulator(2) # 训练损失之和,词元数量\n", - " # 定义前向函数\n", + " \n", " def forward_fn(x, state, y):\n", " y_hat, state = net(x, state)\n", " l = loss(y_hat, y).mean()\n", " return l\n", - " # 获取梯度函数\n", - " grad_fn = mindspore.value_and_grad(forward_fn, None, weights=net.trainable_params())\n", + " \n", + " grad_fn = ms.value_and_grad(forward_fn, None, weights=net.trainable_params())\n", " net.set_train()\n", " for X, Y in train_iter:\n", " if state is None or use_random_iter:\n", - " # 在第一次迭代或使用随机抽样时初始化state\n", " state = net.begin_state(batch_size=X.shape[0])\n", " y = Y.T.reshape(-1)\n", " (l), grads = grad_fn(X, state, y)\n", @@ -430,7 +435,6 @@ " if isinstance(updater, nn.Optimizer):\n", " updater(grads)\n", " else:\n", - " # 因为已经调用了mean函数\n", " updater(batch_size=1)\n", " metric.add(l.asnumpy() * d2l.size(y), d2l.size(y))\n", " return math.exp(metric[0] / metric[1]), metric[1] / timer.stop()" @@ -449,7 +453,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "origin_pos": 51, "tab": [ @@ -464,13 +468,13 @@ " loss = nn.CrossEntropyLoss()\n", " animator = d2l.Animator(xlabel='epoch', ylabel='perplexity',\n", " legend=['train'], xlim=[10, num_epochs])\n", - " # 初始化\n", + " \n", " if isinstance(net, nn.Cell):\n", " updater = nn.SGD(net.trainable_params(), lr)\n", " else:\n", " updater = lambda batch_size: d2l.sgd(net.params, lr, batch_size)\n", " predict = lambda prefix: predict_ch8(prefix, 50, net, vocab)\n", - " # 训练和预测\n", + " \n", " for epoch in range(num_epochs):\n", " ppl, speed = train_epoch_ch8(\n", " net, train_iter, loss, updater, use_random_iter)\n", @@ -485,7 +489,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": { "origin_pos": 54, "tab": [ @@ -497,9 +501,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "困惑度 1.4, 13016.2 词元/秒\n", - "time travellerit s against reason said filbywin tranees be foree\n", - "travellerit s against reason said filbywin tranees be foree\n" + "困惑度 1.5, 31406.6 词元/秒\n", + "time travellerit would be remarkable that this is so extensively\n", + "travellerit would be remarkable that this is so extensively\n" ] }, { @@ -513,11 +517,11 @@ " \n", " \n", " \n", - " 2023-03-05T11:54:28.312729\n", + " 2025-12-12T22:35:27.689884\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.6.2, https://matplotlib.org/\n", + " Matplotlib v3.10.8, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -549,16 +553,16 @@ " \n", " \n", + "\" clip-path=\"url(#p24e13bdc99)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -602,8 +606,8 @@ "\" transform=\"scale(0.015625)\"/>\n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -611,11 +615,11 @@ " \n", " \n", + "\" clip-path=\"url(#p24e13bdc99)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -648,8 +652,8 @@ "\" transform=\"scale(0.015625)\"/>\n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -657,11 +661,11 @@ " \n", " \n", + "\" clip-path=\"url(#p24e13bdc99)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -702,8 +706,8 @@ "\" transform=\"scale(0.015625)\"/>\n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -711,11 +715,11 @@ " \n", " \n", + "\" clip-path=\"url(#p24e13bdc99)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -743,8 +747,8 @@ "\" transform=\"scale(0.015625)\"/>\n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -752,11 +756,11 @@ " \n", " \n", + "\" clip-path=\"url(#p24e13bdc99)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -790,8 +794,8 @@ "\" transform=\"scale(0.015625)\"/>\n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -913,33 +917,33 @@ "\" transform=\"scale(0.015625)\"/>\n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1145,70 +1149,70 @@ "\" transform=\"scale(0.015625)\"/>\n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + "L 54.129464 43.611227 \n", + "L 58.115179 52.589407 \n", + "L 62.100893 60.224717 \n", + "L 66.086607 63.672991 \n", + "L 70.072321 67.485971 \n", + "L 74.058036 70.162804 \n", + "L 78.04375 72.953968 \n", + "L 82.029464 73.588541 \n", + "L 86.015179 75.885743 \n", + "L 90.000893 75.270015 \n", + "L 93.986607 81.900601 \n", + "L 97.972321 84.392104 \n", + "L 101.958036 88.985429 \n", + "L 105.94375 90.25747 \n", + "L 109.929464 94.006092 \n", + "L 113.915179 96.502472 \n", + "L 117.900893 101.406566 \n", + "L 121.886607 107.049247 \n", + "L 125.872321 111.339128 \n", + "L 129.858036 118.304107 \n", + "L 133.84375 119.19995 \n", + "L 137.829464 124.796827 \n", + "L 141.815179 125.317125 \n", + "L 145.800893 126.870201 \n", + "L 149.786607 129.607551 \n", + "L 153.772321 132.526647 \n", + "L 157.758036 133.383745 \n", + "L 161.74375 134.927638 \n", + "L 165.729464 134.454165 \n", + "L 169.715179 136.060792 \n", + "L 173.700893 136.046787 \n", + "L 177.686607 136.15466 \n", + "L 181.672321 137.492754 \n", + "L 185.658036 137.36191 \n", + "L 189.64375 137.471377 \n", + "L 193.629464 136.167701 \n", + "L 197.615179 138.560219 \n", + "L 201.600893 136.415488 \n", + "L 205.586607 138.386551 \n", + "L 209.572321 138.987512 \n", + "L 213.558036 137.426304 \n", + "L 217.54375 137.974859 \n", + "L 221.529464 139.285447 \n", + "L 225.515179 138.767756 \n", + "L 229.500893 137.883901 \n", + "L 233.486607 139.5 \n", + "L 237.472321 139.128586 \n", + "L 241.458036 139.382359 \n", + "L 245.44375 139.153501 \n", + "\" clip-path=\"url(#p24e13bdc99)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1350,16 +1354,16 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "困惑度 180.2, 11243.1 词元/秒\n", - "time travellertttttttttttttttttttttttttttttttttttttttttttttttttt\n", - "travellertttttttttttttttttttttttttttttttttttttttttttttttttt\n" + "困惑度 1.6, 32474.1 词元/秒\n", + "time traveller after the pauserequired for itsyon prones lan mes\n", + "traveller after the pauserequired for itsyon prones lan mes\n" ] }, { @@ -1368,16 +1372,16 @@ "\n", "\n", - "\n", + "\n", " \n", " \n", " \n", " \n", - " 2023-03-05T12:01:27.310988\n", + " 2025-12-12T22:38:11.542532\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.6.2, https://matplotlib.org/\n", + " Matplotlib v3.10.8, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -1389,41 +1393,41 @@ " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1963,114 +2009,114 @@ "\" transform=\"scale(0.015625)\"/>\n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "\n" @@ -2155,21 +2201,14 @@ "_net = RNNModelScratch(len(vocab), num_hiddens, get_params, init_rnn_state, rnn)\n", "train_ch8(_net, _train_iter, vocab, lr, num_epochs, use_random_iter=True)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { - "display_name": "ms_d2l", + "display_name": "Python 3.10", "language": "python", - "name": "ms_d2l" + "name": "py310" }, "language_info": { "codemirror_mode": { @@ -2181,7 +2220,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.16" + "version": "3.10.14" }, "rise": { "autolaunch": true, diff --git a/chapter_08_recurrent-neural-networks/6_rnn-concise.ipynb b/chapter_08_recurrent-neural-networks/6_rnn-concise.ipynb index 74c76a8..60a3b72 100644 --- a/chapter_08_recurrent-neural-networks/6_rnn-concise.ipynb +++ b/chapter_08_recurrent-neural-networks/6_rnn-concise.ipynb @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "origin_pos": 2, "tab": [ @@ -33,10 +33,10 @@ }, "outputs": [], "source": [ - "import mindspore\n", + "import mindspore as ms\n", "import numpy as np\n", "import mindspore.nn as nn\n", - "import mindspore.ops as ops\n", + "from mindspore import ops, mint\n", "from d2l import mindspore as d2l\n", "\n", "batch_size, num_steps = 32, 35\n", @@ -102,7 +102,7 @@ } ], "source": [ - "state = ops.zeros((1, batch_size, num_hiddens))\n", + "state = mint.zeros((1, batch_size, num_hiddens))\n", "state.shape" ] }, @@ -139,7 +139,7 @@ } ], "source": [ - "X = ops.rand(num_steps, batch_size, len(vocab))\n", + "X = mint.rand(num_steps, batch_size, len(vocab))\n", "Y, state_new = rnn_layer(X, state)\n", "Y.shape, state_new.shape" ] @@ -157,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { "origin_pos": 20, "tab": [ @@ -188,18 +188,16 @@ " # 它的输出形状是(时间步数*批量大小,词表大小)。\n", " output = self.linear(Y.reshape((-1, Y.shape[-1])))\n", " return output, state\n", - "\n", + " \n", " def begin_state(self, batch_size=1):\n", " if not isinstance(self.rnn, nn.LSTM):\n", - " # nn.GRU以张量作为隐状态\n", - " return ops.zeros((self.num_directions * self.rnn.num_layers,\n", + " return mint.zeros((self.num_directions * self.rnn.num_layers,\n", " batch_size, self.num_hiddens))\n", " else:\n", - " # nn.LSTM以元组作为隐状态\n", - " return (ops.zeros((\n", + " return (mint.zeros((\n", " self.num_directions * self.rnn.num_layers,\n", " batch_size, self.num_hiddens)),\n", - " ops.zeros((\n", + " mint.zeros((\n", " self.num_directions * self.rnn.num_layers,\n", " batch_size, self.num_hiddens)))" ] @@ -228,7 +226,7 @@ { "data": { "text/plain": [ - "'time travellertmkmxmkmxm'" + "'time travellervvvvvvvvvv'" ] }, "execution_count": 7, @@ -266,9 +264,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "困惑度 1.6, 11975.8 词元/秒\n", - "time traveller but now you begin to seethe object of my investig\n", - "traveller held in his is shat ily manghtyentyseing it some \n" + "困惑度 1.6, 25718.4 词元/秒\n", + "time traveller for so ign to ve its an tigu bat atwint in a quit\n", + "traveller held in his hand wny houng bas heg his lith wren \n" ] }, { @@ -282,11 +280,11 @@ " \n", " \n", " \n", - " 2023-01-29T16:50:39.968140\n", + " 2025-12-06T16:41:36.205198\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.6.2, https://matplotlib.org/\n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -318,16 +316,16 @@ " \n", " \n", + "\" clip-path=\"url(#p66bac35eed)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -380,11 +378,11 @@ " \n", " \n", + "\" clip-path=\"url(#p66bac35eed)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -426,11 +424,11 @@ " \n", " \n", + "\" clip-path=\"url(#p66bac35eed)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -480,11 +478,11 @@ " \n", " \n", + "\" clip-path=\"url(#p66bac35eed)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -521,11 +519,11 @@ " \n", " \n", + "\" clip-path=\"url(#p66bac35eed)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -692,59 +690,59 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -986,58 +965,58 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", + "L 44.588839 37.204721 \n", + "L 48.574554 47.190473 \n", + "L 52.560268 55.818133 \n", + "L 56.545982 59.821119 \n", + "L 60.531696 65.015721 \n", + "L 64.517411 72.885102 \n", + "L 68.503125 76.060816 \n", + "L 72.488839 86.573441 \n", + "L 76.474554 96.231506 \n", + "L 80.460268 104.698437 \n", + "L 84.445982 108.255658 \n", + "L 88.431696 112.60716 \n", + "L 92.417411 117.655822 \n", + "L 96.403125 121.776535 \n", + "L 100.388839 125.012171 \n", + "L 104.374554 126.360372 \n", + "L 108.360268 128.071634 \n", + "L 112.345982 127.889114 \n", + "L 116.331696 128.94739 \n", + "L 120.317411 131.504117 \n", + "L 124.303125 132.203361 \n", + "L 128.288839 132.785526 \n", + "L 132.274554 133.220216 \n", + "L 136.260268 133.252885 \n", + "L 140.245982 133.517975 \n", + "L 144.231696 134.741765 \n", + "L 148.217411 136.051095 \n", + "L 152.203125 135.814888 \n", + "L 156.188839 134.931005 \n", + "L 160.174554 133.81189 \n", + "L 164.160268 133.95169 \n", + "L 168.145982 134.197704 \n", + "L 172.131696 136.455837 \n", + "L 176.117411 136.333961 \n", + "L 180.103125 138.680808 \n", + "L 184.088839 135.176012 \n", + "L 188.074554 136.492402 \n", + "L 192.060268 137.74513 \n", + "L 196.045982 137.103642 \n", + "L 200.031696 139.452192 \n", + "L 204.017411 136.925541 \n", + "L 208.003125 137.596166 \n", + "L 211.988839 139.009452 \n", + "L 215.974554 137.450011 \n", + "L 219.960268 139.5 \n", + "L 223.945982 138.875838 \n", + "L 227.931696 138.501599 \n", + "L 231.917411 137.716402 \n", + "L 235.903125 138.005527 \n", + "\" clip-path=\"url(#p66bac35eed)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1147,7 +1126,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1165,21 +1144,14 @@ "num_epochs, lr = 500, 1\n", "d2l.train_ch8(net, train_iter, vocab, lr, num_epochs)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { - "display_name": "ms_d2l", + "display_name": "Python 3.10", "language": "python", - "name": "ms_d2l" + "name": "py310" }, "language_info": { "codemirror_mode": { @@ -1191,7 +1163,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.16" + "version": "3.10.14" }, "rise": { "autolaunch": true,