Files
machine-learning/08_recurrent/08_modern_rnn.ipynb
T
2024-09-25 18:29:02 +08:00

5212 lines
203 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "5c5922d3-95a1-4415-91a0-3399e39b6cd3",
"metadata": {},
"source": [
"# 现代循环神经网络\n",
"\n",
"目录\n",
"\n",
"- 长短期记忆网络(LSTM)\n",
"- 门控循环单元(GRU)\n",
"- 深度循环神经网络\n",
"- 双向循环神经网络"
]
},
{
"cell_type": "markdown",
"id": "1035997a-b182-4d01-b0a6-66ddd0d0c62b",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"slideshow": {
"slide_type": "-"
},
"tags": []
},
"source": [
"## 长短期记忆网络(LSTM)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "526021ea-9bbe-42a8-9e64-22692860d2ff",
"metadata": {
"origin_pos": 2,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"import torch\n",
"from torch import nn\n",
"from d2l import torch as d2l\n",
"\n",
"batch_size, num_steps = 32, 35\n",
"train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)"
]
},
{
"cell_type": "markdown",
"id": "842b0708-6b64-4ca0-adab-c809b2b5b1df",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"初始化模型参数"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "edee6ecd-f9a8-4b43-a509-aa8c48e874a0",
"metadata": {
"origin_pos": 6,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"def get_lstm_params(vocab_size, num_hiddens, device):\n",
" num_inputs = num_outputs = vocab_size\n",
"\n",
" def normal(shape):\n",
" return torch.randn(size=shape, device=device)*0.01\n",
"\n",
" def three():\n",
" return (normal((num_inputs, num_hiddens)),\n",
" normal((num_hiddens, num_hiddens)),\n",
" torch.zeros(num_hiddens, device=device))\n",
"\n",
" W_xi, W_hi, b_i = three() # 输入门参数\n",
" W_xf, W_hf, b_f = three() # 遗忘门参数\n",
" W_xo, W_ho, b_o = three() # 输出门参数\n",
" W_xc, W_hc, b_c = three() # 候选记忆元参数\n",
" # 输出层参数\n",
" W_hq = normal((num_hiddens, num_outputs))\n",
" b_q = torch.zeros(num_outputs, device=device)\n",
" params = [W_xi, W_hi, b_i, W_xf, W_hf, b_f, W_xo, W_ho, b_o, W_xc, W_hc,\n",
" b_c, W_hq, b_q]\n",
" for param in params:\n",
" param.requires_grad_(True)\n",
" return params"
]
},
{
"cell_type": "markdown",
"id": "c5abc77a-229e-4aaa-9bbb-a5a6d8a061e1",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"初始化隐状态、记忆元"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "86888086-63cd-4411-98a5-a2e3f9a67bf7",
"metadata": {
"origin_pos": 10,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"def init_lstm_state(batch_size, num_hiddens, device):\n",
" return (torch.zeros((batch_size, num_hiddens), device=device),\n",
" torch.zeros((batch_size, num_hiddens), device=device))"
]
},
{
"cell_type": "markdown",
"id": "453c58cf-54cc-490b-b337-ec5953e0c409",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"实际模型。注意:只有隐状态传递到输出层;记忆元不直接参与输出计算"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "fedefee3-0199-4532-9d3a-edafdfba32b1",
"metadata": {
"origin_pos": 14,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"def lstm(inputs, state, params):\n",
" [W_xi, W_hi, b_i, W_xf, W_hf, b_f, W_xo, W_ho, b_o, W_xc, W_hc, b_c,\n",
" W_hq, b_q] = params\n",
" (H, C) = state\n",
" outputs = []\n",
" for X in inputs:\n",
" I = torch.sigmoid((X @ W_xi) + (H @ W_hi) + b_i)\n",
" F = torch.sigmoid((X @ W_xf) + (H @ W_hf) + b_f)\n",
" O = torch.sigmoid((X @ W_xo) + (H @ W_ho) + b_o)\n",
" C_tilda = torch.tanh((X @ W_xc) + (H @ W_hc) + b_c)\n",
" C = F * C + I * C_tilda\n",
" H = O * torch.tanh(C)\n",
" Y = (H @ W_hq) + b_q\n",
" outputs.append(Y)\n",
" return torch.cat(outputs, dim=0), (H, C)"
]
},
{
"cell_type": "markdown",
"id": "6a049a6f-80ed-4a3f-b2c0-8f1214446bc9",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"训练"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "d6485ad2-20f4-4d9c-a70d-09956426a472",
"metadata": {
"origin_pos": 17,
"tab": [
"pytorch"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"perplexity 1.1, 19331.5 tokens/sec on cuda:0\n",
"time traveller for so it will be convenient to speak of himway a\n",
"travelleryou can show black is white by argument said filby\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
"<svg height=\"180.65625pt\" version=\"1.1\" viewBox=\"0 0 252.646875 180.65625\" width=\"252.646875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
" <metadata>\n",
" <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
" <cc:Work>\n",
" <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
" <dc:date>2022-01-17T01:50:45.607624</dc:date>\n",
" <dc:format>image/svg+xml</dc:format>\n",
" <dc:creator>\n",
" <cc:Agent>\n",
" <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n",
" </cc:Agent>\n",
" </dc:creator>\n",
" </cc:Work>\n",
" </rdf:RDF>\n",
" </metadata>\n",
" <defs>\n",
" <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
" </defs>\n",
" <g id=\"figure_1\">\n",
" <g id=\"patch_1\">\n",
" <path d=\"M 0 180.65625 \n",
"L 252.646875 180.65625 \n",
"L 252.646875 0 \n",
"L 0 0 \n",
"z\n",
"\" style=\"fill:none;\"/>\n",
" </g>\n",
" <g id=\"axes_1\">\n",
" <g id=\"patch_2\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"L 40.603125 7.2 \n",
"z\n",
"\" style=\"fill:#ffffff;\"/>\n",
" </g>\n",
" <g id=\"matplotlib.axis_1\">\n",
" <g id=\"xtick_1\">\n",
" <g id=\"line2d_1\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 76.474554 143.1 \n",
"L 76.474554 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_2\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L 0 3.5 \n",
"\" id=\"m603b1c8f2a\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"76.474554\" xlink:href=\"#m603b1c8f2a\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_1\">\n",
" <!-- 100 -->\n",
" <g transform=\"translate(66.930804 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 12.40625 8.296875 \n",
"L 28.515625 8.296875 \n",
"L 28.515625 63.921875 \n",
"L 10.984375 60.40625 \n",
"L 10.984375 69.390625 \n",
"L 28.421875 72.90625 \n",
"L 38.28125 72.90625 \n",
"L 38.28125 8.296875 \n",
"L 54.390625 8.296875 \n",
"L 54.390625 0 \n",
"L 12.40625 0 \n",
"z\n",
"\" id=\"DejaVuSans-49\"/>\n",
" <path d=\"M 31.78125 66.40625 \n",
"Q 24.171875 66.40625 20.328125 58.90625 \n",
"Q 16.5 51.421875 16.5 36.375 \n",
"Q 16.5 21.390625 20.328125 13.890625 \n",
"Q 24.171875 6.390625 31.78125 6.390625 \n",
"Q 39.453125 6.390625 43.28125 13.890625 \n",
"Q 47.125 21.390625 47.125 36.375 \n",
"Q 47.125 51.421875 43.28125 58.90625 \n",
"Q 39.453125 66.40625 31.78125 66.40625 \n",
"z\n",
"M 31.78125 74.21875 \n",
"Q 44.046875 74.21875 50.515625 64.515625 \n",
"Q 56.984375 54.828125 56.984375 36.375 \n",
"Q 56.984375 17.96875 50.515625 8.265625 \n",
"Q 44.046875 -1.421875 31.78125 -1.421875 \n",
"Q 19.53125 -1.421875 13.0625 8.265625 \n",
"Q 6.59375 17.96875 6.59375 36.375 \n",
"Q 6.59375 54.828125 13.0625 64.515625 \n",
"Q 19.53125 74.21875 31.78125 74.21875 \n",
"z\n",
"\" id=\"DejaVuSans-48\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_2\">\n",
" <g id=\"line2d_3\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 116.331696 143.1 \n",
"L 116.331696 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_4\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"116.331696\" xlink:href=\"#m603b1c8f2a\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_2\">\n",
" <!-- 200 -->\n",
" <g transform=\"translate(106.787946 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 19.1875 8.296875 \n",
"L 53.609375 8.296875 \n",
"L 53.609375 0 \n",
"L 7.328125 0 \n",
"L 7.328125 8.296875 \n",
"Q 12.9375 14.109375 22.625 23.890625 \n",
"Q 32.328125 33.6875 34.8125 36.53125 \n",
"Q 39.546875 41.84375 41.421875 45.53125 \n",
"Q 43.3125 49.21875 43.3125 52.78125 \n",
"Q 43.3125 58.59375 39.234375 62.25 \n",
"Q 35.15625 65.921875 28.609375 65.921875 \n",
"Q 23.96875 65.921875 18.8125 64.3125 \n",
"Q 13.671875 62.703125 7.8125 59.421875 \n",
"L 7.8125 69.390625 \n",
"Q 13.765625 71.78125 18.9375 73 \n",
"Q 24.125 74.21875 28.421875 74.21875 \n",
"Q 39.75 74.21875 46.484375 68.546875 \n",
"Q 53.21875 62.890625 53.21875 53.421875 \n",
"Q 53.21875 48.921875 51.53125 44.890625 \n",
"Q 49.859375 40.875 45.40625 35.40625 \n",
"Q 44.1875 33.984375 37.640625 27.21875 \n",
"Q 31.109375 20.453125 19.1875 8.296875 \n",
"z\n",
"\" id=\"DejaVuSans-50\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-50\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_3\">\n",
" <g id=\"line2d_5\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 156.188839 143.1 \n",
"L 156.188839 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_6\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"156.188839\" xlink:href=\"#m603b1c8f2a\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_3\">\n",
" <!-- 300 -->\n",
" <g transform=\"translate(146.645089 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 40.578125 39.3125 \n",
"Q 47.65625 37.796875 51.625 33 \n",
"Q 55.609375 28.21875 55.609375 21.1875 \n",
"Q 55.609375 10.40625 48.1875 4.484375 \n",
"Q 40.765625 -1.421875 27.09375 -1.421875 \n",
"Q 22.515625 -1.421875 17.65625 -0.515625 \n",
"Q 12.796875 0.390625 7.625 2.203125 \n",
"L 7.625 11.71875 \n",
"Q 11.71875 9.328125 16.59375 8.109375 \n",
"Q 21.484375 6.890625 26.8125 6.890625 \n",
"Q 36.078125 6.890625 40.9375 10.546875 \n",
"Q 45.796875 14.203125 45.796875 21.1875 \n",
"Q 45.796875 27.640625 41.28125 31.265625 \n",
"Q 36.765625 34.90625 28.71875 34.90625 \n",
"L 20.21875 34.90625 \n",
"L 20.21875 43.015625 \n",
"L 29.109375 43.015625 \n",
"Q 36.375 43.015625 40.234375 45.921875 \n",
"Q 44.09375 48.828125 44.09375 54.296875 \n",
"Q 44.09375 59.90625 40.109375 62.90625 \n",
"Q 36.140625 65.921875 28.71875 65.921875 \n",
"Q 24.65625 65.921875 20.015625 65.03125 \n",
"Q 15.375 64.15625 9.8125 62.3125 \n",
"L 9.8125 71.09375 \n",
"Q 15.4375 72.65625 20.34375 73.4375 \n",
"Q 25.25 74.21875 29.59375 74.21875 \n",
"Q 40.828125 74.21875 47.359375 69.109375 \n",
"Q 53.90625 64.015625 53.90625 55.328125 \n",
"Q 53.90625 49.265625 50.4375 45.09375 \n",
"Q 46.96875 40.921875 40.578125 39.3125 \n",
"z\n",
"\" id=\"DejaVuSans-51\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-51\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_4\">\n",
" <g id=\"line2d_7\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 196.045982 143.1 \n",
"L 196.045982 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_8\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"196.045982\" xlink:href=\"#m603b1c8f2a\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_4\">\n",
" <!-- 400 -->\n",
" <g transform=\"translate(186.502232 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 37.796875 64.3125 \n",
"L 12.890625 25.390625 \n",
"L 37.796875 25.390625 \n",
"z\n",
"M 35.203125 72.90625 \n",
"L 47.609375 72.90625 \n",
"L 47.609375 25.390625 \n",
"L 58.015625 25.390625 \n",
"L 58.015625 17.1875 \n",
"L 47.609375 17.1875 \n",
"L 47.609375 0 \n",
"L 37.796875 0 \n",
"L 37.796875 17.1875 \n",
"L 4.890625 17.1875 \n",
"L 4.890625 26.703125 \n",
"z\n",
"\" id=\"DejaVuSans-52\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-52\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_5\">\n",
" <g id=\"line2d_9\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_10\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"235.903125\" xlink:href=\"#m603b1c8f2a\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_5\">\n",
" <!-- 500 -->\n",
" <g transform=\"translate(226.359375 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 10.796875 72.90625 \n",
"L 49.515625 72.90625 \n",
"L 49.515625 64.59375 \n",
"L 19.828125 64.59375 \n",
"L 19.828125 46.734375 \n",
"Q 21.96875 47.46875 24.109375 47.828125 \n",
"Q 26.265625 48.1875 28.421875 48.1875 \n",
"Q 40.625 48.1875 47.75 41.5 \n",
"Q 54.890625 34.8125 54.890625 23.390625 \n",
"Q 54.890625 11.625 47.5625 5.09375 \n",
"Q 40.234375 -1.421875 26.90625 -1.421875 \n",
"Q 22.3125 -1.421875 17.546875 -0.640625 \n",
"Q 12.796875 0.140625 7.71875 1.703125 \n",
"L 7.71875 11.625 \n",
"Q 12.109375 9.234375 16.796875 8.0625 \n",
"Q 21.484375 6.890625 26.703125 6.890625 \n",
"Q 35.15625 6.890625 40.078125 11.328125 \n",
"Q 45.015625 15.765625 45.015625 23.390625 \n",
"Q 45.015625 31 40.078125 35.4375 \n",
"Q 35.15625 39.890625 26.703125 39.890625 \n",
"Q 22.75 39.890625 18.8125 39.015625 \n",
"Q 14.890625 38.140625 10.796875 36.28125 \n",
"z\n",
"\" id=\"DejaVuSans-53\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_6\">\n",
" <!-- epoch -->\n",
" <g transform=\"translate(123.025 171.376563)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 56.203125 29.59375 \n",
"L 56.203125 25.203125 \n",
"L 14.890625 25.203125 \n",
"Q 15.484375 15.921875 20.484375 11.0625 \n",
"Q 25.484375 6.203125 34.421875 6.203125 \n",
"Q 39.59375 6.203125 44.453125 7.46875 \n",
"Q 49.3125 8.734375 54.109375 11.28125 \n",
"L 54.109375 2.78125 \n",
"Q 49.265625 0.734375 44.1875 -0.34375 \n",
"Q 39.109375 -1.421875 33.890625 -1.421875 \n",
"Q 20.796875 -1.421875 13.15625 6.1875 \n",
"Q 5.515625 13.8125 5.515625 26.8125 \n",
"Q 5.515625 40.234375 12.765625 48.109375 \n",
"Q 20.015625 56 32.328125 56 \n",
"Q 43.359375 56 49.78125 48.890625 \n",
"Q 56.203125 41.796875 56.203125 29.59375 \n",
"z\n",
"M 47.21875 32.234375 \n",
"Q 47.125 39.59375 43.09375 43.984375 \n",
"Q 39.0625 48.390625 32.421875 48.390625 \n",
"Q 24.90625 48.390625 20.390625 44.140625 \n",
"Q 15.875 39.890625 15.1875 32.171875 \n",
"z\n",
"\" id=\"DejaVuSans-101\"/>\n",
" <path d=\"M 18.109375 8.203125 \n",
"L 18.109375 -20.796875 \n",
"L 9.078125 -20.796875 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.390625 \n",
"Q 20.953125 51.265625 25.265625 53.625 \n",
"Q 29.59375 56 35.59375 56 \n",
"Q 45.5625 56 51.78125 48.09375 \n",
"Q 58.015625 40.1875 58.015625 27.296875 \n",
"Q 58.015625 14.40625 51.78125 6.484375 \n",
"Q 45.5625 -1.421875 35.59375 -1.421875 \n",
"Q 29.59375 -1.421875 25.265625 0.953125 \n",
"Q 20.953125 3.328125 18.109375 8.203125 \n",
"z\n",
"M 48.6875 27.296875 \n",
"Q 48.6875 37.203125 44.609375 42.84375 \n",
"Q 40.53125 48.484375 33.40625 48.484375 \n",
"Q 26.265625 48.484375 22.1875 42.84375 \n",
"Q 18.109375 37.203125 18.109375 27.296875 \n",
"Q 18.109375 17.390625 22.1875 11.75 \n",
"Q 26.265625 6.109375 33.40625 6.109375 \n",
"Q 40.53125 6.109375 44.609375 11.75 \n",
"Q 48.6875 17.390625 48.6875 27.296875 \n",
"z\n",
"\" id=\"DejaVuSans-112\"/>\n",
" <path d=\"M 30.609375 48.390625 \n",
"Q 23.390625 48.390625 19.1875 42.75 \n",
"Q 14.984375 37.109375 14.984375 27.296875 \n",
"Q 14.984375 17.484375 19.15625 11.84375 \n",
"Q 23.34375 6.203125 30.609375 6.203125 \n",
"Q 37.796875 6.203125 41.984375 11.859375 \n",
"Q 46.1875 17.53125 46.1875 27.296875 \n",
"Q 46.1875 37.015625 41.984375 42.703125 \n",
"Q 37.796875 48.390625 30.609375 48.390625 \n",
"z\n",
"M 30.609375 56 \n",
"Q 42.328125 56 49.015625 48.375 \n",
"Q 55.71875 40.765625 55.71875 27.296875 \n",
"Q 55.71875 13.875 49.015625 6.21875 \n",
"Q 42.328125 -1.421875 30.609375 -1.421875 \n",
"Q 18.84375 -1.421875 12.171875 6.21875 \n",
"Q 5.515625 13.875 5.515625 27.296875 \n",
"Q 5.515625 40.765625 12.171875 48.375 \n",
"Q 18.84375 56 30.609375 56 \n",
"z\n",
"\" id=\"DejaVuSans-111\"/>\n",
" <path d=\"M 48.78125 52.59375 \n",
"L 48.78125 44.1875 \n",
"Q 44.96875 46.296875 41.140625 47.34375 \n",
"Q 37.3125 48.390625 33.40625 48.390625 \n",
"Q 24.65625 48.390625 19.8125 42.84375 \n",
"Q 14.984375 37.3125 14.984375 27.296875 \n",
"Q 14.984375 17.28125 19.8125 11.734375 \n",
"Q 24.65625 6.203125 33.40625 6.203125 \n",
"Q 37.3125 6.203125 41.140625 7.25 \n",
"Q 44.96875 8.296875 48.78125 10.40625 \n",
"L 48.78125 2.09375 \n",
"Q 45.015625 0.34375 40.984375 -0.53125 \n",
"Q 36.96875 -1.421875 32.421875 -1.421875 \n",
"Q 20.0625 -1.421875 12.78125 6.34375 \n",
"Q 5.515625 14.109375 5.515625 27.296875 \n",
"Q 5.515625 40.671875 12.859375 48.328125 \n",
"Q 20.21875 56 33.015625 56 \n",
"Q 37.15625 56 41.109375 55.140625 \n",
"Q 45.0625 54.296875 48.78125 52.59375 \n",
"z\n",
"\" id=\"DejaVuSans-99\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 75.984375 \n",
"L 18.109375 75.984375 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-104\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"61.523438\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-111\"/>\n",
" <use x=\"186.181641\" xlink:href=\"#DejaVuSans-99\"/>\n",
" <use x=\"241.162109\" xlink:href=\"#DejaVuSans-104\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"matplotlib.axis_2\">\n",
" <g id=\"ytick_1\">\n",
" <g id=\"line2d_11\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 40.603125 108.251054 \n",
"L 235.903125 108.251054 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_12\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L -3.5 0 \n",
"\" id=\"m6f163f1cbc\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m6f163f1cbc\" y=\"108.251054\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_7\">\n",
" <!-- 5 -->\n",
" <g transform=\"translate(27.240625 112.050273)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_2\">\n",
" <g id=\"line2d_13\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 40.603125 71.448095 \n",
"L 235.903125 71.448095 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_14\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m6f163f1cbc\" y=\"71.448095\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_8\">\n",
" <!-- 10 -->\n",
" <g transform=\"translate(20.878125 75.247313)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_3\">\n",
" <g id=\"line2d_15\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 40.603125 34.645135 \n",
"L 235.903125 34.645135 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_16\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m6f163f1cbc\" y=\"34.645135\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_9\">\n",
" <!-- 15 -->\n",
" <g transform=\"translate(20.878125 38.444354)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_10\">\n",
" <!-- perplexity -->\n",
" <g transform=\"translate(14.798437 100.276562)rotate(-90)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 41.109375 46.296875 \n",
"Q 39.59375 47.171875 37.8125 47.578125 \n",
"Q 36.03125 48 33.890625 48 \n",
"Q 26.265625 48 22.1875 43.046875 \n",
"Q 18.109375 38.09375 18.109375 28.8125 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 20.953125 51.171875 25.484375 53.578125 \n",
"Q 30.03125 56 36.53125 56 \n",
"Q 37.453125 56 38.578125 55.875 \n",
"Q 39.703125 55.765625 41.0625 55.515625 \n",
"z\n",
"\" id=\"DejaVuSans-114\"/>\n",
" <path d=\"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"\" id=\"DejaVuSans-108\"/>\n",
" <path d=\"M 54.890625 54.6875 \n",
"L 35.109375 28.078125 \n",
"L 55.90625 0 \n",
"L 45.3125 0 \n",
"L 29.390625 21.484375 \n",
"L 13.484375 0 \n",
"L 2.875 0 \n",
"L 24.125 28.609375 \n",
"L 4.6875 54.6875 \n",
"L 15.28125 54.6875 \n",
"L 29.78125 35.203125 \n",
"L 44.28125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-120\"/>\n",
" <path d=\"M 9.421875 54.6875 \n",
"L 18.40625 54.6875 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 64.59375 \n",
"L 9.421875 64.59375 \n",
"z\n",
"\" id=\"DejaVuSans-105\"/>\n",
" <path d=\"M 18.3125 70.21875 \n",
"L 18.3125 54.6875 \n",
"L 36.8125 54.6875 \n",
"L 36.8125 47.703125 \n",
"L 18.3125 47.703125 \n",
"L 18.3125 18.015625 \n",
"Q 18.3125 11.328125 20.140625 9.421875 \n",
"Q 21.96875 7.515625 27.59375 7.515625 \n",
"L 36.8125 7.515625 \n",
"L 36.8125 0 \n",
"L 27.59375 0 \n",
"Q 17.1875 0 13.234375 3.875 \n",
"Q 9.28125 7.765625 9.28125 18.015625 \n",
"L 9.28125 47.703125 \n",
"L 2.6875 47.703125 \n",
"L 2.6875 54.6875 \n",
"L 9.28125 54.6875 \n",
"L 9.28125 70.21875 \n",
"z\n",
"\" id=\"DejaVuSans-116\"/>\n",
" <path d=\"M 32.171875 -5.078125 \n",
"Q 28.375 -14.84375 24.75 -17.8125 \n",
"Q 21.140625 -20.796875 15.09375 -20.796875 \n",
"L 7.90625 -20.796875 \n",
"L 7.90625 -13.28125 \n",
"L 13.1875 -13.28125 \n",
"Q 16.890625 -13.28125 18.9375 -11.515625 \n",
"Q 21 -9.765625 23.484375 -3.21875 \n",
"L 25.09375 0.875 \n",
"L 2.984375 54.6875 \n",
"L 12.5 54.6875 \n",
"L 29.59375 11.921875 \n",
"L 46.6875 54.6875 \n",
"L 56.203125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-121\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"63.476562\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"166.113281\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"229.589844\" xlink:href=\"#DejaVuSans-108\"/>\n",
" <use x=\"257.373047\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"317.146484\" xlink:href=\"#DejaVuSans-120\"/>\n",
" <use x=\"376.326172\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"404.109375\" xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"443.318359\" xlink:href=\"#DejaVuSans-121\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"line2d_17\">\n",
" <path clip-path=\"url(#pefb36a3d49)\" d=\"M 40.603125 13.377273 \n",
"L 44.588839 16.843111 \n",
"L 48.574554 22.159793 \n",
"L 52.560268 29.924778 \n",
"L 56.545982 38.227732 \n",
"L 60.531696 50.307547 \n",
"L 64.517411 57.218963 \n",
"L 68.503125 61.743012 \n",
"L 72.488839 64.823305 \n",
"L 76.474554 67.086114 \n",
"L 80.460268 69.664171 \n",
"L 84.445982 72.745923 \n",
"L 88.431696 74.312151 \n",
"L 92.417411 77.467948 \n",
"L 96.403125 80.368311 \n",
"L 100.388839 83.20777 \n",
"L 104.374554 85.713371 \n",
"L 108.360268 87.902671 \n",
"L 112.345982 90.042641 \n",
"L 116.331696 92.264574 \n",
"L 120.317411 95.177953 \n",
"L 124.303125 96.480449 \n",
"L 128.288839 98.935524 \n",
"L 132.274554 100.886254 \n",
"L 136.260268 103.061507 \n",
"L 140.245982 104.904817 \n",
"L 144.231696 107.230452 \n",
"L 148.217411 109.037452 \n",
"L 152.203125 110.866254 \n",
"L 156.188839 113.069207 \n",
"L 160.174554 115.661869 \n",
"L 164.160268 117.852159 \n",
"L 168.145982 119.475722 \n",
"L 172.131696 122.086264 \n",
"L 176.117411 123.85671 \n",
"L 180.103125 125.899136 \n",
"L 184.088839 127.782376 \n",
"L 188.074554 129.083812 \n",
"L 192.060268 130.492509 \n",
"L 196.045982 131.041986 \n",
"L 200.031696 131.936608 \n",
"L 204.017411 133.534671 \n",
"L 208.003125 134.176519 \n",
"L 211.988839 134.021616 \n",
"L 215.974554 135.580158 \n",
"L 219.960268 135.632022 \n",
"L 223.945982 136.192217 \n",
"L 227.931696 136.689484 \n",
"L 231.917411 135.932729 \n",
"L 235.903125 136.922727 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"patch_3\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 40.603125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_4\">\n",
" <path d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_5\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_6\">\n",
" <path d=\"M 40.603125 7.2 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"legend_1\">\n",
" <g id=\"patch_7\">\n",
" <path d=\"M 173.628125 29.878125 \n",
"L 228.903125 29.878125 \n",
"Q 230.903125 29.878125 230.903125 27.878125 \n",
"L 230.903125 14.2 \n",
"Q 230.903125 12.2 228.903125 12.2 \n",
"L 173.628125 12.2 \n",
"Q 171.628125 12.2 171.628125 14.2 \n",
"L 171.628125 27.878125 \n",
"Q 171.628125 29.878125 173.628125 29.878125 \n",
"z\n",
"\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n",
" </g>\n",
" <g id=\"line2d_18\">\n",
" <path d=\"M 175.628125 20.298437 \n",
"L 195.628125 20.298437 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"line2d_19\"/>\n",
" <g id=\"text_11\">\n",
" <!-- train -->\n",
" <g transform=\"translate(203.628125 23.798437)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 34.28125 27.484375 \n",
"Q 23.390625 27.484375 19.1875 25 \n",
"Q 14.984375 22.515625 14.984375 16.5 \n",
"Q 14.984375 11.71875 18.140625 8.90625 \n",
"Q 21.296875 6.109375 26.703125 6.109375 \n",
"Q 34.1875 6.109375 38.703125 11.40625 \n",
"Q 43.21875 16.703125 43.21875 25.484375 \n",
"L 43.21875 27.484375 \n",
"z\n",
"M 52.203125 31.203125 \n",
"L 52.203125 0 \n",
"L 43.21875 0 \n",
"L 43.21875 8.296875 \n",
"Q 40.140625 3.328125 35.546875 0.953125 \n",
"Q 30.953125 -1.421875 24.3125 -1.421875 \n",
"Q 15.921875 -1.421875 10.953125 3.296875 \n",
"Q 6 8.015625 6 15.921875 \n",
"Q 6 25.140625 12.171875 29.828125 \n",
"Q 18.359375 34.515625 30.609375 34.515625 \n",
"L 43.21875 34.515625 \n",
"L 43.21875 35.40625 \n",
"Q 43.21875 41.609375 39.140625 45 \n",
"Q 35.0625 48.390625 27.6875 48.390625 \n",
"Q 23 48.390625 18.546875 47.265625 \n",
"Q 14.109375 46.140625 10.015625 43.890625 \n",
"L 10.015625 52.203125 \n",
"Q 14.9375 54.109375 19.578125 55.046875 \n",
"Q 24.21875 56 28.609375 56 \n",
"Q 40.484375 56 46.34375 49.84375 \n",
"Q 52.203125 43.703125 52.203125 31.203125 \n",
"z\n",
"\" id=\"DejaVuSans-97\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-110\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"80.322266\" xlink:href=\"#DejaVuSans-97\"/>\n",
" <use x=\"141.601562\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"169.384766\" xlink:href=\"#DejaVuSans-110\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"pefb36a3d49\">\n",
" <rect height=\"135.9\" width=\"195.3\" x=\"40.603125\" y=\"7.2\"/>\n",
" </clipPath>\n",
" </defs>\n",
"</svg>\n"
],
"text/plain": [
"<Figure size 252x180 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"vocab_size, num_hiddens, device = len(vocab), 256, d2l.try_gpu()\n",
"num_epochs, lr = 500, 1\n",
"model = d2l.RNNModelScratch(len(vocab), num_hiddens, device, get_lstm_params,\n",
" init_lstm_state, lstm)\n",
"d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)"
]
},
{
"cell_type": "markdown",
"id": "7c73a98a-0081-4d5c-88ae-786f3874b62b",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"简洁实现"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "665010d4-5ce1-4610-af14-925606e1fe1b",
"metadata": {
"origin_pos": 21,
"tab": [
"pytorch"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"perplexity 1.1, 222756.1 tokens/sec on cuda:0\n",
"time traveller for so it will be convenient to speak of himwas e\n",
"travellerit s against reason said filbywhat the exrect a do\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
"<svg height=\"180.65625pt\" version=\"1.1\" viewBox=\"0 0 252.646875 180.65625\" width=\"252.646875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
" <metadata>\n",
" <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
" <cc:Work>\n",
" <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
" <dc:date>2022-01-17T01:51:13.624095</dc:date>\n",
" <dc:format>image/svg+xml</dc:format>\n",
" <dc:creator>\n",
" <cc:Agent>\n",
" <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n",
" </cc:Agent>\n",
" </dc:creator>\n",
" </cc:Work>\n",
" </rdf:RDF>\n",
" </metadata>\n",
" <defs>\n",
" <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
" </defs>\n",
" <g id=\"figure_1\">\n",
" <g id=\"patch_1\">\n",
" <path d=\"M 0 180.65625 \n",
"L 252.646875 180.65625 \n",
"L 252.646875 0 \n",
"L 0 0 \n",
"z\n",
"\" style=\"fill:none;\"/>\n",
" </g>\n",
" <g id=\"axes_1\">\n",
" <g id=\"patch_2\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"L 40.603125 7.2 \n",
"z\n",
"\" style=\"fill:#ffffff;\"/>\n",
" </g>\n",
" <g id=\"matplotlib.axis_1\">\n",
" <g id=\"xtick_1\">\n",
" <g id=\"line2d_1\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 76.474554 143.1 \n",
"L 76.474554 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_2\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L 0 3.5 \n",
"\" id=\"m9f457ec782\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"76.474554\" xlink:href=\"#m9f457ec782\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_1\">\n",
" <!-- 100 -->\n",
" <g transform=\"translate(66.930804 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 12.40625 8.296875 \n",
"L 28.515625 8.296875 \n",
"L 28.515625 63.921875 \n",
"L 10.984375 60.40625 \n",
"L 10.984375 69.390625 \n",
"L 28.421875 72.90625 \n",
"L 38.28125 72.90625 \n",
"L 38.28125 8.296875 \n",
"L 54.390625 8.296875 \n",
"L 54.390625 0 \n",
"L 12.40625 0 \n",
"z\n",
"\" id=\"DejaVuSans-49\"/>\n",
" <path d=\"M 31.78125 66.40625 \n",
"Q 24.171875 66.40625 20.328125 58.90625 \n",
"Q 16.5 51.421875 16.5 36.375 \n",
"Q 16.5 21.390625 20.328125 13.890625 \n",
"Q 24.171875 6.390625 31.78125 6.390625 \n",
"Q 39.453125 6.390625 43.28125 13.890625 \n",
"Q 47.125 21.390625 47.125 36.375 \n",
"Q 47.125 51.421875 43.28125 58.90625 \n",
"Q 39.453125 66.40625 31.78125 66.40625 \n",
"z\n",
"M 31.78125 74.21875 \n",
"Q 44.046875 74.21875 50.515625 64.515625 \n",
"Q 56.984375 54.828125 56.984375 36.375 \n",
"Q 56.984375 17.96875 50.515625 8.265625 \n",
"Q 44.046875 -1.421875 31.78125 -1.421875 \n",
"Q 19.53125 -1.421875 13.0625 8.265625 \n",
"Q 6.59375 17.96875 6.59375 36.375 \n",
"Q 6.59375 54.828125 13.0625 64.515625 \n",
"Q 19.53125 74.21875 31.78125 74.21875 \n",
"z\n",
"\" id=\"DejaVuSans-48\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_2\">\n",
" <g id=\"line2d_3\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 116.331696 143.1 \n",
"L 116.331696 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_4\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"116.331696\" xlink:href=\"#m9f457ec782\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_2\">\n",
" <!-- 200 -->\n",
" <g transform=\"translate(106.787946 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 19.1875 8.296875 \n",
"L 53.609375 8.296875 \n",
"L 53.609375 0 \n",
"L 7.328125 0 \n",
"L 7.328125 8.296875 \n",
"Q 12.9375 14.109375 22.625 23.890625 \n",
"Q 32.328125 33.6875 34.8125 36.53125 \n",
"Q 39.546875 41.84375 41.421875 45.53125 \n",
"Q 43.3125 49.21875 43.3125 52.78125 \n",
"Q 43.3125 58.59375 39.234375 62.25 \n",
"Q 35.15625 65.921875 28.609375 65.921875 \n",
"Q 23.96875 65.921875 18.8125 64.3125 \n",
"Q 13.671875 62.703125 7.8125 59.421875 \n",
"L 7.8125 69.390625 \n",
"Q 13.765625 71.78125 18.9375 73 \n",
"Q 24.125 74.21875 28.421875 74.21875 \n",
"Q 39.75 74.21875 46.484375 68.546875 \n",
"Q 53.21875 62.890625 53.21875 53.421875 \n",
"Q 53.21875 48.921875 51.53125 44.890625 \n",
"Q 49.859375 40.875 45.40625 35.40625 \n",
"Q 44.1875 33.984375 37.640625 27.21875 \n",
"Q 31.109375 20.453125 19.1875 8.296875 \n",
"z\n",
"\" id=\"DejaVuSans-50\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-50\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_3\">\n",
" <g id=\"line2d_5\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 156.188839 143.1 \n",
"L 156.188839 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_6\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"156.188839\" xlink:href=\"#m9f457ec782\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_3\">\n",
" <!-- 300 -->\n",
" <g transform=\"translate(146.645089 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 40.578125 39.3125 \n",
"Q 47.65625 37.796875 51.625 33 \n",
"Q 55.609375 28.21875 55.609375 21.1875 \n",
"Q 55.609375 10.40625 48.1875 4.484375 \n",
"Q 40.765625 -1.421875 27.09375 -1.421875 \n",
"Q 22.515625 -1.421875 17.65625 -0.515625 \n",
"Q 12.796875 0.390625 7.625 2.203125 \n",
"L 7.625 11.71875 \n",
"Q 11.71875 9.328125 16.59375 8.109375 \n",
"Q 21.484375 6.890625 26.8125 6.890625 \n",
"Q 36.078125 6.890625 40.9375 10.546875 \n",
"Q 45.796875 14.203125 45.796875 21.1875 \n",
"Q 45.796875 27.640625 41.28125 31.265625 \n",
"Q 36.765625 34.90625 28.71875 34.90625 \n",
"L 20.21875 34.90625 \n",
"L 20.21875 43.015625 \n",
"L 29.109375 43.015625 \n",
"Q 36.375 43.015625 40.234375 45.921875 \n",
"Q 44.09375 48.828125 44.09375 54.296875 \n",
"Q 44.09375 59.90625 40.109375 62.90625 \n",
"Q 36.140625 65.921875 28.71875 65.921875 \n",
"Q 24.65625 65.921875 20.015625 65.03125 \n",
"Q 15.375 64.15625 9.8125 62.3125 \n",
"L 9.8125 71.09375 \n",
"Q 15.4375 72.65625 20.34375 73.4375 \n",
"Q 25.25 74.21875 29.59375 74.21875 \n",
"Q 40.828125 74.21875 47.359375 69.109375 \n",
"Q 53.90625 64.015625 53.90625 55.328125 \n",
"Q 53.90625 49.265625 50.4375 45.09375 \n",
"Q 46.96875 40.921875 40.578125 39.3125 \n",
"z\n",
"\" id=\"DejaVuSans-51\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-51\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_4\">\n",
" <g id=\"line2d_7\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 196.045982 143.1 \n",
"L 196.045982 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_8\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"196.045982\" xlink:href=\"#m9f457ec782\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_4\">\n",
" <!-- 400 -->\n",
" <g transform=\"translate(186.502232 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 37.796875 64.3125 \n",
"L 12.890625 25.390625 \n",
"L 37.796875 25.390625 \n",
"z\n",
"M 35.203125 72.90625 \n",
"L 47.609375 72.90625 \n",
"L 47.609375 25.390625 \n",
"L 58.015625 25.390625 \n",
"L 58.015625 17.1875 \n",
"L 47.609375 17.1875 \n",
"L 47.609375 0 \n",
"L 37.796875 0 \n",
"L 37.796875 17.1875 \n",
"L 4.890625 17.1875 \n",
"L 4.890625 26.703125 \n",
"z\n",
"\" id=\"DejaVuSans-52\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-52\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_5\">\n",
" <g id=\"line2d_9\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_10\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"235.903125\" xlink:href=\"#m9f457ec782\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_5\">\n",
" <!-- 500 -->\n",
" <g transform=\"translate(226.359375 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 10.796875 72.90625 \n",
"L 49.515625 72.90625 \n",
"L 49.515625 64.59375 \n",
"L 19.828125 64.59375 \n",
"L 19.828125 46.734375 \n",
"Q 21.96875 47.46875 24.109375 47.828125 \n",
"Q 26.265625 48.1875 28.421875 48.1875 \n",
"Q 40.625 48.1875 47.75 41.5 \n",
"Q 54.890625 34.8125 54.890625 23.390625 \n",
"Q 54.890625 11.625 47.5625 5.09375 \n",
"Q 40.234375 -1.421875 26.90625 -1.421875 \n",
"Q 22.3125 -1.421875 17.546875 -0.640625 \n",
"Q 12.796875 0.140625 7.71875 1.703125 \n",
"L 7.71875 11.625 \n",
"Q 12.109375 9.234375 16.796875 8.0625 \n",
"Q 21.484375 6.890625 26.703125 6.890625 \n",
"Q 35.15625 6.890625 40.078125 11.328125 \n",
"Q 45.015625 15.765625 45.015625 23.390625 \n",
"Q 45.015625 31 40.078125 35.4375 \n",
"Q 35.15625 39.890625 26.703125 39.890625 \n",
"Q 22.75 39.890625 18.8125 39.015625 \n",
"Q 14.890625 38.140625 10.796875 36.28125 \n",
"z\n",
"\" id=\"DejaVuSans-53\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_6\">\n",
" <!-- epoch -->\n",
" <g transform=\"translate(123.025 171.376563)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 56.203125 29.59375 \n",
"L 56.203125 25.203125 \n",
"L 14.890625 25.203125 \n",
"Q 15.484375 15.921875 20.484375 11.0625 \n",
"Q 25.484375 6.203125 34.421875 6.203125 \n",
"Q 39.59375 6.203125 44.453125 7.46875 \n",
"Q 49.3125 8.734375 54.109375 11.28125 \n",
"L 54.109375 2.78125 \n",
"Q 49.265625 0.734375 44.1875 -0.34375 \n",
"Q 39.109375 -1.421875 33.890625 -1.421875 \n",
"Q 20.796875 -1.421875 13.15625 6.1875 \n",
"Q 5.515625 13.8125 5.515625 26.8125 \n",
"Q 5.515625 40.234375 12.765625 48.109375 \n",
"Q 20.015625 56 32.328125 56 \n",
"Q 43.359375 56 49.78125 48.890625 \n",
"Q 56.203125 41.796875 56.203125 29.59375 \n",
"z\n",
"M 47.21875 32.234375 \n",
"Q 47.125 39.59375 43.09375 43.984375 \n",
"Q 39.0625 48.390625 32.421875 48.390625 \n",
"Q 24.90625 48.390625 20.390625 44.140625 \n",
"Q 15.875 39.890625 15.1875 32.171875 \n",
"z\n",
"\" id=\"DejaVuSans-101\"/>\n",
" <path d=\"M 18.109375 8.203125 \n",
"L 18.109375 -20.796875 \n",
"L 9.078125 -20.796875 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.390625 \n",
"Q 20.953125 51.265625 25.265625 53.625 \n",
"Q 29.59375 56 35.59375 56 \n",
"Q 45.5625 56 51.78125 48.09375 \n",
"Q 58.015625 40.1875 58.015625 27.296875 \n",
"Q 58.015625 14.40625 51.78125 6.484375 \n",
"Q 45.5625 -1.421875 35.59375 -1.421875 \n",
"Q 29.59375 -1.421875 25.265625 0.953125 \n",
"Q 20.953125 3.328125 18.109375 8.203125 \n",
"z\n",
"M 48.6875 27.296875 \n",
"Q 48.6875 37.203125 44.609375 42.84375 \n",
"Q 40.53125 48.484375 33.40625 48.484375 \n",
"Q 26.265625 48.484375 22.1875 42.84375 \n",
"Q 18.109375 37.203125 18.109375 27.296875 \n",
"Q 18.109375 17.390625 22.1875 11.75 \n",
"Q 26.265625 6.109375 33.40625 6.109375 \n",
"Q 40.53125 6.109375 44.609375 11.75 \n",
"Q 48.6875 17.390625 48.6875 27.296875 \n",
"z\n",
"\" id=\"DejaVuSans-112\"/>\n",
" <path d=\"M 30.609375 48.390625 \n",
"Q 23.390625 48.390625 19.1875 42.75 \n",
"Q 14.984375 37.109375 14.984375 27.296875 \n",
"Q 14.984375 17.484375 19.15625 11.84375 \n",
"Q 23.34375 6.203125 30.609375 6.203125 \n",
"Q 37.796875 6.203125 41.984375 11.859375 \n",
"Q 46.1875 17.53125 46.1875 27.296875 \n",
"Q 46.1875 37.015625 41.984375 42.703125 \n",
"Q 37.796875 48.390625 30.609375 48.390625 \n",
"z\n",
"M 30.609375 56 \n",
"Q 42.328125 56 49.015625 48.375 \n",
"Q 55.71875 40.765625 55.71875 27.296875 \n",
"Q 55.71875 13.875 49.015625 6.21875 \n",
"Q 42.328125 -1.421875 30.609375 -1.421875 \n",
"Q 18.84375 -1.421875 12.171875 6.21875 \n",
"Q 5.515625 13.875 5.515625 27.296875 \n",
"Q 5.515625 40.765625 12.171875 48.375 \n",
"Q 18.84375 56 30.609375 56 \n",
"z\n",
"\" id=\"DejaVuSans-111\"/>\n",
" <path d=\"M 48.78125 52.59375 \n",
"L 48.78125 44.1875 \n",
"Q 44.96875 46.296875 41.140625 47.34375 \n",
"Q 37.3125 48.390625 33.40625 48.390625 \n",
"Q 24.65625 48.390625 19.8125 42.84375 \n",
"Q 14.984375 37.3125 14.984375 27.296875 \n",
"Q 14.984375 17.28125 19.8125 11.734375 \n",
"Q 24.65625 6.203125 33.40625 6.203125 \n",
"Q 37.3125 6.203125 41.140625 7.25 \n",
"Q 44.96875 8.296875 48.78125 10.40625 \n",
"L 48.78125 2.09375 \n",
"Q 45.015625 0.34375 40.984375 -0.53125 \n",
"Q 36.96875 -1.421875 32.421875 -1.421875 \n",
"Q 20.0625 -1.421875 12.78125 6.34375 \n",
"Q 5.515625 14.109375 5.515625 27.296875 \n",
"Q 5.515625 40.671875 12.859375 48.328125 \n",
"Q 20.21875 56 33.015625 56 \n",
"Q 37.15625 56 41.109375 55.140625 \n",
"Q 45.0625 54.296875 48.78125 52.59375 \n",
"z\n",
"\" id=\"DejaVuSans-99\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 75.984375 \n",
"L 18.109375 75.984375 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-104\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"61.523438\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-111\"/>\n",
" <use x=\"186.181641\" xlink:href=\"#DejaVuSans-99\"/>\n",
" <use x=\"241.162109\" xlink:href=\"#DejaVuSans-104\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"matplotlib.axis_2\">\n",
" <g id=\"ytick_1\">\n",
" <g id=\"line2d_11\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 40.603125 106.604895 \n",
"L 235.903125 106.604895 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_12\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L -3.5 0 \n",
"\" id=\"mee01f2ffa3\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mee01f2ffa3\" y=\"106.604895\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_7\">\n",
" <!-- 5 -->\n",
" <g transform=\"translate(27.240625 110.404114)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_2\">\n",
" <g id=\"line2d_13\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 40.603125 68.287895 \n",
"L 235.903125 68.287895 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_14\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mee01f2ffa3\" y=\"68.287895\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_8\">\n",
" <!-- 10 -->\n",
" <g transform=\"translate(20.878125 72.087114)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_3\">\n",
" <g id=\"line2d_15\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 40.603125 29.970896 \n",
"L 235.903125 29.970896 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_16\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mee01f2ffa3\" y=\"29.970896\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_9\">\n",
" <!-- 15 -->\n",
" <g transform=\"translate(20.878125 33.770115)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_10\">\n",
" <!-- perplexity -->\n",
" <g transform=\"translate(14.798437 100.276562)rotate(-90)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 41.109375 46.296875 \n",
"Q 39.59375 47.171875 37.8125 47.578125 \n",
"Q 36.03125 48 33.890625 48 \n",
"Q 26.265625 48 22.1875 43.046875 \n",
"Q 18.109375 38.09375 18.109375 28.8125 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 20.953125 51.171875 25.484375 53.578125 \n",
"Q 30.03125 56 36.53125 56 \n",
"Q 37.453125 56 38.578125 55.875 \n",
"Q 39.703125 55.765625 41.0625 55.515625 \n",
"z\n",
"\" id=\"DejaVuSans-114\"/>\n",
" <path d=\"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"\" id=\"DejaVuSans-108\"/>\n",
" <path d=\"M 54.890625 54.6875 \n",
"L 35.109375 28.078125 \n",
"L 55.90625 0 \n",
"L 45.3125 0 \n",
"L 29.390625 21.484375 \n",
"L 13.484375 0 \n",
"L 2.875 0 \n",
"L 24.125 28.609375 \n",
"L 4.6875 54.6875 \n",
"L 15.28125 54.6875 \n",
"L 29.78125 35.203125 \n",
"L 44.28125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-120\"/>\n",
" <path d=\"M 9.421875 54.6875 \n",
"L 18.40625 54.6875 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 64.59375 \n",
"L 9.421875 64.59375 \n",
"z\n",
"\" id=\"DejaVuSans-105\"/>\n",
" <path d=\"M 18.3125 70.21875 \n",
"L 18.3125 54.6875 \n",
"L 36.8125 54.6875 \n",
"L 36.8125 47.703125 \n",
"L 18.3125 47.703125 \n",
"L 18.3125 18.015625 \n",
"Q 18.3125 11.328125 20.140625 9.421875 \n",
"Q 21.96875 7.515625 27.59375 7.515625 \n",
"L 36.8125 7.515625 \n",
"L 36.8125 0 \n",
"L 27.59375 0 \n",
"Q 17.1875 0 13.234375 3.875 \n",
"Q 9.28125 7.765625 9.28125 18.015625 \n",
"L 9.28125 47.703125 \n",
"L 2.6875 47.703125 \n",
"L 2.6875 54.6875 \n",
"L 9.28125 54.6875 \n",
"L 9.28125 70.21875 \n",
"z\n",
"\" id=\"DejaVuSans-116\"/>\n",
" <path d=\"M 32.171875 -5.078125 \n",
"Q 28.375 -14.84375 24.75 -17.8125 \n",
"Q 21.140625 -20.796875 15.09375 -20.796875 \n",
"L 7.90625 -20.796875 \n",
"L 7.90625 -13.28125 \n",
"L 13.1875 -13.28125 \n",
"Q 16.890625 -13.28125 18.9375 -11.515625 \n",
"Q 21 -9.765625 23.484375 -3.21875 \n",
"L 25.09375 0.875 \n",
"L 2.984375 54.6875 \n",
"L 12.5 54.6875 \n",
"L 29.59375 11.921875 \n",
"L 46.6875 54.6875 \n",
"L 56.203125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-121\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"63.476562\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"166.113281\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"229.589844\" xlink:href=\"#DejaVuSans-108\"/>\n",
" <use x=\"257.373047\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"317.146484\" xlink:href=\"#DejaVuSans-120\"/>\n",
" <use x=\"376.326172\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"404.109375\" xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"443.318359\" xlink:href=\"#DejaVuSans-121\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"line2d_17\">\n",
" <path clip-path=\"url(#pc44674949a)\" d=\"M 40.603125 13.377273 \n",
"L 44.588839 19.840101 \n",
"L 48.574554 35.394203 \n",
"L 52.560268 50.277982 \n",
"L 56.545982 59.104074 \n",
"L 60.531696 63.382118 \n",
"L 64.517411 67.424673 \n",
"L 68.503125 71.801034 \n",
"L 72.488839 75.390541 \n",
"L 76.474554 79.118204 \n",
"L 80.460268 82.880337 \n",
"L 84.445982 84.092429 \n",
"L 88.431696 88.045157 \n",
"L 92.417411 92.304981 \n",
"L 96.403125 93.876796 \n",
"L 100.388839 97.127903 \n",
"L 104.374554 101.102012 \n",
"L 108.360268 104.626525 \n",
"L 112.345982 108.043623 \n",
"L 116.331696 112.320246 \n",
"L 120.317411 115.626967 \n",
"L 124.303125 117.983719 \n",
"L 128.288839 121.857575 \n",
"L 132.274554 125.287946 \n",
"L 136.260268 126.443167 \n",
"L 140.245982 129.888369 \n",
"L 144.231696 131.225935 \n",
"L 148.217411 132.54486 \n",
"L 152.203125 134.24488 \n",
"L 156.188839 134.86002 \n",
"L 160.174554 135.287533 \n",
"L 164.160268 136.006825 \n",
"L 168.145982 136.072318 \n",
"L 172.131696 136.159408 \n",
"L 176.117411 136.467993 \n",
"L 180.103125 136.696202 \n",
"L 184.088839 136.385747 \n",
"L 188.074554 136.753765 \n",
"L 192.060268 136.792135 \n",
"L 196.045982 136.786209 \n",
"L 200.031696 136.865748 \n",
"L 204.017411 136.660008 \n",
"L 208.003125 136.734854 \n",
"L 211.988839 136.749728 \n",
"L 215.974554 136.831945 \n",
"L 219.960268 136.895555 \n",
"L 223.945982 136.895439 \n",
"L 227.931696 136.922727 \n",
"L 231.917411 136.772343 \n",
"L 235.903125 136.871636 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"patch_3\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 40.603125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_4\">\n",
" <path d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_5\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_6\">\n",
" <path d=\"M 40.603125 7.2 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"legend_1\">\n",
" <g id=\"patch_7\">\n",
" <path d=\"M 173.628125 29.878125 \n",
"L 228.903125 29.878125 \n",
"Q 230.903125 29.878125 230.903125 27.878125 \n",
"L 230.903125 14.2 \n",
"Q 230.903125 12.2 228.903125 12.2 \n",
"L 173.628125 12.2 \n",
"Q 171.628125 12.2 171.628125 14.2 \n",
"L 171.628125 27.878125 \n",
"Q 171.628125 29.878125 173.628125 29.878125 \n",
"z\n",
"\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n",
" </g>\n",
" <g id=\"line2d_18\">\n",
" <path d=\"M 175.628125 20.298437 \n",
"L 195.628125 20.298437 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"line2d_19\"/>\n",
" <g id=\"text_11\">\n",
" <!-- train -->\n",
" <g transform=\"translate(203.628125 23.798437)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 34.28125 27.484375 \n",
"Q 23.390625 27.484375 19.1875 25 \n",
"Q 14.984375 22.515625 14.984375 16.5 \n",
"Q 14.984375 11.71875 18.140625 8.90625 \n",
"Q 21.296875 6.109375 26.703125 6.109375 \n",
"Q 34.1875 6.109375 38.703125 11.40625 \n",
"Q 43.21875 16.703125 43.21875 25.484375 \n",
"L 43.21875 27.484375 \n",
"z\n",
"M 52.203125 31.203125 \n",
"L 52.203125 0 \n",
"L 43.21875 0 \n",
"L 43.21875 8.296875 \n",
"Q 40.140625 3.328125 35.546875 0.953125 \n",
"Q 30.953125 -1.421875 24.3125 -1.421875 \n",
"Q 15.921875 -1.421875 10.953125 3.296875 \n",
"Q 6 8.015625 6 15.921875 \n",
"Q 6 25.140625 12.171875 29.828125 \n",
"Q 18.359375 34.515625 30.609375 34.515625 \n",
"L 43.21875 34.515625 \n",
"L 43.21875 35.40625 \n",
"Q 43.21875 41.609375 39.140625 45 \n",
"Q 35.0625 48.390625 27.6875 48.390625 \n",
"Q 23 48.390625 18.546875 47.265625 \n",
"Q 14.109375 46.140625 10.015625 43.890625 \n",
"L 10.015625 52.203125 \n",
"Q 14.9375 54.109375 19.578125 55.046875 \n",
"Q 24.21875 56 28.609375 56 \n",
"Q 40.484375 56 46.34375 49.84375 \n",
"Q 52.203125 43.703125 52.203125 31.203125 \n",
"z\n",
"\" id=\"DejaVuSans-97\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-110\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"80.322266\" xlink:href=\"#DejaVuSans-97\"/>\n",
" <use x=\"141.601562\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"169.384766\" xlink:href=\"#DejaVuSans-110\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"pc44674949a\">\n",
" <rect height=\"135.9\" width=\"195.3\" x=\"40.603125\" y=\"7.2\"/>\n",
" </clipPath>\n",
" </defs>\n",
"</svg>\n"
],
"text/plain": [
"<Figure size 252x180 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"num_inputs = vocab_size\n",
"lstm_layer = nn.LSTM(num_inputs, num_hiddens)\n",
"model = d2l.RNNModel(lstm_layer, len(vocab))\n",
"model = model.to(device)\n",
"d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)"
]
},
{
"cell_type": "markdown",
"id": "49eee153-dc83-4924-b635-c990537f6617",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"slideshow": {
"slide_type": "-"
},
"tags": []
},
"source": [
"## 门控循环单元(GRU)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "20488c5d-4781-453f-a316-35b07bc58b84",
"metadata": {
"origin_pos": 2,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"import torch\n",
"from torch import nn\n",
"from d2l import torch as d2l\n",
"\n",
"batch_size, num_steps = 32, 35\n",
"train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)"
]
},
{
"cell_type": "markdown",
"id": "99fcb45a-fb0c-4e78-b482-ee65b07d25f0",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"初始化模型参数"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ce37e242-fc70-43e6-b38e-9f9768df6637",
"metadata": {
"origin_pos": 6,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"def get_params(vocab_size, num_hiddens, device):\n",
" num_inputs = num_outputs = vocab_size\n",
"\n",
" def normal(shape):\n",
" return torch.randn(size=shape, device=device)*0.01\n",
"\n",
" def three():\n",
" return (normal((num_inputs, num_hiddens)),\n",
" normal((num_hiddens, num_hiddens)),\n",
" torch.zeros(num_hiddens, device=device))\n",
"\n",
" W_xz, W_hz, b_z = three() # 更新门参数\n",
" W_xr, W_hr, b_r = three() # 重置门参数\n",
" W_xh, W_hh, b_h = three() # 候选隐状态参数\n",
" # 输出层参数\n",
" W_hq = normal((num_hiddens, num_outputs))\n",
" b_q = torch.zeros(num_outputs, device=device)\n",
" params = [W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q]\n",
" for param in params:\n",
" param.requires_grad_(True)\n",
" return params"
]
},
{
"cell_type": "markdown",
"id": "674a2ce3-6c8b-401b-8390-34815195eeef",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"定义隐状态的初始化函数"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "c962f4e5-c015-42c8-b073-7c2774d5a1ce",
"metadata": {
"origin_pos": 10,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"def init_gru_state(batch_size, num_hiddens, device):\n",
" return (torch.zeros((batch_size, num_hiddens), device=device), )"
]
},
{
"cell_type": "markdown",
"id": "d46b76ba-7567-4d19-b4a9-ef386254c0e8",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"定义门控循环单元模型"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "784bbe7b-b987-40f3-b228-cd640c420b06",
"metadata": {
"origin_pos": 14,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"def gru(inputs, state, params):\n",
" W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q = params\n",
" H, = state\n",
" outputs = []\n",
" for X in inputs:\n",
" Z = torch.sigmoid((X @ W_xz) + (H @ W_hz) + b_z)\n",
" R = torch.sigmoid((X @ W_xr) + (H @ W_hr) + b_r)\n",
" H_tilda = torch.tanh((X @ W_xh) + ((R * H) @ W_hh) + b_h)\n",
" H = Z * H + (1 - Z) * H_tilda\n",
" Y = H @ W_hq + b_q\n",
" outputs.append(Y)\n",
" return torch.cat(outputs, dim=0), (H,)"
]
},
{
"cell_type": "markdown",
"id": "9f142a23-6a30-4152-b4cd-320465fdde48",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"训练"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "54d1caf6-df93-4b09-8ff7-a79d3fdc97f3",
"metadata": {
"origin_pos": 17,
"tab": [
"pytorch"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"perplexity 1.1, 24308.6 tokens/sec on cuda:0\n",
"time travelleryou can show black is white by argument said filby\n",
"travelleryou can show black is white by argument said filby\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
"<svg height=\"180.65625pt\" version=\"1.1\" viewBox=\"0 0 252.646875 180.65625\" width=\"252.646875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
" <metadata>\n",
" <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
" <cc:Work>\n",
" <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
" <dc:date>2022-01-17T01:37:00.239620</dc:date>\n",
" <dc:format>image/svg+xml</dc:format>\n",
" <dc:creator>\n",
" <cc:Agent>\n",
" <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n",
" </cc:Agent>\n",
" </dc:creator>\n",
" </cc:Work>\n",
" </rdf:RDF>\n",
" </metadata>\n",
" <defs>\n",
" <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
" </defs>\n",
" <g id=\"figure_1\">\n",
" <g id=\"patch_1\">\n",
" <path d=\"M 0 180.65625 \n",
"L 252.646875 180.65625 \n",
"L 252.646875 0 \n",
"L 0 0 \n",
"z\n",
"\" style=\"fill:none;\"/>\n",
" </g>\n",
" <g id=\"axes_1\">\n",
" <g id=\"patch_2\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"L 40.603125 7.2 \n",
"z\n",
"\" style=\"fill:#ffffff;\"/>\n",
" </g>\n",
" <g id=\"matplotlib.axis_1\">\n",
" <g id=\"xtick_1\">\n",
" <g id=\"line2d_1\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 76.474554 143.1 \n",
"L 76.474554 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_2\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L 0 3.5 \n",
"\" id=\"m2bf73234e6\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"76.474554\" xlink:href=\"#m2bf73234e6\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_1\">\n",
" <!-- 100 -->\n",
" <g transform=\"translate(66.930804 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 12.40625 8.296875 \n",
"L 28.515625 8.296875 \n",
"L 28.515625 63.921875 \n",
"L 10.984375 60.40625 \n",
"L 10.984375 69.390625 \n",
"L 28.421875 72.90625 \n",
"L 38.28125 72.90625 \n",
"L 38.28125 8.296875 \n",
"L 54.390625 8.296875 \n",
"L 54.390625 0 \n",
"L 12.40625 0 \n",
"z\n",
"\" id=\"DejaVuSans-49\"/>\n",
" <path d=\"M 31.78125 66.40625 \n",
"Q 24.171875 66.40625 20.328125 58.90625 \n",
"Q 16.5 51.421875 16.5 36.375 \n",
"Q 16.5 21.390625 20.328125 13.890625 \n",
"Q 24.171875 6.390625 31.78125 6.390625 \n",
"Q 39.453125 6.390625 43.28125 13.890625 \n",
"Q 47.125 21.390625 47.125 36.375 \n",
"Q 47.125 51.421875 43.28125 58.90625 \n",
"Q 39.453125 66.40625 31.78125 66.40625 \n",
"z\n",
"M 31.78125 74.21875 \n",
"Q 44.046875 74.21875 50.515625 64.515625 \n",
"Q 56.984375 54.828125 56.984375 36.375 \n",
"Q 56.984375 17.96875 50.515625 8.265625 \n",
"Q 44.046875 -1.421875 31.78125 -1.421875 \n",
"Q 19.53125 -1.421875 13.0625 8.265625 \n",
"Q 6.59375 17.96875 6.59375 36.375 \n",
"Q 6.59375 54.828125 13.0625 64.515625 \n",
"Q 19.53125 74.21875 31.78125 74.21875 \n",
"z\n",
"\" id=\"DejaVuSans-48\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_2\">\n",
" <g id=\"line2d_3\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 116.331696 143.1 \n",
"L 116.331696 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_4\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"116.331696\" xlink:href=\"#m2bf73234e6\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_2\">\n",
" <!-- 200 -->\n",
" <g transform=\"translate(106.787946 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 19.1875 8.296875 \n",
"L 53.609375 8.296875 \n",
"L 53.609375 0 \n",
"L 7.328125 0 \n",
"L 7.328125 8.296875 \n",
"Q 12.9375 14.109375 22.625 23.890625 \n",
"Q 32.328125 33.6875 34.8125 36.53125 \n",
"Q 39.546875 41.84375 41.421875 45.53125 \n",
"Q 43.3125 49.21875 43.3125 52.78125 \n",
"Q 43.3125 58.59375 39.234375 62.25 \n",
"Q 35.15625 65.921875 28.609375 65.921875 \n",
"Q 23.96875 65.921875 18.8125 64.3125 \n",
"Q 13.671875 62.703125 7.8125 59.421875 \n",
"L 7.8125 69.390625 \n",
"Q 13.765625 71.78125 18.9375 73 \n",
"Q 24.125 74.21875 28.421875 74.21875 \n",
"Q 39.75 74.21875 46.484375 68.546875 \n",
"Q 53.21875 62.890625 53.21875 53.421875 \n",
"Q 53.21875 48.921875 51.53125 44.890625 \n",
"Q 49.859375 40.875 45.40625 35.40625 \n",
"Q 44.1875 33.984375 37.640625 27.21875 \n",
"Q 31.109375 20.453125 19.1875 8.296875 \n",
"z\n",
"\" id=\"DejaVuSans-50\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-50\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_3\">\n",
" <g id=\"line2d_5\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 156.188839 143.1 \n",
"L 156.188839 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_6\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"156.188839\" xlink:href=\"#m2bf73234e6\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_3\">\n",
" <!-- 300 -->\n",
" <g transform=\"translate(146.645089 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 40.578125 39.3125 \n",
"Q 47.65625 37.796875 51.625 33 \n",
"Q 55.609375 28.21875 55.609375 21.1875 \n",
"Q 55.609375 10.40625 48.1875 4.484375 \n",
"Q 40.765625 -1.421875 27.09375 -1.421875 \n",
"Q 22.515625 -1.421875 17.65625 -0.515625 \n",
"Q 12.796875 0.390625 7.625 2.203125 \n",
"L 7.625 11.71875 \n",
"Q 11.71875 9.328125 16.59375 8.109375 \n",
"Q 21.484375 6.890625 26.8125 6.890625 \n",
"Q 36.078125 6.890625 40.9375 10.546875 \n",
"Q 45.796875 14.203125 45.796875 21.1875 \n",
"Q 45.796875 27.640625 41.28125 31.265625 \n",
"Q 36.765625 34.90625 28.71875 34.90625 \n",
"L 20.21875 34.90625 \n",
"L 20.21875 43.015625 \n",
"L 29.109375 43.015625 \n",
"Q 36.375 43.015625 40.234375 45.921875 \n",
"Q 44.09375 48.828125 44.09375 54.296875 \n",
"Q 44.09375 59.90625 40.109375 62.90625 \n",
"Q 36.140625 65.921875 28.71875 65.921875 \n",
"Q 24.65625 65.921875 20.015625 65.03125 \n",
"Q 15.375 64.15625 9.8125 62.3125 \n",
"L 9.8125 71.09375 \n",
"Q 15.4375 72.65625 20.34375 73.4375 \n",
"Q 25.25 74.21875 29.59375 74.21875 \n",
"Q 40.828125 74.21875 47.359375 69.109375 \n",
"Q 53.90625 64.015625 53.90625 55.328125 \n",
"Q 53.90625 49.265625 50.4375 45.09375 \n",
"Q 46.96875 40.921875 40.578125 39.3125 \n",
"z\n",
"\" id=\"DejaVuSans-51\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-51\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_4\">\n",
" <g id=\"line2d_7\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 196.045982 143.1 \n",
"L 196.045982 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_8\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"196.045982\" xlink:href=\"#m2bf73234e6\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_4\">\n",
" <!-- 400 -->\n",
" <g transform=\"translate(186.502232 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 37.796875 64.3125 \n",
"L 12.890625 25.390625 \n",
"L 37.796875 25.390625 \n",
"z\n",
"M 35.203125 72.90625 \n",
"L 47.609375 72.90625 \n",
"L 47.609375 25.390625 \n",
"L 58.015625 25.390625 \n",
"L 58.015625 17.1875 \n",
"L 47.609375 17.1875 \n",
"L 47.609375 0 \n",
"L 37.796875 0 \n",
"L 37.796875 17.1875 \n",
"L 4.890625 17.1875 \n",
"L 4.890625 26.703125 \n",
"z\n",
"\" id=\"DejaVuSans-52\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-52\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_5\">\n",
" <g id=\"line2d_9\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_10\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"235.903125\" xlink:href=\"#m2bf73234e6\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_5\">\n",
" <!-- 500 -->\n",
" <g transform=\"translate(226.359375 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 10.796875 72.90625 \n",
"L 49.515625 72.90625 \n",
"L 49.515625 64.59375 \n",
"L 19.828125 64.59375 \n",
"L 19.828125 46.734375 \n",
"Q 21.96875 47.46875 24.109375 47.828125 \n",
"Q 26.265625 48.1875 28.421875 48.1875 \n",
"Q 40.625 48.1875 47.75 41.5 \n",
"Q 54.890625 34.8125 54.890625 23.390625 \n",
"Q 54.890625 11.625 47.5625 5.09375 \n",
"Q 40.234375 -1.421875 26.90625 -1.421875 \n",
"Q 22.3125 -1.421875 17.546875 -0.640625 \n",
"Q 12.796875 0.140625 7.71875 1.703125 \n",
"L 7.71875 11.625 \n",
"Q 12.109375 9.234375 16.796875 8.0625 \n",
"Q 21.484375 6.890625 26.703125 6.890625 \n",
"Q 35.15625 6.890625 40.078125 11.328125 \n",
"Q 45.015625 15.765625 45.015625 23.390625 \n",
"Q 45.015625 31 40.078125 35.4375 \n",
"Q 35.15625 39.890625 26.703125 39.890625 \n",
"Q 22.75 39.890625 18.8125 39.015625 \n",
"Q 14.890625 38.140625 10.796875 36.28125 \n",
"z\n",
"\" id=\"DejaVuSans-53\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_6\">\n",
" <!-- epoch -->\n",
" <g transform=\"translate(123.025 171.376563)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 56.203125 29.59375 \n",
"L 56.203125 25.203125 \n",
"L 14.890625 25.203125 \n",
"Q 15.484375 15.921875 20.484375 11.0625 \n",
"Q 25.484375 6.203125 34.421875 6.203125 \n",
"Q 39.59375 6.203125 44.453125 7.46875 \n",
"Q 49.3125 8.734375 54.109375 11.28125 \n",
"L 54.109375 2.78125 \n",
"Q 49.265625 0.734375 44.1875 -0.34375 \n",
"Q 39.109375 -1.421875 33.890625 -1.421875 \n",
"Q 20.796875 -1.421875 13.15625 6.1875 \n",
"Q 5.515625 13.8125 5.515625 26.8125 \n",
"Q 5.515625 40.234375 12.765625 48.109375 \n",
"Q 20.015625 56 32.328125 56 \n",
"Q 43.359375 56 49.78125 48.890625 \n",
"Q 56.203125 41.796875 56.203125 29.59375 \n",
"z\n",
"M 47.21875 32.234375 \n",
"Q 47.125 39.59375 43.09375 43.984375 \n",
"Q 39.0625 48.390625 32.421875 48.390625 \n",
"Q 24.90625 48.390625 20.390625 44.140625 \n",
"Q 15.875 39.890625 15.1875 32.171875 \n",
"z\n",
"\" id=\"DejaVuSans-101\"/>\n",
" <path d=\"M 18.109375 8.203125 \n",
"L 18.109375 -20.796875 \n",
"L 9.078125 -20.796875 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.390625 \n",
"Q 20.953125 51.265625 25.265625 53.625 \n",
"Q 29.59375 56 35.59375 56 \n",
"Q 45.5625 56 51.78125 48.09375 \n",
"Q 58.015625 40.1875 58.015625 27.296875 \n",
"Q 58.015625 14.40625 51.78125 6.484375 \n",
"Q 45.5625 -1.421875 35.59375 -1.421875 \n",
"Q 29.59375 -1.421875 25.265625 0.953125 \n",
"Q 20.953125 3.328125 18.109375 8.203125 \n",
"z\n",
"M 48.6875 27.296875 \n",
"Q 48.6875 37.203125 44.609375 42.84375 \n",
"Q 40.53125 48.484375 33.40625 48.484375 \n",
"Q 26.265625 48.484375 22.1875 42.84375 \n",
"Q 18.109375 37.203125 18.109375 27.296875 \n",
"Q 18.109375 17.390625 22.1875 11.75 \n",
"Q 26.265625 6.109375 33.40625 6.109375 \n",
"Q 40.53125 6.109375 44.609375 11.75 \n",
"Q 48.6875 17.390625 48.6875 27.296875 \n",
"z\n",
"\" id=\"DejaVuSans-112\"/>\n",
" <path d=\"M 30.609375 48.390625 \n",
"Q 23.390625 48.390625 19.1875 42.75 \n",
"Q 14.984375 37.109375 14.984375 27.296875 \n",
"Q 14.984375 17.484375 19.15625 11.84375 \n",
"Q 23.34375 6.203125 30.609375 6.203125 \n",
"Q 37.796875 6.203125 41.984375 11.859375 \n",
"Q 46.1875 17.53125 46.1875 27.296875 \n",
"Q 46.1875 37.015625 41.984375 42.703125 \n",
"Q 37.796875 48.390625 30.609375 48.390625 \n",
"z\n",
"M 30.609375 56 \n",
"Q 42.328125 56 49.015625 48.375 \n",
"Q 55.71875 40.765625 55.71875 27.296875 \n",
"Q 55.71875 13.875 49.015625 6.21875 \n",
"Q 42.328125 -1.421875 30.609375 -1.421875 \n",
"Q 18.84375 -1.421875 12.171875 6.21875 \n",
"Q 5.515625 13.875 5.515625 27.296875 \n",
"Q 5.515625 40.765625 12.171875 48.375 \n",
"Q 18.84375 56 30.609375 56 \n",
"z\n",
"\" id=\"DejaVuSans-111\"/>\n",
" <path d=\"M 48.78125 52.59375 \n",
"L 48.78125 44.1875 \n",
"Q 44.96875 46.296875 41.140625 47.34375 \n",
"Q 37.3125 48.390625 33.40625 48.390625 \n",
"Q 24.65625 48.390625 19.8125 42.84375 \n",
"Q 14.984375 37.3125 14.984375 27.296875 \n",
"Q 14.984375 17.28125 19.8125 11.734375 \n",
"Q 24.65625 6.203125 33.40625 6.203125 \n",
"Q 37.3125 6.203125 41.140625 7.25 \n",
"Q 44.96875 8.296875 48.78125 10.40625 \n",
"L 48.78125 2.09375 \n",
"Q 45.015625 0.34375 40.984375 -0.53125 \n",
"Q 36.96875 -1.421875 32.421875 -1.421875 \n",
"Q 20.0625 -1.421875 12.78125 6.34375 \n",
"Q 5.515625 14.109375 5.515625 27.296875 \n",
"Q 5.515625 40.671875 12.859375 48.328125 \n",
"Q 20.21875 56 33.015625 56 \n",
"Q 37.15625 56 41.109375 55.140625 \n",
"Q 45.0625 54.296875 48.78125 52.59375 \n",
"z\n",
"\" id=\"DejaVuSans-99\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 75.984375 \n",
"L 18.109375 75.984375 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-104\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"61.523438\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-111\"/>\n",
" <use x=\"186.181641\" xlink:href=\"#DejaVuSans-99\"/>\n",
" <use x=\"241.162109\" xlink:href=\"#DejaVuSans-104\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"matplotlib.axis_2\">\n",
" <g id=\"ytick_1\">\n",
" <g id=\"line2d_11\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 40.603125 106.809466 \n",
"L 235.903125 106.809466 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_12\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L -3.5 0 \n",
"\" id=\"mf2514da92e\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mf2514da92e\" y=\"106.809466\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_7\">\n",
" <!-- 5 -->\n",
" <g transform=\"translate(27.240625 110.608685)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_2\">\n",
" <g id=\"line2d_13\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 40.603125 68.704938 \n",
"L 235.903125 68.704938 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_14\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mf2514da92e\" y=\"68.704938\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_8\">\n",
" <!-- 10 -->\n",
" <g transform=\"translate(20.878125 72.504157)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_3\">\n",
" <g id=\"line2d_15\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 40.603125 30.60041 \n",
"L 235.903125 30.60041 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_16\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mf2514da92e\" y=\"30.60041\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_9\">\n",
" <!-- 15 -->\n",
" <g transform=\"translate(20.878125 34.399629)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_10\">\n",
" <!-- perplexity -->\n",
" <g transform=\"translate(14.798437 100.276562)rotate(-90)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 41.109375 46.296875 \n",
"Q 39.59375 47.171875 37.8125 47.578125 \n",
"Q 36.03125 48 33.890625 48 \n",
"Q 26.265625 48 22.1875 43.046875 \n",
"Q 18.109375 38.09375 18.109375 28.8125 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 20.953125 51.171875 25.484375 53.578125 \n",
"Q 30.03125 56 36.53125 56 \n",
"Q 37.453125 56 38.578125 55.875 \n",
"Q 39.703125 55.765625 41.0625 55.515625 \n",
"z\n",
"\" id=\"DejaVuSans-114\"/>\n",
" <path d=\"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"\" id=\"DejaVuSans-108\"/>\n",
" <path d=\"M 54.890625 54.6875 \n",
"L 35.109375 28.078125 \n",
"L 55.90625 0 \n",
"L 45.3125 0 \n",
"L 29.390625 21.484375 \n",
"L 13.484375 0 \n",
"L 2.875 0 \n",
"L 24.125 28.609375 \n",
"L 4.6875 54.6875 \n",
"L 15.28125 54.6875 \n",
"L 29.78125 35.203125 \n",
"L 44.28125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-120\"/>\n",
" <path d=\"M 9.421875 54.6875 \n",
"L 18.40625 54.6875 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 64.59375 \n",
"L 9.421875 64.59375 \n",
"z\n",
"\" id=\"DejaVuSans-105\"/>\n",
" <path d=\"M 18.3125 70.21875 \n",
"L 18.3125 54.6875 \n",
"L 36.8125 54.6875 \n",
"L 36.8125 47.703125 \n",
"L 18.3125 47.703125 \n",
"L 18.3125 18.015625 \n",
"Q 18.3125 11.328125 20.140625 9.421875 \n",
"Q 21.96875 7.515625 27.59375 7.515625 \n",
"L 36.8125 7.515625 \n",
"L 36.8125 0 \n",
"L 27.59375 0 \n",
"Q 17.1875 0 13.234375 3.875 \n",
"Q 9.28125 7.765625 9.28125 18.015625 \n",
"L 9.28125 47.703125 \n",
"L 2.6875 47.703125 \n",
"L 2.6875 54.6875 \n",
"L 9.28125 54.6875 \n",
"L 9.28125 70.21875 \n",
"z\n",
"\" id=\"DejaVuSans-116\"/>\n",
" <path d=\"M 32.171875 -5.078125 \n",
"Q 28.375 -14.84375 24.75 -17.8125 \n",
"Q 21.140625 -20.796875 15.09375 -20.796875 \n",
"L 7.90625 -20.796875 \n",
"L 7.90625 -13.28125 \n",
"L 13.1875 -13.28125 \n",
"Q 16.890625 -13.28125 18.9375 -11.515625 \n",
"Q 21 -9.765625 23.484375 -3.21875 \n",
"L 25.09375 0.875 \n",
"L 2.984375 54.6875 \n",
"L 12.5 54.6875 \n",
"L 29.59375 11.921875 \n",
"L 46.6875 54.6875 \n",
"L 56.203125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-121\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"63.476562\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"166.113281\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"229.589844\" xlink:href=\"#DejaVuSans-108\"/>\n",
" <use x=\"257.373047\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"317.146484\" xlink:href=\"#DejaVuSans-120\"/>\n",
" <use x=\"376.326172\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"404.109375\" xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"443.318359\" xlink:href=\"#DejaVuSans-121\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"line2d_17\">\n",
" <path clip-path=\"url(#p749d77dbd2)\" d=\"M 40.603125 13.377273 \n",
"L 44.588839 26.354528 \n",
"L 48.574554 48.166007 \n",
"L 52.560268 56.911441 \n",
"L 56.545982 62.032301 \n",
"L 60.531696 66.354482 \n",
"L 64.517411 69.327975 \n",
"L 68.503125 71.519553 \n",
"L 72.488839 74.322576 \n",
"L 76.474554 75.672704 \n",
"L 80.460268 78.868995 \n",
"L 84.445982 80.714641 \n",
"L 88.431696 83.341134 \n",
"L 92.417411 84.316519 \n",
"L 96.403125 87.46335 \n",
"L 100.388839 89.006657 \n",
"L 104.374554 90.892413 \n",
"L 108.360268 92.83286 \n",
"L 112.345982 94.839887 \n",
"L 116.331696 96.899528 \n",
"L 120.317411 99.034346 \n",
"L 124.303125 100.995349 \n",
"L 128.288839 102.923954 \n",
"L 132.274554 105.438016 \n",
"L 136.260268 107.804159 \n",
"L 140.245982 110.696112 \n",
"L 144.231696 112.754489 \n",
"L 148.217411 115.534038 \n",
"L 152.203125 119.172796 \n",
"L 156.188839 121.543894 \n",
"L 160.174554 124.056074 \n",
"L 164.160268 127.614388 \n",
"L 168.145982 129.632694 \n",
"L 172.131696 131.499248 \n",
"L 176.117411 133.218346 \n",
"L 180.103125 133.979919 \n",
"L 184.088839 134.998673 \n",
"L 188.074554 135.360282 \n",
"L 192.060268 135.946165 \n",
"L 196.045982 136.140483 \n",
"L 200.031696 136.334071 \n",
"L 204.017411 136.597794 \n",
"L 208.003125 136.41588 \n",
"L 211.988839 135.977693 \n",
"L 215.974554 136.597432 \n",
"L 219.960268 136.518557 \n",
"L 223.945982 136.810965 \n",
"L 227.931696 136.727204 \n",
"L 231.917411 136.922727 \n",
"L 235.903125 136.856274 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"patch_3\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 40.603125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_4\">\n",
" <path d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_5\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_6\">\n",
" <path d=\"M 40.603125 7.2 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"legend_1\">\n",
" <g id=\"patch_7\">\n",
" <path d=\"M 173.628125 29.878125 \n",
"L 228.903125 29.878125 \n",
"Q 230.903125 29.878125 230.903125 27.878125 \n",
"L 230.903125 14.2 \n",
"Q 230.903125 12.2 228.903125 12.2 \n",
"L 173.628125 12.2 \n",
"Q 171.628125 12.2 171.628125 14.2 \n",
"L 171.628125 27.878125 \n",
"Q 171.628125 29.878125 173.628125 29.878125 \n",
"z\n",
"\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n",
" </g>\n",
" <g id=\"line2d_18\">\n",
" <path d=\"M 175.628125 20.298437 \n",
"L 195.628125 20.298437 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"line2d_19\"/>\n",
" <g id=\"text_11\">\n",
" <!-- train -->\n",
" <g transform=\"translate(203.628125 23.798437)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 34.28125 27.484375 \n",
"Q 23.390625 27.484375 19.1875 25 \n",
"Q 14.984375 22.515625 14.984375 16.5 \n",
"Q 14.984375 11.71875 18.140625 8.90625 \n",
"Q 21.296875 6.109375 26.703125 6.109375 \n",
"Q 34.1875 6.109375 38.703125 11.40625 \n",
"Q 43.21875 16.703125 43.21875 25.484375 \n",
"L 43.21875 27.484375 \n",
"z\n",
"M 52.203125 31.203125 \n",
"L 52.203125 0 \n",
"L 43.21875 0 \n",
"L 43.21875 8.296875 \n",
"Q 40.140625 3.328125 35.546875 0.953125 \n",
"Q 30.953125 -1.421875 24.3125 -1.421875 \n",
"Q 15.921875 -1.421875 10.953125 3.296875 \n",
"Q 6 8.015625 6 15.921875 \n",
"Q 6 25.140625 12.171875 29.828125 \n",
"Q 18.359375 34.515625 30.609375 34.515625 \n",
"L 43.21875 34.515625 \n",
"L 43.21875 35.40625 \n",
"Q 43.21875 41.609375 39.140625 45 \n",
"Q 35.0625 48.390625 27.6875 48.390625 \n",
"Q 23 48.390625 18.546875 47.265625 \n",
"Q 14.109375 46.140625 10.015625 43.890625 \n",
"L 10.015625 52.203125 \n",
"Q 14.9375 54.109375 19.578125 55.046875 \n",
"Q 24.21875 56 28.609375 56 \n",
"Q 40.484375 56 46.34375 49.84375 \n",
"Q 52.203125 43.703125 52.203125 31.203125 \n",
"z\n",
"\" id=\"DejaVuSans-97\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-110\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"80.322266\" xlink:href=\"#DejaVuSans-97\"/>\n",
" <use x=\"141.601562\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"169.384766\" xlink:href=\"#DejaVuSans-110\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"p749d77dbd2\">\n",
" <rect height=\"135.9\" width=\"195.3\" x=\"40.603125\" y=\"7.2\"/>\n",
" </clipPath>\n",
" </defs>\n",
"</svg>\n"
],
"text/plain": [
"<Figure size 252x180 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"vocab_size, num_hiddens, device = len(vocab), 256, d2l.try_gpu()\n",
"num_epochs, lr = 500, 1\n",
"model = d2l.RNNModelScratch(len(vocab), num_hiddens, device, get_params,\n",
" init_gru_state, gru)\n",
"d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)"
]
},
{
"cell_type": "markdown",
"id": "99e6c8d5-da91-49e6-927c-4b012fe6cf2c",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"简洁实现"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "22312f7f-e43d-42a4-82ec-b66adf677210",
"metadata": {
"origin_pos": 21,
"tab": [
"pytorch"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"perplexity 1.0, 302131.8 tokens/sec on cuda:0\n",
"time travelleryou can show black is white by argument said filby\n",
"travelleryou can show black is white by argument said filby\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
"<svg height=\"180.65625pt\" version=\"1.1\" viewBox=\"0 0 252.646875 180.65625\" width=\"252.646875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
" <metadata>\n",
" <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
" <cc:Work>\n",
" <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
" <dc:date>2022-01-17T01:37:24.482861</dc:date>\n",
" <dc:format>image/svg+xml</dc:format>\n",
" <dc:creator>\n",
" <cc:Agent>\n",
" <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n",
" </cc:Agent>\n",
" </dc:creator>\n",
" </cc:Work>\n",
" </rdf:RDF>\n",
" </metadata>\n",
" <defs>\n",
" <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
" </defs>\n",
" <g id=\"figure_1\">\n",
" <g id=\"patch_1\">\n",
" <path d=\"M 0 180.65625 \n",
"L 252.646875 180.65625 \n",
"L 252.646875 0 \n",
"L 0 0 \n",
"z\n",
"\" style=\"fill:none;\"/>\n",
" </g>\n",
" <g id=\"axes_1\">\n",
" <g id=\"patch_2\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"L 40.603125 7.2 \n",
"z\n",
"\" style=\"fill:#ffffff;\"/>\n",
" </g>\n",
" <g id=\"matplotlib.axis_1\">\n",
" <g id=\"xtick_1\">\n",
" <g id=\"line2d_1\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 76.474554 143.1 \n",
"L 76.474554 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_2\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L 0 3.5 \n",
"\" id=\"me6e1587dff\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"76.474554\" xlink:href=\"#me6e1587dff\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_1\">\n",
" <!-- 100 -->\n",
" <g transform=\"translate(66.930804 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 12.40625 8.296875 \n",
"L 28.515625 8.296875 \n",
"L 28.515625 63.921875 \n",
"L 10.984375 60.40625 \n",
"L 10.984375 69.390625 \n",
"L 28.421875 72.90625 \n",
"L 38.28125 72.90625 \n",
"L 38.28125 8.296875 \n",
"L 54.390625 8.296875 \n",
"L 54.390625 0 \n",
"L 12.40625 0 \n",
"z\n",
"\" id=\"DejaVuSans-49\"/>\n",
" <path d=\"M 31.78125 66.40625 \n",
"Q 24.171875 66.40625 20.328125 58.90625 \n",
"Q 16.5 51.421875 16.5 36.375 \n",
"Q 16.5 21.390625 20.328125 13.890625 \n",
"Q 24.171875 6.390625 31.78125 6.390625 \n",
"Q 39.453125 6.390625 43.28125 13.890625 \n",
"Q 47.125 21.390625 47.125 36.375 \n",
"Q 47.125 51.421875 43.28125 58.90625 \n",
"Q 39.453125 66.40625 31.78125 66.40625 \n",
"z\n",
"M 31.78125 74.21875 \n",
"Q 44.046875 74.21875 50.515625 64.515625 \n",
"Q 56.984375 54.828125 56.984375 36.375 \n",
"Q 56.984375 17.96875 50.515625 8.265625 \n",
"Q 44.046875 -1.421875 31.78125 -1.421875 \n",
"Q 19.53125 -1.421875 13.0625 8.265625 \n",
"Q 6.59375 17.96875 6.59375 36.375 \n",
"Q 6.59375 54.828125 13.0625 64.515625 \n",
"Q 19.53125 74.21875 31.78125 74.21875 \n",
"z\n",
"\" id=\"DejaVuSans-48\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_2\">\n",
" <g id=\"line2d_3\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 116.331696 143.1 \n",
"L 116.331696 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_4\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"116.331696\" xlink:href=\"#me6e1587dff\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_2\">\n",
" <!-- 200 -->\n",
" <g transform=\"translate(106.787946 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 19.1875 8.296875 \n",
"L 53.609375 8.296875 \n",
"L 53.609375 0 \n",
"L 7.328125 0 \n",
"L 7.328125 8.296875 \n",
"Q 12.9375 14.109375 22.625 23.890625 \n",
"Q 32.328125 33.6875 34.8125 36.53125 \n",
"Q 39.546875 41.84375 41.421875 45.53125 \n",
"Q 43.3125 49.21875 43.3125 52.78125 \n",
"Q 43.3125 58.59375 39.234375 62.25 \n",
"Q 35.15625 65.921875 28.609375 65.921875 \n",
"Q 23.96875 65.921875 18.8125 64.3125 \n",
"Q 13.671875 62.703125 7.8125 59.421875 \n",
"L 7.8125 69.390625 \n",
"Q 13.765625 71.78125 18.9375 73 \n",
"Q 24.125 74.21875 28.421875 74.21875 \n",
"Q 39.75 74.21875 46.484375 68.546875 \n",
"Q 53.21875 62.890625 53.21875 53.421875 \n",
"Q 53.21875 48.921875 51.53125 44.890625 \n",
"Q 49.859375 40.875 45.40625 35.40625 \n",
"Q 44.1875 33.984375 37.640625 27.21875 \n",
"Q 31.109375 20.453125 19.1875 8.296875 \n",
"z\n",
"\" id=\"DejaVuSans-50\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-50\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_3\">\n",
" <g id=\"line2d_5\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 156.188839 143.1 \n",
"L 156.188839 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_6\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"156.188839\" xlink:href=\"#me6e1587dff\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_3\">\n",
" <!-- 300 -->\n",
" <g transform=\"translate(146.645089 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 40.578125 39.3125 \n",
"Q 47.65625 37.796875 51.625 33 \n",
"Q 55.609375 28.21875 55.609375 21.1875 \n",
"Q 55.609375 10.40625 48.1875 4.484375 \n",
"Q 40.765625 -1.421875 27.09375 -1.421875 \n",
"Q 22.515625 -1.421875 17.65625 -0.515625 \n",
"Q 12.796875 0.390625 7.625 2.203125 \n",
"L 7.625 11.71875 \n",
"Q 11.71875 9.328125 16.59375 8.109375 \n",
"Q 21.484375 6.890625 26.8125 6.890625 \n",
"Q 36.078125 6.890625 40.9375 10.546875 \n",
"Q 45.796875 14.203125 45.796875 21.1875 \n",
"Q 45.796875 27.640625 41.28125 31.265625 \n",
"Q 36.765625 34.90625 28.71875 34.90625 \n",
"L 20.21875 34.90625 \n",
"L 20.21875 43.015625 \n",
"L 29.109375 43.015625 \n",
"Q 36.375 43.015625 40.234375 45.921875 \n",
"Q 44.09375 48.828125 44.09375 54.296875 \n",
"Q 44.09375 59.90625 40.109375 62.90625 \n",
"Q 36.140625 65.921875 28.71875 65.921875 \n",
"Q 24.65625 65.921875 20.015625 65.03125 \n",
"Q 15.375 64.15625 9.8125 62.3125 \n",
"L 9.8125 71.09375 \n",
"Q 15.4375 72.65625 20.34375 73.4375 \n",
"Q 25.25 74.21875 29.59375 74.21875 \n",
"Q 40.828125 74.21875 47.359375 69.109375 \n",
"Q 53.90625 64.015625 53.90625 55.328125 \n",
"Q 53.90625 49.265625 50.4375 45.09375 \n",
"Q 46.96875 40.921875 40.578125 39.3125 \n",
"z\n",
"\" id=\"DejaVuSans-51\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-51\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_4\">\n",
" <g id=\"line2d_7\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 196.045982 143.1 \n",
"L 196.045982 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_8\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"196.045982\" xlink:href=\"#me6e1587dff\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_4\">\n",
" <!-- 400 -->\n",
" <g transform=\"translate(186.502232 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 37.796875 64.3125 \n",
"L 12.890625 25.390625 \n",
"L 37.796875 25.390625 \n",
"z\n",
"M 35.203125 72.90625 \n",
"L 47.609375 72.90625 \n",
"L 47.609375 25.390625 \n",
"L 58.015625 25.390625 \n",
"L 58.015625 17.1875 \n",
"L 47.609375 17.1875 \n",
"L 47.609375 0 \n",
"L 37.796875 0 \n",
"L 37.796875 17.1875 \n",
"L 4.890625 17.1875 \n",
"L 4.890625 26.703125 \n",
"z\n",
"\" id=\"DejaVuSans-52\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-52\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_5\">\n",
" <g id=\"line2d_9\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_10\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"235.903125\" xlink:href=\"#me6e1587dff\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_5\">\n",
" <!-- 500 -->\n",
" <g transform=\"translate(226.359375 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 10.796875 72.90625 \n",
"L 49.515625 72.90625 \n",
"L 49.515625 64.59375 \n",
"L 19.828125 64.59375 \n",
"L 19.828125 46.734375 \n",
"Q 21.96875 47.46875 24.109375 47.828125 \n",
"Q 26.265625 48.1875 28.421875 48.1875 \n",
"Q 40.625 48.1875 47.75 41.5 \n",
"Q 54.890625 34.8125 54.890625 23.390625 \n",
"Q 54.890625 11.625 47.5625 5.09375 \n",
"Q 40.234375 -1.421875 26.90625 -1.421875 \n",
"Q 22.3125 -1.421875 17.546875 -0.640625 \n",
"Q 12.796875 0.140625 7.71875 1.703125 \n",
"L 7.71875 11.625 \n",
"Q 12.109375 9.234375 16.796875 8.0625 \n",
"Q 21.484375 6.890625 26.703125 6.890625 \n",
"Q 35.15625 6.890625 40.078125 11.328125 \n",
"Q 45.015625 15.765625 45.015625 23.390625 \n",
"Q 45.015625 31 40.078125 35.4375 \n",
"Q 35.15625 39.890625 26.703125 39.890625 \n",
"Q 22.75 39.890625 18.8125 39.015625 \n",
"Q 14.890625 38.140625 10.796875 36.28125 \n",
"z\n",
"\" id=\"DejaVuSans-53\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_6\">\n",
" <!-- epoch -->\n",
" <g transform=\"translate(123.025 171.376563)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 56.203125 29.59375 \n",
"L 56.203125 25.203125 \n",
"L 14.890625 25.203125 \n",
"Q 15.484375 15.921875 20.484375 11.0625 \n",
"Q 25.484375 6.203125 34.421875 6.203125 \n",
"Q 39.59375 6.203125 44.453125 7.46875 \n",
"Q 49.3125 8.734375 54.109375 11.28125 \n",
"L 54.109375 2.78125 \n",
"Q 49.265625 0.734375 44.1875 -0.34375 \n",
"Q 39.109375 -1.421875 33.890625 -1.421875 \n",
"Q 20.796875 -1.421875 13.15625 6.1875 \n",
"Q 5.515625 13.8125 5.515625 26.8125 \n",
"Q 5.515625 40.234375 12.765625 48.109375 \n",
"Q 20.015625 56 32.328125 56 \n",
"Q 43.359375 56 49.78125 48.890625 \n",
"Q 56.203125 41.796875 56.203125 29.59375 \n",
"z\n",
"M 47.21875 32.234375 \n",
"Q 47.125 39.59375 43.09375 43.984375 \n",
"Q 39.0625 48.390625 32.421875 48.390625 \n",
"Q 24.90625 48.390625 20.390625 44.140625 \n",
"Q 15.875 39.890625 15.1875 32.171875 \n",
"z\n",
"\" id=\"DejaVuSans-101\"/>\n",
" <path d=\"M 18.109375 8.203125 \n",
"L 18.109375 -20.796875 \n",
"L 9.078125 -20.796875 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.390625 \n",
"Q 20.953125 51.265625 25.265625 53.625 \n",
"Q 29.59375 56 35.59375 56 \n",
"Q 45.5625 56 51.78125 48.09375 \n",
"Q 58.015625 40.1875 58.015625 27.296875 \n",
"Q 58.015625 14.40625 51.78125 6.484375 \n",
"Q 45.5625 -1.421875 35.59375 -1.421875 \n",
"Q 29.59375 -1.421875 25.265625 0.953125 \n",
"Q 20.953125 3.328125 18.109375 8.203125 \n",
"z\n",
"M 48.6875 27.296875 \n",
"Q 48.6875 37.203125 44.609375 42.84375 \n",
"Q 40.53125 48.484375 33.40625 48.484375 \n",
"Q 26.265625 48.484375 22.1875 42.84375 \n",
"Q 18.109375 37.203125 18.109375 27.296875 \n",
"Q 18.109375 17.390625 22.1875 11.75 \n",
"Q 26.265625 6.109375 33.40625 6.109375 \n",
"Q 40.53125 6.109375 44.609375 11.75 \n",
"Q 48.6875 17.390625 48.6875 27.296875 \n",
"z\n",
"\" id=\"DejaVuSans-112\"/>\n",
" <path d=\"M 30.609375 48.390625 \n",
"Q 23.390625 48.390625 19.1875 42.75 \n",
"Q 14.984375 37.109375 14.984375 27.296875 \n",
"Q 14.984375 17.484375 19.15625 11.84375 \n",
"Q 23.34375 6.203125 30.609375 6.203125 \n",
"Q 37.796875 6.203125 41.984375 11.859375 \n",
"Q 46.1875 17.53125 46.1875 27.296875 \n",
"Q 46.1875 37.015625 41.984375 42.703125 \n",
"Q 37.796875 48.390625 30.609375 48.390625 \n",
"z\n",
"M 30.609375 56 \n",
"Q 42.328125 56 49.015625 48.375 \n",
"Q 55.71875 40.765625 55.71875 27.296875 \n",
"Q 55.71875 13.875 49.015625 6.21875 \n",
"Q 42.328125 -1.421875 30.609375 -1.421875 \n",
"Q 18.84375 -1.421875 12.171875 6.21875 \n",
"Q 5.515625 13.875 5.515625 27.296875 \n",
"Q 5.515625 40.765625 12.171875 48.375 \n",
"Q 18.84375 56 30.609375 56 \n",
"z\n",
"\" id=\"DejaVuSans-111\"/>\n",
" <path d=\"M 48.78125 52.59375 \n",
"L 48.78125 44.1875 \n",
"Q 44.96875 46.296875 41.140625 47.34375 \n",
"Q 37.3125 48.390625 33.40625 48.390625 \n",
"Q 24.65625 48.390625 19.8125 42.84375 \n",
"Q 14.984375 37.3125 14.984375 27.296875 \n",
"Q 14.984375 17.28125 19.8125 11.734375 \n",
"Q 24.65625 6.203125 33.40625 6.203125 \n",
"Q 37.3125 6.203125 41.140625 7.25 \n",
"Q 44.96875 8.296875 48.78125 10.40625 \n",
"L 48.78125 2.09375 \n",
"Q 45.015625 0.34375 40.984375 -0.53125 \n",
"Q 36.96875 -1.421875 32.421875 -1.421875 \n",
"Q 20.0625 -1.421875 12.78125 6.34375 \n",
"Q 5.515625 14.109375 5.515625 27.296875 \n",
"Q 5.515625 40.671875 12.859375 48.328125 \n",
"Q 20.21875 56 33.015625 56 \n",
"Q 37.15625 56 41.109375 55.140625 \n",
"Q 45.0625 54.296875 48.78125 52.59375 \n",
"z\n",
"\" id=\"DejaVuSans-99\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 75.984375 \n",
"L 18.109375 75.984375 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-104\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"61.523438\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-111\"/>\n",
" <use x=\"186.181641\" xlink:href=\"#DejaVuSans-99\"/>\n",
" <use x=\"241.162109\" xlink:href=\"#DejaVuSans-104\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"matplotlib.axis_2\">\n",
" <g id=\"ytick_1\">\n",
" <g id=\"line2d_11\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 40.603125 103.412059 \n",
"L 235.903125 103.412059 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_12\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L -3.5 0 \n",
"\" id=\"mb29689cda9\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mb29689cda9\" y=\"103.412059\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_7\">\n",
" <!-- 5 -->\n",
" <g transform=\"translate(27.240625 107.211278)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_2\">\n",
" <g id=\"line2d_13\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 40.603125 61.147526 \n",
"L 235.903125 61.147526 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_14\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mb29689cda9\" y=\"61.147526\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_8\">\n",
" <!-- 10 -->\n",
" <g transform=\"translate(20.878125 64.946745)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_3\">\n",
" <g id=\"line2d_15\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 40.603125 18.882993 \n",
"L 235.903125 18.882993 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_16\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mb29689cda9\" y=\"18.882993\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_9\">\n",
" <!-- 15 -->\n",
" <g transform=\"translate(20.878125 22.682211)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_10\">\n",
" <!-- perplexity -->\n",
" <g transform=\"translate(14.798437 100.276562)rotate(-90)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 41.109375 46.296875 \n",
"Q 39.59375 47.171875 37.8125 47.578125 \n",
"Q 36.03125 48 33.890625 48 \n",
"Q 26.265625 48 22.1875 43.046875 \n",
"Q 18.109375 38.09375 18.109375 28.8125 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 20.953125 51.171875 25.484375 53.578125 \n",
"Q 30.03125 56 36.53125 56 \n",
"Q 37.453125 56 38.578125 55.875 \n",
"Q 39.703125 55.765625 41.0625 55.515625 \n",
"z\n",
"\" id=\"DejaVuSans-114\"/>\n",
" <path d=\"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"\" id=\"DejaVuSans-108\"/>\n",
" <path d=\"M 54.890625 54.6875 \n",
"L 35.109375 28.078125 \n",
"L 55.90625 0 \n",
"L 45.3125 0 \n",
"L 29.390625 21.484375 \n",
"L 13.484375 0 \n",
"L 2.875 0 \n",
"L 24.125 28.609375 \n",
"L 4.6875 54.6875 \n",
"L 15.28125 54.6875 \n",
"L 29.78125 35.203125 \n",
"L 44.28125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-120\"/>\n",
" <path d=\"M 9.421875 54.6875 \n",
"L 18.40625 54.6875 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 64.59375 \n",
"L 9.421875 64.59375 \n",
"z\n",
"\" id=\"DejaVuSans-105\"/>\n",
" <path d=\"M 18.3125 70.21875 \n",
"L 18.3125 54.6875 \n",
"L 36.8125 54.6875 \n",
"L 36.8125 47.703125 \n",
"L 18.3125 47.703125 \n",
"L 18.3125 18.015625 \n",
"Q 18.3125 11.328125 20.140625 9.421875 \n",
"Q 21.96875 7.515625 27.59375 7.515625 \n",
"L 36.8125 7.515625 \n",
"L 36.8125 0 \n",
"L 27.59375 0 \n",
"Q 17.1875 0 13.234375 3.875 \n",
"Q 9.28125 7.765625 9.28125 18.015625 \n",
"L 9.28125 47.703125 \n",
"L 2.6875 47.703125 \n",
"L 2.6875 54.6875 \n",
"L 9.28125 54.6875 \n",
"L 9.28125 70.21875 \n",
"z\n",
"\" id=\"DejaVuSans-116\"/>\n",
" <path d=\"M 32.171875 -5.078125 \n",
"Q 28.375 -14.84375 24.75 -17.8125 \n",
"Q 21.140625 -20.796875 15.09375 -20.796875 \n",
"L 7.90625 -20.796875 \n",
"L 7.90625 -13.28125 \n",
"L 13.1875 -13.28125 \n",
"Q 16.890625 -13.28125 18.9375 -11.515625 \n",
"Q 21 -9.765625 23.484375 -3.21875 \n",
"L 25.09375 0.875 \n",
"L 2.984375 54.6875 \n",
"L 12.5 54.6875 \n",
"L 29.59375 11.921875 \n",
"L 46.6875 54.6875 \n",
"L 56.203125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-121\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"63.476562\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"166.113281\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"229.589844\" xlink:href=\"#DejaVuSans-108\"/>\n",
" <use x=\"257.373047\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"317.146484\" xlink:href=\"#DejaVuSans-120\"/>\n",
" <use x=\"376.326172\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"404.109375\" xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"443.318359\" xlink:href=\"#DejaVuSans-121\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"line2d_17\">\n",
" <path clip-path=\"url(#p253ffa8baa)\" d=\"M 40.603125 13.377273 \n",
"L 44.588839 41.395097 \n",
"L 48.574554 54.515807 \n",
"L 52.560268 60.509004 \n",
"L 56.545982 65.206893 \n",
"L 60.531696 68.830937 \n",
"L 64.517411 71.615286 \n",
"L 68.503125 74.920623 \n",
"L 72.488839 77.927893 \n",
"L 76.474554 80.54603 \n",
"L 80.460268 83.203348 \n",
"L 84.445982 86.238904 \n",
"L 88.431696 89.045605 \n",
"L 92.417411 91.813943 \n",
"L 96.403125 94.335824 \n",
"L 100.388839 98.290505 \n",
"L 104.374554 102.025608 \n",
"L 108.360268 105.205487 \n",
"L 112.345982 109.56569 \n",
"L 116.331696 112.953346 \n",
"L 120.317411 118.001286 \n",
"L 124.303125 122.282694 \n",
"L 128.288839 125.080503 \n",
"L 132.274554 127.69059 \n",
"L 136.260268 131.717473 \n",
"L 140.245982 133.037557 \n",
"L 144.231696 134.519143 \n",
"L 148.217411 135.474633 \n",
"L 152.203125 135.696711 \n",
"L 156.188839 136.162096 \n",
"L 160.174554 136.297359 \n",
"L 164.160268 135.947779 \n",
"L 168.145982 136.474779 \n",
"L 172.131696 136.574136 \n",
"L 176.117411 136.688263 \n",
"L 180.103125 136.712353 \n",
"L 184.088839 136.632455 \n",
"L 188.074554 136.793627 \n",
"L 192.060268 136.825918 \n",
"L 196.045982 136.649913 \n",
"L 200.031696 136.899169 \n",
"L 204.017411 136.77376 \n",
"L 208.003125 136.598921 \n",
"L 211.988839 136.753388 \n",
"L 215.974554 136.844129 \n",
"L 219.960268 136.824159 \n",
"L 223.945982 136.869613 \n",
"L 227.931696 136.884024 \n",
"L 231.917411 136.922727 \n",
"L 235.903125 136.859541 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"patch_3\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 40.603125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_4\">\n",
" <path d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_5\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_6\">\n",
" <path d=\"M 40.603125 7.2 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"legend_1\">\n",
" <g id=\"patch_7\">\n",
" <path d=\"M 173.628125 29.878125 \n",
"L 228.903125 29.878125 \n",
"Q 230.903125 29.878125 230.903125 27.878125 \n",
"L 230.903125 14.2 \n",
"Q 230.903125 12.2 228.903125 12.2 \n",
"L 173.628125 12.2 \n",
"Q 171.628125 12.2 171.628125 14.2 \n",
"L 171.628125 27.878125 \n",
"Q 171.628125 29.878125 173.628125 29.878125 \n",
"z\n",
"\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n",
" </g>\n",
" <g id=\"line2d_18\">\n",
" <path d=\"M 175.628125 20.298437 \n",
"L 195.628125 20.298437 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"line2d_19\"/>\n",
" <g id=\"text_11\">\n",
" <!-- train -->\n",
" <g transform=\"translate(203.628125 23.798437)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 34.28125 27.484375 \n",
"Q 23.390625 27.484375 19.1875 25 \n",
"Q 14.984375 22.515625 14.984375 16.5 \n",
"Q 14.984375 11.71875 18.140625 8.90625 \n",
"Q 21.296875 6.109375 26.703125 6.109375 \n",
"Q 34.1875 6.109375 38.703125 11.40625 \n",
"Q 43.21875 16.703125 43.21875 25.484375 \n",
"L 43.21875 27.484375 \n",
"z\n",
"M 52.203125 31.203125 \n",
"L 52.203125 0 \n",
"L 43.21875 0 \n",
"L 43.21875 8.296875 \n",
"Q 40.140625 3.328125 35.546875 0.953125 \n",
"Q 30.953125 -1.421875 24.3125 -1.421875 \n",
"Q 15.921875 -1.421875 10.953125 3.296875 \n",
"Q 6 8.015625 6 15.921875 \n",
"Q 6 25.140625 12.171875 29.828125 \n",
"Q 18.359375 34.515625 30.609375 34.515625 \n",
"L 43.21875 34.515625 \n",
"L 43.21875 35.40625 \n",
"Q 43.21875 41.609375 39.140625 45 \n",
"Q 35.0625 48.390625 27.6875 48.390625 \n",
"Q 23 48.390625 18.546875 47.265625 \n",
"Q 14.109375 46.140625 10.015625 43.890625 \n",
"L 10.015625 52.203125 \n",
"Q 14.9375 54.109375 19.578125 55.046875 \n",
"Q 24.21875 56 28.609375 56 \n",
"Q 40.484375 56 46.34375 49.84375 \n",
"Q 52.203125 43.703125 52.203125 31.203125 \n",
"z\n",
"\" id=\"DejaVuSans-97\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-110\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"80.322266\" xlink:href=\"#DejaVuSans-97\"/>\n",
" <use x=\"141.601562\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"169.384766\" xlink:href=\"#DejaVuSans-110\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"p253ffa8baa\">\n",
" <rect height=\"135.9\" width=\"195.3\" x=\"40.603125\" y=\"7.2\"/>\n",
" </clipPath>\n",
" </defs>\n",
"</svg>\n"
],
"text/plain": [
"<Figure size 252x180 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"num_inputs = vocab_size\n",
"gru_layer = nn.GRU(num_inputs, num_hiddens)\n",
"model = d2l.RNNModel(gru_layer, len(vocab))\n",
"model = model.to(device)\n",
"d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)"
]
},
{
"cell_type": "markdown",
"id": "c0c85839-2eb3-4e89-bf10-63197ec67988",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"## 深度循环神经网络\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "bf1b6cd6-b5f7-4f09-bc2e-c03d9e614411",
"metadata": {
"origin_pos": 2,
"tab": [
"pytorch"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading ../data/timemachine.txt from http://d2l-data.s3-accelerate.amazonaws.com/timemachine.txt...\n"
]
}
],
"source": [
"import torch\n",
"from torch import nn\n",
"from d2l import torch as d2l\n",
"\n",
"batch_size, num_steps = 32, 35\n",
"train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)"
]
},
{
"cell_type": "markdown",
"id": "827b8d71-9105-4103-8b86-b6cd6c2724cf",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"通过`num_layers`的值来设定隐藏层数"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "33fd898e-b4ed-4632-b7bf-43a8585a4715",
"metadata": {
"origin_pos": 5,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"vocab_size, num_hiddens, num_layers = len(vocab), 256, 2\n",
"num_inputs = vocab_size\n",
"device = d2l.try_gpu()\n",
"# 通过num_layers的值来设定隐藏层数\n",
"lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers)\n",
"model = d2l.RNNModel(lstm_layer, len(vocab))\n",
"model = model.to(device)"
]
},
{
"cell_type": "markdown",
"id": "0bae32e2-c90a-4793-8e0a-8a5d78985745",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"训练"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "ff5e04c1-9bde-4764-b568-c558e74772a3",
"metadata": {
"origin_pos": 7,
"tab": [
"pytorch"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"perplexity 1.0, 199074.9 tokens/sec on cuda:0\n",
"time traveller for so it will be convenient to speak of himwas e\n",
"travelleryou can show black is white by argument said filby\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
"<svg height=\"180.65625pt\" version=\"1.1\" viewBox=\"0 0 252.646875 180.65625\" width=\"252.646875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
" <metadata>\n",
" <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
" <cc:Work>\n",
" <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
" <dc:date>2022-01-17T01:18:12.617793</dc:date>\n",
" <dc:format>image/svg+xml</dc:format>\n",
" <dc:creator>\n",
" <cc:Agent>\n",
" <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n",
" </cc:Agent>\n",
" </dc:creator>\n",
" </cc:Work>\n",
" </rdf:RDF>\n",
" </metadata>\n",
" <defs>\n",
" <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
" </defs>\n",
" <g id=\"figure_1\">\n",
" <g id=\"patch_1\">\n",
" <path d=\"M 0 180.65625 \n",
"L 252.646875 180.65625 \n",
"L 252.646875 0 \n",
"L 0 0 \n",
"z\n",
"\" style=\"fill:none;\"/>\n",
" </g>\n",
" <g id=\"axes_1\">\n",
" <g id=\"patch_2\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"L 40.603125 7.2 \n",
"z\n",
"\" style=\"fill:#ffffff;\"/>\n",
" </g>\n",
" <g id=\"matplotlib.axis_1\">\n",
" <g id=\"xtick_1\">\n",
" <g id=\"line2d_1\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 76.474554 143.1 \n",
"L 76.474554 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_2\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L 0 3.5 \n",
"\" id=\"m985b7486c3\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"76.474554\" xlink:href=\"#m985b7486c3\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_1\">\n",
" <!-- 100 -->\n",
" <g transform=\"translate(66.930804 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 12.40625 8.296875 \n",
"L 28.515625 8.296875 \n",
"L 28.515625 63.921875 \n",
"L 10.984375 60.40625 \n",
"L 10.984375 69.390625 \n",
"L 28.421875 72.90625 \n",
"L 38.28125 72.90625 \n",
"L 38.28125 8.296875 \n",
"L 54.390625 8.296875 \n",
"L 54.390625 0 \n",
"L 12.40625 0 \n",
"z\n",
"\" id=\"DejaVuSans-49\"/>\n",
" <path d=\"M 31.78125 66.40625 \n",
"Q 24.171875 66.40625 20.328125 58.90625 \n",
"Q 16.5 51.421875 16.5 36.375 \n",
"Q 16.5 21.390625 20.328125 13.890625 \n",
"Q 24.171875 6.390625 31.78125 6.390625 \n",
"Q 39.453125 6.390625 43.28125 13.890625 \n",
"Q 47.125 21.390625 47.125 36.375 \n",
"Q 47.125 51.421875 43.28125 58.90625 \n",
"Q 39.453125 66.40625 31.78125 66.40625 \n",
"z\n",
"M 31.78125 74.21875 \n",
"Q 44.046875 74.21875 50.515625 64.515625 \n",
"Q 56.984375 54.828125 56.984375 36.375 \n",
"Q 56.984375 17.96875 50.515625 8.265625 \n",
"Q 44.046875 -1.421875 31.78125 -1.421875 \n",
"Q 19.53125 -1.421875 13.0625 8.265625 \n",
"Q 6.59375 17.96875 6.59375 36.375 \n",
"Q 6.59375 54.828125 13.0625 64.515625 \n",
"Q 19.53125 74.21875 31.78125 74.21875 \n",
"z\n",
"\" id=\"DejaVuSans-48\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_2\">\n",
" <g id=\"line2d_3\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 116.331696 143.1 \n",
"L 116.331696 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_4\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"116.331696\" xlink:href=\"#m985b7486c3\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_2\">\n",
" <!-- 200 -->\n",
" <g transform=\"translate(106.787946 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 19.1875 8.296875 \n",
"L 53.609375 8.296875 \n",
"L 53.609375 0 \n",
"L 7.328125 0 \n",
"L 7.328125 8.296875 \n",
"Q 12.9375 14.109375 22.625 23.890625 \n",
"Q 32.328125 33.6875 34.8125 36.53125 \n",
"Q 39.546875 41.84375 41.421875 45.53125 \n",
"Q 43.3125 49.21875 43.3125 52.78125 \n",
"Q 43.3125 58.59375 39.234375 62.25 \n",
"Q 35.15625 65.921875 28.609375 65.921875 \n",
"Q 23.96875 65.921875 18.8125 64.3125 \n",
"Q 13.671875 62.703125 7.8125 59.421875 \n",
"L 7.8125 69.390625 \n",
"Q 13.765625 71.78125 18.9375 73 \n",
"Q 24.125 74.21875 28.421875 74.21875 \n",
"Q 39.75 74.21875 46.484375 68.546875 \n",
"Q 53.21875 62.890625 53.21875 53.421875 \n",
"Q 53.21875 48.921875 51.53125 44.890625 \n",
"Q 49.859375 40.875 45.40625 35.40625 \n",
"Q 44.1875 33.984375 37.640625 27.21875 \n",
"Q 31.109375 20.453125 19.1875 8.296875 \n",
"z\n",
"\" id=\"DejaVuSans-50\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-50\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_3\">\n",
" <g id=\"line2d_5\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 156.188839 143.1 \n",
"L 156.188839 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_6\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"156.188839\" xlink:href=\"#m985b7486c3\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_3\">\n",
" <!-- 300 -->\n",
" <g transform=\"translate(146.645089 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 40.578125 39.3125 \n",
"Q 47.65625 37.796875 51.625 33 \n",
"Q 55.609375 28.21875 55.609375 21.1875 \n",
"Q 55.609375 10.40625 48.1875 4.484375 \n",
"Q 40.765625 -1.421875 27.09375 -1.421875 \n",
"Q 22.515625 -1.421875 17.65625 -0.515625 \n",
"Q 12.796875 0.390625 7.625 2.203125 \n",
"L 7.625 11.71875 \n",
"Q 11.71875 9.328125 16.59375 8.109375 \n",
"Q 21.484375 6.890625 26.8125 6.890625 \n",
"Q 36.078125 6.890625 40.9375 10.546875 \n",
"Q 45.796875 14.203125 45.796875 21.1875 \n",
"Q 45.796875 27.640625 41.28125 31.265625 \n",
"Q 36.765625 34.90625 28.71875 34.90625 \n",
"L 20.21875 34.90625 \n",
"L 20.21875 43.015625 \n",
"L 29.109375 43.015625 \n",
"Q 36.375 43.015625 40.234375 45.921875 \n",
"Q 44.09375 48.828125 44.09375 54.296875 \n",
"Q 44.09375 59.90625 40.109375 62.90625 \n",
"Q 36.140625 65.921875 28.71875 65.921875 \n",
"Q 24.65625 65.921875 20.015625 65.03125 \n",
"Q 15.375 64.15625 9.8125 62.3125 \n",
"L 9.8125 71.09375 \n",
"Q 15.4375 72.65625 20.34375 73.4375 \n",
"Q 25.25 74.21875 29.59375 74.21875 \n",
"Q 40.828125 74.21875 47.359375 69.109375 \n",
"Q 53.90625 64.015625 53.90625 55.328125 \n",
"Q 53.90625 49.265625 50.4375 45.09375 \n",
"Q 46.96875 40.921875 40.578125 39.3125 \n",
"z\n",
"\" id=\"DejaVuSans-51\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-51\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_4\">\n",
" <g id=\"line2d_7\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 196.045982 143.1 \n",
"L 196.045982 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_8\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"196.045982\" xlink:href=\"#m985b7486c3\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_4\">\n",
" <!-- 400 -->\n",
" <g transform=\"translate(186.502232 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 37.796875 64.3125 \n",
"L 12.890625 25.390625 \n",
"L 37.796875 25.390625 \n",
"z\n",
"M 35.203125 72.90625 \n",
"L 47.609375 72.90625 \n",
"L 47.609375 25.390625 \n",
"L 58.015625 25.390625 \n",
"L 58.015625 17.1875 \n",
"L 47.609375 17.1875 \n",
"L 47.609375 0 \n",
"L 37.796875 0 \n",
"L 37.796875 17.1875 \n",
"L 4.890625 17.1875 \n",
"L 4.890625 26.703125 \n",
"z\n",
"\" id=\"DejaVuSans-52\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-52\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_5\">\n",
" <g id=\"line2d_9\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_10\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"235.903125\" xlink:href=\"#m985b7486c3\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_5\">\n",
" <!-- 500 -->\n",
" <g transform=\"translate(226.359375 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 10.796875 72.90625 \n",
"L 49.515625 72.90625 \n",
"L 49.515625 64.59375 \n",
"L 19.828125 64.59375 \n",
"L 19.828125 46.734375 \n",
"Q 21.96875 47.46875 24.109375 47.828125 \n",
"Q 26.265625 48.1875 28.421875 48.1875 \n",
"Q 40.625 48.1875 47.75 41.5 \n",
"Q 54.890625 34.8125 54.890625 23.390625 \n",
"Q 54.890625 11.625 47.5625 5.09375 \n",
"Q 40.234375 -1.421875 26.90625 -1.421875 \n",
"Q 22.3125 -1.421875 17.546875 -0.640625 \n",
"Q 12.796875 0.140625 7.71875 1.703125 \n",
"L 7.71875 11.625 \n",
"Q 12.109375 9.234375 16.796875 8.0625 \n",
"Q 21.484375 6.890625 26.703125 6.890625 \n",
"Q 35.15625 6.890625 40.078125 11.328125 \n",
"Q 45.015625 15.765625 45.015625 23.390625 \n",
"Q 45.015625 31 40.078125 35.4375 \n",
"Q 35.15625 39.890625 26.703125 39.890625 \n",
"Q 22.75 39.890625 18.8125 39.015625 \n",
"Q 14.890625 38.140625 10.796875 36.28125 \n",
"z\n",
"\" id=\"DejaVuSans-53\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_6\">\n",
" <!-- epoch -->\n",
" <g transform=\"translate(123.025 171.376563)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 56.203125 29.59375 \n",
"L 56.203125 25.203125 \n",
"L 14.890625 25.203125 \n",
"Q 15.484375 15.921875 20.484375 11.0625 \n",
"Q 25.484375 6.203125 34.421875 6.203125 \n",
"Q 39.59375 6.203125 44.453125 7.46875 \n",
"Q 49.3125 8.734375 54.109375 11.28125 \n",
"L 54.109375 2.78125 \n",
"Q 49.265625 0.734375 44.1875 -0.34375 \n",
"Q 39.109375 -1.421875 33.890625 -1.421875 \n",
"Q 20.796875 -1.421875 13.15625 6.1875 \n",
"Q 5.515625 13.8125 5.515625 26.8125 \n",
"Q 5.515625 40.234375 12.765625 48.109375 \n",
"Q 20.015625 56 32.328125 56 \n",
"Q 43.359375 56 49.78125 48.890625 \n",
"Q 56.203125 41.796875 56.203125 29.59375 \n",
"z\n",
"M 47.21875 32.234375 \n",
"Q 47.125 39.59375 43.09375 43.984375 \n",
"Q 39.0625 48.390625 32.421875 48.390625 \n",
"Q 24.90625 48.390625 20.390625 44.140625 \n",
"Q 15.875 39.890625 15.1875 32.171875 \n",
"z\n",
"\" id=\"DejaVuSans-101\"/>\n",
" <path d=\"M 18.109375 8.203125 \n",
"L 18.109375 -20.796875 \n",
"L 9.078125 -20.796875 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.390625 \n",
"Q 20.953125 51.265625 25.265625 53.625 \n",
"Q 29.59375 56 35.59375 56 \n",
"Q 45.5625 56 51.78125 48.09375 \n",
"Q 58.015625 40.1875 58.015625 27.296875 \n",
"Q 58.015625 14.40625 51.78125 6.484375 \n",
"Q 45.5625 -1.421875 35.59375 -1.421875 \n",
"Q 29.59375 -1.421875 25.265625 0.953125 \n",
"Q 20.953125 3.328125 18.109375 8.203125 \n",
"z\n",
"M 48.6875 27.296875 \n",
"Q 48.6875 37.203125 44.609375 42.84375 \n",
"Q 40.53125 48.484375 33.40625 48.484375 \n",
"Q 26.265625 48.484375 22.1875 42.84375 \n",
"Q 18.109375 37.203125 18.109375 27.296875 \n",
"Q 18.109375 17.390625 22.1875 11.75 \n",
"Q 26.265625 6.109375 33.40625 6.109375 \n",
"Q 40.53125 6.109375 44.609375 11.75 \n",
"Q 48.6875 17.390625 48.6875 27.296875 \n",
"z\n",
"\" id=\"DejaVuSans-112\"/>\n",
" <path d=\"M 30.609375 48.390625 \n",
"Q 23.390625 48.390625 19.1875 42.75 \n",
"Q 14.984375 37.109375 14.984375 27.296875 \n",
"Q 14.984375 17.484375 19.15625 11.84375 \n",
"Q 23.34375 6.203125 30.609375 6.203125 \n",
"Q 37.796875 6.203125 41.984375 11.859375 \n",
"Q 46.1875 17.53125 46.1875 27.296875 \n",
"Q 46.1875 37.015625 41.984375 42.703125 \n",
"Q 37.796875 48.390625 30.609375 48.390625 \n",
"z\n",
"M 30.609375 56 \n",
"Q 42.328125 56 49.015625 48.375 \n",
"Q 55.71875 40.765625 55.71875 27.296875 \n",
"Q 55.71875 13.875 49.015625 6.21875 \n",
"Q 42.328125 -1.421875 30.609375 -1.421875 \n",
"Q 18.84375 -1.421875 12.171875 6.21875 \n",
"Q 5.515625 13.875 5.515625 27.296875 \n",
"Q 5.515625 40.765625 12.171875 48.375 \n",
"Q 18.84375 56 30.609375 56 \n",
"z\n",
"\" id=\"DejaVuSans-111\"/>\n",
" <path d=\"M 48.78125 52.59375 \n",
"L 48.78125 44.1875 \n",
"Q 44.96875 46.296875 41.140625 47.34375 \n",
"Q 37.3125 48.390625 33.40625 48.390625 \n",
"Q 24.65625 48.390625 19.8125 42.84375 \n",
"Q 14.984375 37.3125 14.984375 27.296875 \n",
"Q 14.984375 17.28125 19.8125 11.734375 \n",
"Q 24.65625 6.203125 33.40625 6.203125 \n",
"Q 37.3125 6.203125 41.140625 7.25 \n",
"Q 44.96875 8.296875 48.78125 10.40625 \n",
"L 48.78125 2.09375 \n",
"Q 45.015625 0.34375 40.984375 -0.53125 \n",
"Q 36.96875 -1.421875 32.421875 -1.421875 \n",
"Q 20.0625 -1.421875 12.78125 6.34375 \n",
"Q 5.515625 14.109375 5.515625 27.296875 \n",
"Q 5.515625 40.671875 12.859375 48.328125 \n",
"Q 20.21875 56 33.015625 56 \n",
"Q 37.15625 56 41.109375 55.140625 \n",
"Q 45.0625 54.296875 48.78125 52.59375 \n",
"z\n",
"\" id=\"DejaVuSans-99\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 75.984375 \n",
"L 18.109375 75.984375 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-104\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"61.523438\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-111\"/>\n",
" <use x=\"186.181641\" xlink:href=\"#DejaVuSans-99\"/>\n",
" <use x=\"241.162109\" xlink:href=\"#DejaVuSans-104\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"matplotlib.axis_2\">\n",
" <g id=\"ytick_1\">\n",
" <g id=\"line2d_11\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 40.603125 107.216076 \n",
"L 235.903125 107.216076 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_12\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L -3.5 0 \n",
"\" id=\"mcc4269d03b\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mcc4269d03b\" y=\"107.216076\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_7\">\n",
" <!-- 5 -->\n",
" <g transform=\"translate(27.240625 111.015295)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_2\">\n",
" <g id=\"line2d_13\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 40.603125 69.887873 \n",
"L 235.903125 69.887873 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_14\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mcc4269d03b\" y=\"69.887873\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_8\">\n",
" <!-- 10 -->\n",
" <g transform=\"translate(20.878125 73.687091)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_3\">\n",
" <g id=\"line2d_15\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 40.603125 32.559669 \n",
"L 235.903125 32.559669 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_16\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#mcc4269d03b\" y=\"32.559669\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_9\">\n",
" <!-- 15 -->\n",
" <g transform=\"translate(20.878125 36.358888)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_10\">\n",
" <!-- perplexity -->\n",
" <g transform=\"translate(14.798437 100.276562)rotate(-90)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 41.109375 46.296875 \n",
"Q 39.59375 47.171875 37.8125 47.578125 \n",
"Q 36.03125 48 33.890625 48 \n",
"Q 26.265625 48 22.1875 43.046875 \n",
"Q 18.109375 38.09375 18.109375 28.8125 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 20.953125 51.171875 25.484375 53.578125 \n",
"Q 30.03125 56 36.53125 56 \n",
"Q 37.453125 56 38.578125 55.875 \n",
"Q 39.703125 55.765625 41.0625 55.515625 \n",
"z\n",
"\" id=\"DejaVuSans-114\"/>\n",
" <path d=\"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"\" id=\"DejaVuSans-108\"/>\n",
" <path d=\"M 54.890625 54.6875 \n",
"L 35.109375 28.078125 \n",
"L 55.90625 0 \n",
"L 45.3125 0 \n",
"L 29.390625 21.484375 \n",
"L 13.484375 0 \n",
"L 2.875 0 \n",
"L 24.125 28.609375 \n",
"L 4.6875 54.6875 \n",
"L 15.28125 54.6875 \n",
"L 29.78125 35.203125 \n",
"L 44.28125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-120\"/>\n",
" <path d=\"M 9.421875 54.6875 \n",
"L 18.40625 54.6875 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 64.59375 \n",
"L 9.421875 64.59375 \n",
"z\n",
"\" id=\"DejaVuSans-105\"/>\n",
" <path d=\"M 18.3125 70.21875 \n",
"L 18.3125 54.6875 \n",
"L 36.8125 54.6875 \n",
"L 36.8125 47.703125 \n",
"L 18.3125 47.703125 \n",
"L 18.3125 18.015625 \n",
"Q 18.3125 11.328125 20.140625 9.421875 \n",
"Q 21.96875 7.515625 27.59375 7.515625 \n",
"L 36.8125 7.515625 \n",
"L 36.8125 0 \n",
"L 27.59375 0 \n",
"Q 17.1875 0 13.234375 3.875 \n",
"Q 9.28125 7.765625 9.28125 18.015625 \n",
"L 9.28125 47.703125 \n",
"L 2.6875 47.703125 \n",
"L 2.6875 54.6875 \n",
"L 9.28125 54.6875 \n",
"L 9.28125 70.21875 \n",
"z\n",
"\" id=\"DejaVuSans-116\"/>\n",
" <path d=\"M 32.171875 -5.078125 \n",
"Q 28.375 -14.84375 24.75 -17.8125 \n",
"Q 21.140625 -20.796875 15.09375 -20.796875 \n",
"L 7.90625 -20.796875 \n",
"L 7.90625 -13.28125 \n",
"L 13.1875 -13.28125 \n",
"Q 16.890625 -13.28125 18.9375 -11.515625 \n",
"Q 21 -9.765625 23.484375 -3.21875 \n",
"L 25.09375 0.875 \n",
"L 2.984375 54.6875 \n",
"L 12.5 54.6875 \n",
"L 29.59375 11.921875 \n",
"L 46.6875 54.6875 \n",
"L 56.203125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-121\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"63.476562\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"166.113281\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"229.589844\" xlink:href=\"#DejaVuSans-108\"/>\n",
" <use x=\"257.373047\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"317.146484\" xlink:href=\"#DejaVuSans-120\"/>\n",
" <use x=\"376.326172\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"404.109375\" xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"443.318359\" xlink:href=\"#DejaVuSans-121\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"line2d_17\">\n",
" <path clip-path=\"url(#p5769824aa2)\" d=\"M 40.603125 13.377273 \n",
"L 44.588839 14.467329 \n",
"L 48.574554 16.23636 \n",
"L 52.560268 25.637806 \n",
"L 56.545982 33.545714 \n",
"L 60.531696 55.212824 \n",
"L 64.517411 60.747867 \n",
"L 68.503125 64.55042 \n",
"L 72.488839 70.458513 \n",
"L 76.474554 75.588654 \n",
"L 80.460268 81.511973 \n",
"L 84.445982 87.324706 \n",
"L 88.431696 92.69747 \n",
"L 92.417411 97.146683 \n",
"L 96.403125 103.001662 \n",
"L 100.388839 109.04291 \n",
"L 104.374554 112.885383 \n",
"L 108.360268 120.157362 \n",
"L 112.345982 126.174029 \n",
"L 116.331696 131.007651 \n",
"L 120.317411 134.010469 \n",
"L 124.303125 135.628737 \n",
"L 128.288839 136.122122 \n",
"L 132.274554 136.239277 \n",
"L 136.260268 136.571533 \n",
"L 140.245982 136.539839 \n",
"L 144.231696 136.686404 \n",
"L 148.217411 136.770447 \n",
"L 152.203125 136.720735 \n",
"L 156.188839 136.729878 \n",
"L 160.174554 136.829845 \n",
"L 164.160268 136.784129 \n",
"L 168.145982 136.815041 \n",
"L 172.131696 136.78607 \n",
"L 176.117411 136.837441 \n",
"L 180.103125 136.684272 \n",
"L 184.088839 136.768764 \n",
"L 188.074554 136.848249 \n",
"L 192.060268 136.889366 \n",
"L 196.045982 136.879097 \n",
"L 200.031696 136.906272 \n",
"L 204.017411 136.875467 \n",
"L 208.003125 136.864094 \n",
"L 211.988839 136.861813 \n",
"L 215.974554 136.835632 \n",
"L 219.960268 136.869141 \n",
"L 223.945982 136.922727 \n",
"L 227.931696 136.874519 \n",
"L 231.917411 136.892643 \n",
"L 235.903125 136.734211 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"patch_3\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 40.603125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_4\">\n",
" <path d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_5\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_6\">\n",
" <path d=\"M 40.603125 7.2 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"legend_1\">\n",
" <g id=\"patch_7\">\n",
" <path d=\"M 173.628125 29.878125 \n",
"L 228.903125 29.878125 \n",
"Q 230.903125 29.878125 230.903125 27.878125 \n",
"L 230.903125 14.2 \n",
"Q 230.903125 12.2 228.903125 12.2 \n",
"L 173.628125 12.2 \n",
"Q 171.628125 12.2 171.628125 14.2 \n",
"L 171.628125 27.878125 \n",
"Q 171.628125 29.878125 173.628125 29.878125 \n",
"z\n",
"\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n",
" </g>\n",
" <g id=\"line2d_18\">\n",
" <path d=\"M 175.628125 20.298437 \n",
"L 195.628125 20.298437 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"line2d_19\"/>\n",
" <g id=\"text_11\">\n",
" <!-- train -->\n",
" <g transform=\"translate(203.628125 23.798437)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 34.28125 27.484375 \n",
"Q 23.390625 27.484375 19.1875 25 \n",
"Q 14.984375 22.515625 14.984375 16.5 \n",
"Q 14.984375 11.71875 18.140625 8.90625 \n",
"Q 21.296875 6.109375 26.703125 6.109375 \n",
"Q 34.1875 6.109375 38.703125 11.40625 \n",
"Q 43.21875 16.703125 43.21875 25.484375 \n",
"L 43.21875 27.484375 \n",
"z\n",
"M 52.203125 31.203125 \n",
"L 52.203125 0 \n",
"L 43.21875 0 \n",
"L 43.21875 8.296875 \n",
"Q 40.140625 3.328125 35.546875 0.953125 \n",
"Q 30.953125 -1.421875 24.3125 -1.421875 \n",
"Q 15.921875 -1.421875 10.953125 3.296875 \n",
"Q 6 8.015625 6 15.921875 \n",
"Q 6 25.140625 12.171875 29.828125 \n",
"Q 18.359375 34.515625 30.609375 34.515625 \n",
"L 43.21875 34.515625 \n",
"L 43.21875 35.40625 \n",
"Q 43.21875 41.609375 39.140625 45 \n",
"Q 35.0625 48.390625 27.6875 48.390625 \n",
"Q 23 48.390625 18.546875 47.265625 \n",
"Q 14.109375 46.140625 10.015625 43.890625 \n",
"L 10.015625 52.203125 \n",
"Q 14.9375 54.109375 19.578125 55.046875 \n",
"Q 24.21875 56 28.609375 56 \n",
"Q 40.484375 56 46.34375 49.84375 \n",
"Q 52.203125 43.703125 52.203125 31.203125 \n",
"z\n",
"\" id=\"DejaVuSans-97\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-110\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"80.322266\" xlink:href=\"#DejaVuSans-97\"/>\n",
" <use x=\"141.601562\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"169.384766\" xlink:href=\"#DejaVuSans-110\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"p5769824aa2\">\n",
" <rect height=\"135.9\" width=\"195.3\" x=\"40.603125\" y=\"7.2\"/>\n",
" </clipPath>\n",
" </defs>\n",
"</svg>\n"
],
"text/plain": [
"<Figure size 252x180 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"num_epochs, lr = 500, 2\n",
"d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)"
]
},
{
"cell_type": "markdown",
"id": "fdc6d401-d1f3-4426-95f3-1385c1a07653",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"## 双向循环神经网络\n",
"\n",
"双向循环神经网络的错误应用"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "302ad7f5-3dc2-45f9-af35-67ca7b9bc527",
"metadata": {
"origin_pos": 2,
"tab": [
"pytorch"
]
},
"outputs": [],
"source": [
"import torch\n",
"from torch import nn\n",
"from d2l import torch as d2l\n",
"\n",
"# 加载数据\n",
"batch_size, num_steps, device = 32, 35, d2l.try_gpu()\n",
"train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "21450277-6c6b-43f1-8bf6-6cb43af3aba4",
"metadata": {},
"outputs": [],
"source": [
"vocab_size, num_hiddens, num_layers = len(vocab), 256, 2\n",
"num_inputs = vocab_size\n",
"# 通过设置“bidirective=True”来定义双向LSTM模型\n",
"lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers, bidirectional=True)\n",
"model = d2l.RNNModel(lstm_layer, len(vocab))\n",
"model = model.to(device)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "7e4f3c24-4166-4bfa-b04d-125163d748a6",
"metadata": {
"origin_pos": 2,
"slideshow": {
"slide_type": "slide"
},
"tab": [
"pytorch"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"perplexity 1.1, 118001.0 tokens/sec on cuda:0\n",
"time travellerererererererererererererererererererererererererer\n",
"travellerererererererererererererererererererererererererer\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
"<svg height=\"180.65625pt\" version=\"1.1\" viewBox=\"0 0 252.646875 180.65625\" width=\"252.646875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
" <metadata>\n",
" <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
" <cc:Work>\n",
" <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
" <dc:date>2022-01-17T02:15:21.385692</dc:date>\n",
" <dc:format>image/svg+xml</dc:format>\n",
" <dc:creator>\n",
" <cc:Agent>\n",
" <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n",
" </cc:Agent>\n",
" </dc:creator>\n",
" </cc:Work>\n",
" </rdf:RDF>\n",
" </metadata>\n",
" <defs>\n",
" <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
" </defs>\n",
" <g id=\"figure_1\">\n",
" <g id=\"patch_1\">\n",
" <path d=\"M 0 180.65625 \n",
"L 252.646875 180.65625 \n",
"L 252.646875 0 \n",
"L 0 0 \n",
"z\n",
"\" style=\"fill:none;\"/>\n",
" </g>\n",
" <g id=\"axes_1\">\n",
" <g id=\"patch_2\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"L 40.603125 7.2 \n",
"z\n",
"\" style=\"fill:#ffffff;\"/>\n",
" </g>\n",
" <g id=\"matplotlib.axis_1\">\n",
" <g id=\"xtick_1\">\n",
" <g id=\"line2d_1\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 76.474554 143.1 \n",
"L 76.474554 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_2\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L 0 3.5 \n",
"\" id=\"mc19fa28d48\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"76.474554\" xlink:href=\"#mc19fa28d48\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_1\">\n",
" <!-- 100 -->\n",
" <g transform=\"translate(66.930804 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 12.40625 8.296875 \n",
"L 28.515625 8.296875 \n",
"L 28.515625 63.921875 \n",
"L 10.984375 60.40625 \n",
"L 10.984375 69.390625 \n",
"L 28.421875 72.90625 \n",
"L 38.28125 72.90625 \n",
"L 38.28125 8.296875 \n",
"L 54.390625 8.296875 \n",
"L 54.390625 0 \n",
"L 12.40625 0 \n",
"z\n",
"\" id=\"DejaVuSans-49\"/>\n",
" <path d=\"M 31.78125 66.40625 \n",
"Q 24.171875 66.40625 20.328125 58.90625 \n",
"Q 16.5 51.421875 16.5 36.375 \n",
"Q 16.5 21.390625 20.328125 13.890625 \n",
"Q 24.171875 6.390625 31.78125 6.390625 \n",
"Q 39.453125 6.390625 43.28125 13.890625 \n",
"Q 47.125 21.390625 47.125 36.375 \n",
"Q 47.125 51.421875 43.28125 58.90625 \n",
"Q 39.453125 66.40625 31.78125 66.40625 \n",
"z\n",
"M 31.78125 74.21875 \n",
"Q 44.046875 74.21875 50.515625 64.515625 \n",
"Q 56.984375 54.828125 56.984375 36.375 \n",
"Q 56.984375 17.96875 50.515625 8.265625 \n",
"Q 44.046875 -1.421875 31.78125 -1.421875 \n",
"Q 19.53125 -1.421875 13.0625 8.265625 \n",
"Q 6.59375 17.96875 6.59375 36.375 \n",
"Q 6.59375 54.828125 13.0625 64.515625 \n",
"Q 19.53125 74.21875 31.78125 74.21875 \n",
"z\n",
"\" id=\"DejaVuSans-48\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_2\">\n",
" <g id=\"line2d_3\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 116.331696 143.1 \n",
"L 116.331696 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_4\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"116.331696\" xlink:href=\"#mc19fa28d48\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_2\">\n",
" <!-- 200 -->\n",
" <g transform=\"translate(106.787946 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 19.1875 8.296875 \n",
"L 53.609375 8.296875 \n",
"L 53.609375 0 \n",
"L 7.328125 0 \n",
"L 7.328125 8.296875 \n",
"Q 12.9375 14.109375 22.625 23.890625 \n",
"Q 32.328125 33.6875 34.8125 36.53125 \n",
"Q 39.546875 41.84375 41.421875 45.53125 \n",
"Q 43.3125 49.21875 43.3125 52.78125 \n",
"Q 43.3125 58.59375 39.234375 62.25 \n",
"Q 35.15625 65.921875 28.609375 65.921875 \n",
"Q 23.96875 65.921875 18.8125 64.3125 \n",
"Q 13.671875 62.703125 7.8125 59.421875 \n",
"L 7.8125 69.390625 \n",
"Q 13.765625 71.78125 18.9375 73 \n",
"Q 24.125 74.21875 28.421875 74.21875 \n",
"Q 39.75 74.21875 46.484375 68.546875 \n",
"Q 53.21875 62.890625 53.21875 53.421875 \n",
"Q 53.21875 48.921875 51.53125 44.890625 \n",
"Q 49.859375 40.875 45.40625 35.40625 \n",
"Q 44.1875 33.984375 37.640625 27.21875 \n",
"Q 31.109375 20.453125 19.1875 8.296875 \n",
"z\n",
"\" id=\"DejaVuSans-50\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-50\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_3\">\n",
" <g id=\"line2d_5\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 156.188839 143.1 \n",
"L 156.188839 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_6\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"156.188839\" xlink:href=\"#mc19fa28d48\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_3\">\n",
" <!-- 300 -->\n",
" <g transform=\"translate(146.645089 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 40.578125 39.3125 \n",
"Q 47.65625 37.796875 51.625 33 \n",
"Q 55.609375 28.21875 55.609375 21.1875 \n",
"Q 55.609375 10.40625 48.1875 4.484375 \n",
"Q 40.765625 -1.421875 27.09375 -1.421875 \n",
"Q 22.515625 -1.421875 17.65625 -0.515625 \n",
"Q 12.796875 0.390625 7.625 2.203125 \n",
"L 7.625 11.71875 \n",
"Q 11.71875 9.328125 16.59375 8.109375 \n",
"Q 21.484375 6.890625 26.8125 6.890625 \n",
"Q 36.078125 6.890625 40.9375 10.546875 \n",
"Q 45.796875 14.203125 45.796875 21.1875 \n",
"Q 45.796875 27.640625 41.28125 31.265625 \n",
"Q 36.765625 34.90625 28.71875 34.90625 \n",
"L 20.21875 34.90625 \n",
"L 20.21875 43.015625 \n",
"L 29.109375 43.015625 \n",
"Q 36.375 43.015625 40.234375 45.921875 \n",
"Q 44.09375 48.828125 44.09375 54.296875 \n",
"Q 44.09375 59.90625 40.109375 62.90625 \n",
"Q 36.140625 65.921875 28.71875 65.921875 \n",
"Q 24.65625 65.921875 20.015625 65.03125 \n",
"Q 15.375 64.15625 9.8125 62.3125 \n",
"L 9.8125 71.09375 \n",
"Q 15.4375 72.65625 20.34375 73.4375 \n",
"Q 25.25 74.21875 29.59375 74.21875 \n",
"Q 40.828125 74.21875 47.359375 69.109375 \n",
"Q 53.90625 64.015625 53.90625 55.328125 \n",
"Q 53.90625 49.265625 50.4375 45.09375 \n",
"Q 46.96875 40.921875 40.578125 39.3125 \n",
"z\n",
"\" id=\"DejaVuSans-51\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-51\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_4\">\n",
" <g id=\"line2d_7\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 196.045982 143.1 \n",
"L 196.045982 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_8\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"196.045982\" xlink:href=\"#mc19fa28d48\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_4\">\n",
" <!-- 400 -->\n",
" <g transform=\"translate(186.502232 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 37.796875 64.3125 \n",
"L 12.890625 25.390625 \n",
"L 37.796875 25.390625 \n",
"z\n",
"M 35.203125 72.90625 \n",
"L 47.609375 72.90625 \n",
"L 47.609375 25.390625 \n",
"L 58.015625 25.390625 \n",
"L 58.015625 17.1875 \n",
"L 47.609375 17.1875 \n",
"L 47.609375 0 \n",
"L 37.796875 0 \n",
"L 37.796875 17.1875 \n",
"L 4.890625 17.1875 \n",
"L 4.890625 26.703125 \n",
"z\n",
"\" id=\"DejaVuSans-52\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-52\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"xtick_5\">\n",
" <g id=\"line2d_9\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_10\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"235.903125\" xlink:href=\"#mc19fa28d48\" y=\"143.1\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_5\">\n",
" <!-- 500 -->\n",
" <g transform=\"translate(226.359375 157.698438)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 10.796875 72.90625 \n",
"L 49.515625 72.90625 \n",
"L 49.515625 64.59375 \n",
"L 19.828125 64.59375 \n",
"L 19.828125 46.734375 \n",
"Q 21.96875 47.46875 24.109375 47.828125 \n",
"Q 26.265625 48.1875 28.421875 48.1875 \n",
"Q 40.625 48.1875 47.75 41.5 \n",
"Q 54.890625 34.8125 54.890625 23.390625 \n",
"Q 54.890625 11.625 47.5625 5.09375 \n",
"Q 40.234375 -1.421875 26.90625 -1.421875 \n",
"Q 22.3125 -1.421875 17.546875 -0.640625 \n",
"Q 12.796875 0.140625 7.71875 1.703125 \n",
"L 7.71875 11.625 \n",
"Q 12.109375 9.234375 16.796875 8.0625 \n",
"Q 21.484375 6.890625 26.703125 6.890625 \n",
"Q 35.15625 6.890625 40.078125 11.328125 \n",
"Q 45.015625 15.765625 45.015625 23.390625 \n",
"Q 45.015625 31 40.078125 35.4375 \n",
"Q 35.15625 39.890625 26.703125 39.890625 \n",
"Q 22.75 39.890625 18.8125 39.015625 \n",
"Q 14.890625 38.140625 10.796875 36.28125 \n",
"z\n",
"\" id=\"DejaVuSans-53\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_6\">\n",
" <!-- epoch -->\n",
" <g transform=\"translate(123.025 171.376563)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 56.203125 29.59375 \n",
"L 56.203125 25.203125 \n",
"L 14.890625 25.203125 \n",
"Q 15.484375 15.921875 20.484375 11.0625 \n",
"Q 25.484375 6.203125 34.421875 6.203125 \n",
"Q 39.59375 6.203125 44.453125 7.46875 \n",
"Q 49.3125 8.734375 54.109375 11.28125 \n",
"L 54.109375 2.78125 \n",
"Q 49.265625 0.734375 44.1875 -0.34375 \n",
"Q 39.109375 -1.421875 33.890625 -1.421875 \n",
"Q 20.796875 -1.421875 13.15625 6.1875 \n",
"Q 5.515625 13.8125 5.515625 26.8125 \n",
"Q 5.515625 40.234375 12.765625 48.109375 \n",
"Q 20.015625 56 32.328125 56 \n",
"Q 43.359375 56 49.78125 48.890625 \n",
"Q 56.203125 41.796875 56.203125 29.59375 \n",
"z\n",
"M 47.21875 32.234375 \n",
"Q 47.125 39.59375 43.09375 43.984375 \n",
"Q 39.0625 48.390625 32.421875 48.390625 \n",
"Q 24.90625 48.390625 20.390625 44.140625 \n",
"Q 15.875 39.890625 15.1875 32.171875 \n",
"z\n",
"\" id=\"DejaVuSans-101\"/>\n",
" <path d=\"M 18.109375 8.203125 \n",
"L 18.109375 -20.796875 \n",
"L 9.078125 -20.796875 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.390625 \n",
"Q 20.953125 51.265625 25.265625 53.625 \n",
"Q 29.59375 56 35.59375 56 \n",
"Q 45.5625 56 51.78125 48.09375 \n",
"Q 58.015625 40.1875 58.015625 27.296875 \n",
"Q 58.015625 14.40625 51.78125 6.484375 \n",
"Q 45.5625 -1.421875 35.59375 -1.421875 \n",
"Q 29.59375 -1.421875 25.265625 0.953125 \n",
"Q 20.953125 3.328125 18.109375 8.203125 \n",
"z\n",
"M 48.6875 27.296875 \n",
"Q 48.6875 37.203125 44.609375 42.84375 \n",
"Q 40.53125 48.484375 33.40625 48.484375 \n",
"Q 26.265625 48.484375 22.1875 42.84375 \n",
"Q 18.109375 37.203125 18.109375 27.296875 \n",
"Q 18.109375 17.390625 22.1875 11.75 \n",
"Q 26.265625 6.109375 33.40625 6.109375 \n",
"Q 40.53125 6.109375 44.609375 11.75 \n",
"Q 48.6875 17.390625 48.6875 27.296875 \n",
"z\n",
"\" id=\"DejaVuSans-112\"/>\n",
" <path d=\"M 30.609375 48.390625 \n",
"Q 23.390625 48.390625 19.1875 42.75 \n",
"Q 14.984375 37.109375 14.984375 27.296875 \n",
"Q 14.984375 17.484375 19.15625 11.84375 \n",
"Q 23.34375 6.203125 30.609375 6.203125 \n",
"Q 37.796875 6.203125 41.984375 11.859375 \n",
"Q 46.1875 17.53125 46.1875 27.296875 \n",
"Q 46.1875 37.015625 41.984375 42.703125 \n",
"Q 37.796875 48.390625 30.609375 48.390625 \n",
"z\n",
"M 30.609375 56 \n",
"Q 42.328125 56 49.015625 48.375 \n",
"Q 55.71875 40.765625 55.71875 27.296875 \n",
"Q 55.71875 13.875 49.015625 6.21875 \n",
"Q 42.328125 -1.421875 30.609375 -1.421875 \n",
"Q 18.84375 -1.421875 12.171875 6.21875 \n",
"Q 5.515625 13.875 5.515625 27.296875 \n",
"Q 5.515625 40.765625 12.171875 48.375 \n",
"Q 18.84375 56 30.609375 56 \n",
"z\n",
"\" id=\"DejaVuSans-111\"/>\n",
" <path d=\"M 48.78125 52.59375 \n",
"L 48.78125 44.1875 \n",
"Q 44.96875 46.296875 41.140625 47.34375 \n",
"Q 37.3125 48.390625 33.40625 48.390625 \n",
"Q 24.65625 48.390625 19.8125 42.84375 \n",
"Q 14.984375 37.3125 14.984375 27.296875 \n",
"Q 14.984375 17.28125 19.8125 11.734375 \n",
"Q 24.65625 6.203125 33.40625 6.203125 \n",
"Q 37.3125 6.203125 41.140625 7.25 \n",
"Q 44.96875 8.296875 48.78125 10.40625 \n",
"L 48.78125 2.09375 \n",
"Q 45.015625 0.34375 40.984375 -0.53125 \n",
"Q 36.96875 -1.421875 32.421875 -1.421875 \n",
"Q 20.0625 -1.421875 12.78125 6.34375 \n",
"Q 5.515625 14.109375 5.515625 27.296875 \n",
"Q 5.515625 40.671875 12.859375 48.328125 \n",
"Q 20.21875 56 33.015625 56 \n",
"Q 37.15625 56 41.109375 55.140625 \n",
"Q 45.0625 54.296875 48.78125 52.59375 \n",
"z\n",
"\" id=\"DejaVuSans-99\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 75.984375 \n",
"L 18.109375 75.984375 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-104\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"61.523438\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-111\"/>\n",
" <use x=\"186.181641\" xlink:href=\"#DejaVuSans-99\"/>\n",
" <use x=\"241.162109\" xlink:href=\"#DejaVuSans-104\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"matplotlib.axis_2\">\n",
" <g id=\"ytick_1\">\n",
" <g id=\"line2d_11\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 40.603125 107.223819 \n",
"L 235.903125 107.223819 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_12\">\n",
" <defs>\n",
" <path d=\"M 0 0 \n",
"L -3.5 0 \n",
"\" id=\"m9ad9c3d407\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
" </defs>\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m9ad9c3d407\" y=\"107.223819\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_7\">\n",
" <!-- 5 -->\n",
" <g transform=\"translate(27.240625 111.023037)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_2\">\n",
" <g id=\"line2d_13\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 40.603125 69.211302 \n",
"L 235.903125 69.211302 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_14\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m9ad9c3d407\" y=\"69.211302\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_8\">\n",
" <!-- 10 -->\n",
" <g transform=\"translate(20.878125 73.010521)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"ytick_3\">\n",
" <g id=\"line2d_15\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 40.603125 31.198785 \n",
"L 235.903125 31.198785 \n",
"\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"line2d_16\">\n",
" <g>\n",
" <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m9ad9c3d407\" y=\"31.198785\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_9\">\n",
" <!-- 15 -->\n",
" <g transform=\"translate(20.878125 34.998004)scale(0.1 -0.1)\">\n",
" <use xlink:href=\"#DejaVuSans-49\"/>\n",
" <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_10\">\n",
" <!-- perplexity -->\n",
" <g transform=\"translate(14.798437 100.276562)rotate(-90)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 41.109375 46.296875 \n",
"Q 39.59375 47.171875 37.8125 47.578125 \n",
"Q 36.03125 48 33.890625 48 \n",
"Q 26.265625 48 22.1875 43.046875 \n",
"Q 18.109375 38.09375 18.109375 28.8125 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 20.953125 51.171875 25.484375 53.578125 \n",
"Q 30.03125 56 36.53125 56 \n",
"Q 37.453125 56 38.578125 55.875 \n",
"Q 39.703125 55.765625 41.0625 55.515625 \n",
"z\n",
"\" id=\"DejaVuSans-114\"/>\n",
" <path d=\"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"\" id=\"DejaVuSans-108\"/>\n",
" <path d=\"M 54.890625 54.6875 \n",
"L 35.109375 28.078125 \n",
"L 55.90625 0 \n",
"L 45.3125 0 \n",
"L 29.390625 21.484375 \n",
"L 13.484375 0 \n",
"L 2.875 0 \n",
"L 24.125 28.609375 \n",
"L 4.6875 54.6875 \n",
"L 15.28125 54.6875 \n",
"L 29.78125 35.203125 \n",
"L 44.28125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-120\"/>\n",
" <path d=\"M 9.421875 54.6875 \n",
"L 18.40625 54.6875 \n",
"L 18.40625 0 \n",
"L 9.421875 0 \n",
"z\n",
"M 9.421875 75.984375 \n",
"L 18.40625 75.984375 \n",
"L 18.40625 64.59375 \n",
"L 9.421875 64.59375 \n",
"z\n",
"\" id=\"DejaVuSans-105\"/>\n",
" <path d=\"M 18.3125 70.21875 \n",
"L 18.3125 54.6875 \n",
"L 36.8125 54.6875 \n",
"L 36.8125 47.703125 \n",
"L 18.3125 47.703125 \n",
"L 18.3125 18.015625 \n",
"Q 18.3125 11.328125 20.140625 9.421875 \n",
"Q 21.96875 7.515625 27.59375 7.515625 \n",
"L 36.8125 7.515625 \n",
"L 36.8125 0 \n",
"L 27.59375 0 \n",
"Q 17.1875 0 13.234375 3.875 \n",
"Q 9.28125 7.765625 9.28125 18.015625 \n",
"L 9.28125 47.703125 \n",
"L 2.6875 47.703125 \n",
"L 2.6875 54.6875 \n",
"L 9.28125 54.6875 \n",
"L 9.28125 70.21875 \n",
"z\n",
"\" id=\"DejaVuSans-116\"/>\n",
" <path d=\"M 32.171875 -5.078125 \n",
"Q 28.375 -14.84375 24.75 -17.8125 \n",
"Q 21.140625 -20.796875 15.09375 -20.796875 \n",
"L 7.90625 -20.796875 \n",
"L 7.90625 -13.28125 \n",
"L 13.1875 -13.28125 \n",
"Q 16.890625 -13.28125 18.9375 -11.515625 \n",
"Q 21 -9.765625 23.484375 -3.21875 \n",
"L 25.09375 0.875 \n",
"L 2.984375 54.6875 \n",
"L 12.5 54.6875 \n",
"L 29.59375 11.921875 \n",
"L 46.6875 54.6875 \n",
"L 56.203125 54.6875 \n",
"z\n",
"\" id=\"DejaVuSans-121\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"63.476562\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"125\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"166.113281\" xlink:href=\"#DejaVuSans-112\"/>\n",
" <use x=\"229.589844\" xlink:href=\"#DejaVuSans-108\"/>\n",
" <use x=\"257.373047\" xlink:href=\"#DejaVuSans-101\"/>\n",
" <use x=\"317.146484\" xlink:href=\"#DejaVuSans-120\"/>\n",
" <use x=\"376.326172\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"404.109375\" xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"443.318359\" xlink:href=\"#DejaVuSans-121\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"line2d_17\">\n",
" <path clip-path=\"url(#pc61c32422a)\" d=\"M 40.603125 13.377273 \n",
"L 44.588839 15.511336 \n",
"L 48.574554 29.409891 \n",
"L 52.560268 86.50221 \n",
"L 56.545982 119.112089 \n",
"L 60.531696 130.166506 \n",
"L 64.517411 133.503624 \n",
"L 68.503125 134.762295 \n",
"L 72.488839 134.864947 \n",
"L 76.474554 135.541008 \n",
"L 80.460268 135.73973 \n",
"L 84.445982 135.829937 \n",
"L 88.431696 135.908314 \n",
"L 92.417411 136.027752 \n",
"L 96.403125 136.162128 \n",
"L 100.388839 136.07092 \n",
"L 104.374554 136.382247 \n",
"L 108.360268 136.213221 \n",
"L 112.345982 134.95519 \n",
"L 116.331696 136.283675 \n",
"L 120.317411 136.32703 \n",
"L 124.303125 136.276721 \n",
"L 128.288839 136.548008 \n",
"L 132.274554 136.311999 \n",
"L 136.260268 136.482151 \n",
"L 140.245982 136.602949 \n",
"L 144.231696 136.489476 \n",
"L 148.217411 136.550743 \n",
"L 152.203125 136.553096 \n",
"L 156.188839 136.520669 \n",
"L 160.174554 136.693885 \n",
"L 164.160268 136.505213 \n",
"L 168.145982 136.58952 \n",
"L 172.131696 136.591405 \n",
"L 176.117411 136.683866 \n",
"L 180.103125 136.651318 \n",
"L 184.088839 136.674727 \n",
"L 188.074554 136.736379 \n",
"L 192.060268 136.655137 \n",
"L 196.045982 136.731319 \n",
"L 200.031696 136.768907 \n",
"L 204.017411 136.863913 \n",
"L 208.003125 136.785005 \n",
"L 211.988839 136.732671 \n",
"L 215.974554 136.821383 \n",
"L 219.960268 136.722406 \n",
"L 223.945982 136.888126 \n",
"L 227.931696 136.78448 \n",
"L 231.917411 136.779979 \n",
"L 235.903125 136.922727 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"patch_3\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 40.603125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_4\">\n",
" <path d=\"M 235.903125 143.1 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_5\">\n",
" <path d=\"M 40.603125 143.1 \n",
"L 235.903125 143.1 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"patch_6\">\n",
" <path d=\"M 40.603125 7.2 \n",
"L 235.903125 7.2 \n",
"\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
" </g>\n",
" <g id=\"legend_1\">\n",
" <g id=\"patch_7\">\n",
" <path d=\"M 173.628125 29.878125 \n",
"L 228.903125 29.878125 \n",
"Q 230.903125 29.878125 230.903125 27.878125 \n",
"L 230.903125 14.2 \n",
"Q 230.903125 12.2 228.903125 12.2 \n",
"L 173.628125 12.2 \n",
"Q 171.628125 12.2 171.628125 14.2 \n",
"L 171.628125 27.878125 \n",
"Q 171.628125 29.878125 173.628125 29.878125 \n",
"z\n",
"\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n",
" </g>\n",
" <g id=\"line2d_18\">\n",
" <path d=\"M 175.628125 20.298437 \n",
"L 195.628125 20.298437 \n",
"\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
" </g>\n",
" <g id=\"line2d_19\"/>\n",
" <g id=\"text_11\">\n",
" <!-- train -->\n",
" <g transform=\"translate(203.628125 23.798437)scale(0.1 -0.1)\">\n",
" <defs>\n",
" <path d=\"M 34.28125 27.484375 \n",
"Q 23.390625 27.484375 19.1875 25 \n",
"Q 14.984375 22.515625 14.984375 16.5 \n",
"Q 14.984375 11.71875 18.140625 8.90625 \n",
"Q 21.296875 6.109375 26.703125 6.109375 \n",
"Q 34.1875 6.109375 38.703125 11.40625 \n",
"Q 43.21875 16.703125 43.21875 25.484375 \n",
"L 43.21875 27.484375 \n",
"z\n",
"M 52.203125 31.203125 \n",
"L 52.203125 0 \n",
"L 43.21875 0 \n",
"L 43.21875 8.296875 \n",
"Q 40.140625 3.328125 35.546875 0.953125 \n",
"Q 30.953125 -1.421875 24.3125 -1.421875 \n",
"Q 15.921875 -1.421875 10.953125 3.296875 \n",
"Q 6 8.015625 6 15.921875 \n",
"Q 6 25.140625 12.171875 29.828125 \n",
"Q 18.359375 34.515625 30.609375 34.515625 \n",
"L 43.21875 34.515625 \n",
"L 43.21875 35.40625 \n",
"Q 43.21875 41.609375 39.140625 45 \n",
"Q 35.0625 48.390625 27.6875 48.390625 \n",
"Q 23 48.390625 18.546875 47.265625 \n",
"Q 14.109375 46.140625 10.015625 43.890625 \n",
"L 10.015625 52.203125 \n",
"Q 14.9375 54.109375 19.578125 55.046875 \n",
"Q 24.21875 56 28.609375 56 \n",
"Q 40.484375 56 46.34375 49.84375 \n",
"Q 52.203125 43.703125 52.203125 31.203125 \n",
"z\n",
"\" id=\"DejaVuSans-97\"/>\n",
" <path d=\"M 54.890625 33.015625 \n",
"L 54.890625 0 \n",
"L 45.90625 0 \n",
"L 45.90625 32.71875 \n",
"Q 45.90625 40.484375 42.875 44.328125 \n",
"Q 39.84375 48.1875 33.796875 48.1875 \n",
"Q 26.515625 48.1875 22.3125 43.546875 \n",
"Q 18.109375 38.921875 18.109375 30.90625 \n",
"L 18.109375 0 \n",
"L 9.078125 0 \n",
"L 9.078125 54.6875 \n",
"L 18.109375 54.6875 \n",
"L 18.109375 46.1875 \n",
"Q 21.34375 51.125 25.703125 53.5625 \n",
"Q 30.078125 56 35.796875 56 \n",
"Q 45.21875 56 50.046875 50.171875 \n",
"Q 54.890625 44.34375 54.890625 33.015625 \n",
"z\n",
"\" id=\"DejaVuSans-110\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-116\"/>\n",
" <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
" <use x=\"80.322266\" xlink:href=\"#DejaVuSans-97\"/>\n",
" <use x=\"141.601562\" xlink:href=\"#DejaVuSans-105\"/>\n",
" <use x=\"169.384766\" xlink:href=\"#DejaVuSans-110\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"pc61c32422a\">\n",
" <rect height=\"135.9\" width=\"195.3\" x=\"40.603125\" y=\"7.2\"/>\n",
" </clipPath>\n",
" </defs>\n",
"</svg>\n"
],
"text/plain": [
"<Figure size 252x180 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 训练模型\n",
"num_epochs, lr = 500, 1\n",
"d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)\n",
"# 注意:困惑度非常低,但生成的文本质量很低"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}