nn/chapter5-9.ipynb
2026-04-22 15:23:35 +08:00

5313 lines
474 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-04-22T07:03:02.177207285Z",
"start_time": "2026-04-22T07:02:59.204677901Z"
}
},
"source": [
"\n",
"import torch\n",
"import d2l\n",
"import numpy\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F"
],
"outputs": [],
"execution_count": 2
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:02.454043741Z",
"start_time": "2026-04-22T07:03:02.230904947Z"
}
},
"cell_type": "code",
"source": [
"net = nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))\n",
"X = torch.rand(2, 20)\n",
"net(X)"
],
"id": "dcd5590e7795eec1",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 0.0041, -0.3465, -0.2096, 0.2304, -0.1043, 0.0066, 0.1817, 0.0355,\n",
" 0.2685, -0.0461],\n",
" [-0.0932, -0.1621, -0.1244, 0.2398, -0.0759, 0.0680, 0.1511, 0.0224,\n",
" 0.2522, -0.0228]], grad_fn=<AddmmBackward0>)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 3
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:04.497911379Z",
"start_time": "2026-04-22T07:03:03.603349572Z"
}
},
"cell_type": "code",
"source": [
"class MLP(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.hidden=nn.Linear(20,256)\n",
" self.out=nn.Linear(256,10)\n",
" def forward(self,X):\n",
" return self.out(F.relu(self.hidden(X)))\n"
],
"id": "4ae330604b643cb4",
"outputs": [],
"execution_count": 4
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:05.186050578Z",
"start_time": "2026-04-22T07:03:04.689781242Z"
}
},
"cell_type": "code",
"source": [
"net=MLP()\n",
"net(X)"
],
"id": "cca55c6c0c7da12f",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[-0.2165, 0.1394, 0.0867, 0.0692, 0.2914, -0.1427, 0.2218, -0.0533,\n",
" -0.2137, 0.0044],\n",
" [-0.2020, 0.0648, 0.0514, 0.0500, 0.2555, -0.1679, 0.1621, -0.1462,\n",
" -0.2527, 0.0386]], grad_fn=<AddmmBackward0>)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 5
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:05.664056879Z",
"start_time": "2026-04-22T07:03:05.331438994Z"
}
},
"cell_type": "code",
"source": [
"class FixedHiddenMLP(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" # 不计算梯度的随机权重参数。因此其在训练期间保持不变\n",
" self.rand_weight = torch.rand((20, 20), requires_grad=False)\n",
" self.linear = nn.Linear(20, 20)\n",
" def forward(self, X):\n",
" X = self.linear(X)\n",
" # 使用创建的常量参数以及relu和mm函数\n",
" X = F.relu(torch.mm(X, self.rand_weight) + 1)\n",
" # 复用全连接层。这相当于两个全连接层共享参数\n",
" X = self.linear(X)\n",
" # 控制流\n",
" while X.abs().sum() > 1:\n",
" X /= 2\n",
" return X.sum()"
],
"id": "4518d62611d5e749",
"outputs": [],
"execution_count": 6
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:06.104535508Z",
"start_time": "2026-04-22T07:03:05.824555955Z"
}
},
"cell_type": "code",
"source": [
"net = FixedHiddenMLP()\n",
"net(X)"
],
"id": "fae0187ece4ed5c6",
"outputs": [
{
"data": {
"text/plain": [
"tensor(-0.0023, grad_fn=<SumBackward0>)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 7
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:06.273938290Z",
"start_time": "2026-04-22T07:03:06.117091179Z"
}
},
"cell_type": "code",
"source": [
"class NestMLP(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.net = nn.Sequential(nn.Linear(20, 64), nn.ReLU(),\n",
" nn.Linear(64, 32), nn.ReLU())\n",
" self.linear = nn.Linear(32, 16)\n",
" def forward(self, X):\n",
" return self.linear(self.net(X))\n",
" chimera = nn.Sequential(NestMLP(), nn.Linear(16, 20), FixedHiddenMLP())\n",
" chimera(X)"
],
"id": "407ef13a86453aae",
"outputs": [],
"execution_count": 8
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:06.462449517Z",
"start_time": "2026-04-22T07:03:06.323939028Z"
}
},
"cell_type": "code",
"source": [
"net = nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 1))\n",
"X = torch.rand(size=(2, 4))\n",
"net(X)"
],
"id": "9f3526f263c7a249",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[-0.1265],\n",
" [-0.0471]], grad_fn=<AddmmBackward0>)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 9
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:06.843325610Z",
"start_time": "2026-04-22T07:03:06.539581889Z"
}
},
"cell_type": "code",
"source": "print(net[2].state_dict())",
"id": "8c73f8daa02ba28b",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OrderedDict([('weight', tensor([[ 0.0136, -0.1015, 0.1191, 0.2722, 0.3456, -0.0650, -0.0437, -0.2806]])), ('bias', tensor([-0.0945]))])\n"
]
}
],
"execution_count": 10
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:07.189943309Z",
"start_time": "2026-04-22T07:03:06.962295444Z"
}
},
"cell_type": "code",
"source": "net[2].state_dict()",
"id": "b6fee6b64fb96e3c",
"outputs": [
{
"data": {
"text/plain": [
"OrderedDict([('weight',\n",
" tensor([[ 0.0136, -0.1015, 0.1191, 0.2722, 0.3456, -0.0650, -0.0437, -0.2806]])),\n",
" ('bias', tensor([-0.0945]))])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 11
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:07.395792068Z",
"start_time": "2026-04-22T07:03:07.243437434Z"
}
},
"cell_type": "code",
"source": "print(type(net[2].bias))",
"id": "b38e8dc384e038c5",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'torch.nn.parameter.Parameter'>\n"
]
}
],
"execution_count": 12
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:07.629769183Z",
"start_time": "2026-04-22T07:03:07.457413574Z"
}
},
"cell_type": "code",
"source": [
"print(net[2].bias)\n",
"print(net[2].bias.data)\n"
],
"id": "73f12ca3669d9ede",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Parameter containing:\n",
"tensor([-0.0945], requires_grad=True)\n",
"tensor([-0.0945])\n"
]
}
],
"execution_count": 13
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:07.873696310Z",
"start_time": "2026-04-22T07:03:07.679040535Z"
}
},
"cell_type": "code",
"source": "net[2].weight.grad==None",
"id": "db0fe33018c16fac",
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 14
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:07.984798139Z",
"start_time": "2026-04-22T07:03:07.896070141Z"
}
},
"cell_type": "code",
"source": [
"print(*[(name, param.shape) for name, param in net[0].named_parameters()])\n",
"print(*[(name, param.shape) for name, param in net.named_parameters()])"
],
"id": "75847a1c608ee5c7",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"('weight', torch.Size([8, 4])) ('bias', torch.Size([8]))\n",
"('0.weight', torch.Size([8, 4])) ('0.bias', torch.Size([8])) ('2.weight', torch.Size([1, 8])) ('2.bias', torch.Size([1]))\n"
]
}
],
"execution_count": 15
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:08.010084298Z",
"start_time": "2026-04-22T07:03:07.991112964Z"
}
},
"cell_type": "code",
"source": "net.state_dict()['2.bias'].data",
"id": "cc74913e8742da7d",
"outputs": [
{
"data": {
"text/plain": [
"tensor([-0.0945])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 16
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:08.088926956Z",
"start_time": "2026-04-22T07:03:08.042795645Z"
}
},
"cell_type": "code",
"source": [
"def block1():\n",
" return nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 4),nn.ReLU())\n",
"def block2():\n",
" net = nn.Sequential()\n",
" for i in range(4):\n",
" net.add_module(f'block{i}', block1())\n",
" return net"
],
"id": "53c39c5e61fa7bf5",
"outputs": [],
"execution_count": 17
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:08.330228511Z",
"start_time": "2026-04-22T07:03:08.096053767Z"
}
},
"cell_type": "code",
"source": [
"rgnet = nn.Sequential(block2(),nn.Linear(4,1))\n",
"rgnet(X)"
],
"id": "d3ac7759b619aca",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[0.0117],\n",
" [0.0117]], grad_fn=<AddmmBackward0>)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 18
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:08.645186191Z",
"start_time": "2026-04-22T07:03:08.455908607Z"
}
},
"cell_type": "code",
"source": "print(rgnet)",
"id": "8fc60f64b07781e6",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sequential(\n",
" (0): Sequential(\n",
" (block0): Sequential(\n",
" (0): Linear(in_features=4, out_features=8, bias=True)\n",
" (1): ReLU()\n",
" (2): Linear(in_features=8, out_features=4, bias=True)\n",
" (3): ReLU()\n",
" )\n",
" (block1): Sequential(\n",
" (0): Linear(in_features=4, out_features=8, bias=True)\n",
" (1): ReLU()\n",
" (2): Linear(in_features=8, out_features=4, bias=True)\n",
" (3): ReLU()\n",
" )\n",
" (block2): Sequential(\n",
" (0): Linear(in_features=4, out_features=8, bias=True)\n",
" (1): ReLU()\n",
" (2): Linear(in_features=8, out_features=4, bias=True)\n",
" (3): ReLU()\n",
" )\n",
" (block3): Sequential(\n",
" (0): Linear(in_features=4, out_features=8, bias=True)\n",
" (1): ReLU()\n",
" (2): Linear(in_features=8, out_features=4, bias=True)\n",
" (3): ReLU()\n",
" )\n",
" )\n",
" (1): Linear(in_features=4, out_features=1, bias=True)\n",
")\n"
]
}
],
"execution_count": 19
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:08.903696348Z",
"start_time": "2026-04-22T07:03:08.733628048Z"
}
},
"cell_type": "code",
"source": "rgnet[0][1][0].bias.data",
"id": "e590aaafca787b50",
"outputs": [
{
"data": {
"text/plain": [
"tensor([ 0.2396, -0.2293, -0.3365, 0.0070, -0.0166, -0.2328, -0.1627, 0.3407])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 20
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:09.181470689Z",
"start_time": "2026-04-22T07:03:08.920938456Z"
}
},
"cell_type": "code",
"source": [
"def init_normal(m):\n",
" if type(m) == nn.Linear:\n",
" nn.init.normal_(m.weight, mean=0, std=0.01)\n",
" nn.init.zeros_(m.bias)\n",
"net.apply(init_normal)\n",
"net[0].weight.data[0], net[0].bias.data[0]"
],
"id": "925ca33221d0a87e",
"outputs": [
{
"data": {
"text/plain": [
"(tensor([ 0.0166, 0.0092, 0.0013, -0.0031]), tensor(0.))"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 21
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:09.303120289Z",
"start_time": "2026-04-22T07:03:09.184866866Z"
}
},
"cell_type": "code",
"source": [
"def init_xavier(m):\n",
" if type(m) == nn.Linear:\n",
" nn.init.xavier_uniform_(m.weight)\n",
"def init_42(m):\n",
" if type(m) == nn.Linear:\n",
" nn.init.constant_(m.weight, 42)\n",
"\n",
"net[0].apply(init_xavier)\n",
"net[2].apply(init_42)\n",
"print(net[0].weight.data[0])\n",
"print(net[2].weight.data)"
],
"id": "81e2de84a8c4ef32",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tensor([-0.2085, 0.4344, -0.3960, 0.5868])\n",
"tensor([[42., 42., 42., 42., 42., 42., 42., 42.]])\n"
]
}
],
"execution_count": 22
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:09.411878374Z",
"start_time": "2026-04-22T07:03:09.355106030Z"
}
},
"cell_type": "code",
"source": [
"x = torch.arange(4)\n",
"torch.save(x, 'x-file')"
],
"id": "f05bb378bb60ab9e",
"outputs": [],
"execution_count": 23
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:09.509836133Z",
"start_time": "2026-04-22T07:03:09.427360581Z"
}
},
"cell_type": "code",
"source": [
"x2 = torch.load('x-file')\n",
"x2"
],
"id": "a74ecaaac0d826c6",
"outputs": [
{
"data": {
"text/plain": [
"tensor([0, 1, 2, 3])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 24
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:09.542056671Z",
"start_time": "2026-04-22T07:03:09.518568625Z"
}
},
"cell_type": "code",
"source": [
"class MLP(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.hidden = nn.Linear(20, 256)\n",
" self.output = nn.Linear(256, 10)\n",
" def forward(self, x):\n",
" return self.output(F.relu(self.hidden(x)))\n",
"\n",
"net = MLP()\n",
"X = torch.randn(size=(2, 20))\n",
"Y = net(X)"
],
"id": "b42598f0c4a8e801",
"outputs": [],
"execution_count": 25
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:09.603222999Z",
"start_time": "2026-04-22T07:03:09.548610614Z"
}
},
"cell_type": "code",
"source": "torch.save(net.state_dict(), 'mlp.params')",
"id": "aaa22eef549caa6f",
"outputs": [],
"execution_count": 26
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:09.699407155Z",
"start_time": "2026-04-22T07:03:09.607082306Z"
}
},
"cell_type": "code",
"source": [
"clone = MLP()\n",
"clone.load_state_dict(torch.load('mlp.params'))\n",
"clone.eval()"
],
"id": "b92f920229abeeae",
"outputs": [
{
"data": {
"text/plain": [
"MLP(\n",
" (hidden): Linear(in_features=20, out_features=256, bias=True)\n",
" (output): Linear(in_features=256, out_features=10, bias=True)\n",
")"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 27
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:09.854186935Z",
"start_time": "2026-04-22T07:03:09.721875531Z"
}
},
"cell_type": "code",
"source": [
"Y_clone = clone(X)\n",
"Y_clone == Y"
],
"id": "646c9eb6d7cc81c2",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[True, True, True, True, True, True, True, True, True, True],\n",
" [True, True, True, True, True, True, True, True, True, True]])"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 28
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:10.143072800Z",
"start_time": "2026-04-22T07:03:09.938713854Z"
}
},
"cell_type": "code",
"source": [
"def corr2d(X,K):\n",
" h,w=K.shape\n",
" Y=torch.ones((X.shape[0]-h+1,X.shape[1]-w+1))\n",
" for i in range(Y.shape[0]):\n",
" for j in range(Y.shape[1]):\n",
" Y[i,j]=(X[i:i+h,j:j+w]*K).sum()\n",
" return Y\n"
],
"id": "d45f9adfe47fce20",
"outputs": [],
"execution_count": 29
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:10.449191223Z",
"start_time": "2026-04-22T07:03:10.209878470Z"
}
},
"cell_type": "code",
"source": [
"X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])\n",
"K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])\n",
"corr2d(X,K)"
],
"id": "db7279e13647c315",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[19., 25.],\n",
" [37., 43.]])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 30
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:10.723922087Z",
"start_time": "2026-04-22T07:03:10.558883210Z"
}
},
"cell_type": "code",
"source": [
"class Conv2D(nn.Module):\n",
" def __init__(self, kernel_size):\n",
" super().__init__()\n",
" self.weight = nn.Parameter(torch.rand(kernel_size))\n",
" self.bias = nn.Parameter(torch.zeros(1))\n",
" def forward(self, x):\n",
" return corr2d(x, self.weight) + self.bias\n"
],
"id": "d60be1bd12a1f37e",
"outputs": [],
"execution_count": 31
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:11.208027335Z",
"start_time": "2026-04-22T07:03:10.944803814Z"
}
},
"cell_type": "code",
"source": [
"X = torch.ones((6, 8))\n",
"X[:, 2:6] = 0\n",
"X"
],
"id": "5083789b7a728442",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[1., 1., 0., 0., 0., 0., 1., 1.],\n",
" [1., 1., 0., 0., 0., 0., 1., 1.],\n",
" [1., 1., 0., 0., 0., 0., 1., 1.],\n",
" [1., 1., 0., 0., 0., 0., 1., 1.],\n",
" [1., 1., 0., 0., 0., 0., 1., 1.],\n",
" [1., 1., 0., 0., 0., 0., 1., 1.]])"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 32
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:11.547516752Z",
"start_time": "2026-04-22T07:03:11.280664423Z"
}
},
"cell_type": "code",
"source": [
"K = torch.tensor([[1.0, -1.0]])\n",
"Y = corr2d(X, K)\n",
"Y"
],
"id": "ee8d6bedbde886ad",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 0., 1., 0., 0., 0., -1., 0.],\n",
" [ 0., 1., 0., 0., 0., -1., 0.],\n",
" [ 0., 1., 0., 0., 0., -1., 0.],\n",
" [ 0., 1., 0., 0., 0., -1., 0.],\n",
" [ 0., 1., 0., 0., 0., -1., 0.],\n",
" [ 0., 1., 0., 0., 0., -1., 0.]])"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 33
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:11.992663567Z",
"start_time": "2026-04-22T07:03:11.712431704Z"
}
},
"cell_type": "code",
"source": "corr2d(X.t(), K)",
"id": "a8278c3837fa9a1c",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0.]])"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 34
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:12.544730677Z",
"start_time": "2026-04-22T07:03:12.187262859Z"
}
},
"cell_type": "code",
"source": "conv2d = nn.Conv2d(1,1, kernel_size=(1, 2), bias=False)",
"id": "ec61cdb61a8cabff",
"outputs": [],
"execution_count": 35
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:12.918278160Z",
"start_time": "2026-04-22T07:03:12.663915511Z"
}
},
"cell_type": "code",
"source": [
"X = X.reshape((1, 1, 6, 8))\n",
"Y = Y.reshape((1, 1, 6, 7))\n",
"lr = 3e-2"
],
"id": "d2fc19d84c79a10",
"outputs": [],
"execution_count": 36
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:14.229826949Z",
"start_time": "2026-04-22T07:03:12.942822259Z"
}
},
"cell_type": "code",
"source": [
"for i in range(100):\n",
" Y_hat = conv2d(X)\n",
" l = (Y_hat - Y) ** 2\n",
" conv2d.zero_grad()\n",
" l.sum().backward()\n",
" # 迭代卷积核\n",
" conv2d.weight.data[:] -= lr * conv2d.weight.grad\n",
" if (i + 1) % 20 == 0:\n",
" print(f'epoch {i+1}, loss {l.sum():.3f}')"
],
"id": "51fbb2e6398a9bd5",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"epoch 20, loss 0.000\n",
"epoch 40, loss 0.000\n",
"epoch 60, loss 0.000\n",
"epoch 80, loss 0.000\n",
"epoch 100, loss 0.000\n"
]
}
],
"execution_count": 37
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:14.392987505Z",
"start_time": "2026-04-22T07:03:14.281161755Z"
}
},
"cell_type": "code",
"source": "conv2d.weight.data.reshape((1, 2))\n",
"id": "bf53a423f429dfe4",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 1.0000, -1.0000]])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 38
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:14.572225657Z",
"start_time": "2026-04-22T07:03:14.447504117Z"
}
},
"cell_type": "code",
"source": [
"\n",
"# 为了方便起见,我们定义了一个计算卷积层的函数。\n",
"# 此函数初始化卷积层权重,并对输入和输出提高和缩减相应的维数\n",
"def comp_conv2d(conv2d, X):\n",
"# 这里的11表示批量大小和通道数都是1\n",
" X = X.reshape((1, 1) + X.shape)\n",
" Y = conv2d(X)\n",
" # 省略前两个维度:批量大小和通道\n",
" return Y.reshape(Y.shape[2:])\n",
"# 请注意这里每边都填充了1行或1列因此总共添加了2行或2列\n",
"conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1)"
],
"id": "77b61d8c9a2363cc",
"outputs": [],
"execution_count": 39
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:14.842090802Z",
"start_time": "2026-04-22T07:03:14.640382418Z"
}
},
"cell_type": "code",
"source": [
"X = torch.rand(size=(8, 8))\n",
"comp_conv2d(conv2d, X).shape"
],
"id": "beda6ffa67ec2677",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([8, 8])"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 40
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:15.005425705Z",
"start_time": "2026-04-22T07:03:14.845097024Z"
}
},
"cell_type": "code",
"source": [
"conv2d = nn.Conv2d(1, 1, kernel_size=(5, 3), padding=(2, 1))\n",
"comp_conv2d(conv2d, X).shape"
],
"id": "8c51095daea1432d",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([8, 8])"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 41
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:15.154120979Z",
"start_time": "2026-04-22T07:03:15.063863068Z"
}
},
"cell_type": "code",
"source": [
"conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1, stride=2)\n",
"comp_conv2d(conv2d, X).shape"
],
"id": "581bf1b15162cbf6",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([4, 4])"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 42
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:15.290065680Z",
"start_time": "2026-04-22T07:03:15.156986867Z"
}
},
"cell_type": "code",
"source": [
"conv2d = nn.Conv2d(1, 1, kernel_size=(3, 5), padding=(0, 1), stride=(3, 4))\n",
"comp_conv2d(conv2d, X).shape"
],
"id": "6f7a2411247baff0",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([2, 2])"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 43
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:15.447782218Z",
"start_time": "2026-04-22T07:03:15.341665415Z"
}
},
"cell_type": "code",
"source": [
"def corr2d_multi_in(X,K):\n",
" return sum(corr2d(x,k) for x,k in zip(X,K))\n",
"X = torch.tensor([[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]],\n",
"[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]])\n",
"K = torch.tensor([[[0.0, 1.0], [2.0, 3.0]], [[1.0, 2.0], [3.0, 4.0]]])\n",
"corr2d_multi_in(X, K)"
],
"id": "7ac0f17f97b2daa8",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 56., 72.],\n",
" [104., 120.]])"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 44
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:15.631383700Z",
"start_time": "2026-04-22T07:03:15.507675748Z"
}
},
"cell_type": "code",
"source": [
"def corr2d_multi_in_out(X,K) ->torch.Tensor :\n",
" return torch.stack([corr2d_multi_in(X,k) for k in K],0)\n"
],
"id": "d409110d0d6b4b49",
"outputs": [],
"execution_count": 45
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:15.955093562Z",
"start_time": "2026-04-22T07:03:15.716320703Z"
}
},
"cell_type": "code",
"source": [
"K = torch.stack((K, K + 1, K + 2), 0)\n",
"K.shape"
],
"id": "4114cd871a627075",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([3, 2, 2, 2])"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 46
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:16.110185723Z",
"start_time": "2026-04-22T07:03:15.964443180Z"
}
},
"cell_type": "code",
"source": "corr2d_multi_in_out(X, K)",
"id": "ce52f41dc9585f8c",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[ 56., 72.],\n",
" [104., 120.]],\n",
"\n",
" [[ 76., 100.],\n",
" [148., 172.]],\n",
"\n",
" [[ 96., 128.],\n",
" [192., 224.]]])"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 47
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:16.181875274Z",
"start_time": "2026-04-22T07:03:16.125158123Z"
}
},
"cell_type": "code",
"source": [
"def corr2d_multi_in_out_1x1(X, K):\n",
" h_i,h,w=X.shape\n",
" h_o=K.shape[0]\n",
" X=X.reshape((h_i,h*w))\n",
" print(X.shape)\n",
" K=K.reshape((h_o,h_i))\n",
" print(K.shape)\n",
" Y=torch.matmul(K,X)\n",
" return Y.reshape((h_o,h,w))"
],
"id": "362d8c692b3c1d75",
"outputs": [],
"execution_count": 48
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:16.240983284Z",
"start_time": "2026-04-22T07:03:16.187079922Z"
}
},
"cell_type": "code",
"source": [
"X = torch.normal(0, 1, (3, 3, 3))\n",
"K = torch.normal(0, 1, (2, 3, 1, 1))"
],
"id": "28e761f677df8b16",
"outputs": [],
"execution_count": 49
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:16.386442288Z",
"start_time": "2026-04-22T07:03:16.245865317Z"
}
},
"cell_type": "code",
"source": "Y1 = corr2d_multi_in_out_1x1(X, K)",
"id": "8eb276fed751a6b9",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"torch.Size([3, 9])\n",
"torch.Size([2, 3])\n"
]
}
],
"execution_count": 50
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:16.444217309Z",
"start_time": "2026-04-22T07:03:16.422396408Z"
}
},
"cell_type": "code",
"source": [
"Y2 = corr2d_multi_in_out(X, K)\n",
"assert float(torch.abs(Y1 - Y2).sum()) < 1e-6"
],
"id": "be28e27d30f36e2c",
"outputs": [],
"execution_count": 51
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:16.504989589Z",
"start_time": "2026-04-22T07:03:16.449374426Z"
}
},
"cell_type": "code",
"source": [
"def pool2d(X,pool_size,mode='max'):\n",
" p_h,p_w =pool_size\n",
" Y = torch.zeros((X.shape[0]-p_h+1,X.shape[1]-p_w+1))\n",
" for i in range(Y.shape[0]):\n",
" for j in range(Y.shape[1]):\n",
" match mode:\n",
" case 'max':\n",
" Y[i,j]=X[i:i+p_h,j:j+p_w].max()\n",
" case 'avg':\n",
" Y[i,j]=X[i:i+p_h,j:j+p_w].mean()\n",
"\n",
" return Y"
],
"id": "3c3f71349a2e54c0",
"outputs": [],
"execution_count": 52
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:16.635764547Z",
"start_time": "2026-04-22T07:03:16.510663393Z"
}
},
"cell_type": "code",
"source": [
"X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])\n",
"pool2d(X, (2, 2))"
],
"id": "a67207c861cf0cfd",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[4., 5.],\n",
" [7., 8.]])"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 53
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:16.938183687Z",
"start_time": "2026-04-22T07:03:16.693509080Z"
}
},
"cell_type": "code",
"source": "pool2d(X, (2, 2), 'avg')",
"id": "e387b48df3831b85",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[2., 3.],\n",
" [5., 6.]])"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 54
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:17.569350884Z",
"start_time": "2026-04-22T07:03:17.198359992Z"
}
},
"cell_type": "code",
"source": [
"X = torch.arange(16, dtype=torch.float32).reshape((1, 1, 4, 4))\n",
"X"
],
"id": "41b618b3a48522b4",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[[ 0., 1., 2., 3.],\n",
" [ 4., 5., 6., 7.],\n",
" [ 8., 9., 10., 11.],\n",
" [12., 13., 14., 15.]]]])"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 55
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:17.840996860Z",
"start_time": "2026-04-22T07:03:17.734395761Z"
}
},
"cell_type": "code",
"source": [
"pool2d=nn.MaxPool2d(3)\n",
"pool2d(X)"
],
"id": "c77484a8d1267259",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[[10.]]]])"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 56
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:17.967526280Z",
"start_time": "2026-04-22T07:03:17.871240998Z"
}
},
"cell_type": "code",
"source": [
"pool2d = nn.MaxPool2d(3, padding=1, stride=2)\n",
"pool2d(X)"
],
"id": "847a2bacfb6f2bd7",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[[ 5., 7.],\n",
" [13., 15.]]]])"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 57
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:18.057661560Z",
"start_time": "2026-04-22T07:03:17.998953875Z"
}
},
"cell_type": "code",
"source": [
"pool2d = nn.MaxPool2d((2, 3), stride=(2, 3), padding=(0, 1))\n",
"pool2d(X)"
],
"id": "5efad1e0b616fff7",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[[ 5., 7.],\n",
" [13., 15.]]]])"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 58
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:18.211656993Z",
"start_time": "2026-04-22T07:03:18.081025077Z"
}
},
"cell_type": "code",
"source": [
"X = torch.cat((X, X + 1), 1)\n",
"X"
],
"id": "386d4b3eb8069328",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[[ 0., 1., 2., 3.],\n",
" [ 4., 5., 6., 7.],\n",
" [ 8., 9., 10., 11.],\n",
" [12., 13., 14., 15.]],\n",
"\n",
" [[ 1., 2., 3., 4.],\n",
" [ 5., 6., 7., 8.],\n",
" [ 9., 10., 11., 12.],\n",
" [13., 14., 15., 16.]]]])"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 59
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:18.254285311Z",
"start_time": "2026-04-22T07:03:18.221776346Z"
}
},
"cell_type": "code",
"source": [
"pool2d = nn.MaxPool2d(3, padding=1, stride=2)\n",
"pool2d(X)"
],
"id": "ba5f57a8ca2a3b06",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[[ 5., 7.],\n",
" [13., 15.]],\n",
"\n",
" [[ 6., 8.],\n",
" [14., 16.]]]])"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 60
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:18.415322634Z",
"start_time": "2026-04-22T07:03:18.283827059Z"
}
},
"cell_type": "code",
"source": [
"net = nn.Sequential(\n",
" nn.Conv2d(1,6,kernel_size=5,padding=2), #1*1*28*28 -> 1*6*28*28\n",
" nn.Sigmoid(),\n",
" nn.AvgPool2d(kernel_size=2, stride=2), #1*6*28*28 -> 1*6*14*14\n",
" nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(), #1*6*14*14 -> 1*16*10*10\n",
" nn.AvgPool2d(kernel_size=2, stride=2), #1*16*10*10 -> 1*16*5*5\n",
" nn.Flatten(),\n",
" nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),\n",
" nn.Linear(120, 84), nn.Sigmoid(),\n",
" nn.Linear(84, 10)\n",
")\n",
"X = torch.rand(size=(1,1,28,28),dtype=torch.float32)\n",
"for layer in net:\n",
" X=layer(X)\n",
" print(layer.__class__.__name__,'output shape: \\t',X.shape)"
],
"id": "1eabc29f9c838842",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Conv2d output shape: \t torch.Size([1, 6, 28, 28])\n",
"Sigmoid output shape: \t torch.Size([1, 6, 28, 28])\n",
"AvgPool2d output shape: \t torch.Size([1, 6, 14, 14])\n",
"Conv2d output shape: \t torch.Size([1, 16, 10, 10])\n",
"Sigmoid output shape: \t torch.Size([1, 16, 10, 10])\n",
"AvgPool2d output shape: \t torch.Size([1, 16, 5, 5])\n",
"Flatten output shape: \t torch.Size([1, 400])\n",
"Linear output shape: \t torch.Size([1, 120])\n",
"Sigmoid output shape: \t torch.Size([1, 120])\n",
"Linear output shape: \t torch.Size([1, 84])\n",
"Sigmoid output shape: \t torch.Size([1, 84])\n",
"Linear output shape: \t torch.Size([1, 10])\n"
]
}
],
"execution_count": 61
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:20.954626561Z",
"start_time": "2026-04-22T07:03:18.435497060Z"
}
},
"cell_type": "code",
"source": [
"import d2l.torch as d2l\n",
"batch_size = 256\n",
"train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size=batch_size)"
],
"id": "e372f75817ad4a0f",
"outputs": [],
"execution_count": 62
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:21.060902242Z",
"start_time": "2026-04-22T07:03:21.006364318Z"
}
},
"cell_type": "code",
"source": [
"lr, num_epochs = 0.9, 10\n",
"#d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())"
],
"id": "9aaeb948f3353955",
"outputs": [],
"execution_count": 63
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:21.128721611Z",
"start_time": "2026-04-22T07:03:21.065860429Z"
}
},
"cell_type": "code",
"source": [
"class Inception(nn.Module):\n",
" def __init__(self,in_channels,c1,c2,c3,c4,**kwargs):\n",
" super(Inception,self).__init__(**kwargs)\n",
" self.p1_1 = nn.Conv2d(in_channels,c1,kernel_size=1)\n",
" self.p2_1 = nn.Conv2d(in_channels,c2[0],kernel_size=1)\n",
" self.p2_2 = nn.Conv2d(c2[0],c2[1],kernel_size=3,padding=1)\n",
" self.p3_1 = nn.Conv2d(in_channels,c3[0],kernel_size=1)\n",
" self.p3_2 = nn.Conv2d(c3[0],c3[1],kernel_size=5,padding=2)\n",
" self.p4_1 = nn.MaxPool2d(kernel_size=3, stride=1, padding=1)\n",
" self.p4_2 = nn.Conv2d(in_channels, c4, kernel_size=1)\n",
" def forward(self,x):\n",
" p1 = F.relu(self.p1_1(x))\n",
" p2 = F.relu(self.p2_2(F.relu(self.p2_1(x))))\n",
" p3 = F.relu(self.p3_2(F.relu(self.p3_1(x))))\n",
" p4 = F.relu(self.p4_2(self.p4_1(x)))\n",
" return torch.cat((p1,p2,p3,p4),dim=1)"
],
"id": "6d3bb3f70f297dba",
"outputs": [],
"execution_count": 64
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:21.758676619Z",
"start_time": "2026-04-22T07:03:21.134168809Z"
}
},
"cell_type": "code",
"source": [
"b1 = nn.Sequential(nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3),\n",
" nn.ReLU(),\n",
" nn.MaxPool2d(kernel_size=3, stride=2, padding=1))\n",
"b2 = nn.Sequential(nn.Conv2d(64, 64, kernel_size=1),\n",
" nn.ReLU(),\n",
" nn.Conv2d(64, 192, kernel_size=3, padding=1),\n",
" nn.ReLU(),\n",
" nn.MaxPool2d(kernel_size=3, stride=2, padding=1))\n",
"b3 = nn.Sequential(Inception(192, 64, (96, 128), (16, 32), 32),\n",
" Inception(256, 128, (128, 192), (32, 96), 64),\n",
" nn.MaxPool2d(kernel_size=3, stride=2, padding=1))\n",
"b4 = nn.Sequential(Inception(480, 192, (96, 208), (16, 48), 64),\n",
" Inception(512, 160, (112, 224), (24, 64), 64),\n",
" Inception(512, 128, (128, 256), (24, 64), 64),\n",
" Inception(512, 112, (144, 288), (32, 64), 64),\n",
" Inception(528, 256, (160, 320), (32, 128), 128),\n",
" nn.MaxPool2d(kernel_size=3, stride=2, padding=1))\n",
"b5 = nn.Sequential(Inception(832, 256, (160, 320), (32, 128), 128),\n",
" Inception(832, 384, (192, 384), (48, 128), 128),\n",
" nn.AdaptiveAvgPool2d((1,1)),\n",
" nn.Flatten())\n",
"net = nn.Sequential(b1, b2, b3, b4, b5, nn.Linear(1024, 10))\n",
"X = torch.rand(size=(1, 1, 96, 96))\n",
"for layer in net:\n",
" X = layer(X)\n",
" print(layer.__class__.__name__,'output shape:\\t', X.shape)"
],
"id": "6ef7022bcb288d65",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sequential output shape:\t torch.Size([1, 64, 24, 24])\n",
"Sequential output shape:\t torch.Size([1, 192, 12, 12])\n",
"Sequential output shape:\t torch.Size([1, 480, 6, 6])\n",
"Sequential output shape:\t torch.Size([1, 832, 3, 3])\n",
"Sequential output shape:\t torch.Size([1, 1024])\n",
"Linear output shape:\t torch.Size([1, 10])\n"
]
}
],
"execution_count": 65
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:22.718023030Z",
"start_time": "2026-04-22T07:03:21.806456021Z"
}
},
"cell_type": "code",
"source": [
"import torchinfo\n",
"torchinfo.summary(net,(1,1,96,96))"
],
"id": "acc019ce7afa4470",
"outputs": [
{
"data": {
"text/plain": [
"==========================================================================================\n",
"Layer (type:depth-idx) Output Shape Param #\n",
"==========================================================================================\n",
"Sequential [1, 10] --\n",
"├─Sequential: 1-1 [1, 64, 24, 24] --\n",
"│ └─Conv2d: 2-1 [1, 64, 48, 48] 3,200\n",
"│ └─ReLU: 2-2 [1, 64, 48, 48] --\n",
"│ └─MaxPool2d: 2-3 [1, 64, 24, 24] --\n",
"├─Sequential: 1-2 [1, 192, 12, 12] --\n",
"│ └─Conv2d: 2-4 [1, 64, 24, 24] 4,160\n",
"│ └─ReLU: 2-5 [1, 64, 24, 24] --\n",
"│ └─Conv2d: 2-6 [1, 192, 24, 24] 110,784\n",
"│ └─ReLU: 2-7 [1, 192, 24, 24] --\n",
"│ └─MaxPool2d: 2-8 [1, 192, 12, 12] --\n",
"├─Sequential: 1-3 [1, 480, 6, 6] --\n",
"│ └─Inception: 2-9 [1, 256, 12, 12] --\n",
"│ │ └─Conv2d: 3-1 [1, 64, 12, 12] 12,352\n",
"│ │ └─Conv2d: 3-2 [1, 96, 12, 12] 18,528\n",
"│ │ └─Conv2d: 3-3 [1, 128, 12, 12] 110,720\n",
"│ │ └─Conv2d: 3-4 [1, 16, 12, 12] 3,088\n",
"│ │ └─Conv2d: 3-5 [1, 32, 12, 12] 12,832\n",
"│ │ └─MaxPool2d: 3-6 [1, 192, 12, 12] --\n",
"│ │ └─Conv2d: 3-7 [1, 32, 12, 12] 6,176\n",
"│ └─Inception: 2-10 [1, 480, 12, 12] --\n",
"│ │ └─Conv2d: 3-8 [1, 128, 12, 12] 32,896\n",
"│ │ └─Conv2d: 3-9 [1, 128, 12, 12] 32,896\n",
"│ │ └─Conv2d: 3-10 [1, 192, 12, 12] 221,376\n",
"│ │ └─Conv2d: 3-11 [1, 32, 12, 12] 8,224\n",
"│ │ └─Conv2d: 3-12 [1, 96, 12, 12] 76,896\n",
"│ │ └─MaxPool2d: 3-13 [1, 256, 12, 12] --\n",
"│ │ └─Conv2d: 3-14 [1, 64, 12, 12] 16,448\n",
"│ └─MaxPool2d: 2-11 [1, 480, 6, 6] --\n",
"├─Sequential: 1-4 [1, 832, 3, 3] --\n",
"│ └─Inception: 2-12 [1, 512, 6, 6] --\n",
"│ │ └─Conv2d: 3-15 [1, 192, 6, 6] 92,352\n",
"│ │ └─Conv2d: 3-16 [1, 96, 6, 6] 46,176\n",
"│ │ └─Conv2d: 3-17 [1, 208, 6, 6] 179,920\n",
"│ │ └─Conv2d: 3-18 [1, 16, 6, 6] 7,696\n",
"│ │ └─Conv2d: 3-19 [1, 48, 6, 6] 19,248\n",
"│ │ └─MaxPool2d: 3-20 [1, 480, 6, 6] --\n",
"│ │ └─Conv2d: 3-21 [1, 64, 6, 6] 30,784\n",
"│ └─Inception: 2-13 [1, 512, 6, 6] --\n",
"│ │ └─Conv2d: 3-22 [1, 160, 6, 6] 82,080\n",
"│ │ └─Conv2d: 3-23 [1, 112, 6, 6] 57,456\n",
"│ │ └─Conv2d: 3-24 [1, 224, 6, 6] 226,016\n",
"│ │ └─Conv2d: 3-25 [1, 24, 6, 6] 12,312\n",
"│ │ └─Conv2d: 3-26 [1, 64, 6, 6] 38,464\n",
"│ │ └─MaxPool2d: 3-27 [1, 512, 6, 6] --\n",
"│ │ └─Conv2d: 3-28 [1, 64, 6, 6] 32,832\n",
"│ └─Inception: 2-14 [1, 512, 6, 6] --\n",
"│ │ └─Conv2d: 3-29 [1, 128, 6, 6] 65,664\n",
"│ │ └─Conv2d: 3-30 [1, 128, 6, 6] 65,664\n",
"│ │ └─Conv2d: 3-31 [1, 256, 6, 6] 295,168\n",
"│ │ └─Conv2d: 3-32 [1, 24, 6, 6] 12,312\n",
"│ │ └─Conv2d: 3-33 [1, 64, 6, 6] 38,464\n",
"│ │ └─MaxPool2d: 3-34 [1, 512, 6, 6] --\n",
"│ │ └─Conv2d: 3-35 [1, 64, 6, 6] 32,832\n",
"│ └─Inception: 2-15 [1, 528, 6, 6] --\n",
"│ │ └─Conv2d: 3-36 [1, 112, 6, 6] 57,456\n",
"│ │ └─Conv2d: 3-37 [1, 144, 6, 6] 73,872\n",
"│ │ └─Conv2d: 3-38 [1, 288, 6, 6] 373,536\n",
"│ │ └─Conv2d: 3-39 [1, 32, 6, 6] 16,416\n",
"│ │ └─Conv2d: 3-40 [1, 64, 6, 6] 51,264\n",
"│ │ └─MaxPool2d: 3-41 [1, 512, 6, 6] --\n",
"│ │ └─Conv2d: 3-42 [1, 64, 6, 6] 32,832\n",
"│ └─Inception: 2-16 [1, 832, 6, 6] --\n",
"│ │ └─Conv2d: 3-43 [1, 256, 6, 6] 135,424\n",
"│ │ └─Conv2d: 3-44 [1, 160, 6, 6] 84,640\n",
"│ │ └─Conv2d: 3-45 [1, 320, 6, 6] 461,120\n",
"│ │ └─Conv2d: 3-46 [1, 32, 6, 6] 16,928\n",
"│ │ └─Conv2d: 3-47 [1, 128, 6, 6] 102,528\n",
"│ │ └─MaxPool2d: 3-48 [1, 528, 6, 6] --\n",
"│ │ └─Conv2d: 3-49 [1, 128, 6, 6] 67,712\n",
"│ └─MaxPool2d: 2-17 [1, 832, 3, 3] --\n",
"├─Sequential: 1-5 [1, 1024] --\n",
"│ └─Inception: 2-18 [1, 832, 3, 3] --\n",
"│ │ └─Conv2d: 3-50 [1, 256, 3, 3] 213,248\n",
"│ │ └─Conv2d: 3-51 [1, 160, 3, 3] 133,280\n",
"│ │ └─Conv2d: 3-52 [1, 320, 3, 3] 461,120\n",
"│ │ └─Conv2d: 3-53 [1, 32, 3, 3] 26,656\n",
"│ │ └─Conv2d: 3-54 [1, 128, 3, 3] 102,528\n",
"│ │ └─MaxPool2d: 3-55 [1, 832, 3, 3] --\n",
"│ │ └─Conv2d: 3-56 [1, 128, 3, 3] 106,624\n",
"│ └─Inception: 2-19 [1, 1024, 3, 3] --\n",
"│ │ └─Conv2d: 3-57 [1, 384, 3, 3] 319,872\n",
"│ │ └─Conv2d: 3-58 [1, 192, 3, 3] 159,936\n",
"│ │ └─Conv2d: 3-59 [1, 384, 3, 3] 663,936\n",
"│ │ └─Conv2d: 3-60 [1, 48, 3, 3] 39,984\n",
"│ │ └─Conv2d: 3-61 [1, 128, 3, 3] 153,728\n",
"│ │ └─MaxPool2d: 3-62 [1, 832, 3, 3] --\n",
"│ │ └─Conv2d: 3-63 [1, 128, 3, 3] 106,624\n",
"│ └─AdaptiveAvgPool2d: 2-20 [1, 1024, 1, 1] --\n",
"│ └─Flatten: 2-21 [1, 1024] --\n",
"├─Linear: 1-6 [1, 10] 10,250\n",
"==========================================================================================\n",
"Total params: 5,977,530\n",
"Trainable params: 5,977,530\n",
"Non-trainable params: 0\n",
"Total mult-adds (Units.MEGABYTES): 276.66\n",
"==========================================================================================\n",
"Input size (MB): 0.04\n",
"Forward/backward pass size (MB): 4.74\n",
"Params size (MB): 23.91\n",
"Estimated Total Size (MB): 28.69\n",
"=========================================================================================="
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 66
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:22.823562168Z",
"start_time": "2026-04-22T07:03:22.774952520Z"
}
},
"cell_type": "code",
"source": [
"lr, num_epochs, batch_size = 0.1, 10, 128\n",
"train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=96)\n",
"#d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())"
],
"id": "3760a5e5813405f7",
"outputs": [],
"execution_count": 67
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:22.875034764Z",
"start_time": "2026-04-22T07:03:22.825694238Z"
}
},
"cell_type": "code",
"source": [
"class Residual(nn.Module):\n",
" def __init__(self,input_channels,num_channels,use_1x1conv=False,strides=1):\n",
" super().__init__()\n",
" self.conv1 = nn.Conv2d(input_channels,num_channels,kernel_size=3,padding=1,stride=strides)\n",
" self.conv2 = nn.Conv2d(num_channels,num_channels,kernel_size=3,padding=1)\n",
" if use_1x1conv:\n",
" self.conv3 = nn.Conv2d(input_channels,num_channels,kernel_size=1,stride=strides)\n",
" else:\n",
" self.conv3= None\n",
" self.bn1=nn.BatchNorm2d(num_channels)\n",
" self.bn2=nn.BatchNorm2d(num_channels)\n",
" def forward(self,X):\n",
" Y=F.relu(self.bn1(self.conv1(X)))\n",
" Y=self.bn2(self.conv2(Y))\n",
" if self.conv3:\n",
" X = self.conv3(X)\n",
" Y+=X\n",
" return F.relu(Y)\n"
],
"id": "9300979845ba6916",
"outputs": [],
"execution_count": 68
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:22.926048268Z",
"start_time": "2026-04-22T07:03:22.876715194Z"
}
},
"cell_type": "code",
"source": [
"blk = Residual(3,3)\n",
"X = torch.rand(4, 3, 6, 6)"
],
"id": "1248323517ff3228",
"outputs": [],
"execution_count": 69
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:22.992544732Z",
"start_time": "2026-04-22T07:03:22.927760279Z"
}
},
"cell_type": "code",
"source": [
"blk = Residual(3,6, use_1x1conv=True, strides=2)\n",
"blk(X).shape"
],
"id": "82cdbd71a157b51c",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([4, 6, 3, 3])"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 70
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.041967126Z",
"start_time": "2026-04-22T07:03:22.993777596Z"
}
},
"cell_type": "code",
"source": [
"b1 = nn.Sequential(nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3),\n",
"nn.BatchNorm2d(64), nn.ReLU(),\n",
"nn.MaxPool2d(kernel_size=3, stride=2, padding=1))"
],
"id": "727da1d2d363ac62",
"outputs": [],
"execution_count": 71
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.093341944Z",
"start_time": "2026-04-22T07:03:23.044341294Z"
}
},
"cell_type": "code",
"source": [
"def resnet_block(input_channels, num_channels, num_residuals,\n",
" first_block=False):\n",
" blk = []\n",
" for i in range(num_residuals):\n",
" if i == 0 and not first_block:\n",
" blk.append(Residual(input_channels, num_channels,\n",
" use_1x1conv=True, strides=2))\n",
" else:\n",
" blk.append(Residual(num_channels, num_channels))\n",
" return blk"
],
"id": "124134971f8441c0",
"outputs": [],
"execution_count": 72
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.143917227Z",
"start_time": "2026-04-22T07:03:23.095134233Z"
}
},
"cell_type": "code",
"source": [
"b2 = nn.Sequential(*resnet_block(64, 64, 2, first_block=True))\n",
"b3 = nn.Sequential(*resnet_block(64, 128, 2))\n",
"b4 = nn.Sequential(*resnet_block(128, 256, 2))\n",
"b5 = nn.Sequential(*resnet_block(256, 512, 2))"
],
"id": "ca1f1c69fba3e913",
"outputs": [],
"execution_count": 73
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.192826666Z",
"start_time": "2026-04-22T07:03:23.145253995Z"
}
},
"cell_type": "code",
"source": [
"net = nn.Sequential(b1, b2, b3, b4, b5,\n",
"nn.AdaptiveAvgPool2d((1,1)),\n",
"nn.Flatten(), nn.Linear(512, 10))"
],
"id": "f21db27de5dbdec1",
"outputs": [],
"execution_count": 74
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.412254076Z",
"start_time": "2026-04-22T07:03:23.195173742Z"
}
},
"cell_type": "code",
"source": [
"X = torch.rand(size=(1, 1, 224, 224))\n",
"for layer in net:\n",
" X = layer(X)\n",
" print(layer.__class__.__name__,'output shape:\\t', X.shape)"
],
"id": "6f8851a2bfd18c4e",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sequential output shape:\t torch.Size([1, 64, 56, 56])\n",
"Sequential output shape:\t torch.Size([1, 64, 56, 56])\n",
"Sequential output shape:\t torch.Size([1, 128, 28, 28])\n",
"Sequential output shape:\t torch.Size([1, 256, 14, 14])\n",
"Sequential output shape:\t torch.Size([1, 512, 7, 7])\n",
"AdaptiveAvgPool2d output shape:\t torch.Size([1, 512, 1, 1])\n",
"Flatten output shape:\t torch.Size([1, 512])\n",
"Linear output shape:\t torch.Size([1, 10])\n"
]
}
],
"execution_count": 75
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.462272089Z",
"start_time": "2026-04-22T07:03:23.415437344Z"
}
},
"cell_type": "code",
"source": [
"lr, num_epochs, batch_size = 0.05, 10, 256\n",
"train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=96)\n",
"#d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())"
],
"id": "e095d74b29dffef6",
"outputs": [],
"execution_count": 76
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.541760019Z",
"start_time": "2026-04-22T07:03:23.464100823Z"
}
},
"cell_type": "code",
"source": [
"import torch\n",
"import d2l.torch as d2l\n",
"import numpy\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"print(torch.version.__version__)"
],
"id": "3fd6d22221f87bea",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.10.0+cu128\n"
]
}
],
"execution_count": 77
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.592662909Z",
"start_time": "2026-04-22T07:03:23.543067093Z"
}
},
"cell_type": "code",
"source": [
"A=torch.Tensor([[1,2,0,0],[0,2,0,0],[0,0,2,1],[0,0,0,3]])\n",
"C=torch.Tensor([[1,0,0,0],[0,1,0,0],[0,0,-2,3],[0,0,0,-3]])"
],
"id": "254f5d3d659dbe0f",
"outputs": [],
"execution_count": 78
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.643655879Z",
"start_time": "2026-04-22T07:03:23.594970016Z"
}
},
"cell_type": "code",
"source": "B=torch.Tensor([[2,0,0,0],[-2,1,0,0],[0,0,-3,0],[0,0,0,-3]])",
"id": "a13d9c27c2fdbfad",
"outputs": [],
"execution_count": 79
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.700556244Z",
"start_time": "2026-04-22T07:03:23.645948395Z"
}
},
"cell_type": "code",
"source": "torch.mm(A,C)",
"id": "e513a37beaa85f8f",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 1., 2., 0., 0.],\n",
" [ 0., 2., 0., 0.],\n",
" [ 0., 0., -4., 3.],\n",
" [ 0., 0., 0., -9.]])"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 80
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.827304753Z",
"start_time": "2026-04-22T07:03:23.751870264Z"
}
},
"cell_type": "code",
"source": "torch.det(torch.mm(torch.mm(A,C),B))",
"id": "9a85eceac652875f",
"outputs": [
{
"data": {
"text/plain": [
"tensor(1296.)"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 81
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.931211184Z",
"start_time": "2026-04-22T07:03:23.879693736Z"
}
},
"cell_type": "code",
"source": "1296**5\n",
"id": "6dc27d79722da58f",
"outputs": [
{
"data": {
"text/plain": [
"3656158440062976"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 82
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:23.997938663Z",
"start_time": "2026-04-22T07:03:23.945902637Z"
}
},
"cell_type": "code",
"source": "torch.mm(C,B)",
"id": "ec5a170d775f4705",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 2., 0., 0., 0.],\n",
" [-2., 1., 0., 0.],\n",
" [ 0., 0., 6., -9.],\n",
" [ 0., 0., 0., 9.]])"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 83
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.170960756Z",
"start_time": "2026-04-22T07:03:24.067057874Z"
}
},
"cell_type": "code",
"source": [
"T = 1000 # 总共产生1000个点\n",
"time = torch.arange(1, T + 1, dtype=torch.float32)\n",
"x = torch.sin(0.01 * time) + torch.normal(0, 0.2, (T,))\n",
"d2l.plot(time, [x], 'time', 'x', xlim=[1, 1000], figsize=(6, 3))"
],
"id": "c3884b10464c6baa",
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 600x300 with 1 Axes>"
],
"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<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"406.885938pt\" height=\"211.07625pt\" viewBox=\"0 0 406.885938 211.07625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n <metadata>\n <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" 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>2026-04-22T15:03:24.145178</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.7.2, 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-linejoin: round; stroke-linecap: butt}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 211.07625 \nL 406.885938 211.07625 \nL 406.885938 0 \nL 0 0 \nz\n\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 52.160938 173.52 \nL 386.960938 173.52 \nL 386.960938 7.2 \nL 52.160938 7.2 \nz\n\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path d=\"M 118.852829 173.52 \nL 118.852829 7.2 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path id=\"m5e40d2494d\" d=\"M 0 0 \nL 0 3.5 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m5e40d2494d\" x=\"118.852829\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 200 -->\n <g style=\"fill: #ffffff\" transform=\"translate(109.309079 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-32\" d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-32\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path d=\"M 185.879856 173.52 \nL 185.879856 7.2 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use xlink:href=\"#m5e40d2494d\" x=\"185.879856\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 400 -->\n <g style=\"fill: #ffffff\" transform=\"translate(176.336106 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-34\" d=\"M 2419 4116 \nL 825 1625 \nL 2419 1625 \nL 2419 4116 \nz\nM 2253 4666 \nL 3047 4666 \nL 3047 1625 \nL 3713 1625 \nL 3713 1100 \nL 3047 1100 \nL 3047 0 \nL 2419 0 \nL 2419 1100 \nL 313 1100 \nL 313 1709 \nL 2253 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-34\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path d=\"M 252.906883 173.52 \nL 252.906883 7.2 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_6\">\n <g>\n <use xlink:href=\"#m5e40d2494d\" x=\"252.906883\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 600 -->\n <g style=\"fill: #ffffff\" transform=\"translate(243.363133 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-36\" d=\"M 2113 2584 \nQ 1688 2584 1439 2293 \nQ 1191 2003 1191 1497 \nQ 1191 994 1439 701 \nQ 1688 409 2113 409 \nQ 2538 409 2786 701 \nQ 3034 994 3034 1497 \nQ 3034 2003 2786 2293 \nQ 2538 2584 2113 2584 \nz\nM 3366 4563 \nL 3366 3988 \nQ 3128 4100 2886 4159 \nQ 2644 4219 2406 4219 \nQ 1781 4219 1451 3797 \nQ 1122 3375 1075 2522 \nQ 1259 2794 1537 2939 \nQ 1816 3084 2150 3084 \nQ 2853 3084 3261 2657 \nQ 3669 2231 3669 1497 \nQ 3669 778 3244 343 \nQ 2819 -91 2113 -91 \nQ 1303 -91 875 529 \nQ 447 1150 447 2328 \nQ 447 3434 972 4092 \nQ 1497 4750 2381 4750 \nQ 2619 4750 2861 4703 \nQ 3103 4656 3366 4563 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-36\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_7\">\n <path d=\"M 319.93391 173.52 \nL 319.93391 7.2 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_8\">\n <g>\n <use xlink:href=\"#m5e40d2494d\" x=\"319.93391\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 800 -->\n <g style=\"fill: #ffffff\" transform=\"translate(310.39016 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-38\" d=\"M 2034 2216 \nQ 1584 2216 1326 1975 \nQ 1069 1734 1069 1313 \nQ 1069 891 1326 650 \nQ 1584 409 2034 409 \nQ 2484 409 2743 651 \nQ 3003 894 3003 1313 \nQ 3003 1734 2745 1975 \nQ 2488 2216 2034 2216 \nz\nM 1403 2484 \nQ 997 2584 770 2862 \nQ 544 3141 544 3541 \nQ 544 4100 942 4425 \nQ 1341 4750 2034 4750 \nQ 2731 4750 3128 4425 \nQ 3525 4100 3525 3541 \nQ 3525 3141 3298 2862 \nQ 3072 2584 2669 2484 \nQ 3125 2378 3379 2068 \nQ 3634 1759 3634 1313 \nQ 3634 634 3220 271 \nQ 2806 -91 2034 -91 \nQ 1263 -91 848 271 \nQ 434 634 434 1313 \nQ 434 1759 690 2068 \nQ 947 2378 1403 2484 \nz\nM 1172 3481 \nQ 1172 3119 1398 2916 \nQ 1625 2713 2034 2713 \nQ 2441 2713 2670 2916 \nQ 2900 3119 2900 3481 \nQ 2900 3844 2670 4047 \nQ 2441 4250 2034 4250 \nQ 1625 4250 1398 4047 \nQ 1172 3844 1172 3481 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-38\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_9\">\n <path d=\"M 386.960938 173.52 \nL 386.960938 7.2 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_10\">\n <g>\n <use xlink:href=\"#m5e40d2494d\" x=\"386.960938\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 1000 -->\n <g style=\"fill: #ffffff\" transform=\"translate(374.235937 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-31\" d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n </g>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- time -->\n <g style=\"fill: #ffffff\" transform=\"translate(208.264844 201.796563) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \nL 1172 3500 \nL 2356 3500 \nL 2356 3053 \nL 1172 3053 \nL 1172 1153 \nQ 1172 725 1289 603 \nQ 1406 481 1766 481 \nL 2356 481 \nL 2356 0 \nL 1766 0 \nQ 1100 0 847 248 \nQ 594 497 594 1153 \nL 594 3053 \nL 172 3053 \nL 172 3500 \nL 594 3500 \nL 594 4494 \nL 1172 4494 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-69\" d=\"M 603 3500 \nL 1178 3500 \nL 1178 0 \nL 603 0 \nL 603 3500 \nz\nM 603 4863 \nL 1178 4863 \nL 1178 4134 \nL 603 4134 \nL 603 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6d\" d=\"M 3328 2828 \nQ 3544 3216 3844 3400 \nQ 4144 3584 4550 3584 \nQ 5097 3584 5394 3201 \nQ 5691 2819 5691 2113 \nL 5691 0 \nL 5113 0 \nL 5113 2094 \nQ 5113 2597 4934 2840 \nQ 4756 3084 4391 3084 \nQ 3944 3084 3684 2787 \nQ 3425 2491 3425 1978 \nL 3425 0 \nL 2847 0 \nL 2847 2094 \nQ 2847 2600 2669 2842 \nQ 2491 3084 2119 3084 \nQ 1678 3084 1418 2786 \nQ 1159 2488 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1356 3278 1631 3431 \nQ 1906 3584 2284 3584 \nQ 2666 3584 2933 3390 \nQ 3200 3197 3328 2828 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \nL 3597 1613 \nL 953 1613 \nQ 991 1019 1311 708 \nQ 1631 397 2203 397 \nQ 2534 397 2845 478 \nQ 3156 559 3463 722 \nL 3463 178 \nQ 3153 47 2828 -22 \nQ 2503 -91 2169 -91 \nQ 1331 -91 842 396 \nQ 353 884 353 1716 \nQ 353 2575 817 3079 \nQ 1281 3584 2069 3584 \nQ 2775 3584 3186 3129 \nQ 3597 2675 3597 1894 \nz\nM 3022 2063 \nQ 3016 2534 2758 2815 \nQ 2500 3097 2075 3097 \nQ 1594 3097 1305 2825 \nQ 1016 2553 972 2059 \nL 3022 2063 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-74\"/>\n <use xlink:href=\"#DejaVuSans-69\" x=\"39.208984\"/>\n <use xlink:href=\"#DejaVuSans-6d\" x=\"66.992188\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"164.404297\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_11\">\n <path d=\"M 52.160938 158.726267 \nL 386.960938 158.726267 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_12\">\n <defs>\n <path id=\"m482d410ae0\" d=\"M 0 0 \nL -3.5 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m482d410ae0\" x=\"52.160938\" y=\"158.726267\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 1.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 162.525486) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-2212\" d=\"M 678 2272 \nL 4684 2272 \nL 4684 1741 \nL 678 1741 \nL 678 2272 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-2e\" d=\"M 684 794 \nL 1344 794 \nL 1344 0 \nL 684 0 \nL 684 794 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-35\" d=\"M 691 4666 \nL 3169 4666 \nL 3169 4134 \nL 1269 4134 \nL 1269 2991 \nQ 1406 3038 1543 3061 \nQ 1681 3084 1819 3084 \nQ 2600 3084 3056 2656 \nQ 3513 2228 3513 1497 \nQ 3513 744 3044 326 \nQ 2575 -91 1722 -91 \nQ 1428 -91 1123 -41 \nQ 819 9 494 109 \nL 494 744 \nQ 775 591 1075 516 \nQ 1375 441 1709 441 \nQ 2250 441 2565 725 \nQ 2881 1009 2881 1497 \nQ 2881 1984 2565 2268 \nQ 2250 2553 1709 2553 \nQ 1456 2553 1204 2497 \nQ 953 2441 691 2322 \nL 691 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_13\">\n <path d=\"M 52.160938 134.849044 \nL 386.960938 134.849044 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_14\">\n <g>\n <use xlink:href=\"#m482d410ae0\" x=\"52.160938\" y=\"134.849044\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 1.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 138.648263) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_15\">\n <path d=\"M 52.160938 110.971822 \nL 386.960938 110.971822 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_16\">\n <g>\n <use xlink:href=\"#m482d410ae0\" x=\"52.160938\" y=\"110.971822\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- 0.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 114.771041) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_17\">\n <path d=\"M 52.160938 87.0946 \nL 386.960938 87.0946 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_18\">\n <g>\n <use xlink:href=\"#m482d410ae0\" x=\"52.160938\" y=\"87.0946\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 0.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 90.893818) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_19\">\n <path d=\"M 52.160938 63.217377 \nL 386.960938 63.217377 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_20\">\n <g>\n <use xlink:href=\"#m482d410ae0\" x=\"52.160938\" y=\"63.217377\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- 0.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 67.016596) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_6\">\n <g id=\"line2d_21\">\n <path d=\"M 52.160938 39.340155 \nL 386.960938 39.340155 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_22\">\n <g>\n <use xlink:href=\"#m482d410ae0\" x=\"52.160938\" y=\"39.340155\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- 1.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 43.139373) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_7\">\n <g id=\"line2d_23\">\n <path d=\"M 52.160938 15.462932 \nL 386.960938 15.462932 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_24\">\n <g>\n <use xlink:href=\"#m482d410ae0\" x=\"52.160938\" y=\"15.462932\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_13\">\n <!-- 1.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 19.262151) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"text_14\">\n <!-- x -->\n <g style=\"fill: #ffffff\" transform=\"translate(14.798438 93.319375) rotate(-90) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-78\" d=\"M 3513 3500 \nL 2247 1797 \nL 3578 0 \nL 2900 0 \nL 1881 1375 \nL 863 0 \nL 184 0 \nL 1544 1831 \nL 300 3500 \nL 978 3500 \nL 1906 2253 \nL 2834 3500 \nL 3513 3500 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-78\"/>\n </g>\n </g>\n </g>\n <g id=\"line2d_25\">\n <path d=\"M 52.160938 91.620164 \nL 52.496073 76.85888 \nL 52.831208 99.142407 \nL 53.166343 92.991388 \nL 53.501478 95.814422 \nL 53.836613 81.415823 \nL 54.171748 96.470627 \nL 54.506883 75.885911 \nL 54.842019 80.139206 \nL 55.177154 92.433971 \nL 55.512289 69.012006 \nL 55.847424 68.65884 \nL 56.517694 77.743774 \nL 56.852829 85.174639 \nL 57.187965 83.198818 \nL 57.5231 64.206941 \nL 57.858235 85.417059 \nL 58.19337 75.736926 \nL 58.528505 80.129288 \nL 58.86364 81.801382 \nL 59.198775 74.94461 \nL 59.53391 87.703016 \nL 59.869046 83.594711 \nL 60.204181 72.021536 \nL 60.539316 85.865928 \nL 60.874451 71.782131 \nL 61.209586 71.530971 \nL 61.544721 69.457521 \nL 61.879856 84.306385 \nL 62.550127 72.291719 \nL 62.885262 75.978999 \nL 63.220397 84.587202 \nL 63.555532 65.773686 \nL 63.890667 80.917666 \nL 64.225802 66.415567 \nL 64.560938 71.845107 \nL 64.896073 64.630494 \nL 65.231208 62.083098 \nL 65.566343 61.672922 \nL 65.901478 63.757347 \nL 66.236613 83.124244 \nL 66.571748 58.803035 \nL 66.906883 53.798496 \nL 67.242019 70.429451 \nL 67.577154 51.395528 \nL 67.912289 58.255957 \nL 68.247424 39.36493 \nL 68.582559 80.14617 \nL 68.917694 80.329952 \nL 69.252829 58.596473 \nL 69.587965 55.226758 \nL 69.9231 70.738359 \nL 70.258235 50.396064 \nL 70.928505 76.575893 \nL 71.26364 77.024509 \nL 71.598775 65.129657 \nL 71.93391 62.95436 \nL 72.269046 70.105622 \nL 72.604181 53.571562 \nL 72.939316 51.58855 \nL 73.274451 64.589042 \nL 73.609586 66.472576 \nL 73.944721 59.1073 \nL 74.279856 69.941384 \nL 74.614992 50.087274 \nL 74.950127 55.383361 \nL 75.285262 49.331029 \nL 75.620397 73.838191 \nL 75.955532 59.072489 \nL 76.290667 57.089821 \nL 76.625802 70.564833 \nL 76.960938 56.971021 \nL 77.296073 51.055709 \nL 77.631208 60.523503 \nL 77.966343 52.800658 \nL 78.301478 49.599495 \nL 78.636613 49.735962 \nL 78.971748 52.530029 \nL 79.306883 42.713624 \nL 79.642019 44.00489 \nL 79.977154 48.413471 \nL 80.312289 60.536784 \nL 80.647424 53.075741 \nL 80.982559 31.859953 \nL 81.317694 50.66788 \nL 81.652829 41.105837 \nL 81.987965 65.962787 \nL 82.3231 36.342391 \nL 82.99337 65.895695 \nL 83.328505 52.299836 \nL 83.66364 48.417646 \nL 83.998775 59.463061 \nL 84.33391 36.291504 \nL 85.004181 47.036978 \nL 85.339316 29.370321 \nL 86.009586 53.601474 \nL 86.344721 60.034343 \nL 86.679856 58.250814 \nL 87.014992 60.597432 \nL 87.350127 49.087794 \nL 87.685262 43.316602 \nL 88.020397 43.763494 \nL 88.355532 57.926015 \nL 88.690667 44.122577 \nL 89.025802 43.172786 \nL 89.360938 46.317915 \nL 89.696073 55.740651 \nL 90.031208 39.619656 \nL 90.366343 54.134967 \nL 90.701478 45.154742 \nL 91.036613 15.948702 \nL 91.371748 39.877154 \nL 91.706883 30.215806 \nL 92.042019 59.954188 \nL 92.377154 44.747914 \nL 92.712289 53.085379 \nL 93.047424 44.307743 \nL 93.382559 32.39652 \nL 93.717694 26.63574 \nL 94.387965 55.662386 \nL 94.7231 40.745148 \nL 95.058235 38.813693 \nL 95.39337 37.645279 \nL 95.728505 40.480967 \nL 96.06364 42.018058 \nL 96.398775 35.403852 \nL 96.73391 19.786713 \nL 97.069046 27.191338 \nL 97.404181 55.858676 \nL 97.739316 37.021551 \nL 98.074451 36.295403 \nL 98.409586 44.11533 \nL 98.744721 40.128726 \nL 99.079856 27.124374 \nL 99.414992 31.212354 \nL 99.750127 46.663597 \nL 100.085262 50.342436 \nL 100.420397 27.660713 \nL 100.755532 32.367942 \nL 101.090667 42.883838 \nL 101.425802 48.174775 \nL 101.760938 34.156087 \nL 102.096073 41.844955 \nL 102.431208 40.893869 \nL 102.766343 52.092759 \nL 103.101478 33.30676 \nL 103.436613 31.134847 \nL 103.771748 42.142494 \nL 104.106883 38.040011 \nL 104.442019 50.168456 \nL 104.777154 40.149229 \nL 105.782559 56.724194 \nL 106.117694 30.672941 \nL 106.787965 53.783273 \nL 107.1231 42.849547 \nL 107.458235 47.279126 \nL 108.128505 50.300377 \nL 108.46364 26.917834 \nL 108.798775 26.08846 \nL 109.13391 50.294562 \nL 109.804181 30.189312 \nL 110.139316 46.013147 \nL 110.809586 35.628051 \nL 111.144721 44.447956 \nL 111.479856 39.039468 \nL 111.814992 47.097495 \nL 112.150127 39.708933 \nL 112.485262 48.503374 \nL 112.820397 48.795567 \nL 113.155532 32.365226 \nL 113.490667 34.477911 \nL 113.825802 44.444119 \nL 114.160938 39.314776 \nL 114.831208 52.726327 \nL 115.166343 27.034621 \nL 115.501478 36.551447 \nL 115.836613 20.085772 \nL 116.171748 44.540204 \nL 116.506883 32.583197 \nL 116.842019 47.74069 \nL 117.177154 49.150224 \nL 117.512289 38.284737 \nL 118.182559 52.658922 \nL 118.517694 30.64631 \nL 118.852829 48.511512 \nL 119.187965 44.466645 \nL 119.5231 35.688559 \nL 120.19337 43.357736 \nL 120.528505 52.09589 \nL 120.86364 39.580945 \nL 121.198775 51.323078 \nL 121.53391 45.309438 \nL 121.869046 30.442207 \nL 122.874451 57.131333 \nL 123.209586 44.419956 \nL 123.544721 50.825527 \nL 123.879856 46.871856 \nL 124.214992 45.763228 \nL 124.550127 54.05775 \nL 124.885262 52.011648 \nL 125.220397 33.712159 \nL 125.555532 58.769249 \nL 125.890667 45.334628 \nL 126.225802 63.893151 \nL 126.560938 42.499775 \nL 126.896073 32.739111 \nL 127.231208 58.040637 \nL 127.566343 41.829257 \nL 127.901478 45.422644 \nL 128.236613 52.704029 \nL 128.571748 41.267765 \nL 128.906883 66.149827 \nL 129.242019 27.281244 \nL 129.577154 62.645959 \nL 129.912289 52.606753 \nL 130.247424 55.738425 \nL 130.582559 44.283099 \nL 130.917694 51.061658 \nL 131.252829 34.066381 \nL 131.587965 55.416558 \nL 131.9231 60.096519 \nL 132.258235 38.884164 \nL 132.59337 55.77567 \nL 132.928505 52.427186 \nL 133.26364 46.430917 \nL 133.598775 70.71269 \nL 133.93391 50.309577 \nL 134.269046 69.170747 \nL 134.604181 65.651423 \nL 134.939316 66.213 \nL 135.274451 47.537805 \nL 135.609586 61.042487 \nL 135.944721 50.878183 \nL 136.279856 47.948513 \nL 136.614992 64.260946 \nL 136.950127 71.095484 \nL 137.285262 55.029928 \nL 137.620397 68.139692 \nL 137.955532 53.040824 \nL 138.625802 66.431804 \nL 138.960938 66.595884 \nL 139.296073 70.130214 \nL 139.631208 61.092863 \nL 139.966343 60.310969 \nL 140.301478 67.467467 \nL 140.636613 46.382511 \nL 140.971748 70.84959 \nL 141.306883 67.688248 \nL 141.642019 62.397672 \nL 141.977154 59.183353 \nL 142.312289 57.55631 \nL 142.647424 64.559454 \nL 142.982559 43.674345 \nL 143.317694 53.837656 \nL 143.652829 52.389816 \nL 143.987965 53.982953 \nL 144.658235 77.394617 \nL 144.99337 82.806495 \nL 145.328505 66.194051 \nL 145.66364 67.021351 \nL 145.998775 73.462032 \nL 146.669046 58.304912 \nL 147.004181 66.235674 \nL 147.674451 89.989991 \nL 148.009586 75.003904 \nL 148.344721 66.248856 \nL 148.679856 72.819415 \nL 149.014992 83.547498 \nL 149.350127 74.03758 \nL 149.685262 82.034201 \nL 150.020397 60.624928 \nL 150.355532 92.876269 \nL 150.690667 82.473578 \nL 151.025802 63.643688 \nL 151.360938 62.707677 \nL 151.696073 65.209552 \nL 152.031208 73.835236 \nL 152.366343 89.54679 \nL 152.701478 80.231761 \nL 153.036613 84.479047 \nL 153.371748 82.640455 \nL 153.706883 81.498754 \nL 154.042019 83.667801 \nL 154.377154 67.861611 \nL 154.712289 78.472812 \nL 155.047424 82.946842 \nL 155.382559 101.737577 \nL 155.717694 60.281457 \nL 156.052829 100.089752 \nL 156.387965 100.296816 \nL 156.7231 83.03439 \nL 157.058235 94.12826 \nL 157.39337 94.842332 \nL 157.728505 93.469147 \nL 158.06364 80.752163 \nL 158.398775 83.735931 \nL 158.73391 119.147544 \nL 159.069046 92.448073 \nL 159.404181 92.862084 \nL 159.739316 86.655671 \nL 160.074451 90.94121 \nL 160.409586 96.727955 \nL 160.744721 75.924238 \nL 161.079856 103.964381 \nL 161.414992 109.051654 \nL 161.750127 84.133234 \nL 162.085262 112.184767 \nL 162.420397 86.151997 \nL 162.755532 89.927413 \nL 163.090667 96.235835 \nL 163.425802 107.432948 \nL 163.760938 87.645553 \nL 164.096073 112.911475 \nL 164.431208 86.438545 \nL 164.766343 107.341569 \nL 165.101478 100.572289 \nL 165.436613 90.894059 \nL 165.771748 103.784143 \nL 166.106883 108.46284 \nL 166.442019 75.378401 \nL 166.777154 104.904066 \nL 167.112289 106.607258 \nL 167.447424 99.59517 \nL 168.117694 116.414637 \nL 168.452829 98.953189 \nL 168.787965 106.986633 \nL 169.1231 104.934099 \nL 169.458235 90.614939 \nL 169.79337 88.107395 \nL 170.128505 104.495021 \nL 170.46364 89.349866 \nL 171.13391 119.537658 \nL 171.469046 115.37151 \nL 171.804181 113.992123 \nL 172.139316 115.611074 \nL 172.474451 96.33585 \nL 172.809586 132.666913 \nL 173.144721 125.185237 \nL 173.479856 103.737771 \nL 173.814992 132.641899 \nL 174.150127 116.561505 \nL 174.485262 124.129882 \nL 174.820397 109.305919 \nL 175.155532 126.226724 \nL 175.490667 101.444204 \nL 175.825802 111.88389 \nL 176.160938 115.277548 \nL 176.496073 98.86063 \nL 176.831208 120.085688 \nL 177.166343 111.22876 \nL 177.501478 113.494204 \nL 177.836613 140.048573 \nL 178.171748 121.506541 \nL 178.506883 125.616937 \nL 178.842019 119.469795 \nL 179.177154 101.330892 \nL 179.512289 119.009067 \nL 179.847424 107.745656 \nL 180.182559 127.669495 \nL 180.517694 115.403279 \nL 180.852829 121.489844 \nL 181.187965 105.006348 \nL 181.5231 122.543676 \nL 181.858235 106.715241 \nL 182.19337 122.170541 \nL 183.198775 111.919521 \nL 183.53391 120.740203 \nL 183.869046 143.225215 \nL 184.539316 121.976389 \nL 185.209586 115.525696 \nL 185.544721 123.352002 \nL 185.879856 112.331837 \nL 186.214992 107.385121 \nL 186.550127 125.267054 \nL 186.885262 152.79348 \nL 187.220397 116.788425 \nL 187.555532 138.149509 \nL 187.890667 114.673986 \nL 188.225802 126.128282 \nL 188.560938 120.621403 \nL 188.896073 124.266884 \nL 189.231208 123.161561 \nL 189.566343 145.055236 \nL 189.901478 121.965356 \nL 190.236613 121.731969 \nL 190.571748 119.657227 \nL 190.906883 149.541688 \nL 191.242019 151.427864 \nL 191.577154 121.021016 \nL 191.912289 127.144106 \nL 192.247424 115.618958 \nL 192.917694 140.284778 \nL 193.252829 141.123773 \nL 193.587965 133.725598 \nL 193.9231 144.980075 \nL 194.258235 126.100843 \nL 194.59337 124.166054 \nL 194.928505 149.119774 \nL 195.26364 131.418457 \nL 195.598775 143.039209 \nL 195.93391 121.554107 \nL 196.269046 121.390981 \nL 196.604181 101.287481 \nL 196.939316 122.773522 \nL 197.274451 135.274255 \nL 197.609586 141.683412 \nL 197.944721 136.739962 \nL 198.279856 136.67035 \nL 198.614992 115.646762 \nL 198.950127 122.25546 \nL 199.285262 124.379411 \nL 199.620397 130.580042 \nL 199.955532 141.859587 \nL 200.290667 141.331035 \nL 200.625802 117.686397 \nL 201.631208 163.300888 \nL 201.966343 137.674584 \nL 202.301478 133.404782 \nL 202.636613 126.499408 \nL 202.971748 146.857233 \nL 203.306883 137.11437 \nL 203.642019 140.11856 \nL 203.977154 135.013901 \nL 204.312289 118.942983 \nL 204.647424 130.647482 \nL 204.982559 130.772387 \nL 205.317694 140.001488 \nL 205.652829 127.107866 \nL 205.987965 130.662926 \nL 206.3231 114.93923 \nL 206.658235 165.96 \nL 206.99337 131.909826 \nL 207.328505 138.188847 \nL 207.66364 142.004109 \nL 207.998775 124.634769 \nL 208.33391 129.795211 \nL 208.669046 137.005376 \nL 209.004181 135.152868 \nL 209.339316 130.628772 \nL 209.674451 140.34269 \nL 210.009586 124.349814 \nL 210.344721 136.198323 \nL 210.679856 136.263932 \nL 211.014992 139.277635 \nL 211.350127 125.034222 \nL 212.020397 150.204481 \nL 212.355532 146.836944 \nL 212.690667 130.82936 \nL 213.025802 131.873472 \nL 213.360938 122.023448 \nL 214.031208 143.969773 \nL 214.366343 137.424785 \nL 214.701478 141.722055 \nL 215.036613 138.591849 \nL 215.371748 127.892014 \nL 216.042019 150.095538 \nL 216.377154 125.364525 \nL 216.712289 122.04337 \nL 217.047424 114.816567 \nL 217.717694 140.714001 \nL 218.052829 137.107442 \nL 218.7231 118.344536 \nL 219.058235 147.521289 \nL 219.39337 138.463978 \nL 219.728505 112.828122 \nL 220.06364 134.408276 \nL 220.398775 124.79118 \nL 220.73391 122.732836 \nL 221.069046 136.71628 \nL 221.404181 125.408249 \nL 221.739316 128.01117 \nL 222.074451 146.378072 \nL 222.409586 132.914498 \nL 222.744721 140.346043 \nL 223.079856 133.361508 \nL 223.414992 140.318103 \nL 223.750127 119.822838 \nL 224.085262 123.133963 \nL 224.420397 139.62424 \nL 224.755532 130.330721 \nL 225.090667 145.649869 \nL 225.760938 135.681926 \nL 226.096073 105.155629 \nL 226.766343 143.579749 \nL 227.101478 127.330305 \nL 227.436613 134.64976 \nL 227.771748 132.436464 \nL 228.106883 147.960025 \nL 228.442019 120.709388 \nL 228.777154 115.238231 \nL 229.112289 114.067239 \nL 229.447424 137.417504 \nL 229.782559 119.204665 \nL 230.117694 117.372506 \nL 230.452829 111.304291 \nL 230.787965 139.416687 \nL 231.1231 139.417677 \nL 231.458235 119.676221 \nL 231.79337 112.20248 \nL 232.128505 114.682434 \nL 232.46364 131.354168 \nL 232.798775 112.308445 \nL 233.13391 115.693007 \nL 233.469046 127.03618 \nL 233.804181 122.619541 \nL 234.139316 123.480815 \nL 234.474451 135.606764 \nL 234.809586 137.841946 \nL 235.144721 132.060288 \nL 235.479856 117.034782 \nL 235.814992 107.661745 \nL 236.150127 128.044524 \nL 236.485262 138.4197 \nL 236.820397 113.498101 \nL 237.155532 131.690392 \nL 237.490667 122.509195 \nL 237.825802 118.965381 \nL 238.160938 102.271101 \nL 238.496073 119.637379 \nL 238.831208 122.903835 \nL 239.166343 117.460414 \nL 239.501478 126.050117 \nL 239.836613 113.749904 \nL 240.506883 108.710669 \nL 240.842019 126.968347 \nL 241.512289 107.811829 \nL 241.847424 110.37348 \nL 242.517694 102.211449 \nL 242.852829 103.393137 \nL 243.187965 109.644192 \nL 243.5231 120.572411 \nL 243.858235 144.521419 \nL 244.19337 97.279597 \nL 244.86364 106.959039 \nL 245.53391 130.023582 \nL 245.869046 113.185656 \nL 246.204181 108.669748 \nL 246.539316 108.118366 \nL 246.874451 112.145117 \nL 247.209586 108.875636 \nL 247.544721 119.316471 \nL 247.879856 95.847651 \nL 248.214992 108.423308 \nL 248.550127 109.398483 \nL 249.220397 116.869145 \nL 249.555532 97.121016 \nL 249.890667 103.179673 \nL 250.225802 101.815423 \nL 250.560938 111.587051 \nL 250.896073 100.849864 \nL 251.231208 106.556598 \nL 251.566343 100.391075 \nL 251.901478 84.081003 \nL 252.236613 107.890921 \nL 252.571748 107.327747 \nL 253.242019 93.68236 \nL 253.577154 111.375593 \nL 253.912289 82.300214 \nL 254.247424 93.904467 \nL 254.582559 99.207919 \nL 254.917694 95.478248 \nL 255.252829 97.290167 \nL 255.587965 96.158229 \nL 256.258235 105.882705 \nL 256.59337 103.389621 \nL 256.928505 103.058181 \nL 257.26364 94.019984 \nL 257.598775 102.273022 \nL 257.93391 97.388726 \nL 258.269046 102.528383 \nL 258.604181 104.719201 \nL 258.939316 100.040084 \nL 259.274451 81.909532 \nL 259.609586 97.873327 \nL 259.944721 90.684016 \nL 260.279856 88.715767 \nL 260.614992 90.13119 \nL 260.950127 84.107522 \nL 261.285262 94.065476 \nL 261.620397 83.314751 \nL 261.955532 79.795074 \nL 262.290667 64.442442 \nL 262.625802 85.456596 \nL 262.960938 87.847145 \nL 263.296073 93.088437 \nL 263.631208 109.527871 \nL 264.301478 74.575436 \nL 264.636613 84.138458 \nL 264.971748 97.808308 \nL 265.306883 93.38806 \nL 265.642019 86.072727 \nL 265.977154 74.247211 \nL 266.312289 84.722539 \nL 266.647424 70.61372 \nL 266.982559 92.423196 \nL 267.317694 86.267842 \nL 267.652829 83.714911 \nL 267.987965 67.346901 \nL 268.3231 71.870585 \nL 268.658235 64.135058 \nL 268.99337 88.716383 \nL 269.328505 64.239395 \nL 269.66364 63.714339 \nL 269.998775 81.949477 \nL 270.33391 70.378246 \nL 270.669046 80.841346 \nL 271.004181 80.417443 \nL 271.339316 77.815689 \nL 271.674451 79.212131 \nL 272.009586 71.683374 \nL 272.344721 60.634241 \nL 272.679856 74.260016 \nL 273.014992 78.058815 \nL 273.350127 75.11404 \nL 273.685262 77.171505 \nL 274.020397 87.764088 \nL 274.355532 75.426538 \nL 274.690667 71.793886 \nL 275.025802 60.899775 \nL 275.696073 72.123536 \nL 276.031208 64.971383 \nL 276.366343 86.954739 \nL 276.701478 76.712241 \nL 277.036613 54.24576 \nL 277.371748 62.791589 \nL 277.706883 75.257833 \nL 278.042019 45.985619 \nL 278.377154 66.524531 \nL 278.712289 57.462618 \nL 279.047424 70.465879 \nL 279.382559 56.200012 \nL 279.717694 65.723673 \nL 280.052829 55.602308 \nL 280.387965 70.618128 \nL 280.7231 69.039075 \nL 281.058235 65.839925 \nL 281.39337 78.104668 \nL 281.728505 55.067142 \nL 282.06364 45.708154 \nL 282.398775 62.177592 \nL 282.73391 67.973799 \nL 283.404181 56.310973 \nL 283.739316 52.606395 \nL 284.074451 59.769156 \nL 284.409586 50.439153 \nL 284.744721 54.506665 \nL 285.079856 77.634694 \nL 285.414992 48.465135 \nL 285.750127 57.030195 \nL 286.085262 54.868273 \nL 286.420397 51.204973 \nL 286.755532 62.726916 \nL 287.090667 43.867387 \nL 287.425802 46.958995 \nL 287.760938 43.67525 \nL 288.096073 54.060306 \nL 288.431208 56.164663 \nL 288.766343 61.298673 \nL 289.101478 56.16435 \nL 289.436613 66.988451 \nL 289.771748 53.793412 \nL 290.442019 61.479701 \nL 290.777154 48.250956 \nL 291.112289 60.317103 \nL 291.447424 53.209664 \nL 291.782559 58.946604 \nL 292.117694 68.633729 \nL 292.452829 36.475147 \nL 292.787965 52.009593 \nL 293.1231 48.275156 \nL 293.458235 29.368898 \nL 293.79337 44.95141 \nL 294.128505 52.809541 \nL 294.46364 38.792948 \nL 294.798775 53.602966 \nL 295.13391 38.730738 \nL 295.469046 40.546018 \nL 295.804181 26.165375 \nL 296.139316 50.539702 \nL 296.474451 38.893392 \nL 297.144721 58.008686 \nL 297.479856 29.633099 \nL 297.814992 40.877514 \nL 298.150127 47.845377 \nL 298.485262 48.141803 \nL 298.820397 43.217181 \nL 299.155532 51.585905 \nL 299.490667 44.547004 \nL 299.825802 52.275969 \nL 300.160938 41.446384 \nL 300.496073 42.259941 \nL 300.831208 29.644189 \nL 301.166343 36.974027 \nL 301.501478 30.694204 \nL 301.836613 44.667523 \nL 302.171748 47.026617 \nL 302.506883 39.847731 \nL 302.842019 42.980877 \nL 303.177154 50.669514 \nL 303.512289 61.209058 \nL 303.847424 14.76 \nL 304.182559 53.804388 \nL 304.517694 54.909418 \nL 304.852829 47.258507 \nL 305.187965 55.795771 \nL 305.5231 51.495538 \nL 305.858235 54.068248 \nL 306.19337 26.418988 \nL 306.528505 33.243525 \nL 306.86364 42.932056 \nL 307.198775 39.454261 \nL 307.53391 27.859003 \nL 307.869046 54.055114 \nL 308.204181 22.871678 \nL 308.539316 33.405865 \nL 308.874451 36.989307 \nL 309.209586 42.845608 \nL 309.544721 33.637413 \nL 309.879856 37.887034 \nL 310.550127 28.011684 \nL 310.885262 47.46056 \nL 311.220397 30.189118 \nL 311.555532 34.930606 \nL 311.890667 47.394162 \nL 312.225802 46.160775 \nL 312.560938 33.954837 \nL 312.896073 39.114169 \nL 313.231208 31.966704 \nL 313.566343 40.556421 \nL 313.901478 36.937024 \nL 314.571748 48.54482 \nL 314.906883 29.521344 \nL 315.577154 39.768567 \nL 315.912289 30.581333 \nL 316.247424 32.704749 \nL 316.582559 43.43563 \nL 316.917694 42.362812 \nL 317.252829 38.762481 \nL 317.587965 50.303674 \nL 317.9231 36.677263 \nL 318.258235 52.20757 \nL 318.59337 48.332889 \nL 318.928505 53.372995 \nL 319.26364 28.286531 \nL 319.598775 44.04187 \nL 319.93391 42.497512 \nL 320.269046 63.142096 \nL 320.939316 27.078513 \nL 321.274451 41.995802 \nL 321.609586 33.619879 \nL 321.944721 42.059464 \nL 322.614992 24.643332 \nL 322.950127 47.288117 \nL 323.285262 26.486652 \nL 323.620397 46.867615 \nL 323.955532 45.536955 \nL 324.290667 16.320338 \nL 324.625802 23.827404 \nL 325.296073 55.873483 \nL 325.631208 29.734784 \nL 326.301478 49.546 \nL 326.636613 38.489825 \nL 326.971748 55.965552 \nL 327.306883 58.587126 \nL 327.642019 43.866191 \nL 327.977154 54.404036 \nL 328.312289 50.146986 \nL 328.647424 43.619202 \nL 328.982559 46.796982 \nL 329.317694 39.026728 \nL 329.652829 35.580966 \nL 329.987965 40.95929 \nL 330.3231 39.70957 \nL 330.658235 49.264304 \nL 330.99337 47.380184 \nL 331.328505 41.476277 \nL 331.66364 39.568779 \nL 331.998775 45.643458 \nL 332.33391 33.485234 \nL 332.669046 47.875504 \nL 333.004181 43.396671 \nL 333.339316 50.096195 \nL 333.674451 39.563183 \nL 334.009586 49.976905 \nL 334.344721 49.289921 \nL 334.679856 52.131196 \nL 335.350127 32.495938 \nL 335.685262 53.379744 \nL 336.020397 48.576623 \nL 336.355532 45.506558 \nL 336.690667 51.631188 \nL 337.025802 45.460686 \nL 337.360937 34.69402 \nL 337.696073 53.203339 \nL 338.031208 42.022937 \nL 338.366343 48.108042 \nL 338.701478 48.830045 \nL 339.036613 57.31608 \nL 339.371748 52.807404 \nL 339.706883 43.216128 \nL 340.042019 48.815318 \nL 340.377154 40.578586 \nL 340.712289 57.149439 \nL 341.047424 59.647946 \nL 341.382559 48.856838 \nL 341.717694 50.066359 \nL 342.052829 63.806322 \nL 342.387965 64.429064 \nL 342.7231 45.766946 \nL 343.058235 64.446253 \nL 343.39337 44.045081 \nL 343.728505 48.499503 \nL 344.06364 61.074233 \nL 344.398775 42.688658 \nL 344.73391 77.53037 \nL 345.069046 60.990543 \nL 345.404181 66.296077 \nL 345.739316 49.366336 \nL 346.074451 66.352496 \nL 346.409586 52.596418 \nL 346.744721 46.098655 \nL 347.079856 59.805453 \nL 347.414992 61.75613 \nL 347.750127 55.607403 \nL 348.085262 84.037323 \nL 348.755532 61.005197 \nL 349.090667 62.988809 \nL 349.425802 77.856452 \nL 349.760938 73.327988 \nL 350.096073 54.728823 \nL 350.431208 63.148924 \nL 350.766343 62.097409 \nL 351.101478 59.788022 \nL 351.436613 65.190404 \nL 351.771748 73.683931 \nL 352.106883 67.642102 \nL 352.442019 45.870745 \nL 352.777154 44.775111 \nL 353.447424 70.991702 \nL 353.782559 74.840404 \nL 354.117694 49.570942 \nL 354.452829 69.36285 \nL 354.787965 79.507668 \nL 355.1231 71.60639 \nL 355.458235 66.703498 \nL 355.79337 84.394324 \nL 356.128505 73.318301 \nL 356.46364 71.542028 \nL 356.798775 76.609459 \nL 357.13391 72.007562 \nL 357.469046 75.817795 \nL 357.804181 81.904225 \nL 358.139316 76.47508 \nL 358.474451 74.518469 \nL 358.809586 63.042683 \nL 359.144721 77.637539 \nL 359.479856 79.786169 \nL 359.814992 73.817455 \nL 360.150127 93.775867 \nL 360.485262 61.638205 \nL 360.820397 70.235445 \nL 361.155532 71.134235 \nL 361.490667 77.076468 \nL 361.825802 87.880786 \nL 362.160938 80.801274 \nL 362.496073 65.55508 \nL 362.831208 96.451414 \nL 363.166343 82.480014 \nL 363.501478 83.325232 \nL 363.836613 70.949641 \nL 364.171748 96.248946 \nL 364.506883 79.846753 \nL 364.842019 69.713098 \nL 365.177154 82.528583 \nL 365.512289 74.989576 \nL 365.847424 106.138277 \nL 366.182559 103.707846 \nL 366.517694 68.644069 \nL 366.852829 99.69757 \nL 367.187965 98.400775 \nL 367.858235 75.440037 \nL 368.19337 83.815755 \nL 368.528505 84.910789 \nL 368.86364 76.179989 \nL 369.198775 91.61773 \nL 369.53391 92.770981 \nL 369.869046 80.599954 \nL 370.204181 91.823625 \nL 370.539316 98.780059 \nL 370.874451 76.896654 \nL 371.544721 108.978502 \nL 371.879856 95.664681 \nL 372.214992 93.59539 \nL 372.550127 89.737363 \nL 372.885262 100.770042 \nL 373.220397 98.109781 \nL 373.555532 109.306412 \nL 373.890667 96.114413 \nL 374.225802 102.30204 \nL 374.560938 112.489715 \nL 374.896073 101.476985 \nL 375.231208 86.796192 \nL 375.566343 82.101863 \nL 375.901478 98.178936 \nL 376.236613 101.155948 \nL 376.571748 88.251735 \nL 376.906883 89.891982 \nL 377.242019 98.110836 \nL 377.577154 98.934564 \nL 377.912289 88.916927 \nL 378.247424 94.302807 \nL 378.582559 111.234364 \nL 378.917694 105.044636 \nL 379.252829 76.878982 \nL 379.587965 97.261669 \nL 380.59337 118.278568 \nL 380.928505 119.165787 \nL 381.598775 99.402145 \nL 381.93391 99.853833 \nL 382.269046 93.286039 \nL 382.604181 131.041487 \nL 383.274451 99.702393 \nL 383.609586 110.953466 \nL 383.944721 99.631651 \nL 384.279856 108.138779 \nL 384.614992 129.423769 \nL 384.950127 99.071378 \nL 385.285262 110.144044 \nL 385.620397 102.047039 \nL 385.955532 99.365602 \nL 386.290667 121.074283 \nL 386.625802 112.676119 \nL 386.960938 120.876101 \nL 386.960938 120.876101 \n\" clip-path=\"url(#p991db88ff6)\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 52.160938 173.52 \nL 52.160938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 386.960938 173.52 \nL 386.960938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 52.160938 173.52 \nL 386.960938 173.52 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 52.160938 7.2 \nL 386.960938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p991db88ff6\">\n <rect x=\"52.160938\" y=\"7.2\" width=\"334.8\" height=\"166.32\"/>\n </clipPath>\n </defs>\n</svg>\n"
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 84
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.309169705Z",
"start_time": "2026-04-22T07:03:24.235365355Z"
}
},
"cell_type": "code",
"source": [
"tau = 4\n",
"features = torch.zeros((T - tau, tau))\n",
"for i in range(tau):\n",
" features[:, i] = x[i: T - tau + i]\n",
"labels = x[tau:].reshape((-1, 1))\n",
"x,features,labels\n"
],
"id": "5d450c6f6b724a14",
"outputs": [
{
"data": {
"text/plain": [
"(tensor([-0.0948, 0.2143, -0.2523, -0.1235, -0.1826, 0.1189, -0.1963, 0.2347,\n",
" 0.1456, -0.1118, 0.3787, 0.3861, 0.2881, 0.1958, 0.0402, 0.0816,\n",
" 0.4793, 0.0351, 0.2378, 0.1459, 0.1108, 0.2544, -0.0127, 0.0733,\n",
" 0.3156, 0.0257, 0.3207, 0.3259, 0.3693, 0.0584, 0.1730, 0.3100,\n",
" 0.2328, 0.0525, 0.4465, 0.1293, 0.4330, 0.3193, 0.4704, 0.5238,\n",
" 0.5323, 0.4887, 0.0831, 0.5924, 0.6972, 0.3490, 0.7476, 0.6039,\n",
" 0.9995, 0.1455, 0.1417, 0.5968, 0.6673, 0.3425, 0.7685, 0.4904,\n",
" 0.2203, 0.2109, 0.4600, 0.5055, 0.3558, 0.7020, 0.7435, 0.4713,\n",
" 0.4318, 0.5861, 0.3592, 0.7750, 0.6640, 0.7908, 0.2776, 0.5868,\n",
" 0.6283, 0.3461, 0.6308, 0.7547, 0.5564, 0.7181, 0.7852, 0.7823,\n",
" 0.7238, 0.9294, 0.9023, 0.8100, 0.5561, 0.7124, 1.1566, 0.7628,\n",
" 0.9630, 0.4425, 1.0628, 0.7014, 0.4439, 0.7286, 0.8099, 0.5786,\n",
" 1.0638, 0.9519, 0.8388, 1.2088, 0.9172, 0.7014, 0.5667, 0.6040,\n",
" 0.5549, 0.7959, 0.9167, 0.9074, 0.6108, 0.8999, 0.9197, 0.8539,\n",
" 0.6566, 0.9941, 0.6902, 0.8782, 1.4898, 0.9888, 1.1911, 0.5683,\n",
" 0.8868, 0.7122, 0.8960, 1.1454, 1.2660, 1.0001, 0.6582, 0.9706,\n",
" 1.0110, 1.0355, 0.9761, 0.9439, 1.0824, 1.4095, 1.2544, 0.6541,\n",
" 1.0486, 1.0638, 0.9000, 0.9835, 1.2558, 1.1702, 0.8466, 0.7696,\n",
" 1.2446, 1.1460, 0.9258, 0.8150, 1.1086, 0.9475, 0.9675, 0.7330,\n",
" 1.1263, 1.1718, 0.9413, 1.0272, 0.7733, 0.9831, 0.8759, 0.7970,\n",
" 0.6360, 1.1815, 0.9689, 0.6976, 0.9265, 0.8338, 0.7960, 0.7705,\n",
" 1.2601, 1.2775, 0.7706, 1.0216, 1.1916, 0.8603, 0.9864, 1.0777,\n",
" 0.8930, 1.0063, 0.8376, 0.9923, 0.8081, 0.8020, 1.1461, 1.1018,\n",
" 0.8931, 1.0005, 0.8635, 0.7197, 1.2577, 1.0584, 1.4032, 0.8911,\n",
" 1.1415, 0.8241, 0.7946, 1.0221, 0.8792, 0.7211, 1.1821, 0.8079,\n",
" 0.8926, 1.0765, 0.9949, 0.9159, 0.7329, 0.9950, 0.7491, 0.8750,\n",
" 1.1863, 1.0095, 0.8046, 0.6274, 0.8936, 0.7595, 0.8423, 0.8655,\n",
" 0.6918, 0.7347, 1.1179, 0.5931, 0.8745, 0.4858, 0.9338, 1.1382,\n",
" 0.6084, 0.9479, 0.8726, 0.7202, 0.9596, 0.4386, 1.2525, 0.5120,\n",
" 0.7222, 0.6566, 0.8965, 0.7545, 1.1104, 0.6634, 0.5654, 1.0095,\n",
" 0.6558, 0.7260, 0.8515, 0.3430, 0.7703, 0.3753, 0.4490, 0.4373,\n",
" 0.8283, 0.5455, 0.7584, 0.8197, 0.4781, 0.3350, 0.6714, 0.3969,\n",
" 0.7131, 0.5609, 0.4327, 0.4293, 0.3552, 0.5445, 0.5609, 0.4110,\n",
" 0.8525, 0.3402, 0.4064, 0.5172, 0.5845, 0.6185, 0.4719, 0.9092,\n",
" 0.6964, 0.7267, 0.6934, 0.4337, 0.2031, 0.0898, 0.4377, 0.4203,\n",
" 0.2855, 0.4673, 0.6029, 0.4368, 0.1521, -0.0606, 0.2532, 0.4365,\n",
" 0.2989, 0.0743, 0.2734, 0.1060, 0.5543, -0.1211, 0.0968, 0.4911,\n",
" 0.5107, 0.4583, 0.2777, -0.0513, 0.1437, 0.0548, 0.0933, 0.1172,\n",
" 0.0718, 0.4027, 0.1805, 0.0869, -0.3066, 0.5615, -0.2721, -0.2765,\n",
" 0.0850, -0.1473, -0.1622, -0.1335, 0.1328, 0.0703, -0.6712, -0.1121,\n",
" -0.1208, 0.0092, -0.0805, -0.2017, 0.2339, -0.3533, -0.4598, 0.0620,\n",
" -0.5254, 0.0197, -0.0593, -0.1914, -0.4259, -0.0115, -0.5406, 0.0137,\n",
" -0.4240, -0.2822, -0.0796, -0.3495, -0.4475, 0.2453, -0.3729, -0.4086,\n",
" -0.2618, -0.4539, -0.6140, -0.2483, -0.4165, -0.3736, -0.0737, -0.0212,\n",
" -0.3644, -0.0472, -0.4087, -0.6794, -0.5921, -0.5632, -0.5971, -0.1935,\n",
" -0.9543, -0.7976, -0.3485, -0.9538, -0.6171, -0.7755, -0.4651, -0.8194,\n",
" -0.3005, -0.5191, -0.5902, -0.2464, -0.6908, -0.5054, -0.5528, -1.1089,\n",
" -0.7206, -0.8067, -0.6780, -0.2981, -0.6683, -0.4324, -0.8497, -0.5928,\n",
" -0.7203, -0.3751, -0.7423, -0.4109, -0.7345, -0.6653, -0.5752, -0.5198,\n",
" -0.7046, -1.1754, -0.9447, -0.7304, -0.6510, -0.5954, -0.7592, -0.5285,\n",
" -0.4249, -0.7993, -1.3758, -0.6218, -1.0691, -0.5775, -0.8174, -0.7021,\n",
" -0.7784, -0.7553, -1.2137, -0.7302, -0.7253, -0.6819, -1.3077, -1.3472,\n",
" -0.7104, -0.8387, -0.5973, -0.8619, -1.1138, -1.1314, -0.9765, -1.2121,\n",
" -0.8168, -0.7763, -1.2988, -0.9282, -1.1715, -0.7216, -0.7182, -0.2972,\n",
" -0.7471, -1.0089, -1.1431, -1.0396, -1.0381, -0.5979, -0.7363, -0.7808,\n",
" -0.9106, -1.1468, -1.1357, -0.6406, -0.9603, -1.2653, -1.5958, -1.0592,\n",
" -0.9698, -0.8252, -1.2515, -1.0474, -1.1103, -1.0035, -0.6669, -0.9120,\n",
" -0.9146, -1.1079, -0.8379, -0.9123, -0.5831, -1.6515, -0.9385, -1.0699,\n",
" -1.1498, -0.7861, -0.8942, -1.0452, -1.0064, -0.9116, -1.1150, -0.7801,\n",
" -1.0283, -1.0296, -1.0927, -0.7945, -1.0705, -1.3215, -1.2510, -0.9158,\n",
" -0.9377, -0.7314, -0.9773, -1.1910, -1.0539, -1.1439, -1.0784, -0.8543,\n",
" -1.1323, -1.3193, -0.8014, -0.7318, -0.5805, -0.8239, -1.1228, -1.0473,\n",
" -0.8206, -0.6544, -1.2654, -1.0757, -0.5389, -0.9908, -0.7894, -0.7463,\n",
" -1.0391, -0.8023, -0.8568, -1.2414, -0.9595, -1.1151, -0.9689, -1.1145,\n",
" -0.6853, -0.7547, -1.1000, -0.9054, -1.2262, -1.1359, -1.0174, -0.3782,\n",
" -0.8056, -1.1828, -0.8426, -0.9958, -0.9495, -1.2745, -0.7039, -0.5893,\n",
" -0.5648, -1.0538, -0.6724, -0.6340, -0.5070, -1.0956, -1.0957, -0.6823,\n",
" -0.5258, -0.5777, -0.9268, -0.5280, -0.5989, -0.8364, -0.7439, -0.7619,\n",
" -1.0159, -1.0627, -0.9416, -0.6270, -0.4307, -0.8575, -1.0748, -0.5529,\n",
" -0.9339, -0.7416, -0.6674, -0.3178, -0.6815, -0.7499, -0.6359, -0.8157,\n",
" -0.5582, -0.5083, -0.4527, -0.8350, -0.6317, -0.4338, -0.4875, -0.4046,\n",
" -0.3166, -0.3413, -0.4722, -0.7010, -1.2025, -0.2133, -0.3133, -0.4160,\n",
" -0.6681, -0.8990, -0.5464, -0.4518, -0.4402, -0.5246, -0.4561, -0.6747,\n",
" -0.1833, -0.4466, -0.4671, -0.5509, -0.6235, -0.2100, -0.3368, -0.3083,\n",
" -0.5129, -0.2880, -0.4075, -0.2784, 0.0631, -0.4355, -0.4237, -0.2578,\n",
" -0.1380, -0.5085, 0.1004, -0.1426, -0.2537, -0.1756, -0.2135, -0.1898,\n",
" -0.2947, -0.3934, -0.3412, -0.3343, -0.1450, -0.3178, -0.2156, -0.3232,\n",
" -0.3691, -0.2711, 0.1086, -0.2257, -0.0752, -0.0339, -0.0636, 0.0626,\n",
" -0.1460, 0.0792, 0.1529, 0.4743, 0.0343, -0.0158, -0.1255, -0.4698,\n",
" -0.0489, 0.2622, 0.0619, -0.2243, -0.1318, 0.0214, 0.2690, 0.0497,\n",
" 0.3451, -0.1116, 0.0173, 0.0708, 0.4135, 0.3188, 0.4808, -0.0340,\n",
" 0.4786, 0.4896, 0.1077, 0.3500, 0.1309, 0.1398, 0.1943, 0.1651,\n",
" 0.3227, 0.5541, 0.2688, 0.1892, 0.2509, 0.2078, -0.0140, 0.2443,\n",
" 0.3204, 0.5485, 0.4234, 0.3135, 0.4633, 0.0029, 0.2174, 0.6879,\n",
" 0.5089, 0.2479, 0.8608, 0.4307, 0.6205, 0.3482, 0.6469, 0.4475,\n",
" 0.6595, 0.3450, 0.3781, 0.4451, 0.1883, 0.6707, 0.8667, 0.5218,\n",
" 0.4004, 0.5271, 0.6446, 0.7222, 0.5722, 0.7676, 0.6824, 0.1981,\n",
" 0.8089, 0.6296, 0.6748, 0.7515, 0.5103, 0.9052, 0.8405, 0.9092,\n",
" 0.6918, 0.6477, 0.5402, 0.6477, 0.4210, 0.6973, 0.6019, 0.5364,\n",
" 0.8134, 0.5607, 0.7096, 0.5894, 0.3866, 1.0600, 0.7347, 0.8129,\n",
" 1.2088, 0.8825, 0.7179, 1.0115, 0.7013, 1.0128, 0.9747, 1.2759,\n",
" 0.7655, 1.0094, 0.7805, 0.6091, 1.2033, 0.9678, 0.8219, 0.8157,\n",
" 0.9188, 0.7436, 0.8910, 0.7291, 0.9559, 0.9389, 1.2030, 1.0495,\n",
" 1.1811, 0.8884, 0.8390, 0.9894, 0.9238, 0.7628, 0.5421, 1.5147,\n",
" 0.6971, 0.6740, 0.8342, 0.6554, 0.7455, 0.6916, 1.2706, 1.1277,\n",
" 0.9248, 0.9976, 1.2404, 0.6919, 1.3449, 1.1243, 1.0492, 0.9266,\n",
" 1.1194, 1.0304, 1.1323, 1.2372, 0.8300, 1.1916, 1.0923, 0.8313,\n",
" 0.8572, 1.1128, 1.0047, 1.1544, 0.9745, 1.0503, 0.9171, 0.8073,\n",
" 1.2056, 1.0976, 0.9910, 1.1834, 1.1389, 0.9142, 0.9367, 1.0121,\n",
" 0.7704, 1.0558, 0.7306, 0.8117, 0.7061, 1.2315, 0.9015, 0.9339,\n",
" 0.5016, 0.9227, 1.2568, 0.9444, 1.1198, 0.9431, 1.0997, 1.3078,\n",
" 0.8336, 1.2692, 0.8424, 0.8702, 1.4820, 1.3248, 0.9324, 0.6538,\n",
" 1.2011, 1.0170, 0.7863, 1.0178, 0.6519, 0.5970, 0.9052, 0.6846,\n",
" 0.7737, 0.9104, 0.8439, 1.0066, 1.0787, 0.9661, 0.9923, 0.7922,\n",
" 0.8316, 0.9553, 0.9952, 0.8680, 1.1226, 0.8213, 0.9151, 0.7748,\n",
" 0.9953, 0.7773, 0.7916, 0.7321, 0.9130, 1.1433, 0.7060, 0.8066,\n",
" 0.8709, 0.7426, 0.8718, 1.0973, 0.7097, 0.9438, 0.8164, 0.8013,\n",
" 0.6236, 0.7180, 0.9188, 0.8016, 0.9741, 0.6271, 0.5747, 0.8007,\n",
" 0.7754, 0.4877, 0.4746, 0.8654, 0.4743, 0.9015, 0.8082, 0.5449,\n",
" 0.9299, 0.2003, 0.5466, 0.4355, 0.7900, 0.4343, 0.7224, 0.8585,\n",
" 0.5714, 0.5306, 0.6594, 0.0640, 0.3203, 0.5463, 0.5048, 0.1935,\n",
" 0.2883, 0.6778, 0.5014, 0.5235, 0.5718, 0.4587, 0.2808, 0.4073,\n",
" 0.8632, 0.8862, 0.5757, 0.3372, 0.2566, 0.7858, 0.3713, 0.1589,\n",
" 0.3243, 0.4270, 0.0565, 0.2885, 0.3257, 0.2196, 0.3159, 0.2361,\n",
" 0.1087, 0.2224, 0.2633, 0.5037, 0.1980, 0.1530, 0.2780, -0.1399,\n",
" 0.5331, 0.3530, 0.3342, 0.2098, -0.0165, 0.1318, 0.4510, -0.1959,\n",
" 0.0966, 0.0789, 0.3381, -0.1917, 0.1518, 0.3640, 0.0956, 0.2535,\n",
" -0.3988, -0.3479, 0.3864, -0.2639, -0.2368, 0.0258, 0.2441, 0.0687,\n",
" 0.0457, 0.2286, -0.0947, -0.1189, 0.1360, -0.0990, -0.2447, 0.2135,\n",
" -0.1830, -0.4583, -0.1795, -0.1361, -0.0553, -0.2864, -0.2307, -0.4651,\n",
" -0.1889, -0.3185, -0.5318, -0.3012, 0.0062, 0.1046, -0.2321, -0.2945,\n",
" -0.0242, -0.0586, -0.2307, -0.2479, -0.0382, -0.1509, -0.5055, -0.3759,\n",
" 0.2139, -0.2129, -0.3605, -0.5222, -0.6530, -0.6716, -0.4330, -0.2577,\n",
" -0.2672, -0.1297, -0.9203, -0.5832, -0.2640, -0.4996, -0.2625, -0.4407,\n",
" -0.8864, -0.2508, -0.4827, -0.3131, -0.2570, -0.7116, -0.5357, -0.7074]),\n",
" tensor([[-0.0948, 0.2143, -0.2523, -0.1235],\n",
" [ 0.2143, -0.2523, -0.1235, -0.1826],\n",
" [-0.2523, -0.1235, -0.1826, 0.1189],\n",
" ...,\n",
" [-0.2508, -0.4827, -0.3131, -0.2570],\n",
" [-0.4827, -0.3131, -0.2570, -0.7116],\n",
" [-0.3131, -0.2570, -0.7116, -0.5357]]),\n",
" tensor([[-0.1826],\n",
" [ 0.1189],\n",
" [-0.1963],\n",
" [ 0.2347],\n",
" [ 0.1456],\n",
" [-0.1118],\n",
" [ 0.3787],\n",
" [ 0.3861],\n",
" [ 0.2881],\n",
" [ 0.1958],\n",
" [ 0.0402],\n",
" [ 0.0816],\n",
" [ 0.4793],\n",
" [ 0.0351],\n",
" [ 0.2378],\n",
" [ 0.1459],\n",
" [ 0.1108],\n",
" [ 0.2544],\n",
" [-0.0127],\n",
" [ 0.0733],\n",
" [ 0.3156],\n",
" [ 0.0257],\n",
" [ 0.3207],\n",
" [ 0.3259],\n",
" [ 0.3693],\n",
" [ 0.0584],\n",
" [ 0.1730],\n",
" [ 0.3100],\n",
" [ 0.2328],\n",
" [ 0.0525],\n",
" [ 0.4465],\n",
" [ 0.1293],\n",
" [ 0.4330],\n",
" [ 0.3193],\n",
" [ 0.4704],\n",
" [ 0.5238],\n",
" [ 0.5323],\n",
" [ 0.4887],\n",
" [ 0.0831],\n",
" [ 0.5924],\n",
" [ 0.6972],\n",
" [ 0.3490],\n",
" [ 0.7476],\n",
" [ 0.6039],\n",
" [ 0.9995],\n",
" [ 0.1455],\n",
" [ 0.1417],\n",
" [ 0.5968],\n",
" [ 0.6673],\n",
" [ 0.3425],\n",
" [ 0.7685],\n",
" [ 0.4904],\n",
" [ 0.2203],\n",
" [ 0.2109],\n",
" [ 0.4600],\n",
" [ 0.5055],\n",
" [ 0.3558],\n",
" [ 0.7020],\n",
" [ 0.7435],\n",
" [ 0.4713],\n",
" [ 0.4318],\n",
" [ 0.5861],\n",
" [ 0.3592],\n",
" [ 0.7750],\n",
" [ 0.6640],\n",
" [ 0.7908],\n",
" [ 0.2776],\n",
" [ 0.5868],\n",
" [ 0.6283],\n",
" [ 0.3461],\n",
" [ 0.6308],\n",
" [ 0.7547],\n",
" [ 0.5564],\n",
" [ 0.7181],\n",
" [ 0.7852],\n",
" [ 0.7823],\n",
" [ 0.7238],\n",
" [ 0.9294],\n",
" [ 0.9023],\n",
" [ 0.8100],\n",
" [ 0.5561],\n",
" [ 0.7124],\n",
" [ 1.1566],\n",
" [ 0.7628],\n",
" [ 0.9630],\n",
" [ 0.4425],\n",
" [ 1.0628],\n",
" [ 0.7014],\n",
" [ 0.4439],\n",
" [ 0.7286],\n",
" [ 0.8099],\n",
" [ 0.5786],\n",
" [ 1.0638],\n",
" [ 0.9519],\n",
" [ 0.8388],\n",
" [ 1.2088],\n",
" [ 0.9172],\n",
" [ 0.7014],\n",
" [ 0.5667],\n",
" [ 0.6040],\n",
" [ 0.5549],\n",
" [ 0.7959],\n",
" [ 0.9167],\n",
" [ 0.9074],\n",
" [ 0.6108],\n",
" [ 0.8999],\n",
" [ 0.9197],\n",
" [ 0.8539],\n",
" [ 0.6566],\n",
" [ 0.9941],\n",
" [ 0.6902],\n",
" [ 0.8782],\n",
" [ 1.4898],\n",
" [ 0.9888],\n",
" [ 1.1911],\n",
" [ 0.5683],\n",
" [ 0.8868],\n",
" [ 0.7122],\n",
" [ 0.8960],\n",
" [ 1.1454],\n",
" [ 1.2660],\n",
" [ 1.0001],\n",
" [ 0.6582],\n",
" [ 0.9706],\n",
" [ 1.0110],\n",
" [ 1.0355],\n",
" [ 0.9761],\n",
" [ 0.9439],\n",
" [ 1.0824],\n",
" [ 1.4095],\n",
" [ 1.2544],\n",
" [ 0.6541],\n",
" [ 1.0486],\n",
" [ 1.0638],\n",
" [ 0.9000],\n",
" [ 0.9835],\n",
" [ 1.2558],\n",
" [ 1.1702],\n",
" [ 0.8466],\n",
" [ 0.7696],\n",
" [ 1.2446],\n",
" [ 1.1460],\n",
" [ 0.9258],\n",
" [ 0.8150],\n",
" [ 1.1086],\n",
" [ 0.9475],\n",
" [ 0.9675],\n",
" [ 0.7330],\n",
" [ 1.1263],\n",
" [ 1.1718],\n",
" [ 0.9413],\n",
" [ 1.0272],\n",
" [ 0.7733],\n",
" [ 0.9831],\n",
" [ 0.8759],\n",
" [ 0.7970],\n",
" [ 0.6360],\n",
" [ 1.1815],\n",
" [ 0.9689],\n",
" [ 0.6976],\n",
" [ 0.9265],\n",
" [ 0.8338],\n",
" [ 0.7960],\n",
" [ 0.7705],\n",
" [ 1.2601],\n",
" [ 1.2775],\n",
" [ 0.7706],\n",
" [ 1.0216],\n",
" [ 1.1916],\n",
" [ 0.8603],\n",
" [ 0.9864],\n",
" [ 1.0777],\n",
" [ 0.8930],\n",
" [ 1.0063],\n",
" [ 0.8376],\n",
" [ 0.9923],\n",
" [ 0.8081],\n",
" [ 0.8020],\n",
" [ 1.1461],\n",
" [ 1.1018],\n",
" [ 0.8931],\n",
" [ 1.0005],\n",
" [ 0.8635],\n",
" [ 0.7197],\n",
" [ 1.2577],\n",
" [ 1.0584],\n",
" [ 1.4032],\n",
" [ 0.8911],\n",
" [ 1.1415],\n",
" [ 0.8241],\n",
" [ 0.7946],\n",
" [ 1.0221],\n",
" [ 0.8792],\n",
" [ 0.7211],\n",
" [ 1.1821],\n",
" [ 0.8079],\n",
" [ 0.8926],\n",
" [ 1.0765],\n",
" [ 0.9949],\n",
" [ 0.9159],\n",
" [ 0.7329],\n",
" [ 0.9950],\n",
" [ 0.7491],\n",
" [ 0.8750],\n",
" [ 1.1863],\n",
" [ 1.0095],\n",
" [ 0.8046],\n",
" [ 0.6274],\n",
" [ 0.8936],\n",
" [ 0.7595],\n",
" [ 0.8423],\n",
" [ 0.8655],\n",
" [ 0.6918],\n",
" [ 0.7347],\n",
" [ 1.1179],\n",
" [ 0.5931],\n",
" [ 0.8745],\n",
" [ 0.4858],\n",
" [ 0.9338],\n",
" [ 1.1382],\n",
" [ 0.6084],\n",
" [ 0.9479],\n",
" [ 0.8726],\n",
" [ 0.7202],\n",
" [ 0.9596],\n",
" [ 0.4386],\n",
" [ 1.2525],\n",
" [ 0.5120],\n",
" [ 0.7222],\n",
" [ 0.6566],\n",
" [ 0.8965],\n",
" [ 0.7545],\n",
" [ 1.1104],\n",
" [ 0.6634],\n",
" [ 0.5654],\n",
" [ 1.0095],\n",
" [ 0.6558],\n",
" [ 0.7260],\n",
" [ 0.8515],\n",
" [ 0.3430],\n",
" [ 0.7703],\n",
" [ 0.3753],\n",
" [ 0.4490],\n",
" [ 0.4373],\n",
" [ 0.8283],\n",
" [ 0.5455],\n",
" [ 0.7584],\n",
" [ 0.8197],\n",
" [ 0.4781],\n",
" [ 0.3350],\n",
" [ 0.6714],\n",
" [ 0.3969],\n",
" [ 0.7131],\n",
" [ 0.5609],\n",
" [ 0.4327],\n",
" [ 0.4293],\n",
" [ 0.3552],\n",
" [ 0.5445],\n",
" [ 0.5609],\n",
" [ 0.4110],\n",
" [ 0.8525],\n",
" [ 0.3402],\n",
" [ 0.4064],\n",
" [ 0.5172],\n",
" [ 0.5845],\n",
" [ 0.6185],\n",
" [ 0.4719],\n",
" [ 0.9092],\n",
" [ 0.6964],\n",
" [ 0.7267],\n",
" [ 0.6934],\n",
" [ 0.4337],\n",
" [ 0.2031],\n",
" [ 0.0898],\n",
" [ 0.4377],\n",
" [ 0.4203],\n",
" [ 0.2855],\n",
" [ 0.4673],\n",
" [ 0.6029],\n",
" [ 0.4368],\n",
" [ 0.1521],\n",
" [-0.0606],\n",
" [ 0.2532],\n",
" [ 0.4365],\n",
" [ 0.2989],\n",
" [ 0.0743],\n",
" [ 0.2734],\n",
" [ 0.1060],\n",
" [ 0.5543],\n",
" [-0.1211],\n",
" [ 0.0968],\n",
" [ 0.4911],\n",
" [ 0.5107],\n",
" [ 0.4583],\n",
" [ 0.2777],\n",
" [-0.0513],\n",
" [ 0.1437],\n",
" [ 0.0548],\n",
" [ 0.0933],\n",
" [ 0.1172],\n",
" [ 0.0718],\n",
" [ 0.4027],\n",
" [ 0.1805],\n",
" [ 0.0869],\n",
" [-0.3066],\n",
" [ 0.5615],\n",
" [-0.2721],\n",
" [-0.2765],\n",
" [ 0.0850],\n",
" [-0.1473],\n",
" [-0.1622],\n",
" [-0.1335],\n",
" [ 0.1328],\n",
" [ 0.0703],\n",
" [-0.6712],\n",
" [-0.1121],\n",
" [-0.1208],\n",
" [ 0.0092],\n",
" [-0.0805],\n",
" [-0.2017],\n",
" [ 0.2339],\n",
" [-0.3533],\n",
" [-0.4598],\n",
" [ 0.0620],\n",
" [-0.5254],\n",
" [ 0.0197],\n",
" [-0.0593],\n",
" [-0.1914],\n",
" [-0.4259],\n",
" [-0.0115],\n",
" [-0.5406],\n",
" [ 0.0137],\n",
" [-0.4240],\n",
" [-0.2822],\n",
" [-0.0796],\n",
" [-0.3495],\n",
" [-0.4475],\n",
" [ 0.2453],\n",
" [-0.3729],\n",
" [-0.4086],\n",
" [-0.2618],\n",
" [-0.4539],\n",
" [-0.6140],\n",
" [-0.2483],\n",
" [-0.4165],\n",
" [-0.3736],\n",
" [-0.0737],\n",
" [-0.0212],\n",
" [-0.3644],\n",
" [-0.0472],\n",
" [-0.4087],\n",
" [-0.6794],\n",
" [-0.5921],\n",
" [-0.5632],\n",
" [-0.5971],\n",
" [-0.1935],\n",
" [-0.9543],\n",
" [-0.7976],\n",
" [-0.3485],\n",
" [-0.9538],\n",
" [-0.6171],\n",
" [-0.7755],\n",
" [-0.4651],\n",
" [-0.8194],\n",
" [-0.3005],\n",
" [-0.5191],\n",
" [-0.5902],\n",
" [-0.2464],\n",
" [-0.6908],\n",
" [-0.5054],\n",
" [-0.5528],\n",
" [-1.1089],\n",
" [-0.7206],\n",
" [-0.8067],\n",
" [-0.6780],\n",
" [-0.2981],\n",
" [-0.6683],\n",
" [-0.4324],\n",
" [-0.8497],\n",
" [-0.5928],\n",
" [-0.7203],\n",
" [-0.3751],\n",
" [-0.7423],\n",
" [-0.4109],\n",
" [-0.7345],\n",
" [-0.6653],\n",
" [-0.5752],\n",
" [-0.5198],\n",
" [-0.7046],\n",
" [-1.1754],\n",
" [-0.9447],\n",
" [-0.7304],\n",
" [-0.6510],\n",
" [-0.5954],\n",
" [-0.7592],\n",
" [-0.5285],\n",
" [-0.4249],\n",
" [-0.7993],\n",
" [-1.3758],\n",
" [-0.6218],\n",
" [-1.0691],\n",
" [-0.5775],\n",
" [-0.8174],\n",
" [-0.7021],\n",
" [-0.7784],\n",
" [-0.7553],\n",
" [-1.2137],\n",
" [-0.7302],\n",
" [-0.7253],\n",
" [-0.6819],\n",
" [-1.3077],\n",
" [-1.3472],\n",
" [-0.7104],\n",
" [-0.8387],\n",
" [-0.5973],\n",
" [-0.8619],\n",
" [-1.1138],\n",
" [-1.1314],\n",
" [-0.9765],\n",
" [-1.2121],\n",
" [-0.8168],\n",
" [-0.7763],\n",
" [-1.2988],\n",
" [-0.9282],\n",
" [-1.1715],\n",
" [-0.7216],\n",
" [-0.7182],\n",
" [-0.2972],\n",
" [-0.7471],\n",
" [-1.0089],\n",
" [-1.1431],\n",
" [-1.0396],\n",
" [-1.0381],\n",
" [-0.5979],\n",
" [-0.7363],\n",
" [-0.7808],\n",
" [-0.9106],\n",
" [-1.1468],\n",
" [-1.1357],\n",
" [-0.6406],\n",
" [-0.9603],\n",
" [-1.2653],\n",
" [-1.5958],\n",
" [-1.0592],\n",
" [-0.9698],\n",
" [-0.8252],\n",
" [-1.2515],\n",
" [-1.0474],\n",
" [-1.1103],\n",
" [-1.0035],\n",
" [-0.6669],\n",
" [-0.9120],\n",
" [-0.9146],\n",
" [-1.1079],\n",
" [-0.8379],\n",
" [-0.9123],\n",
" [-0.5831],\n",
" [-1.6515],\n",
" [-0.9385],\n",
" [-1.0699],\n",
" [-1.1498],\n",
" [-0.7861],\n",
" [-0.8942],\n",
" [-1.0452],\n",
" [-1.0064],\n",
" [-0.9116],\n",
" [-1.1150],\n",
" [-0.7801],\n",
" [-1.0283],\n",
" [-1.0296],\n",
" [-1.0927],\n",
" [-0.7945],\n",
" [-1.0705],\n",
" [-1.3215],\n",
" [-1.2510],\n",
" [-0.9158],\n",
" [-0.9377],\n",
" [-0.7314],\n",
" [-0.9773],\n",
" [-1.1910],\n",
" [-1.0539],\n",
" [-1.1439],\n",
" [-1.0784],\n",
" [-0.8543],\n",
" [-1.1323],\n",
" [-1.3193],\n",
" [-0.8014],\n",
" [-0.7318],\n",
" [-0.5805],\n",
" [-0.8239],\n",
" [-1.1228],\n",
" [-1.0473],\n",
" [-0.8206],\n",
" [-0.6544],\n",
" [-1.2654],\n",
" [-1.0757],\n",
" [-0.5389],\n",
" [-0.9908],\n",
" [-0.7894],\n",
" [-0.7463],\n",
" [-1.0391],\n",
" [-0.8023],\n",
" [-0.8568],\n",
" [-1.2414],\n",
" [-0.9595],\n",
" [-1.1151],\n",
" [-0.9689],\n",
" [-1.1145],\n",
" [-0.6853],\n",
" [-0.7547],\n",
" [-1.1000],\n",
" [-0.9054],\n",
" [-1.2262],\n",
" [-1.1359],\n",
" [-1.0174],\n",
" [-0.3782],\n",
" [-0.8056],\n",
" [-1.1828],\n",
" [-0.8426],\n",
" [-0.9958],\n",
" [-0.9495],\n",
" [-1.2745],\n",
" [-0.7039],\n",
" [-0.5893],\n",
" [-0.5648],\n",
" [-1.0538],\n",
" [-0.6724],\n",
" [-0.6340],\n",
" [-0.5070],\n",
" [-1.0956],\n",
" [-1.0957],\n",
" [-0.6823],\n",
" [-0.5258],\n",
" [-0.5777],\n",
" [-0.9268],\n",
" [-0.5280],\n",
" [-0.5989],\n",
" [-0.8364],\n",
" [-0.7439],\n",
" [-0.7619],\n",
" [-1.0159],\n",
" [-1.0627],\n",
" [-0.9416],\n",
" [-0.6270],\n",
" [-0.4307],\n",
" [-0.8575],\n",
" [-1.0748],\n",
" [-0.5529],\n",
" [-0.9339],\n",
" [-0.7416],\n",
" [-0.6674],\n",
" [-0.3178],\n",
" [-0.6815],\n",
" [-0.7499],\n",
" [-0.6359],\n",
" [-0.8157],\n",
" [-0.5582],\n",
" [-0.5083],\n",
" [-0.4527],\n",
" [-0.8350],\n",
" [-0.6317],\n",
" [-0.4338],\n",
" [-0.4875],\n",
" [-0.4046],\n",
" [-0.3166],\n",
" [-0.3413],\n",
" [-0.4722],\n",
" [-0.7010],\n",
" [-1.2025],\n",
" [-0.2133],\n",
" [-0.3133],\n",
" [-0.4160],\n",
" [-0.6681],\n",
" [-0.8990],\n",
" [-0.5464],\n",
" [-0.4518],\n",
" [-0.4402],\n",
" [-0.5246],\n",
" [-0.4561],\n",
" [-0.6747],\n",
" [-0.1833],\n",
" [-0.4466],\n",
" [-0.4671],\n",
" [-0.5509],\n",
" [-0.6235],\n",
" [-0.2100],\n",
" [-0.3368],\n",
" [-0.3083],\n",
" [-0.5129],\n",
" [-0.2880],\n",
" [-0.4075],\n",
" [-0.2784],\n",
" [ 0.0631],\n",
" [-0.4355],\n",
" [-0.4237],\n",
" [-0.2578],\n",
" [-0.1380],\n",
" [-0.5085],\n",
" [ 0.1004],\n",
" [-0.1426],\n",
" [-0.2537],\n",
" [-0.1756],\n",
" [-0.2135],\n",
" [-0.1898],\n",
" [-0.2947],\n",
" [-0.3934],\n",
" [-0.3412],\n",
" [-0.3343],\n",
" [-0.1450],\n",
" [-0.3178],\n",
" [-0.2156],\n",
" [-0.3232],\n",
" [-0.3691],\n",
" [-0.2711],\n",
" [ 0.1086],\n",
" [-0.2257],\n",
" [-0.0752],\n",
" [-0.0339],\n",
" [-0.0636],\n",
" [ 0.0626],\n",
" [-0.1460],\n",
" [ 0.0792],\n",
" [ 0.1529],\n",
" [ 0.4743],\n",
" [ 0.0343],\n",
" [-0.0158],\n",
" [-0.1255],\n",
" [-0.4698],\n",
" [-0.0489],\n",
" [ 0.2622],\n",
" [ 0.0619],\n",
" [-0.2243],\n",
" [-0.1318],\n",
" [ 0.0214],\n",
" [ 0.2690],\n",
" [ 0.0497],\n",
" [ 0.3451],\n",
" [-0.1116],\n",
" [ 0.0173],\n",
" [ 0.0708],\n",
" [ 0.4135],\n",
" [ 0.3188],\n",
" [ 0.4808],\n",
" [-0.0340],\n",
" [ 0.4786],\n",
" [ 0.4896],\n",
" [ 0.1077],\n",
" [ 0.3500],\n",
" [ 0.1309],\n",
" [ 0.1398],\n",
" [ 0.1943],\n",
" [ 0.1651],\n",
" [ 0.3227],\n",
" [ 0.5541],\n",
" [ 0.2688],\n",
" [ 0.1892],\n",
" [ 0.2509],\n",
" [ 0.2078],\n",
" [-0.0140],\n",
" [ 0.2443],\n",
" [ 0.3204],\n",
" [ 0.5485],\n",
" [ 0.4234],\n",
" [ 0.3135],\n",
" [ 0.4633],\n",
" [ 0.0029],\n",
" [ 0.2174],\n",
" [ 0.6879],\n",
" [ 0.5089],\n",
" [ 0.2479],\n",
" [ 0.8608],\n",
" [ 0.4307],\n",
" [ 0.6205],\n",
" [ 0.3482],\n",
" [ 0.6469],\n",
" [ 0.4475],\n",
" [ 0.6595],\n",
" [ 0.3450],\n",
" [ 0.3781],\n",
" [ 0.4451],\n",
" [ 0.1883],\n",
" [ 0.6707],\n",
" [ 0.8667],\n",
" [ 0.5218],\n",
" [ 0.4004],\n",
" [ 0.5271],\n",
" [ 0.6446],\n",
" [ 0.7222],\n",
" [ 0.5722],\n",
" [ 0.7676],\n",
" [ 0.6824],\n",
" [ 0.1981],\n",
" [ 0.8089],\n",
" [ 0.6296],\n",
" [ 0.6748],\n",
" [ 0.7515],\n",
" [ 0.5103],\n",
" [ 0.9052],\n",
" [ 0.8405],\n",
" [ 0.9092],\n",
" [ 0.6918],\n",
" [ 0.6477],\n",
" [ 0.5402],\n",
" [ 0.6477],\n",
" [ 0.4210],\n",
" [ 0.6973],\n",
" [ 0.6019],\n",
" [ 0.5364],\n",
" [ 0.8134],\n",
" [ 0.5607],\n",
" [ 0.7096],\n",
" [ 0.5894],\n",
" [ 0.3866],\n",
" [ 1.0600],\n",
" [ 0.7347],\n",
" [ 0.8129],\n",
" [ 1.2088],\n",
" [ 0.8825],\n",
" [ 0.7179],\n",
" [ 1.0115],\n",
" [ 0.7013],\n",
" [ 1.0128],\n",
" [ 0.9747],\n",
" [ 1.2759],\n",
" [ 0.7655],\n",
" [ 1.0094],\n",
" [ 0.7805],\n",
" [ 0.6091],\n",
" [ 1.2033],\n",
" [ 0.9678],\n",
" [ 0.8219],\n",
" [ 0.8157],\n",
" [ 0.9188],\n",
" [ 0.7436],\n",
" [ 0.8910],\n",
" [ 0.7291],\n",
" [ 0.9559],\n",
" [ 0.9389],\n",
" [ 1.2030],\n",
" [ 1.0495],\n",
" [ 1.1811],\n",
" [ 0.8884],\n",
" [ 0.8390],\n",
" [ 0.9894],\n",
" [ 0.9238],\n",
" [ 0.7628],\n",
" [ 0.5421],\n",
" [ 1.5147],\n",
" [ 0.6971],\n",
" [ 0.6740],\n",
" [ 0.8342],\n",
" [ 0.6554],\n",
" [ 0.7455],\n",
" [ 0.6916],\n",
" [ 1.2706],\n",
" [ 1.1277],\n",
" [ 0.9248],\n",
" [ 0.9976],\n",
" [ 1.2404],\n",
" [ 0.6919],\n",
" [ 1.3449],\n",
" [ 1.1243],\n",
" [ 1.0492],\n",
" [ 0.9266],\n",
" [ 1.1194],\n",
" [ 1.0304],\n",
" [ 1.1323],\n",
" [ 1.2372],\n",
" [ 0.8300],\n",
" [ 1.1916],\n",
" [ 1.0923],\n",
" [ 0.8313],\n",
" [ 0.8572],\n",
" [ 1.1128],\n",
" [ 1.0047],\n",
" [ 1.1544],\n",
" [ 0.9745],\n",
" [ 1.0503],\n",
" [ 0.9171],\n",
" [ 0.8073],\n",
" [ 1.2056],\n",
" [ 1.0976],\n",
" [ 0.9910],\n",
" [ 1.1834],\n",
" [ 1.1389],\n",
" [ 0.9142],\n",
" [ 0.9367],\n",
" [ 1.0121],\n",
" [ 0.7704],\n",
" [ 1.0558],\n",
" [ 0.7306],\n",
" [ 0.8117],\n",
" [ 0.7061],\n",
" [ 1.2315],\n",
" [ 0.9015],\n",
" [ 0.9339],\n",
" [ 0.5016],\n",
" [ 0.9227],\n",
" [ 1.2568],\n",
" [ 0.9444],\n",
" [ 1.1198],\n",
" [ 0.9431],\n",
" [ 1.0997],\n",
" [ 1.3078],\n",
" [ 0.8336],\n",
" [ 1.2692],\n",
" [ 0.8424],\n",
" [ 0.8702],\n",
" [ 1.4820],\n",
" [ 1.3248],\n",
" [ 0.9324],\n",
" [ 0.6538],\n",
" [ 1.2011],\n",
" [ 1.0170],\n",
" [ 0.7863],\n",
" [ 1.0178],\n",
" [ 0.6519],\n",
" [ 0.5970],\n",
" [ 0.9052],\n",
" [ 0.6846],\n",
" [ 0.7737],\n",
" [ 0.9104],\n",
" [ 0.8439],\n",
" [ 1.0066],\n",
" [ 1.0787],\n",
" [ 0.9661],\n",
" [ 0.9923],\n",
" [ 0.7922],\n",
" [ 0.8316],\n",
" [ 0.9553],\n",
" [ 0.9952],\n",
" [ 0.8680],\n",
" [ 1.1226],\n",
" [ 0.8213],\n",
" [ 0.9151],\n",
" [ 0.7748],\n",
" [ 0.9953],\n",
" [ 0.7773],\n",
" [ 0.7916],\n",
" [ 0.7321],\n",
" [ 0.9130],\n",
" [ 1.1433],\n",
" [ 0.7060],\n",
" [ 0.8066],\n",
" [ 0.8709],\n",
" [ 0.7426],\n",
" [ 0.8718],\n",
" [ 1.0973],\n",
" [ 0.7097],\n",
" [ 0.9438],\n",
" [ 0.8164],\n",
" [ 0.8013],\n",
" [ 0.6236],\n",
" [ 0.7180],\n",
" [ 0.9188],\n",
" [ 0.8016],\n",
" [ 0.9741],\n",
" [ 0.6271],\n",
" [ 0.5747],\n",
" [ 0.8007],\n",
" [ 0.7754],\n",
" [ 0.4877],\n",
" [ 0.4746],\n",
" [ 0.8654],\n",
" [ 0.4743],\n",
" [ 0.9015],\n",
" [ 0.8082],\n",
" [ 0.5449],\n",
" [ 0.9299],\n",
" [ 0.2003],\n",
" [ 0.5466],\n",
" [ 0.4355],\n",
" [ 0.7900],\n",
" [ 0.4343],\n",
" [ 0.7224],\n",
" [ 0.8585],\n",
" [ 0.5714],\n",
" [ 0.5306],\n",
" [ 0.6594],\n",
" [ 0.0640],\n",
" [ 0.3203],\n",
" [ 0.5463],\n",
" [ 0.5048],\n",
" [ 0.1935],\n",
" [ 0.2883],\n",
" [ 0.6778],\n",
" [ 0.5014],\n",
" [ 0.5235],\n",
" [ 0.5718],\n",
" [ 0.4587],\n",
" [ 0.2808],\n",
" [ 0.4073],\n",
" [ 0.8632],\n",
" [ 0.8862],\n",
" [ 0.5757],\n",
" [ 0.3372],\n",
" [ 0.2566],\n",
" [ 0.7858],\n",
" [ 0.3713],\n",
" [ 0.1589],\n",
" [ 0.3243],\n",
" [ 0.4270],\n",
" [ 0.0565],\n",
" [ 0.2885],\n",
" [ 0.3257],\n",
" [ 0.2196],\n",
" [ 0.3159],\n",
" [ 0.2361],\n",
" [ 0.1087],\n",
" [ 0.2224],\n",
" [ 0.2633],\n",
" [ 0.5037],\n",
" [ 0.1980],\n",
" [ 0.1530],\n",
" [ 0.2780],\n",
" [-0.1399],\n",
" [ 0.5331],\n",
" [ 0.3530],\n",
" [ 0.3342],\n",
" [ 0.2098],\n",
" [-0.0165],\n",
" [ 0.1318],\n",
" [ 0.4510],\n",
" [-0.1959],\n",
" [ 0.0966],\n",
" [ 0.0789],\n",
" [ 0.3381],\n",
" [-0.1917],\n",
" [ 0.1518],\n",
" [ 0.3640],\n",
" [ 0.0956],\n",
" [ 0.2535],\n",
" [-0.3988],\n",
" [-0.3479],\n",
" [ 0.3864],\n",
" [-0.2639],\n",
" [-0.2368],\n",
" [ 0.0258],\n",
" [ 0.2441],\n",
" [ 0.0687],\n",
" [ 0.0457],\n",
" [ 0.2286],\n",
" [-0.0947],\n",
" [-0.1189],\n",
" [ 0.1360],\n",
" [-0.0990],\n",
" [-0.2447],\n",
" [ 0.2135],\n",
" [-0.1830],\n",
" [-0.4583],\n",
" [-0.1795],\n",
" [-0.1361],\n",
" [-0.0553],\n",
" [-0.2864],\n",
" [-0.2307],\n",
" [-0.4651],\n",
" [-0.1889],\n",
" [-0.3185],\n",
" [-0.5318],\n",
" [-0.3012],\n",
" [ 0.0062],\n",
" [ 0.1046],\n",
" [-0.2321],\n",
" [-0.2945],\n",
" [-0.0242],\n",
" [-0.0586],\n",
" [-0.2307],\n",
" [-0.2479],\n",
" [-0.0382],\n",
" [-0.1509],\n",
" [-0.5055],\n",
" [-0.3759],\n",
" [ 0.2139],\n",
" [-0.2129],\n",
" [-0.3605],\n",
" [-0.5222],\n",
" [-0.6530],\n",
" [-0.6716],\n",
" [-0.4330],\n",
" [-0.2577],\n",
" [-0.2672],\n",
" [-0.1297],\n",
" [-0.9203],\n",
" [-0.5832],\n",
" [-0.2640],\n",
" [-0.4996],\n",
" [-0.2625],\n",
" [-0.4407],\n",
" [-0.8864],\n",
" [-0.2508],\n",
" [-0.4827],\n",
" [-0.3131],\n",
" [-0.2570],\n",
" [-0.7116],\n",
" [-0.5357],\n",
" [-0.7074]]))"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 85
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.385478317Z",
"start_time": "2026-04-22T07:03:24.319263622Z"
}
},
"cell_type": "code",
"source": [
"batch_size, n_train = 16, 600\n",
"# 只有前n_train个样本用于训练\n",
"train_iter = d2l.load_array((features[:n_train], labels[:n_train]),\n",
"batch_size, is_train=True)\n"
],
"id": "239a596b20d40dec",
"outputs": [],
"execution_count": 86
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.452682331Z",
"start_time": "2026-04-22T07:03:24.386760825Z"
}
},
"cell_type": "code",
"source": [
"def init_weights(m):\n",
" if type(m) == nn.Linear:\n",
" nn.init.xavier_uniform_(m.weight)"
],
"id": "54d30bd0ee41cb8",
"outputs": [],
"execution_count": 87
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.505029692Z",
"start_time": "2026-04-22T07:03:24.454087829Z"
}
},
"cell_type": "code",
"source": [
"def get_net():\n",
" net = nn.Sequential(nn.Linear(4, 10),\n",
" nn.ReLU(),\n",
" nn.Linear(10, 1))\n",
" net.apply(init_weights)\n",
" return net\n",
"loss = nn.MSELoss(reduction='none')"
],
"id": "5d095792e3b3681",
"outputs": [],
"execution_count": 88
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.610623781Z",
"start_time": "2026-04-22T07:03:24.507553628Z"
}
},
"cell_type": "code",
"source": [
"def train(net, train_iter, loss, epochs, lr):\n",
" trainer = torch.optim.Adam(net.parameters(), lr)\n",
" for epoch in range(epochs):\n",
" for X, y in train_iter:\n",
" trainer.zero_grad()\n",
" l = loss(net(X), y)\n",
" l.sum().backward()\n",
" trainer.step()\n",
" print(f'epoch {epoch + 1}, '\n",
" f'loss: {d2l.evaluate_loss(net, train_iter, loss):f}')\n",
"net = get_net()\n",
"train(net, train_iter, loss, 5, 0.01)"
],
"id": "5c1dba484e805335",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"epoch 1, loss: 0.082748\n",
"epoch 2, loss: 0.066498\n",
"epoch 3, loss: 0.061828\n",
"epoch 4, loss: 0.059193\n",
"epoch 5, loss: 0.058498\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/yukun/.conda/envs/nn/lib/python3.11/site-packages/d2l/torch.py:3179: UserWarning: Converting a tensor with requires_grad=True to a scalar may lead to unexpected behavior.\n",
"Consider using tensor.detach() first. (Triggered internally at /pytorch/torch/csrc/autograd/generated/python_variable_methods.cpp:836.)\n",
" self.data = [a + float(b) for a, b in zip(self.data, args)]\n"
]
}
],
"execution_count": 89
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.713050170Z",
"start_time": "2026-04-22T07:03:24.616031026Z"
}
},
"cell_type": "code",
"source": [
"onestep_preds = net(features)\n",
"d2l.plot([time, time[tau:]],\n",
"[x.detach().numpy(), onestep_preds.detach().numpy()], 'time',\n",
"'x', legend=['data', '1-step preds'], xlim=[1, 1000],\n",
"figsize=(6, 3))"
],
"id": "a6efb4a978cd9375",
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 600x300 with 1 Axes>"
],
"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<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"406.885938pt\" height=\"211.07625pt\" viewBox=\"0 0 406.885938 211.07625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n <metadata>\n <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" 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>2026-04-22T15:03:24.684021</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.7.2, 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-linejoin: round; stroke-linecap: butt}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 211.07625 \nL 406.885938 211.07625 \nL 406.885938 0 \nL 0 0 \nz\n\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 52.160938 173.52 \nL 386.960938 173.52 \nL 386.960938 7.2 \nL 52.160938 7.2 \nz\n\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path d=\"M 118.852829 173.52 \nL 118.852829 7.2 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path id=\"m22554b858e\" d=\"M 0 0 \nL 0 3.5 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m22554b858e\" x=\"118.852829\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 200 -->\n <g style=\"fill: #ffffff\" transform=\"translate(109.309079 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-32\" d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-32\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path d=\"M 185.879856 173.52 \nL 185.879856 7.2 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use xlink:href=\"#m22554b858e\" x=\"185.879856\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 400 -->\n <g style=\"fill: #ffffff\" transform=\"translate(176.336106 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-34\" d=\"M 2419 4116 \nL 825 1625 \nL 2419 1625 \nL 2419 4116 \nz\nM 2253 4666 \nL 3047 4666 \nL 3047 1625 \nL 3713 1625 \nL 3713 1100 \nL 3047 1100 \nL 3047 0 \nL 2419 0 \nL 2419 1100 \nL 313 1100 \nL 313 1709 \nL 2253 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-34\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path d=\"M 252.906883 173.52 \nL 252.906883 7.2 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_6\">\n <g>\n <use xlink:href=\"#m22554b858e\" x=\"252.906883\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 600 -->\n <g style=\"fill: #ffffff\" transform=\"translate(243.363133 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-36\" d=\"M 2113 2584 \nQ 1688 2584 1439 2293 \nQ 1191 2003 1191 1497 \nQ 1191 994 1439 701 \nQ 1688 409 2113 409 \nQ 2538 409 2786 701 \nQ 3034 994 3034 1497 \nQ 3034 2003 2786 2293 \nQ 2538 2584 2113 2584 \nz\nM 3366 4563 \nL 3366 3988 \nQ 3128 4100 2886 4159 \nQ 2644 4219 2406 4219 \nQ 1781 4219 1451 3797 \nQ 1122 3375 1075 2522 \nQ 1259 2794 1537 2939 \nQ 1816 3084 2150 3084 \nQ 2853 3084 3261 2657 \nQ 3669 2231 3669 1497 \nQ 3669 778 3244 343 \nQ 2819 -91 2113 -91 \nQ 1303 -91 875 529 \nQ 447 1150 447 2328 \nQ 447 3434 972 4092 \nQ 1497 4750 2381 4750 \nQ 2619 4750 2861 4703 \nQ 3103 4656 3366 4563 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-36\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_7\">\n <path d=\"M 319.93391 173.52 \nL 319.93391 7.2 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_8\">\n <g>\n <use xlink:href=\"#m22554b858e\" x=\"319.93391\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 800 -->\n <g style=\"fill: #ffffff\" transform=\"translate(310.39016 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-38\" d=\"M 2034 2216 \nQ 1584 2216 1326 1975 \nQ 1069 1734 1069 1313 \nQ 1069 891 1326 650 \nQ 1584 409 2034 409 \nQ 2484 409 2743 651 \nQ 3003 894 3003 1313 \nQ 3003 1734 2745 1975 \nQ 2488 2216 2034 2216 \nz\nM 1403 2484 \nQ 997 2584 770 2862 \nQ 544 3141 544 3541 \nQ 544 4100 942 4425 \nQ 1341 4750 2034 4750 \nQ 2731 4750 3128 4425 \nQ 3525 4100 3525 3541 \nQ 3525 3141 3298 2862 \nQ 3072 2584 2669 2484 \nQ 3125 2378 3379 2068 \nQ 3634 1759 3634 1313 \nQ 3634 634 3220 271 \nQ 2806 -91 2034 -91 \nQ 1263 -91 848 271 \nQ 434 634 434 1313 \nQ 434 1759 690 2068 \nQ 947 2378 1403 2484 \nz\nM 1172 3481 \nQ 1172 3119 1398 2916 \nQ 1625 2713 2034 2713 \nQ 2441 2713 2670 2916 \nQ 2900 3119 2900 3481 \nQ 2900 3844 2670 4047 \nQ 2441 4250 2034 4250 \nQ 1625 4250 1398 4047 \nQ 1172 3844 1172 3481 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-38\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_9\">\n <path d=\"M 386.960938 173.52 \nL 386.960938 7.2 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_10\">\n <g>\n <use xlink:href=\"#m22554b858e\" x=\"386.960938\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 1000 -->\n <g style=\"fill: #ffffff\" transform=\"translate(374.235937 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-31\" d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n </g>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- time -->\n <g style=\"fill: #ffffff\" transform=\"translate(208.264844 201.796563) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \nL 1172 3500 \nL 2356 3500 \nL 2356 3053 \nL 1172 3053 \nL 1172 1153 \nQ 1172 725 1289 603 \nQ 1406 481 1766 481 \nL 2356 481 \nL 2356 0 \nL 1766 0 \nQ 1100 0 847 248 \nQ 594 497 594 1153 \nL 594 3053 \nL 172 3053 \nL 172 3500 \nL 594 3500 \nL 594 4494 \nL 1172 4494 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-69\" d=\"M 603 3500 \nL 1178 3500 \nL 1178 0 \nL 603 0 \nL 603 3500 \nz\nM 603 4863 \nL 1178 4863 \nL 1178 4134 \nL 603 4134 \nL 603 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6d\" d=\"M 3328 2828 \nQ 3544 3216 3844 3400 \nQ 4144 3584 4550 3584 \nQ 5097 3584 5394 3201 \nQ 5691 2819 5691 2113 \nL 5691 0 \nL 5113 0 \nL 5113 2094 \nQ 5113 2597 4934 2840 \nQ 4756 3084 4391 3084 \nQ 3944 3084 3684 2787 \nQ 3425 2491 3425 1978 \nL 3425 0 \nL 2847 0 \nL 2847 2094 \nQ 2847 2600 2669 2842 \nQ 2491 3084 2119 3084 \nQ 1678 3084 1418 2786 \nQ 1159 2488 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1356 3278 1631 3431 \nQ 1906 3584 2284 3584 \nQ 2666 3584 2933 3390 \nQ 3200 3197 3328 2828 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \nL 3597 1613 \nL 953 1613 \nQ 991 1019 1311 708 \nQ 1631 397 2203 397 \nQ 2534 397 2845 478 \nQ 3156 559 3463 722 \nL 3463 178 \nQ 3153 47 2828 -22 \nQ 2503 -91 2169 -91 \nQ 1331 -91 842 396 \nQ 353 884 353 1716 \nQ 353 2575 817 3079 \nQ 1281 3584 2069 3584 \nQ 2775 3584 3186 3129 \nQ 3597 2675 3597 1894 \nz\nM 3022 2063 \nQ 3016 2534 2758 2815 \nQ 2500 3097 2075 3097 \nQ 1594 3097 1305 2825 \nQ 1016 2553 972 2059 \nL 3022 2063 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-74\"/>\n <use xlink:href=\"#DejaVuSans-69\" x=\"39.208984\"/>\n <use xlink:href=\"#DejaVuSans-6d\" x=\"66.992188\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"164.404297\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_11\">\n <path d=\"M 52.160938 158.726267 \nL 386.960938 158.726267 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_12\">\n <defs>\n <path id=\"mde3f7f5986\" d=\"M 0 0 \nL -3.5 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#mde3f7f5986\" x=\"52.160938\" y=\"158.726267\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 1.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 162.525486) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-2212\" d=\"M 678 2272 \nL 4684 2272 \nL 4684 1741 \nL 678 1741 \nL 678 2272 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-2e\" d=\"M 684 794 \nL 1344 794 \nL 1344 0 \nL 684 0 \nL 684 794 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-35\" d=\"M 691 4666 \nL 3169 4666 \nL 3169 4134 \nL 1269 4134 \nL 1269 2991 \nQ 1406 3038 1543 3061 \nQ 1681 3084 1819 3084 \nQ 2600 3084 3056 2656 \nQ 3513 2228 3513 1497 \nQ 3513 744 3044 326 \nQ 2575 -91 1722 -91 \nQ 1428 -91 1123 -41 \nQ 819 9 494 109 \nL 494 744 \nQ 775 591 1075 516 \nQ 1375 441 1709 441 \nQ 2250 441 2565 725 \nQ 2881 1009 2881 1497 \nQ 2881 1984 2565 2268 \nQ 2250 2553 1709 2553 \nQ 1456 2553 1204 2497 \nQ 953 2441 691 2322 \nL 691 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_13\">\n <path d=\"M 52.160938 134.849044 \nL 386.960938 134.849044 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_14\">\n <g>\n <use xlink:href=\"#mde3f7f5986\" x=\"52.160938\" y=\"134.849044\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 1.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 138.648263) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_15\">\n <path d=\"M 52.160938 110.971822 \nL 386.960938 110.971822 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_16\">\n <g>\n <use xlink:href=\"#mde3f7f5986\" x=\"52.160938\" y=\"110.971822\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- 0.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 114.771041) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_17\">\n <path d=\"M 52.160938 87.0946 \nL 386.960938 87.0946 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_18\">\n <g>\n <use xlink:href=\"#mde3f7f5986\" x=\"52.160938\" y=\"87.0946\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 0.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 90.893818) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_19\">\n <path d=\"M 52.160938 63.217377 \nL 386.960938 63.217377 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_20\">\n <g>\n <use xlink:href=\"#mde3f7f5986\" x=\"52.160938\" y=\"63.217377\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- 0.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 67.016596) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_6\">\n <g id=\"line2d_21\">\n <path d=\"M 52.160938 39.340155 \nL 386.960938 39.340155 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_22\">\n <g>\n <use xlink:href=\"#mde3f7f5986\" x=\"52.160938\" y=\"39.340155\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- 1.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 43.139373) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_7\">\n <g id=\"line2d_23\">\n <path d=\"M 52.160938 15.462932 \nL 386.960938 15.462932 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_24\">\n <g>\n <use xlink:href=\"#mde3f7f5986\" x=\"52.160938\" y=\"15.462932\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_13\">\n <!-- 1.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 19.262151) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"text_14\">\n <!-- x -->\n <g style=\"fill: #ffffff\" transform=\"translate(14.798438 93.319375) rotate(-90) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-78\" d=\"M 3513 3500 \nL 2247 1797 \nL 3578 0 \nL 2900 0 \nL 1881 1375 \nL 863 0 \nL 184 0 \nL 1544 1831 \nL 300 3500 \nL 978 3500 \nL 1906 2253 \nL 2834 3500 \nL 3513 3500 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-78\"/>\n </g>\n </g>\n </g>\n <g id=\"line2d_25\">\n <path d=\"M 52.160938 91.620164 \nL 52.496073 76.85888 \nL 52.831208 99.142407 \nL 53.166343 92.991388 \nL 53.501478 95.814422 \nL 53.836613 81.415823 \nL 54.171748 96.470627 \nL 54.506883 75.885911 \nL 54.842019 80.139206 \nL 55.177154 92.433971 \nL 55.512289 69.012006 \nL 55.847424 68.65884 \nL 56.517694 77.743774 \nL 56.852829 85.174639 \nL 57.187965 83.198818 \nL 57.5231 64.206941 \nL 57.858235 85.417059 \nL 58.19337 75.736926 \nL 58.528505 80.129288 \nL 58.86364 81.801382 \nL 59.198775 74.94461 \nL 59.53391 87.703016 \nL 59.869046 83.594711 \nL 60.204181 72.021536 \nL 60.539316 85.865928 \nL 60.874451 71.782131 \nL 61.209586 71.530971 \nL 61.544721 69.457521 \nL 61.879856 84.306385 \nL 62.550127 72.291719 \nL 62.885262 75.978999 \nL 63.220397 84.587202 \nL 63.555532 65.773686 \nL 63.890667 80.917666 \nL 64.225802 66.415567 \nL 64.560938 71.845107 \nL 64.896073 64.630494 \nL 65.231208 62.083098 \nL 65.566343 61.672922 \nL 65.901478 63.757347 \nL 66.236613 83.124244 \nL 66.571748 58.803035 \nL 66.906883 53.798496 \nL 67.242019 70.429451 \nL 67.577154 51.395528 \nL 67.912289 58.255957 \nL 68.247424 39.36493 \nL 68.582559 80.14617 \nL 68.917694 80.329952 \nL 69.252829 58.596473 \nL 69.587965 55.226758 \nL 69.9231 70.738359 \nL 70.258235 50.396064 \nL 70.928505 76.575893 \nL 71.26364 77.024509 \nL 71.598775 65.129657 \nL 71.93391 62.95436 \nL 72.269046 70.105622 \nL 72.604181 53.571562 \nL 72.939316 51.58855 \nL 73.274451 64.589042 \nL 73.609586 66.472576 \nL 73.944721 59.1073 \nL 74.279856 69.941384 \nL 74.614992 50.087274 \nL 74.950127 55.383361 \nL 75.285262 49.331029 \nL 75.620397 73.838191 \nL 75.955532 59.072489 \nL 76.290667 57.089821 \nL 76.625802 70.564833 \nL 76.960938 56.971021 \nL 77.296073 51.055709 \nL 77.631208 60.523503 \nL 77.966343 52.800658 \nL 78.301478 49.599495 \nL 78.636613 49.735962 \nL 78.971748 52.530029 \nL 79.306883 42.713624 \nL 79.642019 44.00489 \nL 79.977154 48.413471 \nL 80.312289 60.536784 \nL 80.647424 53.075741 \nL 80.982559 31.859953 \nL 81.317694 50.66788 \nL 81.652829 41.105837 \nL 81.987965 65.962787 \nL 82.3231 36.342391 \nL 82.99337 65.895695 \nL 83.328505 52.299836 \nL 83.66364 48.417646 \nL 83.998775 59.463061 \nL 84.33391 36.291504 \nL 85.004181 47.036978 \nL 85.339316 29.370321 \nL 86.009586 53.601474 \nL 86.344721 60.034343 \nL 86.679856 58.250814 \nL 87.014992 60.597432 \nL 87.350127 49.087794 \nL 87.685262 43.316602 \nL 88.020397 43.763494 \nL 88.355532 57.926015 \nL 88.690667 44.122577 \nL 89.025802 43.172786 \nL 89.360938 46.317915 \nL 89.696073 55.740651 \nL 90.031208 39.619656 \nL 90.366343 54.134967 \nL 90.701478 45.154742 \nL 91.036613 15.948702 \nL 91.371748 39.877154 \nL 91.706883 30.215806 \nL 92.042019 59.954188 \nL 92.377154 44.747914 \nL 92.712289 53.085379 \nL 93.047424 44.307743 \nL 93.382559 32.39652 \nL 93.717694 26.63574 \nL 94.387965 55.662386 \nL 94.7231 40.745148 \nL 95.058235 38.813693 \nL 95.39337 37.645279 \nL 95.728505 40.480967 \nL 96.06364 42.018058 \nL 96.398775 35.403852 \nL 96.73391 19.786713 \nL 97.069046 27.191338 \nL 97.404181 55.858676 \nL 97.739316 37.021551 \nL 98.074451 36.295403 \nL 98.409586 44.11533 \nL 98.744721 40.128726 \nL 99.079856 27.124374 \nL 99.414992 31.212354 \nL 99.750127 46.663597 \nL 100.085262 50.342436 \nL 100.420397 27.660713 \nL 100.755532 32.367942 \nL 101.090667 42.883838 \nL 101.425802 48.174775 \nL 101.760938 34.156087 \nL 102.096073 41.844955 \nL 102.431208 40.893869 \nL 102.766343 52.092759 \nL 103.101478 33.30676 \nL 103.436613 31.134847 \nL 103.771748 42.142494 \nL 104.106883 38.040011 \nL 104.442019 50.168456 \nL 104.777154 40.149229 \nL 105.782559 56.724194 \nL 106.117694 30.672941 \nL 106.787965 53.783273 \nL 107.1231 42.849547 \nL 107.458235 47.279126 \nL 108.128505 50.300377 \nL 108.46364 26.917834 \nL 108.798775 26.08846 \nL 109.13391 50.294562 \nL 109.804181 30.189312 \nL 110.139316 46.013147 \nL 110.809586 35.628051 \nL 111.144721 44.447956 \nL 111.479856 39.039468 \nL 111.814992 47.097495 \nL 112.150127 39.708933 \nL 112.485262 48.503374 \nL 112.820397 48.795567 \nL 113.155532 32.365226 \nL 113.490667 34.477911 \nL 113.825802 44.444119 \nL 114.160938 39.314776 \nL 114.831208 52.726327 \nL 115.166343 27.034621 \nL 115.501478 36.551447 \nL 115.836613 20.085772 \nL 116.171748 44.540204 \nL 116.506883 32.583197 \nL 116.842019 47.74069 \nL 117.177154 49.150224 \nL 117.512289 38.284737 \nL 118.182559 52.658922 \nL 118.517694 30.64631 \nL 118.852829 48.511512 \nL 119.187965 44.466645 \nL 119.5231 35.688559 \nL 120.19337 43.357736 \nL 120.528505 52.09589 \nL 120.86364 39.580945 \nL 121.198775 51.323078 \nL 121.53391 45.309438 \nL 121.869046 30.442207 \nL 122.874451 57.131333 \nL 123.209586 44.419956 \nL 123.544721 50.825527 \nL 123.879856 46.871856 \nL 124.214992 45.763228 \nL 124.550127 54.05775 \nL 124.885262 52.011648 \nL 125.220397 33.712159 \nL 125.555532 58.769249 \nL 125.890667 45.334628 \nL 126.225802 63.893151 \nL 126.560938 42.499775 \nL 126.896073 32.739111 \nL 127.231208 58.040637 \nL 127.566343 41.829257 \nL 127.901478 45.422644 \nL 128.236613 52.704029 \nL 128.571748 41.267765 \nL 128.906883 66.149827 \nL 129.242019 27.281244 \nL 129.577154 62.645959 \nL 129.912289 52.606753 \nL 130.247424 55.738425 \nL 130.582559 44.283099 \nL 130.917694 51.061658 \nL 131.252829 34.066381 \nL 131.587965 55.416558 \nL 131.9231 60.096519 \nL 132.258235 38.884164 \nL 132.59337 55.77567 \nL 132.928505 52.427186 \nL 133.26364 46.430917 \nL 133.598775 70.71269 \nL 133.93391 50.309577 \nL 134.269046 69.170747 \nL 134.604181 65.651423 \nL 134.939316 66.213 \nL 135.274451 47.537805 \nL 135.609586 61.042487 \nL 135.944721 50.878183 \nL 136.279856 47.948513 \nL 136.614992 64.260946 \nL 136.950127 71.095484 \nL 137.285262 55.029928 \nL 137.620397 68.139692 \nL 137.955532 53.040824 \nL 138.625802 66.431804 \nL 138.960938 66.595884 \nL 139.296073 70.130214 \nL 139.631208 61.092863 \nL 139.966343 60.310969 \nL 140.301478 67.467467 \nL 140.636613 46.382511 \nL 140.971748 70.84959 \nL 141.306883 67.688248 \nL 141.642019 62.397672 \nL 141.977154 59.183353 \nL 142.312289 57.55631 \nL 142.647424 64.559454 \nL 142.982559 43.674345 \nL 143.317694 53.837656 \nL 143.652829 52.389816 \nL 143.987965 53.982953 \nL 144.658235 77.394617 \nL 144.99337 82.806495 \nL 145.328505 66.194051 \nL 145.66364 67.021351 \nL 145.998775 73.462032 \nL 146.669046 58.304912 \nL 147.004181 66.235674 \nL 147.674451 89.989991 \nL 148.009586 75.003904 \nL 148.344721 66.248856 \nL 148.679856 72.819415 \nL 149.014992 83.547498 \nL 149.350127 74.03758 \nL 149.685262 82.034201 \nL 150.020397 60.624928 \nL 150.355532 92.876269 \nL 150.690667 82.473578 \nL 151.025802 63.643688 \nL 151.360938 62.707677 \nL 151.696073 65.209552 \nL 152.031208 73.835236 \nL 152.366343 89.54679 \nL 152.701478 80.231761 \nL 153.036613 84.479047 \nL 153.371748 82.640455 \nL 153.706883 81.498754 \nL 154.042019 83.667801 \nL 154.377154 67.861611 \nL 154.712289 78.472812 \nL 155.047424 82.946842 \nL 155.382559 101.737577 \nL 155.717694 60.281457 \nL 156.052829 100.089752 \nL 156.387965 100.296816 \nL 156.7231 83.03439 \nL 157.058235 94.12826 \nL 157.39337 94.842332 \nL 157.728505 93.469147 \nL 158.06364 80.752163 \nL 158.398775 83.735931 \nL 158.73391 119.147544 \nL 159.069046 92.448073 \nL 159.404181 92.862084 \nL 159.739316 86.655671 \nL 160.074451 90.94121 \nL 160.409586 96.727955 \nL 160.744721 75.924238 \nL 161.079856 103.964381 \nL 161.414992 109.051654 \nL 161.750127 84.133234 \nL 162.085262 112.184767 \nL 162.420397 86.151997 \nL 162.755532 89.927413 \nL 163.090667 96.235835 \nL 163.425802 107.432948 \nL 163.760938 87.645553 \nL 164.096073 112.911475 \nL 164.431208 86.438545 \nL 164.766343 107.341569 \nL 165.101478 100.572289 \nL 165.436613 90.894059 \nL 165.771748 103.784143 \nL 166.106883 108.46284 \nL 166.442019 75.378401 \nL 166.777154 104.904066 \nL 167.112289 106.607258 \nL 167.447424 99.59517 \nL 168.117694 116.414637 \nL 168.452829 98.953189 \nL 168.787965 106.986633 \nL 169.1231 104.934099 \nL 169.458235 90.614939 \nL 169.79337 88.107395 \nL 170.128505 104.495021 \nL 170.46364 89.349866 \nL 171.13391 119.537658 \nL 171.469046 115.37151 \nL 171.804181 113.992123 \nL 172.139316 115.611074 \nL 172.474451 96.33585 \nL 172.809586 132.666913 \nL 173.144721 125.185237 \nL 173.479856 103.737771 \nL 173.814992 132.641899 \nL 174.150127 116.561505 \nL 174.485262 124.129882 \nL 174.820397 109.305919 \nL 175.155532 126.226724 \nL 175.490667 101.444204 \nL 175.825802 111.88389 \nL 176.160938 115.277548 \nL 176.496073 98.86063 \nL 176.831208 120.085688 \nL 177.166343 111.22876 \nL 177.501478 113.494204 \nL 177.836613 140.048573 \nL 178.171748 121.506541 \nL 178.506883 125.616937 \nL 178.842019 119.469795 \nL 179.177154 101.330892 \nL 179.512289 119.009067 \nL 179.847424 107.745656 \nL 180.182559 127.669495 \nL 180.517694 115.403279 \nL 180.852829 121.489844 \nL 181.187965 105.006348 \nL 181.5231 122.543676 \nL 181.858235 106.715241 \nL 182.19337 122.170541 \nL 183.198775 111.919521 \nL 183.53391 120.740203 \nL 183.869046 143.225215 \nL 184.539316 121.976389 \nL 185.209586 115.525696 \nL 185.544721 123.352002 \nL 185.879856 112.331837 \nL 186.214992 107.385121 \nL 186.550127 125.267054 \nL 186.885262 152.79348 \nL 187.220397 116.788425 \nL 187.555532 138.149509 \nL 187.890667 114.673986 \nL 188.225802 126.128282 \nL 188.560938 120.621403 \nL 188.896073 124.266884 \nL 189.231208 123.161561 \nL 189.566343 145.055236 \nL 189.901478 121.965356 \nL 190.236613 121.731969 \nL 190.571748 119.657227 \nL 190.906883 149.541688 \nL 191.242019 151.427864 \nL 191.577154 121.021016 \nL 191.912289 127.144106 \nL 192.247424 115.618958 \nL 192.917694 140.284778 \nL 193.252829 141.123773 \nL 193.587965 133.725598 \nL 193.9231 144.980075 \nL 194.258235 126.100843 \nL 194.59337 124.166054 \nL 194.928505 149.119774 \nL 195.26364 131.418457 \nL 195.598775 143.039209 \nL 195.93391 121.554107 \nL 196.269046 121.390981 \nL 196.604181 101.287481 \nL 196.939316 122.773522 \nL 197.274451 135.274255 \nL 197.609586 141.683412 \nL 197.944721 136.739962 \nL 198.279856 136.67035 \nL 198.614992 115.646762 \nL 198.950127 122.25546 \nL 199.285262 124.379411 \nL 199.620397 130.580042 \nL 199.955532 141.859587 \nL 200.290667 141.331035 \nL 200.625802 117.686397 \nL 201.631208 163.300888 \nL 201.966343 137.674584 \nL 202.301478 133.404782 \nL 202.636613 126.499408 \nL 202.971748 146.857233 \nL 203.306883 137.11437 \nL 203.642019 140.11856 \nL 203.977154 135.013901 \nL 204.312289 118.942983 \nL 204.647424 130.647482 \nL 204.982559 130.772387 \nL 205.317694 140.001488 \nL 205.652829 127.107866 \nL 205.987965 130.662926 \nL 206.3231 114.93923 \nL 206.658235 165.96 \nL 206.99337 131.909826 \nL 207.328505 138.188847 \nL 207.66364 142.004109 \nL 207.998775 124.634769 \nL 208.33391 129.795211 \nL 208.669046 137.005376 \nL 209.004181 135.152868 \nL 209.339316 130.628772 \nL 209.674451 140.34269 \nL 210.009586 124.349814 \nL 210.344721 136.198323 \nL 210.679856 136.263932 \nL 211.014992 139.277635 \nL 211.350127 125.034222 \nL 212.020397 150.204481 \nL 212.355532 146.836944 \nL 212.690667 130.82936 \nL 213.025802 131.873472 \nL 213.360938 122.023448 \nL 214.031208 143.969773 \nL 214.366343 137.424785 \nL 214.701478 141.722055 \nL 215.036613 138.591849 \nL 215.371748 127.892014 \nL 216.042019 150.095538 \nL 216.377154 125.364525 \nL 216.712289 122.04337 \nL 217.047424 114.816567 \nL 217.717694 140.714001 \nL 218.052829 137.107442 \nL 218.7231 118.344536 \nL 219.058235 147.521289 \nL 219.39337 138.463978 \nL 219.728505 112.828122 \nL 220.06364 134.408276 \nL 220.398775 124.79118 \nL 220.73391 122.732836 \nL 221.069046 136.71628 \nL 221.404181 125.408249 \nL 221.739316 128.01117 \nL 222.074451 146.378072 \nL 222.409586 132.914498 \nL 222.744721 140.346043 \nL 223.079856 133.361508 \nL 223.414992 140.318103 \nL 223.750127 119.822838 \nL 224.085262 123.133963 \nL 224.420397 139.62424 \nL 224.755532 130.330721 \nL 225.090667 145.649869 \nL 225.760938 135.681926 \nL 226.096073 105.155629 \nL 226.766343 143.579749 \nL 227.101478 127.330305 \nL 227.436613 134.64976 \nL 227.771748 132.436464 \nL 228.106883 147.960025 \nL 228.442019 120.709388 \nL 228.777154 115.238231 \nL 229.112289 114.067239 \nL 229.447424 137.417504 \nL 229.782559 119.204665 \nL 230.117694 117.372506 \nL 230.452829 111.304291 \nL 230.787965 139.416687 \nL 231.1231 139.417677 \nL 231.458235 119.676221 \nL 231.79337 112.20248 \nL 232.128505 114.682434 \nL 232.46364 131.354168 \nL 232.798775 112.308445 \nL 233.13391 115.693007 \nL 233.469046 127.03618 \nL 233.804181 122.619541 \nL 234.139316 123.480815 \nL 234.474451 135.606764 \nL 234.809586 137.841946 \nL 235.144721 132.060288 \nL 235.479856 117.034782 \nL 235.814992 107.661745 \nL 236.150127 128.044524 \nL 236.485262 138.4197 \nL 236.820397 113.498101 \nL 237.155532 131.690392 \nL 237.490667 122.509195 \nL 237.825802 118.965381 \nL 238.160938 102.271101 \nL 238.496073 119.637379 \nL 238.831208 122.903835 \nL 239.166343 117.460414 \nL 239.501478 126.050117 \nL 239.836613 113.749904 \nL 240.506883 108.710669 \nL 240.842019 126.968347 \nL 241.512289 107.811829 \nL 241.847424 110.37348 \nL 242.517694 102.211449 \nL 242.852829 103.393137 \nL 243.187965 109.644192 \nL 243.5231 120.572411 \nL 243.858235 144.521419 \nL 244.19337 97.279597 \nL 244.86364 106.959039 \nL 245.53391 130.023582 \nL 245.869046 113.185656 \nL 246.204181 108.669748 \nL 246.539316 108.118366 \nL 246.874451 112.145117 \nL 247.209586 108.875636 \nL 247.544721 119.316471 \nL 247.879856 95.847651 \nL 248.214992 108.423308 \nL 248.550127 109.398483 \nL 249.220397 116.869145 \nL 249.555532 97.121016 \nL 249.890667 103.179673 \nL 250.225802 101.815423 \nL 250.560938 111.587051 \nL 250.896073 100.849864 \nL 251.231208 106.556598 \nL 251.566343 100.391075 \nL 251.901478 84.081003 \nL 252.236613 107.890921 \nL 252.571748 107.327747 \nL 253.242019 93.68236 \nL 253.577154 111.375593 \nL 253.912289 82.300214 \nL 254.247424 93.904467 \nL 254.582559 99.207919 \nL 254.917694 95.478248 \nL 255.252829 97.290167 \nL 255.587965 96.158229 \nL 256.258235 105.882705 \nL 256.59337 103.389621 \nL 256.928505 103.058181 \nL 257.26364 94.019984 \nL 257.598775 102.273022 \nL 257.93391 97.388726 \nL 258.269046 102.528383 \nL 258.604181 104.719201 \nL 258.939316 100.040084 \nL 259.274451 81.909532 \nL 259.609586 97.873327 \nL 259.944721 90.684016 \nL 260.279856 88.715767 \nL 260.614992 90.13119 \nL 260.950127 84.107522 \nL 261.285262 94.065476 \nL 261.620397 83.314751 \nL 261.955532 79.795074 \nL 262.290667 64.442442 \nL 262.625802 85.456596 \nL 262.960938 87.847145 \nL 263.296073 93.088437 \nL 263.631208 109.527871 \nL 264.301478 74.575436 \nL 264.636613 84.138458 \nL 264.971748 97.808308 \nL 265.306883 93.38806 \nL 265.642019 86.072727 \nL 265.977154 74.247211 \nL 266.312289 84.722539 \nL 266.647424 70.61372 \nL 266.982559 92.423196 \nL 267.317694 86.267842 \nL 267.652829 83.714911 \nL 267.987965 67.346901 \nL 268.3231 71.870585 \nL 268.658235 64.135058 \nL 268.99337 88.716383 \nL 269.328505 64.239395 \nL 269.66364 63.714339 \nL 269.998775 81.949477 \nL 270.33391 70.378246 \nL 270.669046 80.841346 \nL 271.004181 80.417443 \nL 271.339316 77.815689 \nL 271.674451 79.212131 \nL 272.009586 71.683374 \nL 272.344721 60.634241 \nL 272.679856 74.260016 \nL 273.014992 78.058815 \nL 273.350127 75.11404 \nL 273.685262 77.171505 \nL 274.020397 87.764088 \nL 274.355532 75.426538 \nL 274.690667 71.793886 \nL 275.025802 60.899775 \nL 275.696073 72.123536 \nL 276.031208 64.971383 \nL 276.366343 86.954739 \nL 276.701478 76.712241 \nL 277.036613 54.24576 \nL 277.371748 62.791589 \nL 277.706883 75.257833 \nL 278.042019 45.985619 \nL 278.377154 66.524531 \nL 278.712289 57.462618 \nL 279.047424 70.465879 \nL 279.382559 56.200012 \nL 279.717694 65.723673 \nL 280.052829 55.602308 \nL 280.387965 70.618128 \nL 280.7231 69.039075 \nL 281.058235 65.839925 \nL 281.39337 78.104668 \nL 281.728505 55.067142 \nL 282.06364 45.708154 \nL 282.398775 62.177592 \nL 282.73391 67.973799 \nL 283.404181 56.310973 \nL 283.739316 52.606395 \nL 284.074451 59.769156 \nL 284.409586 50.439153 \nL 284.744721 54.506665 \nL 285.079856 77.634694 \nL 285.414992 48.465135 \nL 285.750127 57.030195 \nL 286.085262 54.868273 \nL 286.420397 51.204973 \nL 286.755532 62.726916 \nL 287.090667 43.867387 \nL 287.425802 46.958995 \nL 287.760938 43.67525 \nL 288.096073 54.060306 \nL 288.431208 56.164663 \nL 288.766343 61.298673 \nL 289.101478 56.16435 \nL 289.436613 66.988451 \nL 289.771748 53.793412 \nL 290.442019 61.479701 \nL 290.777154 48.250956 \nL 291.112289 60.317103 \nL 291.447424 53.209664 \nL 291.782559 58.946604 \nL 292.117694 68.633729 \nL 292.452829 36.475147 \nL 292.787965 52.009593 \nL 293.1231 48.275156 \nL 293.458235 29.368898 \nL 293.79337 44.95141 \nL 294.128505 52.809541 \nL 294.46364 38.792948 \nL 294.798775 53.602966 \nL 295.13391 38.730738 \nL 295.469046 40.546018 \nL 295.804181 26.165375 \nL 296.139316 50.539702 \nL 296.474451 38.893392 \nL 297.144721 58.008686 \nL 297.479856 29.633099 \nL 297.814992 40.877514 \nL 298.150127 47.845377 \nL 298.485262 48.141803 \nL 298.820397 43.217181 \nL 299.155532 51.585905 \nL 299.490667 44.547004 \nL 299.825802 52.275969 \nL 300.160938 41.446384 \nL 300.496073 42.259941 \nL 300.831208 29.644189 \nL 301.166343 36.974027 \nL 301.501478 30.694204 \nL 301.836613 44.667523 \nL 302.171748 47.026617 \nL 302.506883 39.847731 \nL 302.842019 42.980877 \nL 303.177154 50.669514 \nL 303.512289 61.209058 \nL 303.847424 14.76 \nL 304.182559 53.804388 \nL 304.517694 54.909418 \nL 304.852829 47.258507 \nL 305.187965 55.795771 \nL 305.5231 51.495538 \nL 305.858235 54.068248 \nL 306.19337 26.418988 \nL 306.528505 33.243525 \nL 306.86364 42.932056 \nL 307.198775 39.454261 \nL 307.53391 27.859003 \nL 307.869046 54.055114 \nL 308.204181 22.871678 \nL 308.539316 33.405865 \nL 308.874451 36.989307 \nL 309.209586 42.845608 \nL 309.544721 33.637413 \nL 309.879856 37.887034 \nL 310.550127 28.011684 \nL 310.885262 47.46056 \nL 311.220397 30.189118 \nL 311.555532 34.930606 \nL 311.890667 47.394162 \nL 312.225802 46.160775 \nL 312.560938 33.954837 \nL 312.896073 39.114169 \nL 313.231208 31.966704 \nL 313.566343 40.556421 \nL 313.901478 36.937024 \nL 314.571748 48.54482 \nL 314.906883 29.521344 \nL 315.577154 39.768567 \nL 315.912289 30.581333 \nL 316.247424 32.704749 \nL 316.582559 43.43563 \nL 316.917694 42.362812 \nL 317.252829 38.762481 \nL 317.587965 50.303674 \nL 317.9231 36.677263 \nL 318.258235 52.20757 \nL 318.59337 48.332889 \nL 318.928505 53.372995 \nL 319.26364 28.286531 \nL 319.598775 44.04187 \nL 319.93391 42.497512 \nL 320.269046 63.142096 \nL 320.939316 27.078513 \nL 321.274451 41.995802 \nL 321.609586 33.619879 \nL 321.944721 42.059464 \nL 322.614992 24.643332 \nL 322.950127 47.288117 \nL 323.285262 26.486652 \nL 323.620397 46.867615 \nL 323.955532 45.536955 \nL 324.290667 16.320338 \nL 324.625802 23.827404 \nL 325.296073 55.873483 \nL 325.631208 29.734784 \nL 326.301478 49.546 \nL 326.636613 38.489825 \nL 326.971748 55.965552 \nL 327.306883 58.587126 \nL 327.642019 43.866191 \nL 327.977154 54.404036 \nL 328.312289 50.146986 \nL 328.647424 43.619202 \nL 328.982559 46.796982 \nL 329.317694 39.026728 \nL 329.652829 35.580966 \nL 329.987965 40.95929 \nL 330.3231 39.70957 \nL 330.658235 49.264304 \nL 330.99337 47.380184 \nL 331.328505 41.476277 \nL 331.66364 39.568779 \nL 331.998775 45.643458 \nL 332.33391 33.485234 \nL 332.669046 47.875504 \nL 333.004181 43.396671 \nL 333.339316 50.096195 \nL 333.674451 39.563183 \nL 334.009586 49.976905 \nL 334.344721 49.289921 \nL 334.679856 52.131196 \nL 335.350127 32.495938 \nL 335.685262 53.379744 \nL 336.020397 48.576623 \nL 336.355532 45.506558 \nL 336.690667 51.631188 \nL 337.025802 45.460686 \nL 337.360937 34.69402 \nL 337.696073 53.203339 \nL 338.031208 42.022937 \nL 338.366343 48.108042 \nL 338.701478 48.830045 \nL 339.036613 57.31608 \nL 339.371748 52.807404 \nL 339.706883 43.216128 \nL 340.042019 48.815318 \nL 340.377154 40.578586 \nL 340.712289 57.149439 \nL 341.047424 59.647946 \nL 341.382559 48.856838 \nL 341.717694 50.066359 \nL 342.052829 63.806322 \nL 342.387965 64.429064 \nL 342.7231 45.766946 \nL 343.058235 64.446253 \nL 343.39337 44.045081 \nL 343.728505 48.499503 \nL 344.06364 61.074233 \nL 344.398775 42.688658 \nL 344.73391 77.53037 \nL 345.069046 60.990543 \nL 345.404181 66.296077 \nL 345.739316 49.366336 \nL 346.074451 66.352496 \nL 346.409586 52.596418 \nL 346.744721 46.098655 \nL 347.079856 59.805453 \nL 347.414992 61.75613 \nL 347.750127 55.607403 \nL 348.085262 84.037323 \nL 348.755532 61.005197 \nL 349.090667 62.988809 \nL 349.425802 77.856452 \nL 349.760938 73.327988 \nL 350.096073 54.728823 \nL 350.431208 63.148924 \nL 350.766343 62.097409 \nL 351.101478 59.788022 \nL 351.436613 65.190404 \nL 351.771748 73.683931 \nL 352.106883 67.642102 \nL 352.442019 45.870745 \nL 352.777154 44.775111 \nL 353.447424 70.991702 \nL 353.782559 74.840404 \nL 354.117694 49.570942 \nL 354.452829 69.36285 \nL 354.787965 79.507668 \nL 355.1231 71.60639 \nL 355.458235 66.703498 \nL 355.79337 84.394324 \nL 356.128505 73.318301 \nL 356.46364 71.542028 \nL 356.798775 76.609459 \nL 357.13391 72.007562 \nL 357.469046 75.817795 \nL 357.804181 81.904225 \nL 358.139316 76.47508 \nL 358.474451 74.518469 \nL 358.809586 63.042683 \nL 359.144721 77.637539 \nL 359.479856 79.786169 \nL 359.814992 73.817455 \nL 360.150127 93.775867 \nL 360.485262 61.638205 \nL 360.820397 70.235445 \nL 361.155532 71.134235 \nL 361.490667 77.076468 \nL 361.825802 87.880786 \nL 362.160938 80.801274 \nL 362.496073 65.55508 \nL 362.831208 96.451414 \nL 363.166343 82.480014 \nL 363.501478 83.325232 \nL 363.836613 70.949641 \nL 364.171748 96.248946 \nL 364.506883 79.846753 \nL 364.842019 69.713098 \nL 365.177154 82.528583 \nL 365.512289 74.989576 \nL 365.847424 106.138277 \nL 366.182559 103.707846 \nL 366.517694 68.644069 \nL 366.852829 99.69757 \nL 367.187965 98.400775 \nL 367.858235 75.440037 \nL 368.19337 83.815755 \nL 368.528505 84.910789 \nL 368.86364 76.179989 \nL 369.198775 91.61773 \nL 369.53391 92.770981 \nL 369.869046 80.599954 \nL 370.204181 91.823625 \nL 370.539316 98.780059 \nL 370.874451 76.896654 \nL 371.544721 108.978502 \nL 371.879856 95.664681 \nL 372.214992 93.59539 \nL 372.550127 89.737363 \nL 372.885262 100.770042 \nL 373.220397 98.109781 \nL 373.555532 109.306412 \nL 373.890667 96.114413 \nL 374.225802 102.30204 \nL 374.560938 112.489715 \nL 374.896073 101.476985 \nL 375.231208 86.796192 \nL 375.566343 82.101863 \nL 375.901478 98.178936 \nL 376.236613 101.155948 \nL 376.571748 88.251735 \nL 376.906883 89.891982 \nL 377.242019 98.110836 \nL 377.577154 98.934564 \nL 377.912289 88.916927 \nL 378.247424 94.302807 \nL 378.582559 111.234364 \nL 378.917694 105.044636 \nL 379.252829 76.878982 \nL 379.587965 97.261669 \nL 380.59337 118.278568 \nL 380.928505 119.165787 \nL 381.598775 99.402145 \nL 381.93391 99.853833 \nL 382.269046 93.286039 \nL 382.604181 131.041487 \nL 383.274451 99.702393 \nL 383.609586 110.953466 \nL 383.944721 99.631651 \nL 384.279856 108.138779 \nL 384.614992 129.423769 \nL 384.950127 99.071378 \nL 385.285262 110.144044 \nL 385.620397 102.047039 \nL 385.955532 99.365602 \nL 386.290667 121.074283 \nL 386.625802 112.676119 \nL 386.960938 120.876101 \nL 386.960938 120.876101 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_26\">\n <path d=\"M 53.501478 89.405133 \nL 53.836613 89.256636 \nL 54.171748 94.584835 \nL 54.506883 97.318717 \nL 54.842019 86.563725 \nL 55.177154 83.084678 \nL 55.512289 90.978205 \nL 55.847424 73.040596 \nL 56.517694 77.825718 \nL 56.852829 69.933697 \nL 57.187965 73.41965 \nL 57.5231 75.606255 \nL 57.858235 72.789596 \nL 58.19337 81.8046 \nL 58.528505 73.083084 \nL 58.86364 73.191324 \nL 59.198775 80.588639 \nL 59.53391 74.118142 \nL 59.869046 81.40685 \nL 60.204181 79.294788 \nL 60.539316 75.250232 \nL 60.874451 85.310574 \nL 61.209586 74.49894 \nL 61.544721 70.980555 \nL 61.879856 73.867409 \nL 62.214992 71.747514 \nL 62.550127 71.952955 \nL 62.885262 72.564942 \nL 63.220397 78.077013 \nL 63.555532 76.691052 \nL 63.890667 69.930469 \nL 64.225802 74.990589 \nL 64.560938 70.538073 \nL 64.896073 67.889852 \nL 65.231208 67.482212 \nL 65.566343 63.478655 \nL 66.236613 61.425887 \nL 66.571748 66.898851 \nL 67.242019 60.803024 \nL 67.577154 65.890729 \nL 67.912289 57.374682 \nL 68.247424 56.588248 \nL 68.582559 51.57454 \nL 68.917694 57.16823 \nL 69.252829 57.813068 \nL 69.587965 63.775827 \nL 69.9231 65.142038 \nL 70.258235 64.754756 \nL 70.59337 57.416948 \nL 70.928505 58.077329 \nL 71.26364 61.58356 \nL 71.598775 66.419471 \nL 71.93391 68.075268 \nL 72.269046 66.551182 \nL 72.604181 66.131215 \nL 73.274451 56.727459 \nL 73.944721 59.732162 \nL 74.279856 59.798164 \nL 74.614992 63.057812 \nL 74.950127 58.61974 \nL 75.620397 53.878493 \nL 75.955532 57.558217 \nL 76.290667 58.594962 \nL 76.625802 58.187436 \nL 76.960938 63.038576 \nL 77.631208 56.672321 \nL 77.966343 57.778564 \nL 78.636613 52.715696 \nL 78.971748 52.221745 \nL 79.306883 51.362074 \nL 79.977154 47.012212 \nL 80.312289 47.596136 \nL 80.647424 50.823261 \nL 80.982559 52.955063 \nL 81.317694 47.47796 \nL 81.652829 47.616847 \nL 81.987965 42.909509 \nL 82.3231 49.579163 \nL 82.658235 48.299541 \nL 82.99337 48.510185 \nL 83.328505 50.553401 \nL 83.66364 53.781295 \nL 83.998775 53.428232 \nL 84.33391 55.348729 \nL 84.669046 48.785875 \nL 85.004181 45.384636 \nL 85.339316 44.631107 \nL 85.674451 40.481638 \nL 86.009586 41.064368 \nL 86.344721 42.339583 \nL 86.679856 49.934386 \nL 87.014992 54.88994 \nL 87.350127 57.588525 \nL 87.685262 55.799497 \nL 88.020397 51.08514 \nL 88.355532 48.305342 \nL 88.690667 49.316396 \nL 89.025802 48.974846 \nL 89.360938 47.02506 \nL 89.696073 47.833121 \nL 90.031208 49.016808 \nL 90.366343 47.474932 \nL 90.701478 48.890901 \nL 91.036613 48.245904 \nL 91.371748 38.587502 \nL 91.706883 38.084807 \nL 92.042019 30.814054 \nL 92.377154 40.857128 \nL 93.047424 48.120412 \nL 93.382559 49.907784 \nL 94.052829 38.685121 \nL 94.387965 36.712359 \nL 94.7231 39.483712 \nL 95.058235 44.170015 \nL 95.39337 43.866294 \nL 95.728505 43.386473 \nL 96.06364 41.240297 \nL 96.398775 41.978103 \nL 96.73391 40.80488 \nL 97.069046 35.324894 \nL 97.404181 32.33185 \nL 97.739316 33.505791 \nL 98.074451 40.320368 \nL 98.409586 40.275867 \nL 98.744721 42.812647 \nL 99.079856 41.984912 \nL 99.414992 38.311835 \nL 99.750127 36.486162 \nL 100.085262 36.572123 \nL 100.420397 42.220502 \nL 100.755532 40.861864 \nL 101.425802 37.165071 \nL 101.760938 41.393433 \nL 102.096073 41.688626 \nL 102.431208 42.347377 \nL 102.766343 42.042614 \nL 103.101478 44.761591 \nL 103.436613 43.725529 \nL 103.771748 39.411403 \nL 104.106883 39.266376 \nL 104.442019 39.394165 \nL 104.777154 43.012771 \nL 105.112289 44.716362 \nL 105.447424 44.484079 \nL 106.117694 49.724232 \nL 106.787965 43.304366 \nL 107.1231 42.898739 \nL 108.128505 48.90088 \nL 108.46364 48.675281 \nL 109.13391 37.265959 \nL 109.469046 36.357153 \nL 109.804181 39.025287 \nL 110.139316 37.962151 \nL 110.474451 41.679449 \nL 111.144721 39.948066 \nL 111.479856 42.771761 \nL 111.814992 42.141697 \nL 112.150127 43.476094 \nL 112.820397 44.967054 \nL 113.155532 47.425359 \nL 113.490667 43.327103 \nL 113.825802 40.782353 \nL 114.160938 39.911718 \nL 114.496073 40.860441 \nL 114.831208 43.029883 \nL 115.166343 47.009781 \nL 115.501478 42.494313 \nL 115.836613 40.040932 \nL 116.171748 33.655795 \nL 116.506883 35.040653 \nL 116.842019 34.357384 \nL 117.512289 44.036764 \nL 117.847424 43.839407 \nL 118.517694 46.658115 \nL 118.852829 43.204088 \nL 119.187965 44.218517 \nL 119.5231 42.595462 \nL 119.858235 41.636901 \nL 120.19337 42.483849 \nL 120.528505 42.255877 \nL 120.86364 45.353548 \nL 121.198775 45.46614 \nL 121.53391 47.111323 \nL 121.869046 47.804748 \nL 122.204181 42.221754 \nL 122.874451 40.716329 \nL 123.209586 47.295216 \nL 123.544721 48.859983 \nL 123.879856 49.872523 \nL 124.214992 50.008745 \nL 124.550127 47.571105 \nL 124.885262 49.98138 \nL 125.220397 50.931293 \nL 125.555532 46.340367 \nL 125.890667 49.203337 \nL 126.225802 46.182718 \nL 126.560938 51.643095 \nL 126.896073 51.41642 \nL 127.231208 44.80493 \nL 127.566343 46.992805 \nL 127.901478 44.987315 \nL 128.236613 45.310499 \nL 128.571748 48.856135 \nL 128.906883 46.751272 \nL 129.242019 52.086636 \nL 129.577154 45.653358 \nL 129.912289 48.558409 \nL 130.247424 44.709445 \nL 130.582559 50.960389 \nL 130.917694 52.336025 \nL 131.252829 50.311026 \nL 131.587965 45.840479 \nL 131.9231 46.712128 \nL 132.258235 48.771239 \nL 132.59337 48.378961 \nL 132.928505 51.193297 \nL 133.26364 49.582658 \nL 133.598775 49.14818 \nL 133.93391 56.34959 \nL 134.269046 54.732398 \nL 134.604181 58.19747 \nL 135.274451 62.002144 \nL 135.609586 58.721743 \nL 135.944721 57.527128 \nL 136.614992 51.2547 \nL 137.285262 58.958226 \nL 137.620397 59.337055 \nL 137.955532 62.053541 \nL 138.290667 58.658633 \nL 138.625802 57.4695 \nL 138.960938 60.292712 \nL 139.296073 61.460917 \nL 139.631208 64.506964 \nL 139.966343 63.781682 \nL 140.301478 61.789467 \nL 140.636613 62.788532 \nL 140.971748 56.800252 \nL 141.306883 59.268312 \nL 141.642019 58.482384 \nL 141.977154 61.142375 \nL 142.312289 62.146729 \nL 142.647424 59.545999 \nL 142.982559 59.739625 \nL 143.317694 54.636116 \nL 143.987965 51.584437 \nL 144.3231 51.690587 \nL 145.328505 69.096899 \nL 145.998775 70.21648 \nL 146.33391 71.554025 \nL 146.669046 65.693577 \nL 147.004181 62.805297 \nL 147.339316 62.949171 \nL 147.674451 66.329266 \nL 148.009586 72.020659 \nL 148.679856 75.042759 \nL 149.014992 77.82452 \nL 149.350127 71.919308 \nL 149.685262 70.912438 \nL 150.020397 74.95264 \nL 150.355532 70.61295 \nL 150.690667 76.651503 \nL 151.025802 72.261458 \nL 151.360938 71.118198 \nL 151.696073 77.007947 \nL 152.031208 66.534573 \nL 152.366343 65.126434 \nL 152.701478 71.308428 \nL 153.036613 73.498441 \nL 153.706883 84.945106 \nL 154.042019 80.769343 \nL 154.377154 83.291431 \nL 154.712289 75.671946 \nL 155.047424 77.733002 \nL 155.382559 77.243543 \nL 155.717694 79.343301 \nL 156.052829 72.259981 \nL 156.387965 89.587986 \nL 157.058235 80.699113 \nL 157.39337 102.236156 \nL 158.06364 90.910953 \nL 158.398775 92.13662 \nL 158.73391 92.74702 \nL 159.069046 100.642795 \nL 159.404181 85.028405 \nL 160.074451 107.280794 \nL 160.409586 94.358943 \nL 160.744721 94.869045 \nL 161.079856 84.889975 \nL 161.414992 98.233274 \nL 161.750127 96.172137 \nL 162.085262 87.244862 \nL 162.420397 110.881425 \nL 162.755532 97.89506 \nL 163.090667 94.490169 \nL 163.425802 105.037789 \nL 163.760938 96.752858 \nL 164.096073 93.553683 \nL 164.431208 108.426295 \nL 164.766343 98.511471 \nL 165.436613 107.014752 \nL 165.771748 96.629578 \nL 166.106883 109.874056 \nL 166.442019 105.747969 \nL 166.777154 91.907402 \nL 167.112289 107.161663 \nL 167.782559 92.939931 \nL 168.117694 112.077959 \nL 168.452829 113.891546 \nL 168.787965 107.701728 \nL 169.1231 114.468955 \nL 169.458235 113.649509 \nL 169.79337 103.387895 \nL 170.128505 105.480705 \nL 170.46364 105.881498 \nL 170.798775 91.550497 \nL 171.469046 111.557028 \nL 171.804181 107.519135 \nL 172.139316 117.392391 \nL 172.474451 120.762618 \nL 172.809586 114.262473 \nL 173.144721 121.723143 \nL 173.814992 113.69562 \nL 174.150127 130.204259 \nL 174.485262 119.882031 \nL 174.820397 118.75614 \nL 175.155532 123.0304 \nL 175.490667 123.833636 \nL 175.825802 116.955189 \nL 176.160938 117.483211 \nL 176.496073 119.621775 \nL 176.831208 109.906438 \nL 177.166343 118.488554 \nL 177.501478 114.760903 \nL 177.836613 114.59291 \nL 178.171748 126.349369 \nL 178.506883 119.120839 \nL 179.177154 128.837683 \nL 179.512289 119.779243 \nL 179.847424 123.446966 \nL 180.182559 115.614142 \nL 180.517694 116.893735 \nL 181.187965 120.579664 \nL 181.5231 120.271924 \nL 181.858235 121.759303 \nL 182.19337 116.677131 \nL 182.86364 120.495433 \nL 183.198775 118.207311 \nL 183.53391 121.313414 \nL 183.869046 121.748199 \nL 184.204181 124.763448 \nL 184.539316 121.70915 \nL 185.209586 131.776057 \nL 185.544721 125.759225 \nL 185.879856 124.052179 \nL 186.214992 119.437283 \nL 186.550127 118.956754 \nL 186.885262 123.560465 \nL 187.220397 123.91005 \nL 187.555532 117.763409 \nL 187.890667 131.388191 \nL 188.225802 130.085912 \nL 188.560938 125.988425 \nL 188.896073 127.1072 \nL 189.231208 123.837402 \nL 189.566343 125.612252 \nL 189.901478 128.844105 \nL 190.236613 125.04828 \nL 190.571748 129.274168 \nL 190.906883 130.476001 \nL 191.242019 129.943285 \nL 191.912289 126.361116 \nL 192.247424 140.014633 \nL 192.582559 130.992555 \nL 192.917694 126.761808 \nL 193.252829 129.199582 \nL 193.587965 125.329239 \nL 194.258235 138.966274 \nL 194.59337 133.250033 \nL 194.928505 133.293451 \nL 195.26364 138.931822 \nL 195.598775 128.184218 \nL 195.93391 132.078929 \nL 196.269046 133.902715 \nL 196.604181 131.516091 \nL 196.939316 125.062916 \nL 197.274451 123.427818 \nL 197.609586 123.205256 \nL 197.944721 118.330073 \nL 198.279856 128.796197 \nL 198.614992 135.585262 \nL 198.950127 131.466427 \nL 199.285262 131.835205 \nL 199.955532 124.702723 \nL 200.290667 128.801253 \nL 200.625802 129.588725 \nL 200.960938 129.843611 \nL 201.296073 137.050167 \nL 201.631208 135.537824 \nL 201.966343 128.542197 \nL 202.301478 133.417081 \nL 202.636613 142.951068 \nL 202.971748 140.736727 \nL 203.306883 137.687968 \nL 203.642019 132.291395 \nL 203.977154 132.28439 \nL 204.312289 137.998167 \nL 204.647424 131.75431 \nL 204.982559 134.749173 \nL 205.317694 129.692305 \nL 205.652829 127.619305 \nL 205.987965 129.92194 \nL 206.3231 133.035213 \nL 206.658235 128.797339 \nL 206.99337 134.304747 \nL 207.328505 127.415486 \nL 207.66364 126.849946 \nL 207.998775 144.203785 \nL 208.33391 131.221299 \nL 208.669046 135.409395 \nL 209.004181 134.554927 \nL 209.339316 129.29575 \nL 209.674451 131.994827 \nL 210.009586 136.239072 \nL 210.344721 130.470169 \nL 210.679856 134.031989 \nL 211.014992 133.741239 \nL 211.350127 130.245202 \nL 211.685262 132.17822 \nL 212.020397 136.437989 \nL 212.355532 137.160128 \nL 212.690667 130.650433 \nL 213.025802 136.486206 \nL 213.360938 140.368165 \nL 213.696073 133.383562 \nL 214.031208 132.16462 \nL 214.366343 132.824925 \nL 214.701478 128.226849 \nL 215.036613 135.581397 \nL 215.371748 138.138477 \nL 215.706883 134.457077 \nL 216.042019 138.587278 \nL 216.377154 136.994303 \nL 216.712289 129.998411 \nL 217.047424 136.000203 \nL 217.717694 126.668463 \nL 218.052829 127.692767 \nL 218.387965 124.328187 \nL 218.7231 130.215588 \nL 219.058235 132.097798 \nL 219.39337 136.367182 \nL 219.728505 128.66924 \nL 220.06364 125.529362 \nL 220.398775 138.304501 \nL 220.73391 127.770539 \nL 221.069046 123.652406 \nL 221.404181 132.418885 \nL 221.739316 126.103874 \nL 222.074451 129.044064 \nL 222.409586 135.64593 \nL 222.744721 128.6458 \nL 223.414992 136.523505 \nL 223.750127 134.957845 \nL 224.085262 131.384753 \nL 224.420397 131.953119 \nL 224.755532 133.793556 \nL 225.090667 125.729978 \nL 225.760938 136.016399 \nL 226.431208 130.901943 \nL 226.766343 133.078102 \nL 227.101478 129.104478 \nL 227.436613 118.428547 \nL 227.771748 131.594907 \nL 228.106883 134.346797 \nL 228.442019 132.671994 \nL 228.777154 129.676605 \nL 229.112289 131.082347 \nL 229.447424 129.67936 \nL 229.782559 126.706964 \nL 230.117694 119.871272 \nL 230.452829 123.901201 \nL 231.1231 126.939337 \nL 231.79337 122.127822 \nL 232.128505 130.720506 \nL 232.798775 124.178985 \nL 233.13391 117.425813 \nL 233.804181 126.433386 \nL 234.139316 120.395414 \nL 234.474451 124.097758 \nL 234.809586 129.532057 \nL 235.144721 128.135352 \nL 235.479856 128.913078 \nL 235.814992 130.373693 \nL 236.150127 127.53917 \nL 236.485262 127.805097 \nL 236.820397 124.042353 \nL 237.155532 118.763532 \nL 237.490667 131.5659 \nL 238.160938 123.305093 \nL 238.496073 122.288586 \nL 238.831208 122.617557 \nL 239.501478 116.874266 \nL 239.836613 125.07129 \nL 240.171748 121.546063 \nL 240.842019 120.536757 \nL 241.177154 120.911262 \nL 241.512289 117.232284 \nL 241.847424 117.939959 \nL 242.182559 121.8825 \nL 242.517694 116.144976 \nL 242.852829 112.56285 \nL 243.187965 112.64367 \nL 243.5231 112.328848 \nL 243.858235 114.366855 \nL 244.19337 119.336143 \nL 244.528505 113.906845 \nL 244.86364 120.932505 \nL 245.198775 121.963691 \nL 245.53391 111.952055 \nL 245.869046 117.06568 \nL 246.204181 117.093065 \nL 246.539316 121.571869 \nL 246.874451 121.440024 \nL 247.209586 116.556501 \nL 247.544721 114.351826 \nL 247.879856 117.395485 \nL 248.214992 112.055507 \nL 248.550127 114.997097 \nL 248.885262 114.949699 \nL 249.220397 111.437992 \nL 249.555532 116.607394 \nL 249.890667 112.60279 \nL 250.225802 114.909203 \nL 250.560938 112.627576 \nL 250.896073 109.336564 \nL 251.231208 107.88041 \nL 251.566343 111.511616 \nL 251.901478 111.500863 \nL 252.236613 101.468613 \nL 252.571748 110.060513 \nL 252.906883 102.241944 \nL 253.242019 99.143935 \nL 253.577154 109.387876 \nL 253.912289 111.777065 \nL 254.247424 95.093441 \nL 254.582559 100.90391 \nL 254.917694 104.498236 \nL 255.252829 91.381218 \nL 255.587965 100.249789 \nL 255.9231 101.462025 \nL 256.258235 102.011886 \nL 256.59337 104.66847 \nL 256.928505 104.985731 \nL 257.26364 109.1483 \nL 257.598775 107.208782 \nL 257.93391 108.694792 \nL 258.269046 103.744004 \nL 258.604181 103.544697 \nL 258.939316 107.438599 \nL 259.274451 104.767184 \nL 259.609586 100.859831 \nL 259.944721 106.128513 \nL 260.279856 94.98242 \nL 260.614992 89.293244 \nL 260.950127 96.314533 \nL 261.285262 89.347554 \nL 261.620397 92.496313 \nL 261.955532 87.245745 \nL 262.290667 85.538483 \nL 262.625802 80.851826 \nL 262.960938 79.893894 \nL 263.296073 75.131569 \nL 263.631208 78.841306 \nL 263.966343 96.354696 \nL 264.301478 91.811745 \nL 264.636613 94.021768 \nL 264.971748 98.754956 \nL 265.306883 88.824221 \nL 265.642019 82.789539 \nL 265.977154 89.827023 \nL 266.312289 90.732834 \nL 266.647424 89.22351 \nL 266.982559 76.147873 \nL 267.317694 79.363241 \nL 267.652829 80.616952 \nL 267.987965 78.49491 \nL 268.3231 82.466844 \nL 268.658235 78.03317 \nL 268.99337 69.099239 \nL 269.328505 70.85279 \nL 269.66364 66.800722 \nL 269.998775 65.919133 \nL 270.33391 76.402072 \nL 270.669046 67.16262 \nL 271.339316 76.259843 \nL 271.674451 73.7511 \nL 272.009586 78.594421 \nL 272.344721 74.50344 \nL 272.679856 68.064805 \nL 273.014992 70.300702 \nL 273.350127 68.354937 \nL 273.685262 69.837287 \nL 274.020397 72.933572 \nL 274.355532 78.536569 \nL 274.690667 73.604283 \nL 275.025802 75.094286 \nL 275.360937 72.398181 \nL 275.696073 65.188554 \nL 276.031208 65.829014 \nL 276.366343 64.781933 \nL 276.701478 70.560357 \nL 277.036613 70.491404 \nL 277.371748 66.698491 \nL 277.706883 70.49579 \nL 278.042019 63.01692 \nL 278.377154 58.249103 \nL 278.712289 59.482653 \nL 279.047424 55.914115 \nL 279.382559 59.854684 \nL 279.717694 60.306366 \nL 280.052829 60.557528 \nL 280.387965 59.216504 \nL 280.7231 60.858779 \nL 281.058235 63.651847 \nL 281.39337 63.871423 \nL 281.728505 68.489144 \nL 282.398775 57.110486 \nL 282.73391 57.681758 \nL 283.069046 57.282476 \nL 283.404181 59.723953 \nL 283.739316 59.910752 \nL 284.074451 57.359072 \nL 284.409586 56.55523 \nL 284.744721 54.542672 \nL 285.079856 53.551392 \nL 285.414992 59.13569 \nL 285.750127 56.819767 \nL 286.085262 56.59739 \nL 286.755532 52.81921 \nL 287.090667 56.012606 \nL 287.760938 49.859629 \nL 288.096073 48.564864 \nL 288.431208 48.332457 \nL 289.101478 54.789032 \nL 289.436613 56.71461 \nL 289.771748 59.361864 \nL 290.442019 57.146393 \nL 290.777154 58.897621 \nL 291.112289 54.853668 \nL 291.447424 55.697297 \nL 291.782559 54.997305 \nL 292.117694 54.945205 \nL 292.452829 60.057168 \nL 292.787965 52.977612 \nL 293.1231 51.278091 \nL 293.79337 42.360533 \nL 294.128505 43.320175 \nL 294.46364 42.735328 \nL 294.798775 44.084782 \nL 295.13391 47.875965 \nL 295.469046 46.375281 \nL 296.139316 39.950764 \nL 296.474451 40.784659 \nL 296.809586 39.739654 \nL 297.144721 43.59957 \nL 297.479856 49.135485 \nL 297.814992 45.183909 \nL 298.485262 41.31362 \nL 298.820397 44.745389 \nL 299.155532 46.232677 \nL 299.490667 48.31412 \nL 299.825802 48.012255 \nL 300.160938 48.651651 \nL 300.496073 48.076379 \nL 301.166343 41.701457 \nL 301.501478 38.669239 \nL 301.836613 36.763617 \nL 302.171748 38.47721 \nL 302.506883 41.566425 \nL 303.177154 44.346172 \nL 303.512289 46.305676 \nL 303.847424 50.949467 \nL 304.182559 42.045921 \nL 304.517694 43.400135 \nL 304.852829 37.503267 \nL 305.5231 52.508505 \nL 305.858235 52.739933 \nL 306.19337 52.310558 \nL 306.86364 40.030435 \nL 307.198775 37.112481 \nL 307.53391 39.374217 \nL 307.869046 37.680461 \nL 308.204181 42.371502 \nL 308.539316 37.98803 \nL 308.874451 35.406858 \nL 309.209586 34.396471 \nL 309.544721 38.139093 \nL 309.879856 39.376569 \nL 310.214992 39.415797 \nL 310.550127 38.819812 \nL 310.885262 35.271803 \nL 311.220397 38.244637 \nL 311.555532 38.18377 \nL 311.890667 36.91632 \nL 312.225802 39.482699 \nL 312.560938 43.294978 \nL 312.896073 42.131649 \nL 313.231208 41.94734 \nL 313.566343 39.430786 \nL 313.901478 38.67599 \nL 314.236613 39.527467 \nL 314.571748 40.707465 \nL 314.906883 44.371767 \nL 315.577154 39.203016 \nL 316.247424 36.739195 \nL 316.582559 36.330442 \nL 316.917694 37.919671 \nL 317.252829 40.888165 \nL 317.587965 41.487847 \nL 317.9231 45.200077 \nL 318.258235 43.933412 \nL 319.26364 49.072199 \nL 319.598775 45.059186 \nL 320.269046 40.184407 \nL 320.604181 47.663482 \nL 320.939316 49.694737 \nL 321.274451 42.834945 \nL 321.609586 42.843063 \nL 321.944721 37.521074 \nL 322.614992 40.26862 \nL 322.950127 35.375058 \nL 323.285262 38.258186 \nL 323.620397 35.95029 \nL 324.290667 40.490422 \nL 324.625802 35.691224 \nL 325.296073 29.622716 \nL 325.631208 38.128881 \nL 325.966343 41.217253 \nL 326.301478 41.27878 \nL 326.636613 41.141573 \nL 326.971748 42.221948 \nL 327.642019 50.63306 \nL 327.977154 50.10842 \nL 328.312289 52.057682 \nL 328.647424 51.416332 \nL 328.982559 48.31794 \nL 329.317694 48.415793 \nL 329.987965 41.876778 \nL 330.3231 41.776465 \nL 330.658235 41.205264 \nL 331.328505 46.523487 \nL 331.998775 44.621446 \nL 332.33391 44.620973 \nL 332.669046 41.741603 \nL 333.004181 42.943894 \nL 333.339316 43.60577 \nL 333.674451 45.67396 \nL 334.009586 46.207293 \nL 334.344721 46.449583 \nL 335.014992 49.119181 \nL 335.350127 49.041008 \nL 335.685262 43.918884 \nL 336.020397 45.838202 \nL 336.355532 45.347161 \nL 336.690667 46.483512 \nL 337.025802 49.885838 \nL 337.360937 48.678054 \nL 337.696073 44.407711 \nL 338.031208 46.605247 \nL 338.366343 45.100333 \nL 338.701478 45.707798 \nL 339.036613 48.719776 \nL 339.706883 52.690841 \nL 340.042019 50.139559 \nL 340.377154 49.703225 \nL 340.712289 46.876655 \nL 341.047424 48.498595 \nL 341.382559 51.97516 \nL 342.052829 52.577296 \nL 342.7231 57.994331 \nL 343.058235 55.194355 \nL 343.39337 57.431296 \nL 343.728505 52.540122 \nL 344.06364 49.736625 \nL 344.398775 52.400803 \nL 344.73391 50.251155 \nL 345.069046 57.322305 \nL 345.404181 55.957494 \nL 345.739316 60.763704 \nL 346.074451 58.932503 \nL 346.409586 58.785789 \nL 346.744721 56.557339 \nL 347.079856 52.275676 \nL 347.414992 54.916582 \nL 347.750127 55.653597 \nL 348.085262 55.975039 \nL 348.420397 64.554908 \nL 348.755532 65.483514 \nL 349.090667 65.250534 \nL 349.425802 68.750238 \nL 349.760938 66.648395 \nL 350.096073 67.15194 \nL 350.431208 64.228009 \nL 350.766343 64.328561 \nL 351.101478 60.691733 \nL 351.436613 59.056973 \nL 351.771748 61.071939 \nL 352.106883 64.413642 \nL 352.442019 65.342919 \nL 353.112289 53.967178 \nL 353.447424 52.162071 \nL 353.782559 56.081076 \nL 354.117694 63.18665 \nL 354.452829 61.512337 \nL 354.787965 62.4765 \nL 355.1231 62.10697 \nL 355.458235 66.535145 \nL 355.79337 68.264203 \nL 356.128505 75.627253 \nL 356.46364 69.650083 \nL 356.798775 70.376561 \nL 357.13391 76.567581 \nL 357.469046 69.876334 \nL 357.804181 70.810245 \nL 358.139316 74.290149 \nL 358.474451 72.709658 \nL 358.809586 74.124671 \nL 359.144721 70.856461 \nL 359.479856 71.065227 \nL 359.814992 70.144646 \nL 360.150127 70.853145 \nL 360.485262 81.289916 \nL 360.820397 69.716799 \nL 361.155532 70.831126 \nL 361.490667 74.5852 \nL 361.825802 68.442347 \nL 362.160938 73.818651 \nL 362.496073 74.826152 \nL 362.831208 73.695533 \nL 363.166343 87.433752 \nL 363.501478 74.857704 \nL 363.836613 77.6049 \nL 364.171748 84.779283 \nL 364.506883 85.718303 \nL 364.842019 77.487506 \nL 365.177154 74.139194 \nL 365.512289 87.289058 \nL 365.847424 72.767309 \nL 366.517694 87.63245 \nL 366.852829 81.148486 \nL 367.187965 104.846701 \nL 367.858235 82.333955 \nL 368.19337 93.970556 \nL 368.528505 91.6421 \nL 368.86364 82.097944 \nL 369.198775 75.85462 \nL 369.53391 86.145406 \nL 369.869046 85.23534 \nL 370.204181 81.049593 \nL 370.539316 93.857901 \nL 370.874451 93.533186 \nL 371.209586 82.311659 \nL 371.544721 96.343683 \nL 371.879856 98.092715 \nL 372.214992 89.498204 \nL 372.550127 103.212321 \nL 372.885262 104.123921 \nL 373.555532 97.262195 \nL 373.890667 103.280512 \nL 374.225802 103.348578 \nL 374.896073 112.812381 \nL 375.231208 104.577522 \nL 375.566343 105.449889 \nL 375.901478 104.716958 \nL 376.236613 99.901231 \nL 376.571748 91.930057 \nL 376.906883 89.976172 \nL 377.242019 99.997276 \nL 377.577154 100.510473 \nL 377.912289 94.593299 \nL 378.247424 94.444851 \nL 378.582559 100.987802 \nL 378.917694 104.906949 \nL 379.252829 99.133126 \nL 379.587965 96.815103 \nL 379.9231 108.497142 \nL 380.258235 99.509744 \nL 380.59337 95.609629 \nL 380.928505 112.560635 \nL 381.26364 116.506906 \nL 381.598775 117.136817 \nL 381.93391 116.760655 \nL 382.269046 114.529643 \nL 382.604181 106.434519 \nL 382.939316 113.53406 \nL 383.274451 107.382184 \nL 383.609586 111.291542 \nL 383.944721 122.251241 \nL 384.279856 111.966014 \nL 384.614992 111.033315 \nL 384.950127 118.502459 \nL 385.285262 106.786424 \nL 385.620397 116.573224 \nL 385.955532 116.631907 \nL 386.290667 107.947885 \nL 386.625802 115.973387 \nL 386.960938 110.608795 \nL 386.960938 110.608795 \n\" clip-path=\"url(#pada85592f5)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #bf00bf; stroke-width: 1.5\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 52.160938 173.52 \nL 52.160938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 386.960938 173.52 \nL 386.960938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 52.160938 173.52 \nL 386.960938 173.52 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 52.160938 7.2 \nL 386.960938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"legend_1\">\n <g id=\"patch_7\">\n <path d=\"M 59.160938 168.52 \nL 153.885938 168.52 \nQ 155.885938 168.52 155.885938 166.52 \nL 155.885938 138.16375 \nQ 155.885938 136.16375 153.885938 136.16375 \nL 59.160938 136.16375 \nQ 57.160938 136.16375 57.160938 138.16375 \nL 57.160938 166.52 \nQ 57.160938 168.52 59.160938 168.52 \nz\n\" style=\"opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n </g>\n <g id=\"line2d_27\">\n <path d=\"M 61.160938 144.262188 \nL 71.160938 144.262188 \nL 81.160938 144.262188 \n\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"text_15\">\n <!-- data -->\n <g style=\"fill: #ffffff\" transform=\"translate(89.160938 147.762188) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-64\" d=\"M 2906 2969 \nL 2906 4863 \nL 3481 4863 \nL 3481 0 \nL 2906 0 \nL 2906 525 \nQ 2725 213 2448 61 \nQ 2172 -91 1784 -91 \nQ 1150 -91 751 415 \nQ 353 922 353 1747 \nQ 353 2572 751 3078 \nQ 1150 3584 1784 3584 \nQ 2172 3584 2448 3432 \nQ 2725 3281 2906 2969 \nz\nM 947 1747 \nQ 947 1113 1208 752 \nQ 1469 391 1925 391 \nQ 2381 391 2643 752 \nQ 2906 1113 2906 1747 \nQ 2906 2381 2643 2742 \nQ 2381 3103 1925 3103 \nQ 1469 3103 1208 2742 \nQ 947 2381 947 1747 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-61\" d=\"M 2194 1759 \nQ 1497 1759 1228 1600 \nQ 959 1441 959 1056 \nQ 959 750 1161 570 \nQ 1363 391 1709 391 \nQ 2188 391 2477 730 \nQ 2766 1069 2766 1631 \nL 2766 1759 \nL 2194 1759 \nz\nM 3341 1997 \nL 3341 0 \nL 2766 0 \nL 2766 531 \nQ 2569 213 2275 61 \nQ 1981 -91 1556 -91 \nQ 1019 -91 701 211 \nQ 384 513 384 1019 \nQ 384 1609 779 1909 \nQ 1175 2209 1959 2209 \nL 2766 2209 \nL 2766 2266 \nQ 2766 2663 2505 2880 \nQ 2244 3097 1772 3097 \nQ 1472 3097 1187 3025 \nQ 903 2953 641 2809 \nL 641 3341 \nQ 956 3463 1253 3523 \nQ 1550 3584 1831 3584 \nQ 2591 3584 2966 3190 \nQ 3341 2797 3341 1997 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-64\"/>\n <use xlink:href=\"#DejaVuSans-61\" x=\"63.476562\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"124.755859\"/>\n <use xlink:href=\"#DejaVuSans-61\" x=\"163.964844\"/>\n </g>\n </g>\n <g id=\"line2d_28\">\n <path d=\"M 61.160938 158.940313 \nL 71.160938 158.940313 \nL 81.160938 158.940313 \n\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #bf00bf; stroke-width: 1.5\"/>\n </g>\n <g id=\"text_16\">\n <!-- 1-step preds -->\n <g style=\"fill: #ffffff\" transform=\"translate(89.160938 162.440313) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-2d\" d=\"M 313 2009 \nL 1997 2009 \nL 1997 1497 \nL 313 1497 \nL 313 2009 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-73\" d=\"M 2834 3397 \nL 2834 2853 \nQ 2591 2978 2328 3040 \nQ 2066 3103 1784 3103 \nQ 1356 3103 1142 2972 \nQ 928 2841 928 2578 \nQ 928 2378 1081 2264 \nQ 1234 2150 1697 2047 \nL 1894 2003 \nQ 2506 1872 2764 1633 \nQ 3022 1394 3022 966 \nQ 3022 478 2636 193 \nQ 2250 -91 1575 -91 \nQ 1294 -91 989 -36 \nQ 684 19 347 128 \nL 347 722 \nQ 666 556 975 473 \nQ 1284 391 1588 391 \nQ 1994 391 2212 530 \nQ 2431 669 2431 922 \nQ 2431 1156 2273 1281 \nQ 2116 1406 1581 1522 \nL 1381 1569 \nQ 847 1681 609 1914 \nQ 372 2147 372 2553 \nQ 372 3047 722 3315 \nQ 1072 3584 1716 3584 \nQ 2034 3584 2315 3537 \nQ 2597 3491 2834 3397 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-70\" d=\"M 1159 525 \nL 1159 -1331 \nL 581 -1331 \nL 581 3500 \nL 1159 3500 \nL 1159 2969 \nQ 1341 3281 1617 3432 \nQ 1894 3584 2278 3584 \nQ 2916 3584 3314 3078 \nQ 3713 2572 3713 1747 \nQ 3713 922 3314 415 \nQ 2916 -91 2278 -91 \nQ 1894 -91 1617 61 \nQ 1341 213 1159 525 \nz\nM 3116 1747 \nQ 3116 2381 2855 2742 \nQ 2594 3103 2138 3103 \nQ 1681 3103 1420 2742 \nQ 1159 2381 1159 1747 \nQ 1159 1113 1420 752 \nQ 1681 391 2138 391 \nQ 2594 391 2855 752 \nQ 3116 1113 3116 1747 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-20\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-72\" d=\"M 2631 2963 \nQ 2534 3019 2420 3045 \nQ 2306 3072 2169 3072 \nQ 1681 3072 1420 2755 \nQ 1159 2438 1159 1844 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1341 3275 1631 3429 \nQ 1922 3584 2338 3584 \nQ 2397 3584 2469 3576 \nQ 2541 3569 2628 3553 \nL 2631 2963 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-2d\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"99.707031\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"151.806641\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"191.015625\"/>\n <use xlink:href=\"#DejaVuSans-70\" x=\"252.539062\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"316.015625\"/>\n <use xlink:href=\"#DejaVuSans-70\" x=\"347.802734\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"411.279297\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"450.142578\"/>\n <use xlink:href=\"#DejaVuSans-64\" x=\"511.666016\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"575.142578\"/>\n </g>\n </g>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"pada85592f5\">\n <rect x=\"52.160938\" y=\"7.2\" width=\"334.8\" height=\"166.32\"/>\n </clipPath>\n </defs>\n</svg>\n"
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 90
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.848161521Z",
"start_time": "2026-04-22T07:03:24.729135740Z"
}
},
"cell_type": "code",
"source": [
"multistep_preds = torch.zeros(T)\n",
"multistep_preds[: n_train + tau] = x[: n_train + tau]\n",
"for i in range(n_train + tau, T):\n",
" multistep_preds[i] = net(\n",
" multistep_preds[i - tau:i].reshape((1, -1)))\n",
"d2l.plot([time, time[tau:], time[n_train + tau:]],\n",
" [x.detach().numpy(), onestep_preds.detach().numpy(),\n",
" multistep_preds[n_train + tau:].detach().numpy()], 'time',\n",
" 'x', legend=['data', '1-step preds', 'multistep preds'],\n",
" xlim=[1, 1000], figsize=(6, 3))"
],
"id": "12c3a1c3912da4dd",
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 600x300 with 1 Axes>"
],
"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<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"406.885938pt\" height=\"211.07625pt\" viewBox=\"0 0 406.885938 211.07625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n <metadata>\n <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" 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>2026-04-22T15:03:24.805438</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.7.2, 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-linejoin: round; stroke-linecap: butt}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 211.07625 \nL 406.885938 211.07625 \nL 406.885938 0 \nL 0 0 \nz\n\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 52.160938 173.52 \nL 386.960938 173.52 \nL 386.960938 7.2 \nL 52.160938 7.2 \nz\n\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path d=\"M 118.852829 173.52 \nL 118.852829 7.2 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path id=\"m5e61501fd7\" d=\"M 0 0 \nL 0 3.5 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m5e61501fd7\" x=\"118.852829\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 200 -->\n <g style=\"fill: #ffffff\" transform=\"translate(109.309079 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-32\" d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-32\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path d=\"M 185.879856 173.52 \nL 185.879856 7.2 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use xlink:href=\"#m5e61501fd7\" x=\"185.879856\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 400 -->\n <g style=\"fill: #ffffff\" transform=\"translate(176.336106 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-34\" d=\"M 2419 4116 \nL 825 1625 \nL 2419 1625 \nL 2419 4116 \nz\nM 2253 4666 \nL 3047 4666 \nL 3047 1625 \nL 3713 1625 \nL 3713 1100 \nL 3047 1100 \nL 3047 0 \nL 2419 0 \nL 2419 1100 \nL 313 1100 \nL 313 1709 \nL 2253 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-34\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path d=\"M 252.906883 173.52 \nL 252.906883 7.2 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_6\">\n <g>\n <use xlink:href=\"#m5e61501fd7\" x=\"252.906883\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 600 -->\n <g style=\"fill: #ffffff\" transform=\"translate(243.363133 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-36\" d=\"M 2113 2584 \nQ 1688 2584 1439 2293 \nQ 1191 2003 1191 1497 \nQ 1191 994 1439 701 \nQ 1688 409 2113 409 \nQ 2538 409 2786 701 \nQ 3034 994 3034 1497 \nQ 3034 2003 2786 2293 \nQ 2538 2584 2113 2584 \nz\nM 3366 4563 \nL 3366 3988 \nQ 3128 4100 2886 4159 \nQ 2644 4219 2406 4219 \nQ 1781 4219 1451 3797 \nQ 1122 3375 1075 2522 \nQ 1259 2794 1537 2939 \nQ 1816 3084 2150 3084 \nQ 2853 3084 3261 2657 \nQ 3669 2231 3669 1497 \nQ 3669 778 3244 343 \nQ 2819 -91 2113 -91 \nQ 1303 -91 875 529 \nQ 447 1150 447 2328 \nQ 447 3434 972 4092 \nQ 1497 4750 2381 4750 \nQ 2619 4750 2861 4703 \nQ 3103 4656 3366 4563 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-36\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_7\">\n <path d=\"M 319.93391 173.52 \nL 319.93391 7.2 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_8\">\n <g>\n <use xlink:href=\"#m5e61501fd7\" x=\"319.93391\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 800 -->\n <g style=\"fill: #ffffff\" transform=\"translate(310.39016 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-38\" d=\"M 2034 2216 \nQ 1584 2216 1326 1975 \nQ 1069 1734 1069 1313 \nQ 1069 891 1326 650 \nQ 1584 409 2034 409 \nQ 2484 409 2743 651 \nQ 3003 894 3003 1313 \nQ 3003 1734 2745 1975 \nQ 2488 2216 2034 2216 \nz\nM 1403 2484 \nQ 997 2584 770 2862 \nQ 544 3141 544 3541 \nQ 544 4100 942 4425 \nQ 1341 4750 2034 4750 \nQ 2731 4750 3128 4425 \nQ 3525 4100 3525 3541 \nQ 3525 3141 3298 2862 \nQ 3072 2584 2669 2484 \nQ 3125 2378 3379 2068 \nQ 3634 1759 3634 1313 \nQ 3634 634 3220 271 \nQ 2806 -91 2034 -91 \nQ 1263 -91 848 271 \nQ 434 634 434 1313 \nQ 434 1759 690 2068 \nQ 947 2378 1403 2484 \nz\nM 1172 3481 \nQ 1172 3119 1398 2916 \nQ 1625 2713 2034 2713 \nQ 2441 2713 2670 2916 \nQ 2900 3119 2900 3481 \nQ 2900 3844 2670 4047 \nQ 2441 4250 2034 4250 \nQ 1625 4250 1398 4047 \nQ 1172 3844 1172 3481 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-38\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_9\">\n <path d=\"M 386.960938 173.52 \nL 386.960938 7.2 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_10\">\n <g>\n <use xlink:href=\"#m5e61501fd7\" x=\"386.960938\" y=\"173.52\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 1000 -->\n <g style=\"fill: #ffffff\" transform=\"translate(374.235937 188.118438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-31\" d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n </g>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- time -->\n <g style=\"fill: #ffffff\" transform=\"translate(208.264844 201.796563) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \nL 1172 3500 \nL 2356 3500 \nL 2356 3053 \nL 1172 3053 \nL 1172 1153 \nQ 1172 725 1289 603 \nQ 1406 481 1766 481 \nL 2356 481 \nL 2356 0 \nL 1766 0 \nQ 1100 0 847 248 \nQ 594 497 594 1153 \nL 594 3053 \nL 172 3053 \nL 172 3500 \nL 594 3500 \nL 594 4494 \nL 1172 4494 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-69\" d=\"M 603 3500 \nL 1178 3500 \nL 1178 0 \nL 603 0 \nL 603 3500 \nz\nM 603 4863 \nL 1178 4863 \nL 1178 4134 \nL 603 4134 \nL 603 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6d\" d=\"M 3328 2828 \nQ 3544 3216 3844 3400 \nQ 4144 3584 4550 3584 \nQ 5097 3584 5394 3201 \nQ 5691 2819 5691 2113 \nL 5691 0 \nL 5113 0 \nL 5113 2094 \nQ 5113 2597 4934 2840 \nQ 4756 3084 4391 3084 \nQ 3944 3084 3684 2787 \nQ 3425 2491 3425 1978 \nL 3425 0 \nL 2847 0 \nL 2847 2094 \nQ 2847 2600 2669 2842 \nQ 2491 3084 2119 3084 \nQ 1678 3084 1418 2786 \nQ 1159 2488 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1356 3278 1631 3431 \nQ 1906 3584 2284 3584 \nQ 2666 3584 2933 3390 \nQ 3200 3197 3328 2828 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \nL 3597 1613 \nL 953 1613 \nQ 991 1019 1311 708 \nQ 1631 397 2203 397 \nQ 2534 397 2845 478 \nQ 3156 559 3463 722 \nL 3463 178 \nQ 3153 47 2828 -22 \nQ 2503 -91 2169 -91 \nQ 1331 -91 842 396 \nQ 353 884 353 1716 \nQ 353 2575 817 3079 \nQ 1281 3584 2069 3584 \nQ 2775 3584 3186 3129 \nQ 3597 2675 3597 1894 \nz\nM 3022 2063 \nQ 3016 2534 2758 2815 \nQ 2500 3097 2075 3097 \nQ 1594 3097 1305 2825 \nQ 1016 2553 972 2059 \nL 3022 2063 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-74\"/>\n <use xlink:href=\"#DejaVuSans-69\" x=\"39.208984\"/>\n <use xlink:href=\"#DejaVuSans-6d\" x=\"66.992188\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"164.404297\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_11\">\n <path d=\"M 52.160938 158.726267 \nL 386.960938 158.726267 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_12\">\n <defs>\n <path id=\"m94c8455861\" d=\"M 0 0 \nL -3.5 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m94c8455861\" x=\"52.160938\" y=\"158.726267\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 1.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 162.525486) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-2212\" d=\"M 678 2272 \nL 4684 2272 \nL 4684 1741 \nL 678 1741 \nL 678 2272 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-2e\" d=\"M 684 794 \nL 1344 794 \nL 1344 0 \nL 684 0 \nL 684 794 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-35\" d=\"M 691 4666 \nL 3169 4666 \nL 3169 4134 \nL 1269 4134 \nL 1269 2991 \nQ 1406 3038 1543 3061 \nQ 1681 3084 1819 3084 \nQ 2600 3084 3056 2656 \nQ 3513 2228 3513 1497 \nQ 3513 744 3044 326 \nQ 2575 -91 1722 -91 \nQ 1428 -91 1123 -41 \nQ 819 9 494 109 \nL 494 744 \nQ 775 591 1075 516 \nQ 1375 441 1709 441 \nQ 2250 441 2565 725 \nQ 2881 1009 2881 1497 \nQ 2881 1984 2565 2268 \nQ 2250 2553 1709 2553 \nQ 1456 2553 1204 2497 \nQ 953 2441 691 2322 \nL 691 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_13\">\n <path d=\"M 52.160938 134.849044 \nL 386.960938 134.849044 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_14\">\n <g>\n <use xlink:href=\"#m94c8455861\" x=\"52.160938\" y=\"134.849044\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 1.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 138.648263) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_15\">\n <path d=\"M 52.160938 110.971822 \nL 386.960938 110.971822 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_16\">\n <g>\n <use xlink:href=\"#m94c8455861\" x=\"52.160938\" y=\"110.971822\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- 0.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 114.771041) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-2212\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"179.199219\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_17\">\n <path d=\"M 52.160938 87.0946 \nL 386.960938 87.0946 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_18\">\n <g>\n <use xlink:href=\"#m94c8455861\" x=\"52.160938\" y=\"87.0946\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 0.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 90.893818) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_19\">\n <path d=\"M 52.160938 63.217377 \nL 386.960938 63.217377 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_20\">\n <g>\n <use xlink:href=\"#m94c8455861\" x=\"52.160938\" y=\"63.217377\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- 0.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 67.016596) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_6\">\n <g id=\"line2d_21\">\n <path d=\"M 52.160938 39.340155 \nL 386.960938 39.340155 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_22\">\n <g>\n <use xlink:href=\"#m94c8455861\" x=\"52.160938\" y=\"39.340155\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- 1.0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 43.139373) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_7\">\n <g id=\"line2d_23\">\n <path d=\"M 52.160938 15.462932 \nL 386.960938 15.462932 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_24\">\n <g>\n <use xlink:href=\"#m94c8455861\" x=\"52.160938\" y=\"15.462932\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_13\">\n <!-- 1.5 -->\n <g style=\"fill: #ffffff\" transform=\"translate(29.257812 19.262151) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n </g>\n </g>\n </g>\n <g id=\"text_14\">\n <!-- x -->\n <g style=\"fill: #ffffff\" transform=\"translate(14.798438 93.319375) rotate(-90) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-78\" d=\"M 3513 3500 \nL 2247 1797 \nL 3578 0 \nL 2900 0 \nL 1881 1375 \nL 863 0 \nL 184 0 \nL 1544 1831 \nL 300 3500 \nL 978 3500 \nL 1906 2253 \nL 2834 3500 \nL 3513 3500 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-78\"/>\n </g>\n </g>\n </g>\n <g id=\"line2d_25\">\n <path d=\"M 52.160938 91.620164 \nL 52.496073 76.85888 \nL 52.831208 99.142407 \nL 53.166343 92.991388 \nL 53.501478 95.814422 \nL 53.836613 81.415823 \nL 54.171748 96.470627 \nL 54.506883 75.885911 \nL 54.842019 80.139206 \nL 55.177154 92.433971 \nL 55.512289 69.012006 \nL 55.847424 68.65884 \nL 56.517694 77.743774 \nL 56.852829 85.174639 \nL 57.187965 83.198818 \nL 57.5231 64.206941 \nL 57.858235 85.417059 \nL 58.19337 75.736926 \nL 58.528505 80.129288 \nL 58.86364 81.801382 \nL 59.198775 74.94461 \nL 59.53391 87.703016 \nL 59.869046 83.594711 \nL 60.204181 72.021536 \nL 60.539316 85.865928 \nL 60.874451 71.782131 \nL 61.209586 71.530971 \nL 61.544721 69.457521 \nL 61.879856 84.306385 \nL 62.550127 72.291719 \nL 62.885262 75.978999 \nL 63.220397 84.587202 \nL 63.555532 65.773686 \nL 63.890667 80.917666 \nL 64.225802 66.415567 \nL 64.560938 71.845107 \nL 64.896073 64.630494 \nL 65.231208 62.083098 \nL 65.566343 61.672922 \nL 65.901478 63.757347 \nL 66.236613 83.124244 \nL 66.571748 58.803035 \nL 66.906883 53.798496 \nL 67.242019 70.429451 \nL 67.577154 51.395528 \nL 67.912289 58.255957 \nL 68.247424 39.36493 \nL 68.582559 80.14617 \nL 68.917694 80.329952 \nL 69.252829 58.596473 \nL 69.587965 55.226758 \nL 69.9231 70.738359 \nL 70.258235 50.396064 \nL 70.928505 76.575893 \nL 71.26364 77.024509 \nL 71.598775 65.129657 \nL 71.93391 62.95436 \nL 72.269046 70.105622 \nL 72.604181 53.571562 \nL 72.939316 51.58855 \nL 73.274451 64.589042 \nL 73.609586 66.472576 \nL 73.944721 59.1073 \nL 74.279856 69.941384 \nL 74.614992 50.087274 \nL 74.950127 55.383361 \nL 75.285262 49.331029 \nL 75.620397 73.838191 \nL 75.955532 59.072489 \nL 76.290667 57.089821 \nL 76.625802 70.564833 \nL 76.960938 56.971021 \nL 77.296073 51.055709 \nL 77.631208 60.523503 \nL 77.966343 52.800658 \nL 78.301478 49.599495 \nL 78.636613 49.735962 \nL 78.971748 52.530029 \nL 79.306883 42.713624 \nL 79.642019 44.00489 \nL 79.977154 48.413471 \nL 80.312289 60.536784 \nL 80.647424 53.075741 \nL 80.982559 31.859953 \nL 81.317694 50.66788 \nL 81.652829 41.105837 \nL 81.987965 65.962787 \nL 82.3231 36.342391 \nL 82.99337 65.895695 \nL 83.328505 52.299836 \nL 83.66364 48.417646 \nL 83.998775 59.463061 \nL 84.33391 36.291504 \nL 85.004181 47.036978 \nL 85.339316 29.370321 \nL 86.009586 53.601474 \nL 86.344721 60.034343 \nL 86.679856 58.250814 \nL 87.014992 60.597432 \nL 87.350127 49.087794 \nL 87.685262 43.316602 \nL 88.020397 43.763494 \nL 88.355532 57.926015 \nL 88.690667 44.122577 \nL 89.025802 43.172786 \nL 89.360938 46.317915 \nL 89.696073 55.740651 \nL 90.031208 39.619656 \nL 90.366343 54.134967 \nL 90.701478 45.154742 \nL 91.036613 15.948702 \nL 91.371748 39.877154 \nL 91.706883 30.215806 \nL 92.042019 59.954188 \nL 92.377154 44.747914 \nL 92.712289 53.085379 \nL 93.047424 44.307743 \nL 93.382559 32.39652 \nL 93.717694 26.63574 \nL 94.387965 55.662386 \nL 94.7231 40.745148 \nL 95.058235 38.813693 \nL 95.39337 37.645279 \nL 95.728505 40.480967 \nL 96.06364 42.018058 \nL 96.398775 35.403852 \nL 96.73391 19.786713 \nL 97.069046 27.191338 \nL 97.404181 55.858676 \nL 97.739316 37.021551 \nL 98.074451 36.295403 \nL 98.409586 44.11533 \nL 98.744721 40.128726 \nL 99.079856 27.124374 \nL 99.414992 31.212354 \nL 99.750127 46.663597 \nL 100.085262 50.342436 \nL 100.420397 27.660713 \nL 100.755532 32.367942 \nL 101.090667 42.883838 \nL 101.425802 48.174775 \nL 101.760938 34.156087 \nL 102.096073 41.844955 \nL 102.431208 40.893869 \nL 102.766343 52.092759 \nL 103.101478 33.30676 \nL 103.436613 31.134847 \nL 103.771748 42.142494 \nL 104.106883 38.040011 \nL 104.442019 50.168456 \nL 104.777154 40.149229 \nL 105.782559 56.724194 \nL 106.117694 30.672941 \nL 106.787965 53.783273 \nL 107.1231 42.849547 \nL 107.458235 47.279126 \nL 108.128505 50.300377 \nL 108.46364 26.917834 \nL 108.798775 26.08846 \nL 109.13391 50.294562 \nL 109.804181 30.189312 \nL 110.139316 46.013147 \nL 110.809586 35.628051 \nL 111.144721 44.447956 \nL 111.479856 39.039468 \nL 111.814992 47.097495 \nL 112.150127 39.708933 \nL 112.485262 48.503374 \nL 112.820397 48.795567 \nL 113.155532 32.365226 \nL 113.490667 34.477911 \nL 113.825802 44.444119 \nL 114.160938 39.314776 \nL 114.831208 52.726327 \nL 115.166343 27.034621 \nL 115.501478 36.551447 \nL 115.836613 20.085772 \nL 116.171748 44.540204 \nL 116.506883 32.583197 \nL 116.842019 47.74069 \nL 117.177154 49.150224 \nL 117.512289 38.284737 \nL 118.182559 52.658922 \nL 118.517694 30.64631 \nL 118.852829 48.511512 \nL 119.187965 44.466645 \nL 119.5231 35.688559 \nL 120.19337 43.357736 \nL 120.528505 52.09589 \nL 120.86364 39.580945 \nL 121.198775 51.323078 \nL 121.53391 45.309438 \nL 121.869046 30.442207 \nL 122.874451 57.131333 \nL 123.209586 44.419956 \nL 123.544721 50.825527 \nL 123.879856 46.871856 \nL 124.214992 45.763228 \nL 124.550127 54.05775 \nL 124.885262 52.011648 \nL 125.220397 33.712159 \nL 125.555532 58.769249 \nL 125.890667 45.334628 \nL 126.225802 63.893151 \nL 126.560938 42.499775 \nL 126.896073 32.739111 \nL 127.231208 58.040637 \nL 127.566343 41.829257 \nL 127.901478 45.422644 \nL 128.236613 52.704029 \nL 128.571748 41.267765 \nL 128.906883 66.149827 \nL 129.242019 27.281244 \nL 129.577154 62.645959 \nL 129.912289 52.606753 \nL 130.247424 55.738425 \nL 130.582559 44.283099 \nL 130.917694 51.061658 \nL 131.252829 34.066381 \nL 131.587965 55.416558 \nL 131.9231 60.096519 \nL 132.258235 38.884164 \nL 132.59337 55.77567 \nL 132.928505 52.427186 \nL 133.26364 46.430917 \nL 133.598775 70.71269 \nL 133.93391 50.309577 \nL 134.269046 69.170747 \nL 134.604181 65.651423 \nL 134.939316 66.213 \nL 135.274451 47.537805 \nL 135.609586 61.042487 \nL 135.944721 50.878183 \nL 136.279856 47.948513 \nL 136.614992 64.260946 \nL 136.950127 71.095484 \nL 137.285262 55.029928 \nL 137.620397 68.139692 \nL 137.955532 53.040824 \nL 138.625802 66.431804 \nL 138.960938 66.595884 \nL 139.296073 70.130214 \nL 139.631208 61.092863 \nL 139.966343 60.310969 \nL 140.301478 67.467467 \nL 140.636613 46.382511 \nL 140.971748 70.84959 \nL 141.306883 67.688248 \nL 141.642019 62.397672 \nL 141.977154 59.183353 \nL 142.312289 57.55631 \nL 142.647424 64.559454 \nL 142.982559 43.674345 \nL 143.317694 53.837656 \nL 143.652829 52.389816 \nL 143.987965 53.982953 \nL 144.658235 77.394617 \nL 144.99337 82.806495 \nL 145.328505 66.194051 \nL 145.66364 67.021351 \nL 145.998775 73.462032 \nL 146.669046 58.304912 \nL 147.004181 66.235674 \nL 147.674451 89.989991 \nL 148.009586 75.003904 \nL 148.344721 66.248856 \nL 148.679856 72.819415 \nL 149.014992 83.547498 \nL 149.350127 74.03758 \nL 149.685262 82.034201 \nL 150.020397 60.624928 \nL 150.355532 92.876269 \nL 150.690667 82.473578 \nL 151.025802 63.643688 \nL 151.360938 62.707677 \nL 151.696073 65.209552 \nL 152.031208 73.835236 \nL 152.366343 89.54679 \nL 152.701478 80.231761 \nL 153.036613 84.479047 \nL 153.371748 82.640455 \nL 153.706883 81.498754 \nL 154.042019 83.667801 \nL 154.377154 67.861611 \nL 154.712289 78.472812 \nL 155.047424 82.946842 \nL 155.382559 101.737577 \nL 155.717694 60.281457 \nL 156.052829 100.089752 \nL 156.387965 100.296816 \nL 156.7231 83.03439 \nL 157.058235 94.12826 \nL 157.39337 94.842332 \nL 157.728505 93.469147 \nL 158.06364 80.752163 \nL 158.398775 83.735931 \nL 158.73391 119.147544 \nL 159.069046 92.448073 \nL 159.404181 92.862084 \nL 159.739316 86.655671 \nL 160.074451 90.94121 \nL 160.409586 96.727955 \nL 160.744721 75.924238 \nL 161.079856 103.964381 \nL 161.414992 109.051654 \nL 161.750127 84.133234 \nL 162.085262 112.184767 \nL 162.420397 86.151997 \nL 162.755532 89.927413 \nL 163.090667 96.235835 \nL 163.425802 107.432948 \nL 163.760938 87.645553 \nL 164.096073 112.911475 \nL 164.431208 86.438545 \nL 164.766343 107.341569 \nL 165.101478 100.572289 \nL 165.436613 90.894059 \nL 165.771748 103.784143 \nL 166.106883 108.46284 \nL 166.442019 75.378401 \nL 166.777154 104.904066 \nL 167.112289 106.607258 \nL 167.447424 99.59517 \nL 168.117694 116.414637 \nL 168.452829 98.953189 \nL 168.787965 106.986633 \nL 169.1231 104.934099 \nL 169.458235 90.614939 \nL 169.79337 88.107395 \nL 170.128505 104.495021 \nL 170.46364 89.349866 \nL 171.13391 119.537658 \nL 171.469046 115.37151 \nL 171.804181 113.992123 \nL 172.139316 115.611074 \nL 172.474451 96.33585 \nL 172.809586 132.666913 \nL 173.144721 125.185237 \nL 173.479856 103.737771 \nL 173.814992 132.641899 \nL 174.150127 116.561505 \nL 174.485262 124.129882 \nL 174.820397 109.305919 \nL 175.155532 126.226724 \nL 175.490667 101.444204 \nL 175.825802 111.88389 \nL 176.160938 115.277548 \nL 176.496073 98.86063 \nL 176.831208 120.085688 \nL 177.166343 111.22876 \nL 177.501478 113.494204 \nL 177.836613 140.048573 \nL 178.171748 121.506541 \nL 178.506883 125.616937 \nL 178.842019 119.469795 \nL 179.177154 101.330892 \nL 179.512289 119.009067 \nL 179.847424 107.745656 \nL 180.182559 127.669495 \nL 180.517694 115.403279 \nL 180.852829 121.489844 \nL 181.187965 105.006348 \nL 181.5231 122.543676 \nL 181.858235 106.715241 \nL 182.19337 122.170541 \nL 183.198775 111.919521 \nL 183.53391 120.740203 \nL 183.869046 143.225215 \nL 184.539316 121.976389 \nL 185.209586 115.525696 \nL 185.544721 123.352002 \nL 185.879856 112.331837 \nL 186.214992 107.385121 \nL 186.550127 125.267054 \nL 186.885262 152.79348 \nL 187.220397 116.788425 \nL 187.555532 138.149509 \nL 187.890667 114.673986 \nL 188.225802 126.128282 \nL 188.560938 120.621403 \nL 188.896073 124.266884 \nL 189.231208 123.161561 \nL 189.566343 145.055236 \nL 189.901478 121.965356 \nL 190.236613 121.731969 \nL 190.571748 119.657227 \nL 190.906883 149.541688 \nL 191.242019 151.427864 \nL 191.577154 121.021016 \nL 191.912289 127.144106 \nL 192.247424 115.618958 \nL 192.917694 140.284778 \nL 193.252829 141.123773 \nL 193.587965 133.725598 \nL 193.9231 144.980075 \nL 194.258235 126.100843 \nL 194.59337 124.166054 \nL 194.928505 149.119774 \nL 195.26364 131.418457 \nL 195.598775 143.039209 \nL 195.93391 121.554107 \nL 196.269046 121.390981 \nL 196.604181 101.287481 \nL 196.939316 122.773522 \nL 197.274451 135.274255 \nL 197.609586 141.683412 \nL 197.944721 136.739962 \nL 198.279856 136.67035 \nL 198.614992 115.646762 \nL 198.950127 122.25546 \nL 199.285262 124.379411 \nL 199.620397 130.580042 \nL 199.955532 141.859587 \nL 200.290667 141.331035 \nL 200.625802 117.686397 \nL 201.631208 163.300888 \nL 201.966343 137.674584 \nL 202.301478 133.404782 \nL 202.636613 126.499408 \nL 202.971748 146.857233 \nL 203.306883 137.11437 \nL 203.642019 140.11856 \nL 203.977154 135.013901 \nL 204.312289 118.942983 \nL 204.647424 130.647482 \nL 204.982559 130.772387 \nL 205.317694 140.001488 \nL 205.652829 127.107866 \nL 205.987965 130.662926 \nL 206.3231 114.93923 \nL 206.658235 165.96 \nL 206.99337 131.909826 \nL 207.328505 138.188847 \nL 207.66364 142.004109 \nL 207.998775 124.634769 \nL 208.33391 129.795211 \nL 208.669046 137.005376 \nL 209.004181 135.152868 \nL 209.339316 130.628772 \nL 209.674451 140.34269 \nL 210.009586 124.349814 \nL 210.344721 136.198323 \nL 210.679856 136.263932 \nL 211.014992 139.277635 \nL 211.350127 125.034222 \nL 212.020397 150.204481 \nL 212.355532 146.836944 \nL 212.690667 130.82936 \nL 213.025802 131.873472 \nL 213.360938 122.023448 \nL 214.031208 143.969773 \nL 214.366343 137.424785 \nL 214.701478 141.722055 \nL 215.036613 138.591849 \nL 215.371748 127.892014 \nL 216.042019 150.095538 \nL 216.377154 125.364525 \nL 216.712289 122.04337 \nL 217.047424 114.816567 \nL 217.717694 140.714001 \nL 218.052829 137.107442 \nL 218.7231 118.344536 \nL 219.058235 147.521289 \nL 219.39337 138.463978 \nL 219.728505 112.828122 \nL 220.06364 134.408276 \nL 220.398775 124.79118 \nL 220.73391 122.732836 \nL 221.069046 136.71628 \nL 221.404181 125.408249 \nL 221.739316 128.01117 \nL 222.074451 146.378072 \nL 222.409586 132.914498 \nL 222.744721 140.346043 \nL 223.079856 133.361508 \nL 223.414992 140.318103 \nL 223.750127 119.822838 \nL 224.085262 123.133963 \nL 224.420397 139.62424 \nL 224.755532 130.330721 \nL 225.090667 145.649869 \nL 225.760938 135.681926 \nL 226.096073 105.155629 \nL 226.766343 143.579749 \nL 227.101478 127.330305 \nL 227.436613 134.64976 \nL 227.771748 132.436464 \nL 228.106883 147.960025 \nL 228.442019 120.709388 \nL 228.777154 115.238231 \nL 229.112289 114.067239 \nL 229.447424 137.417504 \nL 229.782559 119.204665 \nL 230.117694 117.372506 \nL 230.452829 111.304291 \nL 230.787965 139.416687 \nL 231.1231 139.417677 \nL 231.458235 119.676221 \nL 231.79337 112.20248 \nL 232.128505 114.682434 \nL 232.46364 131.354168 \nL 232.798775 112.308445 \nL 233.13391 115.693007 \nL 233.469046 127.03618 \nL 233.804181 122.619541 \nL 234.139316 123.480815 \nL 234.474451 135.606764 \nL 234.809586 137.841946 \nL 235.144721 132.060288 \nL 235.479856 117.034782 \nL 235.814992 107.661745 \nL 236.150127 128.044524 \nL 236.485262 138.4197 \nL 236.820397 113.498101 \nL 237.155532 131.690392 \nL 237.490667 122.509195 \nL 237.825802 118.965381 \nL 238.160938 102.271101 \nL 238.496073 119.637379 \nL 238.831208 122.903835 \nL 239.166343 117.460414 \nL 239.501478 126.050117 \nL 239.836613 113.749904 \nL 240.506883 108.710669 \nL 240.842019 126.968347 \nL 241.512289 107.811829 \nL 241.847424 110.37348 \nL 242.517694 102.211449 \nL 242.852829 103.393137 \nL 243.187965 109.644192 \nL 243.5231 120.572411 \nL 243.858235 144.521419 \nL 244.19337 97.279597 \nL 244.86364 106.959039 \nL 245.53391 130.023582 \nL 245.869046 113.185656 \nL 246.204181 108.669748 \nL 246.539316 108.118366 \nL 246.874451 112.145117 \nL 247.209586 108.875636 \nL 247.544721 119.316471 \nL 247.879856 95.847651 \nL 248.214992 108.423308 \nL 248.550127 109.398483 \nL 249.220397 116.869145 \nL 249.555532 97.121016 \nL 249.890667 103.179673 \nL 250.225802 101.815423 \nL 250.560938 111.587051 \nL 250.896073 100.849864 \nL 251.231208 106.556598 \nL 251.566343 100.391075 \nL 251.901478 84.081003 \nL 252.236613 107.890921 \nL 252.571748 107.327747 \nL 253.242019 93.68236 \nL 253.577154 111.375593 \nL 253.912289 82.300214 \nL 254.247424 93.904467 \nL 254.582559 99.207919 \nL 254.917694 95.478248 \nL 255.252829 97.290167 \nL 255.587965 96.158229 \nL 256.258235 105.882705 \nL 256.59337 103.389621 \nL 256.928505 103.058181 \nL 257.26364 94.019984 \nL 257.598775 102.273022 \nL 257.93391 97.388726 \nL 258.269046 102.528383 \nL 258.604181 104.719201 \nL 258.939316 100.040084 \nL 259.274451 81.909532 \nL 259.609586 97.873327 \nL 259.944721 90.684016 \nL 260.279856 88.715767 \nL 260.614992 90.13119 \nL 260.950127 84.107522 \nL 261.285262 94.065476 \nL 261.620397 83.314751 \nL 261.955532 79.795074 \nL 262.290667 64.442442 \nL 262.625802 85.456596 \nL 262.960938 87.847145 \nL 263.296073 93.088437 \nL 263.631208 109.527871 \nL 264.301478 74.575436 \nL 264.636613 84.138458 \nL 264.971748 97.808308 \nL 265.306883 93.38806 \nL 265.642019 86.072727 \nL 265.977154 74.247211 \nL 266.312289 84.722539 \nL 266.647424 70.61372 \nL 266.982559 92.423196 \nL 267.317694 86.267842 \nL 267.652829 83.714911 \nL 267.987965 67.346901 \nL 268.3231 71.870585 \nL 268.658235 64.135058 \nL 268.99337 88.716383 \nL 269.328505 64.239395 \nL 269.66364 63.714339 \nL 269.998775 81.949477 \nL 270.33391 70.378246 \nL 270.669046 80.841346 \nL 271.004181 80.417443 \nL 271.339316 77.815689 \nL 271.674451 79.212131 \nL 272.009586 71.683374 \nL 272.344721 60.634241 \nL 272.679856 74.260016 \nL 273.014992 78.058815 \nL 273.350127 75.11404 \nL 273.685262 77.171505 \nL 274.020397 87.764088 \nL 274.355532 75.426538 \nL 274.690667 71.793886 \nL 275.025802 60.899775 \nL 275.696073 72.123536 \nL 276.031208 64.971383 \nL 276.366343 86.954739 \nL 276.701478 76.712241 \nL 277.036613 54.24576 \nL 277.371748 62.791589 \nL 277.706883 75.257833 \nL 278.042019 45.985619 \nL 278.377154 66.524531 \nL 278.712289 57.462618 \nL 279.047424 70.465879 \nL 279.382559 56.200012 \nL 279.717694 65.723673 \nL 280.052829 55.602308 \nL 280.387965 70.618128 \nL 280.7231 69.039075 \nL 281.058235 65.839925 \nL 281.39337 78.104668 \nL 281.728505 55.067142 \nL 282.06364 45.708154 \nL 282.398775 62.177592 \nL 282.73391 67.973799 \nL 283.404181 56.310973 \nL 283.739316 52.606395 \nL 284.074451 59.769156 \nL 284.409586 50.439153 \nL 284.744721 54.506665 \nL 285.079856 77.634694 \nL 285.414992 48.465135 \nL 285.750127 57.030195 \nL 286.085262 54.868273 \nL 286.420397 51.204973 \nL 286.755532 62.726916 \nL 287.090667 43.867387 \nL 287.425802 46.958995 \nL 287.760938 43.67525 \nL 288.096073 54.060306 \nL 288.431208 56.164663 \nL 288.766343 61.298673 \nL 289.101478 56.16435 \nL 289.436613 66.988451 \nL 289.771748 53.793412 \nL 290.442019 61.479701 \nL 290.777154 48.250956 \nL 291.112289 60.317103 \nL 291.447424 53.209664 \nL 291.782559 58.946604 \nL 292.117694 68.633729 \nL 292.452829 36.475147 \nL 292.787965 52.009593 \nL 293.1231 48.275156 \nL 293.458235 29.368898 \nL 293.79337 44.95141 \nL 294.128505 52.809541 \nL 294.46364 38.792948 \nL 294.798775 53.602966 \nL 295.13391 38.730738 \nL 295.469046 40.546018 \nL 295.804181 26.165375 \nL 296.139316 50.539702 \nL 296.474451 38.893392 \nL 297.144721 58.008686 \nL 297.479856 29.633099 \nL 297.814992 40.877514 \nL 298.150127 47.845377 \nL 298.485262 48.141803 \nL 298.820397 43.217181 \nL 299.155532 51.585905 \nL 299.490667 44.547004 \nL 299.825802 52.275969 \nL 300.160938 41.446384 \nL 300.496073 42.259941 \nL 300.831208 29.644189 \nL 301.166343 36.974027 \nL 301.501478 30.694204 \nL 301.836613 44.667523 \nL 302.171748 47.026617 \nL 302.506883 39.847731 \nL 302.842019 42.980877 \nL 303.177154 50.669514 \nL 303.512289 61.209058 \nL 303.847424 14.76 \nL 304.182559 53.804388 \nL 304.517694 54.909418 \nL 304.852829 47.258507 \nL 305.187965 55.795771 \nL 305.5231 51.495538 \nL 305.858235 54.068248 \nL 306.19337 26.418988 \nL 306.528505 33.243525 \nL 306.86364 42.932056 \nL 307.198775 39.454261 \nL 307.53391 27.859003 \nL 307.869046 54.055114 \nL 308.204181 22.871678 \nL 308.539316 33.405865 \nL 308.874451 36.989307 \nL 309.209586 42.845608 \nL 309.544721 33.637413 \nL 309.879856 37.887034 \nL 310.550127 28.011684 \nL 310.885262 47.46056 \nL 311.220397 30.189118 \nL 311.555532 34.930606 \nL 311.890667 47.394162 \nL 312.225802 46.160775 \nL 312.560938 33.954837 \nL 312.896073 39.114169 \nL 313.231208 31.966704 \nL 313.566343 40.556421 \nL 313.901478 36.937024 \nL 314.571748 48.54482 \nL 314.906883 29.521344 \nL 315.577154 39.768567 \nL 315.912289 30.581333 \nL 316.247424 32.704749 \nL 316.582559 43.43563 \nL 316.917694 42.362812 \nL 317.252829 38.762481 \nL 317.587965 50.303674 \nL 317.9231 36.677263 \nL 318.258235 52.20757 \nL 318.59337 48.332889 \nL 318.928505 53.372995 \nL 319.26364 28.286531 \nL 319.598775 44.04187 \nL 319.93391 42.497512 \nL 320.269046 63.142096 \nL 320.939316 27.078513 \nL 321.274451 41.995802 \nL 321.609586 33.619879 \nL 321.944721 42.059464 \nL 322.614992 24.643332 \nL 322.950127 47.288117 \nL 323.285262 26.486652 \nL 323.620397 46.867615 \nL 323.955532 45.536955 \nL 324.290667 16.320338 \nL 324.625802 23.827404 \nL 325.296073 55.873483 \nL 325.631208 29.734784 \nL 326.301478 49.546 \nL 326.636613 38.489825 \nL 326.971748 55.965552 \nL 327.306883 58.587126 \nL 327.642019 43.866191 \nL 327.977154 54.404036 \nL 328.312289 50.146986 \nL 328.647424 43.619202 \nL 328.982559 46.796982 \nL 329.317694 39.026728 \nL 329.652829 35.580966 \nL 329.987965 40.95929 \nL 330.3231 39.70957 \nL 330.658235 49.264304 \nL 330.99337 47.380184 \nL 331.328505 41.476277 \nL 331.66364 39.568779 \nL 331.998775 45.643458 \nL 332.33391 33.485234 \nL 332.669046 47.875504 \nL 333.004181 43.396671 \nL 333.339316 50.096195 \nL 333.674451 39.563183 \nL 334.009586 49.976905 \nL 334.344721 49.289921 \nL 334.679856 52.131196 \nL 335.350127 32.495938 \nL 335.685262 53.379744 \nL 336.020397 48.576623 \nL 336.355532 45.506558 \nL 336.690667 51.631188 \nL 337.025802 45.460686 \nL 337.360937 34.69402 \nL 337.696073 53.203339 \nL 338.031208 42.022937 \nL 338.366343 48.108042 \nL 338.701478 48.830045 \nL 339.036613 57.31608 \nL 339.371748 52.807404 \nL 339.706883 43.216128 \nL 340.042019 48.815318 \nL 340.377154 40.578586 \nL 340.712289 57.149439 \nL 341.047424 59.647946 \nL 341.382559 48.856838 \nL 341.717694 50.066359 \nL 342.052829 63.806322 \nL 342.387965 64.429064 \nL 342.7231 45.766946 \nL 343.058235 64.446253 \nL 343.39337 44.045081 \nL 343.728505 48.499503 \nL 344.06364 61.074233 \nL 344.398775 42.688658 \nL 344.73391 77.53037 \nL 345.069046 60.990543 \nL 345.404181 66.296077 \nL 345.739316 49.366336 \nL 346.074451 66.352496 \nL 346.409586 52.596418 \nL 346.744721 46.098655 \nL 347.079856 59.805453 \nL 347.414992 61.75613 \nL 347.750127 55.607403 \nL 348.085262 84.037323 \nL 348.755532 61.005197 \nL 349.090667 62.988809 \nL 349.425802 77.856452 \nL 349.760938 73.327988 \nL 350.096073 54.728823 \nL 350.431208 63.148924 \nL 350.766343 62.097409 \nL 351.101478 59.788022 \nL 351.436613 65.190404 \nL 351.771748 73.683931 \nL 352.106883 67.642102 \nL 352.442019 45.870745 \nL 352.777154 44.775111 \nL 353.447424 70.991702 \nL 353.782559 74.840404 \nL 354.117694 49.570942 \nL 354.452829 69.36285 \nL 354.787965 79.507668 \nL 355.1231 71.60639 \nL 355.458235 66.703498 \nL 355.79337 84.394324 \nL 356.128505 73.318301 \nL 356.46364 71.542028 \nL 356.798775 76.609459 \nL 357.13391 72.007562 \nL 357.469046 75.817795 \nL 357.804181 81.904225 \nL 358.139316 76.47508 \nL 358.474451 74.518469 \nL 358.809586 63.042683 \nL 359.144721 77.637539 \nL 359.479856 79.786169 \nL 359.814992 73.817455 \nL 360.150127 93.775867 \nL 360.485262 61.638205 \nL 360.820397 70.235445 \nL 361.155532 71.134235 \nL 361.490667 77.076468 \nL 361.825802 87.880786 \nL 362.160938 80.801274 \nL 362.496073 65.55508 \nL 362.831208 96.451414 \nL 363.166343 82.480014 \nL 363.501478 83.325232 \nL 363.836613 70.949641 \nL 364.171748 96.248946 \nL 364.506883 79.846753 \nL 364.842019 69.713098 \nL 365.177154 82.528583 \nL 365.512289 74.989576 \nL 365.847424 106.138277 \nL 366.182559 103.707846 \nL 366.517694 68.644069 \nL 366.852829 99.69757 \nL 367.187965 98.400775 \nL 367.858235 75.440037 \nL 368.19337 83.815755 \nL 368.528505 84.910789 \nL 368.86364 76.179989 \nL 369.198775 91.61773 \nL 369.53391 92.770981 \nL 369.869046 80.599954 \nL 370.204181 91.823625 \nL 370.539316 98.780059 \nL 370.874451 76.896654 \nL 371.544721 108.978502 \nL 371.879856 95.664681 \nL 372.214992 93.59539 \nL 372.550127 89.737363 \nL 372.885262 100.770042 \nL 373.220397 98.109781 \nL 373.555532 109.306412 \nL 373.890667 96.114413 \nL 374.225802 102.30204 \nL 374.560938 112.489715 \nL 374.896073 101.476985 \nL 375.231208 86.796192 \nL 375.566343 82.101863 \nL 375.901478 98.178936 \nL 376.236613 101.155948 \nL 376.571748 88.251735 \nL 376.906883 89.891982 \nL 377.242019 98.110836 \nL 377.577154 98.934564 \nL 377.912289 88.916927 \nL 378.247424 94.302807 \nL 378.582559 111.234364 \nL 378.917694 105.044636 \nL 379.252829 76.878982 \nL 379.587965 97.261669 \nL 380.59337 118.278568 \nL 380.928505 119.165787 \nL 381.598775 99.402145 \nL 381.93391 99.853833 \nL 382.269046 93.286039 \nL 382.604181 131.041487 \nL 383.274451 99.702393 \nL 383.609586 110.953466 \nL 383.944721 99.631651 \nL 384.279856 108.138779 \nL 384.614992 129.423769 \nL 384.950127 99.071378 \nL 385.285262 110.144044 \nL 385.620397 102.047039 \nL 385.955532 99.365602 \nL 386.290667 121.074283 \nL 386.625802 112.676119 \nL 386.960938 120.876101 \nL 386.960938 120.876101 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_26\">\n <path d=\"M 53.501478 89.405133 \nL 53.836613 89.256636 \nL 54.171748 94.584835 \nL 54.506883 97.318717 \nL 54.842019 86.563725 \nL 55.177154 83.084678 \nL 55.512289 90.978205 \nL 55.847424 73.040596 \nL 56.517694 77.825718 \nL 56.852829 69.933697 \nL 57.187965 73.41965 \nL 57.5231 75.606255 \nL 57.858235 72.789596 \nL 58.19337 81.8046 \nL 58.528505 73.083084 \nL 58.86364 73.191324 \nL 59.198775 80.588639 \nL 59.53391 74.118142 \nL 59.869046 81.40685 \nL 60.204181 79.294788 \nL 60.539316 75.250232 \nL 60.874451 85.310574 \nL 61.209586 74.49894 \nL 61.544721 70.980555 \nL 61.879856 73.867409 \nL 62.214992 71.747514 \nL 62.550127 71.952955 \nL 62.885262 72.564942 \nL 63.220397 78.077013 \nL 63.555532 76.691052 \nL 63.890667 69.930469 \nL 64.225802 74.990589 \nL 64.560938 70.538073 \nL 64.896073 67.889852 \nL 65.231208 67.482212 \nL 65.566343 63.478655 \nL 66.236613 61.425887 \nL 66.571748 66.898851 \nL 67.242019 60.803024 \nL 67.577154 65.890729 \nL 67.912289 57.374682 \nL 68.247424 56.588248 \nL 68.582559 51.57454 \nL 68.917694 57.16823 \nL 69.252829 57.813068 \nL 69.587965 63.775827 \nL 69.9231 65.142038 \nL 70.258235 64.754756 \nL 70.59337 57.416948 \nL 70.928505 58.077329 \nL 71.26364 61.58356 \nL 71.598775 66.419471 \nL 71.93391 68.075268 \nL 72.269046 66.551182 \nL 72.604181 66.131215 \nL 73.274451 56.727459 \nL 73.944721 59.732162 \nL 74.279856 59.798164 \nL 74.614992 63.057812 \nL 74.950127 58.61974 \nL 75.620397 53.878493 \nL 75.955532 57.558217 \nL 76.290667 58.594962 \nL 76.625802 58.187436 \nL 76.960938 63.038576 \nL 77.631208 56.672321 \nL 77.966343 57.778564 \nL 78.636613 52.715696 \nL 78.971748 52.221745 \nL 79.306883 51.362074 \nL 79.977154 47.012212 \nL 80.312289 47.596136 \nL 80.647424 50.823261 \nL 80.982559 52.955063 \nL 81.317694 47.47796 \nL 81.652829 47.616847 \nL 81.987965 42.909509 \nL 82.3231 49.579163 \nL 82.658235 48.299541 \nL 82.99337 48.510185 \nL 83.328505 50.553401 \nL 83.66364 53.781295 \nL 83.998775 53.428232 \nL 84.33391 55.348729 \nL 84.669046 48.785875 \nL 85.004181 45.384636 \nL 85.339316 44.631107 \nL 85.674451 40.481638 \nL 86.009586 41.064368 \nL 86.344721 42.339583 \nL 86.679856 49.934386 \nL 87.014992 54.88994 \nL 87.350127 57.588525 \nL 87.685262 55.799497 \nL 88.020397 51.08514 \nL 88.355532 48.305342 \nL 88.690667 49.316396 \nL 89.025802 48.974846 \nL 89.360938 47.02506 \nL 89.696073 47.833121 \nL 90.031208 49.016808 \nL 90.366343 47.474932 \nL 90.701478 48.890901 \nL 91.036613 48.245904 \nL 91.371748 38.587502 \nL 91.706883 38.084807 \nL 92.042019 30.814054 \nL 92.377154 40.857128 \nL 93.047424 48.120412 \nL 93.382559 49.907784 \nL 94.052829 38.685121 \nL 94.387965 36.712359 \nL 94.7231 39.483712 \nL 95.058235 44.170015 \nL 95.39337 43.866294 \nL 95.728505 43.386473 \nL 96.06364 41.240297 \nL 96.398775 41.978103 \nL 96.73391 40.80488 \nL 97.069046 35.324894 \nL 97.404181 32.33185 \nL 97.739316 33.505791 \nL 98.074451 40.320368 \nL 98.409586 40.275867 \nL 98.744721 42.812647 \nL 99.079856 41.984912 \nL 99.414992 38.311835 \nL 99.750127 36.486162 \nL 100.085262 36.572123 \nL 100.420397 42.220502 \nL 100.755532 40.861864 \nL 101.425802 37.165071 \nL 101.760938 41.393433 \nL 102.096073 41.688626 \nL 102.431208 42.347377 \nL 102.766343 42.042614 \nL 103.101478 44.761591 \nL 103.436613 43.725529 \nL 103.771748 39.411403 \nL 104.106883 39.266376 \nL 104.442019 39.394165 \nL 104.777154 43.012771 \nL 105.112289 44.716362 \nL 105.447424 44.484079 \nL 106.117694 49.724232 \nL 106.787965 43.304366 \nL 107.1231 42.898739 \nL 108.128505 48.90088 \nL 108.46364 48.675281 \nL 109.13391 37.265959 \nL 109.469046 36.357153 \nL 109.804181 39.025287 \nL 110.139316 37.962151 \nL 110.474451 41.679449 \nL 111.144721 39.948066 \nL 111.479856 42.771761 \nL 111.814992 42.141697 \nL 112.150127 43.476094 \nL 112.820397 44.967054 \nL 113.155532 47.425359 \nL 113.490667 43.327103 \nL 113.825802 40.782353 \nL 114.160938 39.911718 \nL 114.496073 40.860441 \nL 114.831208 43.029883 \nL 115.166343 47.009781 \nL 115.501478 42.494313 \nL 115.836613 40.040932 \nL 116.171748 33.655795 \nL 116.506883 35.040653 \nL 116.842019 34.357384 \nL 117.512289 44.036764 \nL 117.847424 43.839407 \nL 118.517694 46.658115 \nL 118.852829 43.204088 \nL 119.187965 44.218517 \nL 119.5231 42.595462 \nL 119.858235 41.636901 \nL 120.19337 42.483849 \nL 120.528505 42.255877 \nL 120.86364 45.353548 \nL 121.198775 45.46614 \nL 121.53391 47.111323 \nL 121.869046 47.804748 \nL 122.204181 42.221754 \nL 122.874451 40.716329 \nL 123.209586 47.295216 \nL 123.544721 48.859983 \nL 123.879856 49.872523 \nL 124.214992 50.008745 \nL 124.550127 47.571105 \nL 124.885262 49.98138 \nL 125.220397 50.931293 \nL 125.555532 46.340367 \nL 125.890667 49.203337 \nL 126.225802 46.182718 \nL 126.560938 51.643095 \nL 126.896073 51.41642 \nL 127.231208 44.80493 \nL 127.566343 46.992805 \nL 127.901478 44.987315 \nL 128.236613 45.310499 \nL 128.571748 48.856135 \nL 128.906883 46.751272 \nL 129.242019 52.086636 \nL 129.577154 45.653358 \nL 129.912289 48.558409 \nL 130.247424 44.709445 \nL 130.582559 50.960389 \nL 130.917694 52.336025 \nL 131.252829 50.311026 \nL 131.587965 45.840479 \nL 131.9231 46.712128 \nL 132.258235 48.771239 \nL 132.59337 48.378961 \nL 132.928505 51.193297 \nL 133.26364 49.582658 \nL 133.598775 49.14818 \nL 133.93391 56.34959 \nL 134.269046 54.732398 \nL 134.604181 58.19747 \nL 135.274451 62.002144 \nL 135.609586 58.721743 \nL 135.944721 57.527128 \nL 136.614992 51.2547 \nL 137.285262 58.958226 \nL 137.620397 59.337055 \nL 137.955532 62.053541 \nL 138.290667 58.658633 \nL 138.625802 57.4695 \nL 138.960938 60.292712 \nL 139.296073 61.460917 \nL 139.631208 64.506964 \nL 139.966343 63.781682 \nL 140.301478 61.789467 \nL 140.636613 62.788532 \nL 140.971748 56.800252 \nL 141.306883 59.268312 \nL 141.642019 58.482384 \nL 141.977154 61.142375 \nL 142.312289 62.146729 \nL 142.647424 59.545999 \nL 142.982559 59.739625 \nL 143.317694 54.636116 \nL 143.987965 51.584437 \nL 144.3231 51.690587 \nL 145.328505 69.096899 \nL 145.998775 70.21648 \nL 146.33391 71.554025 \nL 146.669046 65.693577 \nL 147.004181 62.805297 \nL 147.339316 62.949171 \nL 147.674451 66.329266 \nL 148.009586 72.020659 \nL 148.679856 75.042759 \nL 149.014992 77.82452 \nL 149.350127 71.919308 \nL 149.685262 70.912438 \nL 150.020397 74.95264 \nL 150.355532 70.61295 \nL 150.690667 76.651503 \nL 151.025802 72.261458 \nL 151.360938 71.118198 \nL 151.696073 77.007947 \nL 152.031208 66.534573 \nL 152.366343 65.126434 \nL 152.701478 71.308428 \nL 153.036613 73.498441 \nL 153.706883 84.945106 \nL 154.042019 80.769343 \nL 154.377154 83.291431 \nL 154.712289 75.671946 \nL 155.047424 77.733002 \nL 155.382559 77.243543 \nL 155.717694 79.343301 \nL 156.052829 72.259981 \nL 156.387965 89.587986 \nL 157.058235 80.699113 \nL 157.39337 102.236156 \nL 158.06364 90.910953 \nL 158.398775 92.13662 \nL 158.73391 92.74702 \nL 159.069046 100.642795 \nL 159.404181 85.028405 \nL 160.074451 107.280794 \nL 160.409586 94.358943 \nL 160.744721 94.869045 \nL 161.079856 84.889975 \nL 161.414992 98.233274 \nL 161.750127 96.172137 \nL 162.085262 87.244862 \nL 162.420397 110.881425 \nL 162.755532 97.89506 \nL 163.090667 94.490169 \nL 163.425802 105.037789 \nL 163.760938 96.752858 \nL 164.096073 93.553683 \nL 164.431208 108.426295 \nL 164.766343 98.511471 \nL 165.436613 107.014752 \nL 165.771748 96.629578 \nL 166.106883 109.874056 \nL 166.442019 105.747969 \nL 166.777154 91.907402 \nL 167.112289 107.161663 \nL 167.782559 92.939931 \nL 168.117694 112.077959 \nL 168.452829 113.891546 \nL 168.787965 107.701728 \nL 169.1231 114.468955 \nL 169.458235 113.649509 \nL 169.79337 103.387895 \nL 170.128505 105.480705 \nL 170.46364 105.881498 \nL 170.798775 91.550497 \nL 171.469046 111.557028 \nL 171.804181 107.519135 \nL 172.139316 117.392391 \nL 172.474451 120.762618 \nL 172.809586 114.262473 \nL 173.144721 121.723143 \nL 173.814992 113.69562 \nL 174.150127 130.204259 \nL 174.485262 119.882031 \nL 174.820397 118.75614 \nL 175.155532 123.0304 \nL 175.490667 123.833636 \nL 175.825802 116.955189 \nL 176.160938 117.483211 \nL 176.496073 119.621775 \nL 176.831208 109.906438 \nL 177.166343 118.488554 \nL 177.501478 114.760903 \nL 177.836613 114.59291 \nL 178.171748 126.349369 \nL 178.506883 119.120839 \nL 179.177154 128.837683 \nL 179.512289 119.779243 \nL 179.847424 123.446966 \nL 180.182559 115.614142 \nL 180.517694 116.893735 \nL 181.187965 120.579664 \nL 181.5231 120.271924 \nL 181.858235 121.759303 \nL 182.19337 116.677131 \nL 182.86364 120.495433 \nL 183.198775 118.207311 \nL 183.53391 121.313414 \nL 183.869046 121.748199 \nL 184.204181 124.763448 \nL 184.539316 121.70915 \nL 185.209586 131.776057 \nL 185.544721 125.759225 \nL 185.879856 124.052179 \nL 186.214992 119.437283 \nL 186.550127 118.956754 \nL 186.885262 123.560465 \nL 187.220397 123.91005 \nL 187.555532 117.763409 \nL 187.890667 131.388191 \nL 188.225802 130.085912 \nL 188.560938 125.988425 \nL 188.896073 127.1072 \nL 189.231208 123.837402 \nL 189.566343 125.612252 \nL 189.901478 128.844105 \nL 190.236613 125.04828 \nL 190.571748 129.274168 \nL 190.906883 130.476001 \nL 191.242019 129.943285 \nL 191.912289 126.361116 \nL 192.247424 140.014633 \nL 192.582559 130.992555 \nL 192.917694 126.761808 \nL 193.252829 129.199582 \nL 193.587965 125.329239 \nL 194.258235 138.966274 \nL 194.59337 133.250033 \nL 194.928505 133.293451 \nL 195.26364 138.931822 \nL 195.598775 128.184218 \nL 195.93391 132.078929 \nL 196.269046 133.902715 \nL 196.604181 131.516091 \nL 196.939316 125.062916 \nL 197.274451 123.427818 \nL 197.609586 123.205256 \nL 197.944721 118.330073 \nL 198.279856 128.796197 \nL 198.614992 135.585262 \nL 198.950127 131.466427 \nL 199.285262 131.835205 \nL 199.955532 124.702723 \nL 200.290667 128.801253 \nL 200.625802 129.588725 \nL 200.960938 129.843611 \nL 201.296073 137.050167 \nL 201.631208 135.537824 \nL 201.966343 128.542197 \nL 202.301478 133.417081 \nL 202.636613 142.951068 \nL 202.971748 140.736727 \nL 203.306883 137.687968 \nL 203.642019 132.291395 \nL 203.977154 132.28439 \nL 204.312289 137.998167 \nL 204.647424 131.75431 \nL 204.982559 134.749173 \nL 205.317694 129.692305 \nL 205.652829 127.619305 \nL 205.987965 129.92194 \nL 206.3231 133.035213 \nL 206.658235 128.797339 \nL 206.99337 134.304747 \nL 207.328505 127.415486 \nL 207.66364 126.849946 \nL 207.998775 144.203785 \nL 208.33391 131.221299 \nL 208.669046 135.409395 \nL 209.004181 134.554927 \nL 209.339316 129.29575 \nL 209.674451 131.994827 \nL 210.009586 136.239072 \nL 210.344721 130.470169 \nL 210.679856 134.031989 \nL 211.014992 133.741239 \nL 211.350127 130.245202 \nL 211.685262 132.17822 \nL 212.020397 136.437989 \nL 212.355532 137.160128 \nL 212.690667 130.650433 \nL 213.025802 136.486206 \nL 213.360938 140.368165 \nL 213.696073 133.383562 \nL 214.031208 132.16462 \nL 214.366343 132.824925 \nL 214.701478 128.226849 \nL 215.036613 135.581397 \nL 215.371748 138.138477 \nL 215.706883 134.457077 \nL 216.042019 138.587278 \nL 216.377154 136.994303 \nL 216.712289 129.998411 \nL 217.047424 136.000203 \nL 217.717694 126.668463 \nL 218.052829 127.692767 \nL 218.387965 124.328187 \nL 218.7231 130.215588 \nL 219.058235 132.097798 \nL 219.39337 136.367182 \nL 219.728505 128.66924 \nL 220.06364 125.529362 \nL 220.398775 138.304501 \nL 220.73391 127.770539 \nL 221.069046 123.652406 \nL 221.404181 132.418885 \nL 221.739316 126.103874 \nL 222.074451 129.044064 \nL 222.409586 135.64593 \nL 222.744721 128.6458 \nL 223.414992 136.523505 \nL 223.750127 134.957845 \nL 224.085262 131.384753 \nL 224.420397 131.953119 \nL 224.755532 133.793556 \nL 225.090667 125.729978 \nL 225.760938 136.016399 \nL 226.431208 130.901943 \nL 226.766343 133.078102 \nL 227.101478 129.104478 \nL 227.436613 118.428547 \nL 227.771748 131.594907 \nL 228.106883 134.346797 \nL 228.442019 132.671994 \nL 228.777154 129.676605 \nL 229.112289 131.082347 \nL 229.447424 129.67936 \nL 229.782559 126.706964 \nL 230.117694 119.871272 \nL 230.452829 123.901201 \nL 231.1231 126.939337 \nL 231.79337 122.127822 \nL 232.128505 130.720506 \nL 232.798775 124.178985 \nL 233.13391 117.425813 \nL 233.804181 126.433386 \nL 234.139316 120.395414 \nL 234.474451 124.097758 \nL 234.809586 129.532057 \nL 235.144721 128.135352 \nL 235.479856 128.913078 \nL 235.814992 130.373693 \nL 236.150127 127.53917 \nL 236.485262 127.805097 \nL 236.820397 124.042353 \nL 237.155532 118.763532 \nL 237.490667 131.5659 \nL 238.160938 123.305093 \nL 238.496073 122.288586 \nL 238.831208 122.617557 \nL 239.501478 116.874266 \nL 239.836613 125.07129 \nL 240.171748 121.546063 \nL 240.842019 120.536757 \nL 241.177154 120.911262 \nL 241.512289 117.232284 \nL 241.847424 117.939959 \nL 242.182559 121.8825 \nL 242.517694 116.144976 \nL 242.852829 112.56285 \nL 243.187965 112.64367 \nL 243.5231 112.328848 \nL 243.858235 114.366855 \nL 244.19337 119.336143 \nL 244.528505 113.906845 \nL 244.86364 120.932505 \nL 245.198775 121.963691 \nL 245.53391 111.952055 \nL 245.869046 117.06568 \nL 246.204181 117.093065 \nL 246.539316 121.571869 \nL 246.874451 121.440024 \nL 247.209586 116.556501 \nL 247.544721 114.351826 \nL 247.879856 117.395485 \nL 248.214992 112.055507 \nL 248.550127 114.997097 \nL 248.885262 114.949699 \nL 249.220397 111.437992 \nL 249.555532 116.607394 \nL 249.890667 112.60279 \nL 250.225802 114.909203 \nL 250.560938 112.627576 \nL 250.896073 109.336564 \nL 251.231208 107.88041 \nL 251.566343 111.511616 \nL 251.901478 111.500863 \nL 252.236613 101.468613 \nL 252.571748 110.060513 \nL 252.906883 102.241944 \nL 253.242019 99.143935 \nL 253.577154 109.387876 \nL 253.912289 111.777065 \nL 254.247424 95.093441 \nL 254.582559 100.90391 \nL 254.917694 104.498236 \nL 255.252829 91.381218 \nL 255.587965 100.249789 \nL 255.9231 101.462025 \nL 256.258235 102.011886 \nL 256.59337 104.66847 \nL 256.928505 104.985731 \nL 257.26364 109.1483 \nL 257.598775 107.208782 \nL 257.93391 108.694792 \nL 258.269046 103.744004 \nL 258.604181 103.544697 \nL 258.939316 107.438599 \nL 259.274451 104.767184 \nL 259.609586 100.859831 \nL 259.944721 106.128513 \nL 260.279856 94.98242 \nL 260.614992 89.293244 \nL 260.950127 96.314533 \nL 261.285262 89.347554 \nL 261.620397 92.496313 \nL 261.955532 87.245745 \nL 262.290667 85.538483 \nL 262.625802 80.851826 \nL 262.960938 79.893894 \nL 263.296073 75.131569 \nL 263.631208 78.841306 \nL 263.966343 96.354696 \nL 264.301478 91.811745 \nL 264.636613 94.021768 \nL 264.971748 98.754956 \nL 265.306883 88.824221 \nL 265.642019 82.789539 \nL 265.977154 89.827023 \nL 266.312289 90.732834 \nL 266.647424 89.22351 \nL 266.982559 76.147873 \nL 267.317694 79.363241 \nL 267.652829 80.616952 \nL 267.987965 78.49491 \nL 268.3231 82.466844 \nL 268.658235 78.03317 \nL 268.99337 69.099239 \nL 269.328505 70.85279 \nL 269.66364 66.800722 \nL 269.998775 65.919133 \nL 270.33391 76.402072 \nL 270.669046 67.16262 \nL 271.339316 76.259843 \nL 271.674451 73.7511 \nL 272.009586 78.594421 \nL 272.344721 74.50344 \nL 272.679856 68.064805 \nL 273.014992 70.300702 \nL 273.350127 68.354937 \nL 273.685262 69.837287 \nL 274.020397 72.933572 \nL 274.355532 78.536569 \nL 274.690667 73.604283 \nL 275.025802 75.094286 \nL 275.360937 72.398181 \nL 275.696073 65.188554 \nL 276.031208 65.829014 \nL 276.366343 64.781933 \nL 276.701478 70.560357 \nL 277.036613 70.491404 \nL 277.371748 66.698491 \nL 277.706883 70.49579 \nL 278.042019 63.01692 \nL 278.377154 58.249103 \nL 278.712289 59.482653 \nL 279.047424 55.914115 \nL 279.382559 59.854684 \nL 279.717694 60.306366 \nL 280.052829 60.557528 \nL 280.387965 59.216504 \nL 280.7231 60.858779 \nL 281.058235 63.651847 \nL 281.39337 63.871423 \nL 281.728505 68.489144 \nL 282.398775 57.110486 \nL 282.73391 57.681758 \nL 283.069046 57.282476 \nL 283.404181 59.723953 \nL 283.739316 59.910752 \nL 284.074451 57.359072 \nL 284.409586 56.55523 \nL 284.744721 54.542672 \nL 285.079856 53.551392 \nL 285.414992 59.13569 \nL 285.750127 56.819767 \nL 286.085262 56.59739 \nL 286.755532 52.81921 \nL 287.090667 56.012606 \nL 287.760938 49.859629 \nL 288.096073 48.564864 \nL 288.431208 48.332457 \nL 289.101478 54.789032 \nL 289.436613 56.71461 \nL 289.771748 59.361864 \nL 290.442019 57.146393 \nL 290.777154 58.897621 \nL 291.112289 54.853668 \nL 291.447424 55.697297 \nL 291.782559 54.997305 \nL 292.117694 54.945205 \nL 292.452829 60.057168 \nL 292.787965 52.977612 \nL 293.1231 51.278091 \nL 293.79337 42.360533 \nL 294.128505 43.320175 \nL 294.46364 42.735328 \nL 294.798775 44.084782 \nL 295.13391 47.875965 \nL 295.469046 46.375281 \nL 296.139316 39.950764 \nL 296.474451 40.784659 \nL 296.809586 39.739654 \nL 297.144721 43.59957 \nL 297.479856 49.135485 \nL 297.814992 45.183909 \nL 298.485262 41.31362 \nL 298.820397 44.745389 \nL 299.155532 46.232677 \nL 299.490667 48.31412 \nL 299.825802 48.012255 \nL 300.160938 48.651651 \nL 300.496073 48.076379 \nL 301.166343 41.701457 \nL 301.501478 38.669239 \nL 301.836613 36.763617 \nL 302.171748 38.47721 \nL 302.506883 41.566425 \nL 303.177154 44.346172 \nL 303.512289 46.305676 \nL 303.847424 50.949467 \nL 304.182559 42.045921 \nL 304.517694 43.400135 \nL 304.852829 37.503267 \nL 305.5231 52.508505 \nL 305.858235 52.739933 \nL 306.19337 52.310558 \nL 306.86364 40.030435 \nL 307.198775 37.112481 \nL 307.53391 39.374217 \nL 307.869046 37.680461 \nL 308.204181 42.371502 \nL 308.539316 37.98803 \nL 308.874451 35.406858 \nL 309.209586 34.396471 \nL 309.544721 38.139093 \nL 309.879856 39.376569 \nL 310.214992 39.415797 \nL 310.550127 38.819812 \nL 310.885262 35.271803 \nL 311.220397 38.244637 \nL 311.555532 38.18377 \nL 311.890667 36.91632 \nL 312.225802 39.482699 \nL 312.560938 43.294978 \nL 312.896073 42.131649 \nL 313.231208 41.94734 \nL 313.566343 39.430786 \nL 313.901478 38.67599 \nL 314.236613 39.527467 \nL 314.571748 40.707465 \nL 314.906883 44.371767 \nL 315.577154 39.203016 \nL 316.247424 36.739195 \nL 316.582559 36.330442 \nL 316.917694 37.919671 \nL 317.252829 40.888165 \nL 317.587965 41.487847 \nL 317.9231 45.200077 \nL 318.258235 43.933412 \nL 319.26364 49.072199 \nL 319.598775 45.059186 \nL 320.269046 40.184407 \nL 320.604181 47.663482 \nL 320.939316 49.694737 \nL 321.274451 42.834945 \nL 321.609586 42.843063 \nL 321.944721 37.521074 \nL 322.614992 40.26862 \nL 322.950127 35.375058 \nL 323.285262 38.258186 \nL 323.620397 35.95029 \nL 324.290667 40.490422 \nL 324.625802 35.691224 \nL 325.296073 29.622716 \nL 325.631208 38.128881 \nL 325.966343 41.217253 \nL 326.301478 41.27878 \nL 326.636613 41.141573 \nL 326.971748 42.221948 \nL 327.642019 50.63306 \nL 327.977154 50.10842 \nL 328.312289 52.057682 \nL 328.647424 51.416332 \nL 328.982559 48.31794 \nL 329.317694 48.415793 \nL 329.987965 41.876778 \nL 330.3231 41.776465 \nL 330.658235 41.205264 \nL 331.328505 46.523487 \nL 331.998775 44.621446 \nL 332.33391 44.620973 \nL 332.669046 41.741603 \nL 333.004181 42.943894 \nL 333.339316 43.60577 \nL 333.674451 45.67396 \nL 334.009586 46.207293 \nL 334.344721 46.449583 \nL 335.014992 49.119181 \nL 335.350127 49.041008 \nL 335.685262 43.918884 \nL 336.020397 45.838202 \nL 336.355532 45.347161 \nL 336.690667 46.483512 \nL 337.025802 49.885838 \nL 337.360937 48.678054 \nL 337.696073 44.407711 \nL 338.031208 46.605247 \nL 338.366343 45.100333 \nL 338.701478 45.707798 \nL 339.036613 48.719776 \nL 339.706883 52.690841 \nL 340.042019 50.139559 \nL 340.377154 49.703225 \nL 340.712289 46.876655 \nL 341.047424 48.498595 \nL 341.382559 51.97516 \nL 342.052829 52.577296 \nL 342.7231 57.994331 \nL 343.058235 55.194355 \nL 343.39337 57.431296 \nL 343.728505 52.540122 \nL 344.06364 49.736625 \nL 344.398775 52.400803 \nL 344.73391 50.251155 \nL 345.069046 57.322305 \nL 345.404181 55.957494 \nL 345.739316 60.763704 \nL 346.074451 58.932503 \nL 346.409586 58.785789 \nL 346.744721 56.557339 \nL 347.079856 52.275676 \nL 347.414992 54.916582 \nL 347.750127 55.653597 \nL 348.085262 55.975039 \nL 348.420397 64.554908 \nL 348.755532 65.483514 \nL 349.090667 65.250534 \nL 349.425802 68.750238 \nL 349.760938 66.648395 \nL 350.096073 67.15194 \nL 350.431208 64.228009 \nL 350.766343 64.328561 \nL 351.101478 60.691733 \nL 351.436613 59.056973 \nL 351.771748 61.071939 \nL 352.106883 64.413642 \nL 352.442019 65.342919 \nL 353.112289 53.967178 \nL 353.447424 52.162071 \nL 353.782559 56.081076 \nL 354.117694 63.18665 \nL 354.452829 61.512337 \nL 354.787965 62.4765 \nL 355.1231 62.10697 \nL 355.458235 66.535145 \nL 355.79337 68.264203 \nL 356.128505 75.627253 \nL 356.46364 69.650083 \nL 356.798775 70.376561 \nL 357.13391 76.567581 \nL 357.469046 69.876334 \nL 357.804181 70.810245 \nL 358.139316 74.290149 \nL 358.474451 72.709658 \nL 358.809586 74.124671 \nL 359.144721 70.856461 \nL 359.479856 71.065227 \nL 359.814992 70.144646 \nL 360.150127 70.853145 \nL 360.485262 81.289916 \nL 360.820397 69.716799 \nL 361.155532 70.831126 \nL 361.490667 74.5852 \nL 361.825802 68.442347 \nL 362.160938 73.818651 \nL 362.496073 74.826152 \nL 362.831208 73.695533 \nL 363.166343 87.433752 \nL 363.501478 74.857704 \nL 363.836613 77.6049 \nL 364.171748 84.779283 \nL 364.506883 85.718303 \nL 364.842019 77.487506 \nL 365.177154 74.139194 \nL 365.512289 87.289058 \nL 365.847424 72.767309 \nL 366.517694 87.63245 \nL 366.852829 81.148486 \nL 367.187965 104.846701 \nL 367.858235 82.333955 \nL 368.19337 93.970556 \nL 368.528505 91.6421 \nL 368.86364 82.097944 \nL 369.198775 75.85462 \nL 369.53391 86.145406 \nL 369.869046 85.23534 \nL 370.204181 81.049593 \nL 370.539316 93.857901 \nL 370.874451 93.533186 \nL 371.209586 82.311659 \nL 371.544721 96.343683 \nL 371.879856 98.092715 \nL 372.214992 89.498204 \nL 372.550127 103.212321 \nL 372.885262 104.123921 \nL 373.555532 97.262195 \nL 373.890667 103.280512 \nL 374.225802 103.348578 \nL 374.896073 112.812381 \nL 375.231208 104.577522 \nL 375.566343 105.449889 \nL 375.901478 104.716958 \nL 376.236613 99.901231 \nL 376.571748 91.930057 \nL 376.906883 89.976172 \nL 377.242019 99.997276 \nL 377.577154 100.510473 \nL 377.912289 94.593299 \nL 378.247424 94.444851 \nL 378.582559 100.987802 \nL 378.917694 104.906949 \nL 379.252829 99.133126 \nL 379.587965 96.815103 \nL 379.9231 108.497142 \nL 380.258235 99.509744 \nL 380.59337 95.609629 \nL 380.928505 112.560635 \nL 381.26364 116.506906 \nL 381.598775 117.136817 \nL 381.93391 116.760655 \nL 382.269046 114.529643 \nL 382.604181 106.434519 \nL 382.939316 113.53406 \nL 383.274451 107.382184 \nL 383.609586 111.291542 \nL 383.944721 122.251241 \nL 384.279856 111.966014 \nL 384.614992 111.033315 \nL 384.950127 118.502459 \nL 385.285262 106.786424 \nL 385.620397 116.573224 \nL 385.955532 116.631907 \nL 386.290667 107.947885 \nL 386.625802 115.973387 \nL 386.960938 110.608795 \nL 386.960938 110.608795 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #bf00bf; stroke-width: 1.5\"/>\n </g>\n <g id=\"line2d_27\">\n <path d=\"M 254.582559 100.903912 \nL 254.917694 104.984134 \nL 255.252829 95.218224 \nL 255.587965 100.368129 \nL 255.9231 107.290755 \nL 256.258235 109.11049 \nL 256.59337 106.507404 \nL 257.26364 114.320636 \nL 257.598775 115.555544 \nL 257.93391 116.009716 \nL 258.604181 119.920327 \nL 260.614992 125.127626 \nL 261.285262 126.460603 \nL 262.625802 128.245285 \nL 263.966343 129.435573 \nL 265.306883 130.226071 \nL 266.647424 130.749988 \nL 268.3231 131.163366 \nL 270.669046 131.47845 \nL 274.020397 131.669793 \nL 280.387965 131.760746 \nL 309.209586 131.775621 \nL 386.960938 131.775621 \nL 386.960938 131.775621 \n\" clip-path=\"url(#p9136e6403c)\" style=\"fill: none; stroke-dasharray: 9.6,2.4,1.5,2.4; stroke-dashoffset: 0; stroke: #008000; stroke-width: 1.5\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 52.160938 173.52 \nL 52.160938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 386.960938 173.52 \nL 386.960938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 52.160938 173.52 \nL 386.960938 173.52 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 52.160938 7.2 \nL 386.960938 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"legend_1\">\n <g id=\"patch_7\">\n <path d=\"M 59.160938 168.52 \nL 169.470313 168.52 \nQ 171.470313 168.52 171.470313 166.52 \nL 171.470313 123.485625 \nQ 171.470313 121.485625 169.470313 121.485625 \nL 59.160938 121.485625 \nQ 57.160938 121.485625 57.160938 123.485625 \nL 57.160938 166.52 \nQ 57.160938 168.52 59.160938 168.52 \nz\n\" style=\"opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n </g>\n <g id=\"line2d_28\">\n <path d=\"M 61.160938 129.584063 \nL 71.160938 129.584063 \nL 81.160938 129.584063 \n\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"text_15\">\n <!-- data -->\n <g style=\"fill: #ffffff\" transform=\"translate(89.160938 133.084063) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-64\" d=\"M 2906 2969 \nL 2906 4863 \nL 3481 4863 \nL 3481 0 \nL 2906 0 \nL 2906 525 \nQ 2725 213 2448 61 \nQ 2172 -91 1784 -91 \nQ 1150 -91 751 415 \nQ 353 922 353 1747 \nQ 353 2572 751 3078 \nQ 1150 3584 1784 3584 \nQ 2172 3584 2448 3432 \nQ 2725 3281 2906 2969 \nz\nM 947 1747 \nQ 947 1113 1208 752 \nQ 1469 391 1925 391 \nQ 2381 391 2643 752 \nQ 2906 1113 2906 1747 \nQ 2906 2381 2643 2742 \nQ 2381 3103 1925 3103 \nQ 1469 3103 1208 2742 \nQ 947 2381 947 1747 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-61\" d=\"M 2194 1759 \nQ 1497 1759 1228 1600 \nQ 959 1441 959 1056 \nQ 959 750 1161 570 \nQ 1363 391 1709 391 \nQ 2188 391 2477 730 \nQ 2766 1069 2766 1631 \nL 2766 1759 \nL 2194 1759 \nz\nM 3341 1997 \nL 3341 0 \nL 2766 0 \nL 2766 531 \nQ 2569 213 2275 61 \nQ 1981 -91 1556 -91 \nQ 1019 -91 701 211 \nQ 384 513 384 1019 \nQ 384 1609 779 1909 \nQ 1175 2209 1959 2209 \nL 2766 2209 \nL 2766 2266 \nQ 2766 2663 2505 2880 \nQ 2244 3097 1772 3097 \nQ 1472 3097 1187 3025 \nQ 903 2953 641 2809 \nL 641 3341 \nQ 956 3463 1253 3523 \nQ 1550 3584 1831 3584 \nQ 2591 3584 2966 3190 \nQ 3341 2797 3341 1997 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-64\"/>\n <use xlink:href=\"#DejaVuSans-61\" x=\"63.476562\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"124.755859\"/>\n <use xlink:href=\"#DejaVuSans-61\" x=\"163.964844\"/>\n </g>\n </g>\n <g id=\"line2d_29\">\n <path d=\"M 61.160938 144.262188 \nL 71.160938 144.262188 \nL 81.160938 144.262188 \n\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #bf00bf; stroke-width: 1.5\"/>\n </g>\n <g id=\"text_16\">\n <!-- 1-step preds -->\n <g style=\"fill: #ffffff\" transform=\"translate(89.160938 147.762188) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-2d\" d=\"M 313 2009 \nL 1997 2009 \nL 1997 1497 \nL 313 1497 \nL 313 2009 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-73\" d=\"M 2834 3397 \nL 2834 2853 \nQ 2591 2978 2328 3040 \nQ 2066 3103 1784 3103 \nQ 1356 3103 1142 2972 \nQ 928 2841 928 2578 \nQ 928 2378 1081 2264 \nQ 1234 2150 1697 2047 \nL 1894 2003 \nQ 2506 1872 2764 1633 \nQ 3022 1394 3022 966 \nQ 3022 478 2636 193 \nQ 2250 -91 1575 -91 \nQ 1294 -91 989 -36 \nQ 684 19 347 128 \nL 347 722 \nQ 666 556 975 473 \nQ 1284 391 1588 391 \nQ 1994 391 2212 530 \nQ 2431 669 2431 922 \nQ 2431 1156 2273 1281 \nQ 2116 1406 1581 1522 \nL 1381 1569 \nQ 847 1681 609 1914 \nQ 372 2147 372 2553 \nQ 372 3047 722 3315 \nQ 1072 3584 1716 3584 \nQ 2034 3584 2315 3537 \nQ 2597 3491 2834 3397 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-70\" d=\"M 1159 525 \nL 1159 -1331 \nL 581 -1331 \nL 581 3500 \nL 1159 3500 \nL 1159 2969 \nQ 1341 3281 1617 3432 \nQ 1894 3584 2278 3584 \nQ 2916 3584 3314 3078 \nQ 3713 2572 3713 1747 \nQ 3713 922 3314 415 \nQ 2916 -91 2278 -91 \nQ 1894 -91 1617 61 \nQ 1341 213 1159 525 \nz\nM 3116 1747 \nQ 3116 2381 2855 2742 \nQ 2594 3103 2138 3103 \nQ 1681 3103 1420 2742 \nQ 1159 2381 1159 1747 \nQ 1159 1113 1420 752 \nQ 1681 391 2138 391 \nQ 2594 391 2855 752 \nQ 3116 1113 3116 1747 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-20\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-72\" d=\"M 2631 2963 \nQ 2534 3019 2420 3045 \nQ 2306 3072 2169 3072 \nQ 1681 3072 1420 2755 \nQ 1159 2438 1159 1844 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1341 3275 1631 3429 \nQ 1922 3584 2338 3584 \nQ 2397 3584 2469 3576 \nQ 2541 3569 2628 3553 \nL 2631 2963 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-2d\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"99.707031\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"151.806641\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"191.015625\"/>\n <use xlink:href=\"#DejaVuSans-70\" x=\"252.539062\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"316.015625\"/>\n <use xlink:href=\"#DejaVuSans-70\" x=\"347.802734\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"411.279297\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"450.142578\"/>\n <use xlink:href=\"#DejaVuSans-64\" x=\"511.666016\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"575.142578\"/>\n </g>\n </g>\n <g id=\"line2d_30\">\n <path d=\"M 61.160938 158.940313 \nL 71.160938 158.940313 \nL 81.160938 158.940313 \n\" style=\"fill: none; stroke-dasharray: 9.6,2.4,1.5,2.4; stroke-dashoffset: 0; stroke: #008000; stroke-width: 1.5\"/>\n </g>\n <g id=\"text_17\">\n <!-- multistep preds -->\n <g style=\"fill: #ffffff\" transform=\"translate(89.160938 162.440313) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-75\" d=\"M 544 1381 \nL 544 3500 \nL 1119 3500 \nL 1119 1403 \nQ 1119 906 1312 657 \nQ 1506 409 1894 409 \nQ 2359 409 2629 706 \nQ 2900 1003 2900 1516 \nL 2900 3500 \nL 3475 3500 \nL 3475 0 \nL 2900 0 \nL 2900 538 \nQ 2691 219 2414 64 \nQ 2138 -91 1772 -91 \nQ 1169 -91 856 284 \nQ 544 659 544 1381 \nz\nM 1991 3584 \nL 1991 3584 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6c\" d=\"M 603 4863 \nL 1178 4863 \nL 1178 0 \nL 603 0 \nL 603 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-6d\"/>\n <use xlink:href=\"#DejaVuSans-75\" x=\"97.412109\"/>\n <use xlink:href=\"#DejaVuSans-6c\" x=\"160.791016\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"188.574219\"/>\n <use xlink:href=\"#DejaVuSans-69\" x=\"227.783203\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"255.566406\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"307.666016\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"346.875\"/>\n <use xlink:href=\"#DejaVuSans-70\" x=\"408.398438\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"471.875\"/>\n <use xlink:href=\"#DejaVuSans-70\" x=\"503.662109\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"567.138672\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"606.001953\"/>\n <use xlink:href=\"#DejaVuSans-64\" x=\"667.525391\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"731.001953\"/>\n </g>\n </g>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p9136e6403c\">\n <rect x=\"52.160938\" y=\"7.2\" width=\"334.8\" height=\"166.32\"/>\n </clipPath>\n </defs>\n</svg>\n"
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 91
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.898795229Z",
"start_time": "2026-04-22T07:03:24.850233508Z"
}
},
"cell_type": "code",
"source": [
"import collections\n",
"import re"
],
"id": "aab66c10a4c143d2",
"outputs": [],
"execution_count": 92
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:24.953966099Z",
"start_time": "2026-04-22T07:03:24.901011365Z"
}
},
"cell_type": "code",
"source": [
"d2l.DATA_HUB['time_machine'] = (d2l.DATA_URL + 'timemachine.txt',\n",
"'090b5e7e70c295757f55df93cb0a180b9691891a')\n",
"def read_time_machine(): #@save\n",
" \"\"\"将时间机器数据集加载到文本行的列表中\"\"\"\n",
" with open(d2l.download('time_machine'), 'r') as f:\n",
" lines = f.readlines()\n",
" return [re.sub('[^A-Za-z]+', ' ', line).strip().lower() for line in lines]\n",
"lines = read_time_machine()\n",
"print(f'# 文本总行数: {len(lines)}')\n",
"print(lines[0])\n",
"print(lines[10])"
],
"id": "1aff117af810525e",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"# 文本总行数: 3221\n",
"the time machine by h g wells\n",
"twinkled and his usually pale face was flushed and animated the\n"
]
}
],
"execution_count": 93
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.021941150Z",
"start_time": "2026-04-22T07:03:24.965670989Z"
}
},
"cell_type": "code",
"source": [
"def tokenize(lines, token='word'): #@save\n",
" \"\"\"将文本行拆分为单词或字符词元\"\"\"\n",
" if token == 'word':\n",
" return [line.split() for line in lines]\n",
" elif token == 'char':\n",
" return [list(line) for line in lines]\n",
" else:\n",
" print('错误:未知词元类型:' + token)\n",
"tokens = tokenize(lines)\n",
"for i in range(11):\n",
" print(tokens[i])"
],
"id": "eb4fe9745fbaa5e2",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['the', 'time', 'machine', 'by', 'h', 'g', 'wells']\n",
"[]\n",
"[]\n",
"[]\n",
"[]\n",
"['i']\n",
"[]\n",
"[]\n",
"['the', 'time', 'traveller', 'for', 'so', 'it', 'will', 'be', 'convenient', 'to', 'speak', 'of', 'him']\n",
"['was', 'expounding', 'a', 'recondite', 'matter', 'to', 'us', 'his', 'grey', 'eyes', 'shone', 'and']\n",
"['twinkled', 'and', 'his', 'usually', 'pale', 'face', 'was', 'flushed', 'and', 'animated', 'the']\n"
]
}
],
"execution_count": 94
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.086591433Z",
"start_time": "2026-04-22T07:03:25.032865323Z"
}
},
"cell_type": "code",
"source": [
"def count_corpus(tokens): #@save\n",
" \"\"\"统计词元的频率\"\"\"\n",
" # 这里的tokens是1D列表或2D列表\n",
" if len(tokens) == 0 or isinstance(tokens[0], list):\n",
" # 将词元列表展平成一个列表\n",
" tokens = [token for line in tokens for token in line]\n",
" return collections.Counter(tokens)\n",
"class Vocab: #@save\n",
" \"\"\"文本词表\"\"\"\n",
" def __init__(self, tokens=None, min_freq=0, reserved_tokens=None):\n",
" if tokens is None:\n",
" tokens = []\n",
" if reserved_tokens is None:\n",
" reserved_tokens = []\n",
" # 按出现频率排序\n",
" counter = count_corpus(tokens)\n",
" self._token_freqs = sorted(counter.items(), key=lambda x: x[1],\n",
" reverse=True)\n",
" # 未知词元的索引为0\n",
" self.idx_to_token = ['<unk>'] + reserved_tokens\n",
" self.token_to_idx = {token: idx\n",
" for idx, token in enumerate(self.idx_to_token)}\n",
" for token, freq in self._token_freqs:\n",
" if freq < min_freq:\n",
" break\n",
" if token not in self.token_to_idx:\n",
" self.idx_to_token.append(token)\n",
" self.token_to_idx[token] = len(self.idx_to_token) - 1\n",
" def __len__(self):\n",
" return len(self.idx_to_token)\n",
" def __getitem__(self, tokens):\n",
" if not isinstance(tokens, (list, tuple)):\n",
" return self.token_to_idx.get(tokens, self.unk)\n",
" return [self.__getitem__(token) for token in tokens]\n",
" def to_tokens(self, indices):\n",
" if not isinstance(indices, (list, tuple)):\n",
" return self.idx_to_token[indices]\n",
" return [self.idx_to_token[index] for index in indices]\n",
" @property\n",
" def unk(self): # 未知词元的索引为0\n",
" return 0\n",
" @property\n",
" def token_freqs(self):\n",
" return self._token_freqs"
],
"id": "bee8e5d7b798c6c",
"outputs": [],
"execution_count": 95
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.242997320Z",
"start_time": "2026-04-22T07:03:25.089155138Z"
}
},
"cell_type": "code",
"source": [
"vocab = Vocab(tokens)\n",
"print(list(vocab.token_to_idx.items())[:10])"
],
"id": "ff4e8ac2044850b7",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[('<unk>', 0), ('the', 1), ('i', 2), ('and', 3), ('of', 4), ('a', 5), ('to', 6), ('was', 7), ('in', 8), ('that', 9)]\n"
]
}
],
"execution_count": 96
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.308904788Z",
"start_time": "2026-04-22T07:03:25.255767350Z"
}
},
"cell_type": "code",
"source": [
"for i in [0, 100]:\n",
" print('文本:', tokens[i])\n",
" print('索引:', vocab[tokens[i]])"
],
"id": "a4e569dfbd251608",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"文本: ['the', 'time', 'machine', 'by', 'h', 'g', 'wells']\n",
"索引: [1, 19, 50, 40, 2183, 2184, 400]\n",
"文本: ['were', 'three', 'dimensional', 'representations', 'of', 'his', 'four', 'dimensioned']\n",
"索引: [20, 175, 1452, 2250, 4, 25, 262, 2251]\n"
]
}
],
"execution_count": 97
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.387400952Z",
"start_time": "2026-04-22T07:03:25.322962901Z"
}
},
"cell_type": "code",
"source": [
"def load_corpus_time_machine(max_tokens=-1): #@save\n",
" \"\"\"返回时光机器数据集的词元索引列表和词表\"\"\"\n",
" lines = read_time_machine()\n",
" tokens = tokenize(lines, 'char')\n",
" vocab = Vocab(tokens)\n",
" # 因为时光机器数据集中的每个文本行不一定是一个句子或一个段落,\n",
" # 所以将所有文本行展平到一个列表中\n",
" corpus = [vocab[token] for line in tokens for token in line]\n",
" if max_tokens > 0:\n",
" corpus = corpus[:max_tokens]\n",
" return corpus, vocab\n",
"corpus, vocab = load_corpus_time_machine()\n",
"\n",
"len(corpus), len(vocab)\n"
],
"id": "1b5c1776ae47af5c",
"outputs": [
{
"data": {
"text/plain": [
"(170580, 28)"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 98
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.453063309Z",
"start_time": "2026-04-22T07:03:25.388764888Z"
}
},
"cell_type": "code",
"source": [
"tokens = d2l.tokenize(read_time_machine())\n",
"# 因为每个文本行不一定是一个句子或一个段落,因此我们把所有文本行拼接到一起\n",
"corpus = [token for line in tokens for token in line]\n",
"vocab = d2l.Vocab(corpus)\n",
"vocab.token_freqs[:10]"
],
"id": "99deb85c025e5cdd",
"outputs": [
{
"data": {
"text/plain": [
"[('the', 2261),\n",
" ('i', 1267),\n",
" ('and', 1245),\n",
" ('of', 1155),\n",
" ('a', 816),\n",
" ('to', 695),\n",
" ('was', 552),\n",
" ('in', 541),\n",
" ('that', 443),\n",
" ('my', 440)]"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 99
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.731046331Z",
"start_time": "2026-04-22T07:03:25.454316415Z"
}
},
"cell_type": "code",
"source": [
"freqs = [freq for token, freq in vocab.token_freqs]\n",
"d2l.plot(freqs, xlabel='token: x', ylabel='frequency: n(x)',\n",
"xscale='log', yscale='log')"
],
"id": "5c0d846673e16c33",
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 350x250 with 1 Axes>"
],
"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<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"247.978125pt\" height=\"183.35625pt\" viewBox=\"0 0 247.978125 183.35625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n <metadata>\n <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" 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>2026-04-22T15:03:25.667027</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.7.2, 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-linejoin: round; stroke-linecap: butt}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 183.35625 \nL 247.978125 183.35625 \nL 247.978125 0 \nL 0 0 \nz\n\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 45.478125 145.8 \nL 240.778125 145.8 \nL 240.778125 7.2 \nL 45.478125 7.2 \nz\n\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path d=\"M 54.355398 145.8 \nL 54.355398 7.2 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path id=\"ma46b1d16ab\" d=\"M 0 0 \nL 0 3.5 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#ma46b1d16ab\" x=\"54.355398\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- $\\mathdefault{10^{0}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(45.555398 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-31\" d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path d=\"M 102.85613 145.8 \nL 102.85613 7.2 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use xlink:href=\"#ma46b1d16ab\" x=\"102.85613\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- $\\mathdefault{10^{1}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(94.05613 160.398438) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(128.203125 38.965625) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path d=\"M 151.356861 145.8 \nL 151.356861 7.2 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_6\">\n <g>\n <use xlink:href=\"#ma46b1d16ab\" x=\"151.356861\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- $\\mathdefault{10^{2}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(142.556861 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-32\" d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_7\">\n <path d=\"M 199.857593 145.8 \nL 199.857593 7.2 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_8\">\n <g>\n <use xlink:href=\"#ma46b1d16ab\" x=\"199.857593\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- $\\mathdefault{10^{3}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(191.057593 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-33\" d=\"M 2597 2516 \nQ 3050 2419 3304 2112 \nQ 3559 1806 3559 1356 \nQ 3559 666 3084 287 \nQ 2609 -91 1734 -91 \nQ 1441 -91 1130 -33 \nQ 819 25 488 141 \nL 488 750 \nQ 750 597 1062 519 \nQ 1375 441 1716 441 \nQ 2309 441 2620 675 \nQ 2931 909 2931 1356 \nQ 2931 1769 2642 2001 \nQ 2353 2234 1838 2234 \nL 1294 2234 \nL 1294 2753 \nL 1863 2753 \nQ 2328 2753 2575 2939 \nQ 2822 3125 2822 3475 \nQ 2822 3834 2567 4026 \nQ 2313 4219 1838 4219 \nQ 1578 4219 1281 4162 \nQ 984 4106 628 3988 \nL 628 4550 \nQ 988 4650 1302 4700 \nQ 1616 4750 1894 4750 \nQ 2613 4750 3031 4423 \nQ 3450 4097 3450 3541 \nQ 3450 3153 3228 2886 \nQ 3006 2619 2597 2516 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-33\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_9\">\n <defs>\n <path id=\"md995042edf\" d=\"M 0 0 \nL 0 2 \n\" style=\"stroke: #ffffff; stroke-width: 0.6\"/>\n </defs>\n <g>\n <use xlink:href=\"#md995042edf\" x=\"46.842539\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_6\">\n <g id=\"line2d_10\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"49.655191\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_7\">\n <g id=\"line2d_11\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"52.136126\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_8\">\n <g id=\"line2d_12\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"68.955573\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_9\">\n <g id=\"line2d_13\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"77.496128\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_10\">\n <g id=\"line2d_14\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"83.555748\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_11\">\n <g id=\"line2d_15\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"88.255954\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_12\">\n <g id=\"line2d_16\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"92.096303\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_13\">\n <g id=\"line2d_17\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"95.343271\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_14\">\n <g id=\"line2d_18\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"98.155923\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_15\">\n <g id=\"line2d_19\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"100.636858\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_16\">\n <g id=\"line2d_20\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"117.456305\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_17\">\n <g id=\"line2d_21\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"125.99686\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_18\">\n <g id=\"line2d_22\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"132.05648\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_19\">\n <g id=\"line2d_23\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"136.756686\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_20\">\n <g id=\"line2d_24\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"140.597035\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_21\">\n <g id=\"line2d_25\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"143.844003\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_22\">\n <g id=\"line2d_26\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"146.656655\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_23\">\n <g id=\"line2d_27\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"149.13759\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_24\">\n <g id=\"line2d_28\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"165.957036\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_25\">\n <g id=\"line2d_29\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"174.497591\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_26\">\n <g id=\"line2d_30\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"180.557211\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_27\">\n <g id=\"line2d_31\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"185.257418\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_28\">\n <g id=\"line2d_32\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"189.097766\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_29\">\n <g id=\"line2d_33\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"192.344735\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_30\">\n <g id=\"line2d_34\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"195.157387\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_31\">\n <g id=\"line2d_35\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"197.638321\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_32\">\n <g id=\"line2d_36\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"214.457768\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_33\">\n <g id=\"line2d_37\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"222.998323\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_34\">\n <g id=\"line2d_38\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"229.057943\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_35\">\n <g id=\"line2d_39\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"233.75815\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_36\">\n <g id=\"line2d_40\">\n <g>\n <use xlink:href=\"#md995042edf\" x=\"237.598498\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- token: x -->\n <g style=\"fill: #ffffff\" transform=\"translate(122.916406 174.076563) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \nL 1172 3500 \nL 2356 3500 \nL 2356 3053 \nL 1172 3053 \nL 1172 1153 \nQ 1172 725 1289 603 \nQ 1406 481 1766 481 \nL 2356 481 \nL 2356 0 \nL 1766 0 \nQ 1100 0 847 248 \nQ 594 497 594 1153 \nL 594 3053 \nL 172 3053 \nL 172 3500 \nL 594 3500 \nL 594 4494 \nL 1172 4494 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6f\" d=\"M 1959 3097 \nQ 1497 3097 1228 2736 \nQ 959 2375 959 1747 \nQ 959 1119 1226 758 \nQ 1494 397 1959 397 \nQ 2419 397 2687 759 \nQ 2956 1122 2956 1747 \nQ 2956 2369 2687 2733 \nQ 2419 3097 1959 3097 \nz\nM 1959 3584 \nQ 2709 3584 3137 3096 \nQ 3566 2609 3566 1747 \nQ 3566 888 3137 398 \nQ 2709 -91 1959 -91 \nQ 1206 -91 779 398 \nQ 353 888 353 1747 \nQ 353 2609 779 3096 \nQ 1206 3584 1959 3584 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6b\" d=\"M 581 4863 \nL 1159 4863 \nL 1159 1991 \nL 2875 3500 \nL 3609 3500 \nL 1753 1863 \nL 3688 0 \nL 2938 0 \nL 1159 1709 \nL 1159 0 \nL 581 0 \nL 581 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \nL 3597 1613 \nL 953 1613 \nQ 991 1019 1311 708 \nQ 1631 397 2203 397 \nQ 2534 397 2845 478 \nQ 3156 559 3463 722 \nL 3463 178 \nQ 3153 47 2828 -22 \nQ 2503 -91 2169 -91 \nQ 1331 -91 842 396 \nQ 353 884 353 1716 \nQ 353 2575 817 3079 \nQ 1281 3584 2069 3584 \nQ 2775 3584 3186 3129 \nQ 3597 2675 3597 1894 \nz\nM 3022 2063 \nQ 3016 2534 2758 2815 \nQ 2500 3097 2075 3097 \nQ 1594 3097 1305 2825 \nQ 1016 2553 972 2059 \nL 3022 2063 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6e\" d=\"M 3513 2113 \nL 3513 0 \nL 2938 0 \nL 2938 2094 \nQ 2938 2591 2744 2837 \nQ 2550 3084 2163 3084 \nQ 1697 3084 1428 2787 \nQ 1159 2491 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1366 3272 1645 3428 \nQ 1925 3584 2291 3584 \nQ 2894 3584 3203 3211 \nQ 3513 2838 3513 2113 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-3a\" d=\"M 750 794 \nL 1409 794 \nL 1409 0 \nL 750 0 \nL 750 794 \nz\nM 750 3309 \nL 1409 3309 \nL 1409 2516 \nL 750 2516 \nL 750 3309 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-20\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-78\" d=\"M 3513 3500 \nL 2247 1797 \nL 3578 0 \nL 2900 0 \nL 1881 1375 \nL 863 0 \nL 184 0 \nL 1544 1831 \nL 300 3500 \nL 978 3500 \nL 1906 2253 \nL 2834 3500 \nL 3513 3500 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-74\"/>\n <use xlink:href=\"#DejaVuSans-6f\" x=\"39.208984\"/>\n <use xlink:href=\"#DejaVuSans-6b\" x=\"100.390625\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"154.675781\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"216.199219\"/>\n <use xlink:href=\"#DejaVuSans-3a\" x=\"279.578125\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"313.269531\"/>\n <use xlink:href=\"#DejaVuSans-78\" x=\"345.056641\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_41\">\n <path d=\"M 45.478125 139.5 \nL 240.778125 139.5 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_42\">\n <defs>\n <path id=\"m8fa159f00d\" d=\"M 0 0 \nL -3.5 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m8fa159f00d\" x=\"45.478125\" y=\"139.5\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- $\\mathdefault{10^{0}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 143.299219) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_43\">\n <path d=\"M 45.478125 101.936282 \nL 240.778125 101.936282 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_44\">\n <g>\n <use xlink:href=\"#m8fa159f00d\" x=\"45.478125\" y=\"101.936282\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- $\\mathdefault{10^{1}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 105.735501) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(128.203125 38.965625) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_45\">\n <path d=\"M 45.478125 64.372564 \nL 240.778125 64.372564 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_46\">\n <g>\n <use xlink:href=\"#m8fa159f00d\" x=\"45.478125\" y=\"64.372564\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- $\\mathdefault{10^{2}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 68.171783) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_47\">\n <path d=\"M 45.478125 26.808846 \nL 240.778125 26.808846 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_48\">\n <g>\n <use xlink:href=\"#m8fa159f00d\" x=\"45.478125\" y=\"26.808846\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- $\\mathdefault{10^{3}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 30.608065) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-33\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_49\">\n <defs>\n <path id=\"mc63ae361c6\" d=\"M 0 0 \nL -2 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.6\"/>\n </defs>\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"145.318694\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_6\">\n <g id=\"line2d_50\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"143.1403\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_7\">\n <g id=\"line2d_51\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"141.218821\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_8\">\n <g id=\"line2d_52\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"128.192194\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_9\">\n <g id=\"line2d_53\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"121.577552\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_10\">\n <g id=\"line2d_54\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"116.884388\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_11\">\n <g id=\"line2d_55\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"113.244088\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_12\">\n <g id=\"line2d_56\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"110.269746\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_13\">\n <g id=\"line2d_57\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"107.754976\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_14\">\n <g id=\"line2d_58\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"105.576583\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_15\">\n <g id=\"line2d_59\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"103.655104\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_16\">\n <g id=\"line2d_60\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"90.628476\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_17\">\n <g id=\"line2d_61\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"84.013834\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_18\">\n <g id=\"line2d_62\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"79.32067\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_19\">\n <g id=\"line2d_63\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"75.68037\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_20\">\n <g id=\"line2d_64\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"72.706028\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_21\">\n <g id=\"line2d_65\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"70.191258\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_22\">\n <g id=\"line2d_66\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"68.012865\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_23\">\n <g id=\"line2d_67\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"66.091386\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_24\">\n <g id=\"line2d_68\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"53.064758\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_25\">\n <g id=\"line2d_69\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"46.450116\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_26\">\n <g id=\"line2d_70\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"41.756953\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_27\">\n <g id=\"line2d_71\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"38.116652\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_28\">\n <g id=\"line2d_72\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"35.14231\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_29\">\n <g id=\"line2d_73\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"32.62754\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_30\">\n <g id=\"line2d_74\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"30.449147\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_31\">\n <g id=\"line2d_75\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"28.527668\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_32\">\n <g id=\"line2d_76\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"15.501041\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_33\">\n <g id=\"line2d_77\">\n <g>\n <use xlink:href=\"#mc63ae361c6\" x=\"45.478125\" y=\"8.886398\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- frequency: n(x) -->\n <g style=\"fill: #ffffff\" transform=\"translate(14.798438 114.517188) rotate(-90) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-66\" d=\"M 2375 4863 \nL 2375 4384 \nL 1825 4384 \nQ 1516 4384 1395 4259 \nQ 1275 4134 1275 3809 \nL 1275 3500 \nL 2222 3500 \nL 2222 3053 \nL 1275 3053 \nL 1275 0 \nL 697 0 \nL 697 3053 \nL 147 3053 \nL 147 3500 \nL 697 3500 \nL 697 3744 \nQ 697 4328 969 4595 \nQ 1241 4863 1831 4863 \nL 2375 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-72\" d=\"M 2631 2963 \nQ 2534 3019 2420 3045 \nQ 2306 3072 2169 3072 \nQ 1681 3072 1420 2755 \nQ 1159 2438 1159 1844 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1341 3275 1631 3429 \nQ 1922 3584 2338 3584 \nQ 2397 3584 2469 3576 \nQ 2541 3569 2628 3553 \nL 2631 2963 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-71\" d=\"M 947 1747 \nQ 947 1113 1208 752 \nQ 1469 391 1925 391 \nQ 2381 391 2643 752 \nQ 2906 1113 2906 1747 \nQ 2906 2381 2643 2742 \nQ 2381 3103 1925 3103 \nQ 1469 3103 1208 2742 \nQ 947 2381 947 1747 \nz\nM 2906 525 \nQ 2725 213 2448 61 \nQ 2172 -91 1784 -91 \nQ 1150 -91 751 415 \nQ 353 922 353 1747 \nQ 353 2572 751 3078 \nQ 1150 3584 1784 3584 \nQ 2172 3584 2448 3432 \nQ 2725 3281 2906 2969 \nL 2906 3500 \nL 3481 3500 \nL 3481 -1331 \nL 2906 -1331 \nL 2906 525 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-75\" d=\"M 544 1381 \nL 544 3500 \nL 1119 3500 \nL 1119 1403 \nQ 1119 906 1312 657 \nQ 1506 409 1894 409 \nQ 2359 409 2629 706 \nQ 2900 1003 2900 1516 \nL 2900 3500 \nL 3475 3500 \nL 3475 0 \nL 2900 0 \nL 2900 538 \nQ 2691 219 2414 64 \nQ 2138 -91 1772 -91 \nQ 1169 -91 856 284 \nQ 544 659 544 1381 \nz\nM 1991 3584 \nL 1991 3584 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-63\" d=\"M 3122 3366 \nL 3122 2828 \nQ 2878 2963 2633 3030 \nQ 2388 3097 2138 3097 \nQ 1578 3097 1268 2742 \nQ 959 2388 959 1747 \nQ 959 1106 1268 751 \nQ 1578 397 2138 397 \nQ 2388 397 2633 464 \nQ 2878 531 3122 666 \nL 3122 134 \nQ 2881 22 2623 -34 \nQ 2366 -91 2075 -91 \nQ 1284 -91 818 406 \nQ 353 903 353 1747 \nQ 353 2603 823 3093 \nQ 1294 3584 2113 3584 \nQ 2378 3584 2631 3529 \nQ 2884 3475 3122 3366 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-79\" d=\"M 2059 -325 \nQ 1816 -950 1584 -1140 \nQ 1353 -1331 966 -1331 \nL 506 -1331 \nL 506 -850 \nL 844 -850 \nQ 1081 -850 1212 -737 \nQ 1344 -625 1503 -206 \nL 1606 56 \nL 191 3500 \nL 800 3500 \nL 1894 763 \nL 2988 3500 \nL 3597 3500 \nL 2059 -325 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-28\" d=\"M 1984 4856 \nQ 1566 4138 1362 3434 \nQ 1159 2731 1159 2009 \nQ 1159 1288 1364 580 \nQ 1569 -128 1984 -844 \nL 1484 -844 \nQ 1016 -109 783 600 \nQ 550 1309 550 2009 \nQ 550 2706 781 3412 \nQ 1013 4119 1484 4856 \nL 1984 4856 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-29\" d=\"M 513 4856 \nL 1013 4856 \nQ 1481 4119 1714 3412 \nQ 1947 2706 1947 2009 \nQ 1947 1309 1714 600 \nQ 1481 -109 1013 -844 \nL 513 -844 \nQ 928 -128 1133 580 \nQ 1338 1288 1338 2009 \nQ 1338 2731 1133 3434 \nQ 928 4138 513 4856 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-66\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"35.205078\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"74.068359\"/>\n <use xlink:href=\"#DejaVuSans-71\" x=\"135.591797\"/>\n <use xlink:href=\"#DejaVuSans-75\" x=\"199.068359\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"262.447266\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"323.970703\"/>\n <use xlink:href=\"#DejaVuSans-63\" x=\"387.349609\"/>\n <use xlink:href=\"#DejaVuSans-79\" x=\"442.330078\"/>\n <use xlink:href=\"#DejaVuSans-3a\" x=\"494.259766\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"527.951172\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"559.738281\"/>\n <use xlink:href=\"#DejaVuSans-28\" x=\"623.117188\"/>\n <use xlink:href=\"#DejaVuSans-78\" x=\"662.130859\"/>\n <use xlink:href=\"#DejaVuSans-29\" x=\"721.310547\"/>\n </g>\n </g>\n </g>\n <g id=\"line2d_78\">\n <path d=\"M -1 22.937391 \nL 54.355398 22.948175 \nL 68.955573 23.233932 \nL 77.496128 24.458034 \nL 83.555748 30.126092 \nL 88.255954 32.744485 \nL 92.096303 36.502574 \nL 95.343271 36.830949 \nL 98.155923 40.091237 \nL 102.85613 40.3137 \nL 104.863705 43.749961 \nL 106.696478 47.517487 \nL 108.382465 48.168938 \nL 111.396684 51.43591 \nL 112.756098 51.809238 \nL 114.033071 52.741704 \nL 115.237033 53.064758 \nL 116.375883 56.910265 \nL 117.456305 57.541843 \nL 118.484001 59.236831 \nL 119.46388 59.236831 \nL 120.400194 59.598035 \nL 121.296653 60.218404 \nL 122.156511 60.473311 \nL 122.982641 60.995394 \nL 123.777588 61.128568 \nL 125.282771 61.128568 \nL 126.687531 61.672409 \nL 127.356273 62.235006 \nL 128.004435 62.235006 \nL 128.633246 62.378741 \nL 129.243828 62.378741 \nL 129.837208 62.523752 \nL 130.414329 63.421982 \nL 130.976058 63.576615 \nL 131.523195 63.89035 \nL 132.05648 65.381982 \nL 133.084176 65.732828 \nL 133.579813 65.732828 \nL 134.064055 65.911122 \nL 134.537414 66.273664 \nL 136.331144 67.023852 \nL 137.173801 67.023852 \nL 137.582816 67.216916 \nL 137.984039 67.216916 \nL 138.377763 67.610036 \nL 139.143796 68.636395 \nL 139.516613 69.065728 \nL 139.882946 69.284707 \nL 140.597035 69.284707 \nL 141.956448 70.191258 \nL 142.60461 70.191258 \nL 142.921362 70.425992 \nL 143.233421 71.151165 \nL 143.540924 72.171104 \nL 144.437383 72.980215 \nL 144.72792 72.980215 \nL 145.014504 73.542812 \nL 145.576233 73.542812 \nL 145.851578 74.125507 \nL 146.123371 74.42485 \nL 146.3917 74.42485 \nL 147.684351 76.009951 \nL 148.90224 76.009951 \nL 149.13759 76.346328 \nL 149.370339 76.346328 \nL 149.600544 76.689788 \nL 149.828261 76.689788 \nL 150.053543 77.040634 \nL 150.715281 77.040634 \nL 150.93132 77.399192 \nL 151.145165 77.399192 \nL 151.566451 78.140852 \nL 151.979476 78.140852 \nL 152.182991 78.524722 \nL 152.384558 78.524722 \nL 152.781996 79.32067 \nL 153.364437 79.32067 \nL 153.743971 80.157455 \nL 153.931205 80.157455 \nL 154.116788 80.592513 \nL 154.843191 80.592513 \nL 155.020944 81.039492 \nL 155.887881 81.039492 \nL 156.057068 81.499064 \nL 156.720543 81.499064 \nL 156.883197 81.971958 \nL 157.678144 81.971958 \nL 157.833596 82.458971 \nL 158.141099 82.458971 \nL 158.293184 82.960971 \nL 158.890773 82.960971 \nL 159.037558 83.47891 \nL 159.328095 83.47891 \nL 159.471874 84.013834 \nL 159.756522 84.013834 \nL 159.897416 84.566894 \nL 160.037374 84.566894 \nL 160.176408 85.139364 \nL 160.858138 85.139364 \nL 160.991875 85.732655 \nL 161.518493 85.732655 \nL 161.648115 86.34834 \nL 162.409533 86.34834 \nL 162.533803 86.988176 \nL 162.902271 86.988176 \nL 163.023676 87.654134 \nL 163.502415 87.654134 \nL 163.620418 88.34844 \nL 164.200719 88.34844 \nL 164.314886 89.073613 \nL 165.423752 89.073613 \nL 165.638689 89.832527 \nL 166.374151 89.832527 \nL 166.579651 90.628476 \nL 167.675405 90.628476 \nL 167.86865 91.46526 \nL 168.716963 91.46526 \nL 168.900926 92.347298 \nL 169.173892 92.347298 \nL 169.353924 93.279764 \nL 169.972187 93.279764 \nL 170.145551 94.268777 \nL 171.483372 94.268777 \nL 171.64478 95.32164 \nL 172.433771 95.32164 \nL 172.588084 96.44717 \nL 173.490948 96.44717 \nL 173.637733 97.656146 \nL 175.256101 97.656146 \nL 175.391124 98.96194 \nL 176.37712 98.96194 \nL 176.505167 100.381419 \nL 178.33794 100.381419 \nL 178.454636 101.936282 \nL 180.451629 101.936282 \nL 180.609805 103.655104 \nL 182.42068 103.655104 \nL 182.564787 105.576583 \nL 185.257418 105.576583 \nL 185.383422 107.754976 \nL 188.528445 107.754976 \nL 188.672225 110.269746 \nL 191.67211 110.269746 \nL 191.796014 113.244088 \nL 195.754423 113.244088 \nL 195.882004 116.884388 \nL 200.724191 116.884388 \nL 200.84513 121.577552 \nL 207.214001 121.577552 \nL 207.332503 128.192194 \nL 216.282641 128.192194 \nL 216.398216 139.5 \nL 231.900852 139.5 \nL 231.900852 139.5 \n\" clip-path=\"url(#pa5617703bf)\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 45.478125 145.8 \nL 45.478125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 240.778125 145.8 \nL 240.778125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 45.478125 145.8 \nL 240.778125 145.8 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 45.478125 7.2 \nL 240.778125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"pa5617703bf\">\n <rect x=\"45.478125\" y=\"7.2\" width=\"195.3\" height=\"138.6\"/>\n </clipPath>\n </defs>\n</svg>\n"
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 100
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.792389729Z",
"start_time": "2026-04-22T07:03:25.734951149Z"
}
},
"cell_type": "code",
"source": [
"bigram_tokens = [pair for pair in zip(corpus[:-1], corpus[1:])]\n",
"bigram_vocab = Vocab(bigram_tokens)\n",
"bigram_vocab.token_freqs[:10]"
],
"id": "2826e3ab0863ee64",
"outputs": [
{
"data": {
"text/plain": [
"[(('of', 'the'), 309),\n",
" (('in', 'the'), 169),\n",
" (('i', 'had'), 130),\n",
" (('i', 'was'), 112),\n",
" (('and', 'the'), 109),\n",
" (('the', 'time'), 102),\n",
" (('it', 'was'), 99),\n",
" (('to', 'the'), 85),\n",
" (('as', 'i'), 78),\n",
" (('of', 'a'), 73)]"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 101
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:25.888424198Z",
"start_time": "2026-04-22T07:03:25.808960001Z"
}
},
"cell_type": "code",
"source": [
"trigram_tokens = [triple for triple in zip(\n",
"corpus[:-2], corpus[1:-1], corpus[2:])]\n",
"trigram_vocab = Vocab(trigram_tokens)\n",
"trigram_vocab.token_freqs[:10]"
],
"id": "7c8cd0544bf872bb",
"outputs": [
{
"data": {
"text/plain": [
"[(('the', 'time', 'traveller'), 59),\n",
" (('the', 'time', 'machine'), 30),\n",
" (('the', 'medical', 'man'), 24),\n",
" (('it', 'seemed', 'to'), 16),\n",
" (('it', 'was', 'a'), 15),\n",
" (('here', 'and', 'there'), 15),\n",
" (('seemed', 'to', 'me'), 14),\n",
" (('i', 'did', 'not'), 14),\n",
" (('i', 'saw', 'the'), 13),\n",
" (('i', 'began', 'to'), 13)]"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 102
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.133953109Z",
"start_time": "2026-04-22T07:03:25.889784531Z"
}
},
"cell_type": "code",
"source": [
"bigram_freqs = [freq for token, freq in bigram_vocab.token_freqs]\n",
"trigram_freqs = [freq for token, freq in trigram_vocab.token_freqs]\n",
"d2l.plot([freqs, bigram_freqs, trigram_freqs], xlabel='token: x',\n",
"ylabel='frequency: n(x)', xscale='log', yscale='log',\n",
"legend=['unigram', 'bigram', 'trigram'])"
],
"id": "dc3d97dda738613d",
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 350x250 with 1 Axes>"
],
"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<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"247.978125pt\" height=\"183.35625pt\" viewBox=\"0 0 247.978125 183.35625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n <metadata>\n <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" 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>2026-04-22T15:03:26.075629</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.7.2, 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-linejoin: round; stroke-linecap: butt}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 183.35625 \nL 247.978125 183.35625 \nL 247.978125 0 \nL 0 0 \nz\n\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 45.478125 145.8 \nL 240.778125 145.8 \nL 240.778125 7.2 \nL 45.478125 7.2 \nz\n\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path d=\"M 54.355398 145.8 \nL 54.355398 7.2 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path id=\"mc905ff436c\" d=\"M 0 0 \nL 0 3.5 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#mc905ff436c\" x=\"54.355398\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- $\\mathdefault{10^{0}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(45.555398 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-31\" d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path d=\"M 94.026857 145.8 \nL 94.026857 7.2 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use xlink:href=\"#mc905ff436c\" x=\"94.026857\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- $\\mathdefault{10^{1}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(85.226857 160.398438) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(128.203125 38.965625) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path d=\"M 133.698316 145.8 \nL 133.698316 7.2 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_6\">\n <g>\n <use xlink:href=\"#mc905ff436c\" x=\"133.698316\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- $\\mathdefault{10^{2}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(124.898316 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-32\" d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_7\">\n <path d=\"M 173.369775 145.8 \nL 173.369775 7.2 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_8\">\n <g>\n <use xlink:href=\"#mc905ff436c\" x=\"173.369775\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- $\\mathdefault{10^{3}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(164.569775 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-33\" d=\"M 2597 2516 \nQ 3050 2419 3304 2112 \nQ 3559 1806 3559 1356 \nQ 3559 666 3084 287 \nQ 2609 -91 1734 -91 \nQ 1441 -91 1130 -33 \nQ 819 25 488 141 \nL 488 750 \nQ 750 597 1062 519 \nQ 1375 441 1716 441 \nQ 2309 441 2620 675 \nQ 2931 909 2931 1356 \nQ 2931 1769 2642 2001 \nQ 2353 2234 1838 2234 \nL 1294 2234 \nL 1294 2753 \nL 1863 2753 \nQ 2328 2753 2575 2939 \nQ 2822 3125 2822 3475 \nQ 2822 3834 2567 4026 \nQ 2313 4219 1838 4219 \nQ 1578 4219 1281 4162 \nQ 984 4106 628 3988 \nL 628 4550 \nQ 988 4650 1302 4700 \nQ 1616 4750 1894 4750 \nQ 2613 4750 3031 4423 \nQ 3450 4097 3450 3541 \nQ 3450 3153 3228 2886 \nQ 3006 2619 2597 2516 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-33\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_9\">\n <path d=\"M 213.041234 145.8 \nL 213.041234 7.2 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_10\">\n <g>\n <use xlink:href=\"#mc905ff436c\" x=\"213.041234\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- $\\mathdefault{10^{4}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(204.241234 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-34\" d=\"M 2419 4116 \nL 825 1625 \nL 2419 1625 \nL 2419 4116 \nz\nM 2253 4666 \nL 3047 4666 \nL 3047 1625 \nL 3713 1625 \nL 3713 1100 \nL 3047 1100 \nL 3047 0 \nL 2419 0 \nL 2419 1100 \nL 313 1100 \nL 313 1709 \nL 2253 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(128.203125 38.965625) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_6\">\n <g id=\"line2d_11\">\n <defs>\n <path id=\"m62a1b4c1c6\" d=\"M 0 0 \nL 0 2 \n\" style=\"stroke: #ffffff; stroke-width: 0.6\"/>\n </defs>\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"45.554334\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_7\">\n <g id=\"line2d_12\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"48.210211\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_8\">\n <g id=\"line2d_13\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"50.510836\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_9\">\n <g id=\"line2d_14\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"52.540131\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_10\">\n <g id=\"line2d_15\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"66.297697\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_11\">\n <g id=\"line2d_16\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"73.283494\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_12\">\n <g id=\"line2d_17\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"78.239996\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_13\">\n <g id=\"line2d_18\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"82.084558\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_14\">\n <g id=\"line2d_19\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"85.225793\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_15\">\n <g id=\"line2d_20\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"87.88167\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_16\">\n <g id=\"line2d_21\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"90.182295\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_17\">\n <g id=\"line2d_22\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"92.21159\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_18\">\n <g id=\"line2d_23\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"105.969156\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_19\">\n <g id=\"line2d_24\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"112.954953\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_20\">\n <g id=\"line2d_25\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"117.911455\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_21\">\n <g id=\"line2d_26\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"121.756017\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_22\">\n <g id=\"line2d_27\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"124.897252\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_23\">\n <g id=\"line2d_28\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"127.553129\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_24\">\n <g id=\"line2d_29\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"129.853754\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_25\">\n <g id=\"line2d_30\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"131.883049\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_26\">\n <g id=\"line2d_31\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"145.640615\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_27\">\n <g id=\"line2d_32\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"152.626412\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_28\">\n <g id=\"line2d_33\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"157.582914\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_29\">\n <g id=\"line2d_34\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"161.427476\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_30\">\n <g id=\"line2d_35\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"164.568711\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_31\">\n <g id=\"line2d_36\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"167.224588\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_32\">\n <g id=\"line2d_37\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"169.525213\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_33\">\n <g id=\"line2d_38\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"171.554508\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_34\">\n <g id=\"line2d_39\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"185.312074\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_35\">\n <g id=\"line2d_40\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"192.297871\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_36\">\n <g id=\"line2d_41\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"197.254373\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_37\">\n <g id=\"line2d_42\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"201.098935\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_38\">\n <g id=\"line2d_43\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"204.24017\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_39\">\n <g id=\"line2d_44\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"206.896047\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_40\">\n <g id=\"line2d_45\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"209.196672\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_41\">\n <g id=\"line2d_46\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"211.225968\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_42\">\n <g id=\"line2d_47\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"224.983533\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_43\">\n <g id=\"line2d_48\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"231.96933\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_44\">\n <g id=\"line2d_49\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"236.925832\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_45\">\n <g id=\"line2d_50\">\n <g>\n <use xlink:href=\"#m62a1b4c1c6\" x=\"240.770394\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- token: x -->\n <g style=\"fill: #ffffff\" transform=\"translate(122.916406 174.076563) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \nL 1172 3500 \nL 2356 3500 \nL 2356 3053 \nL 1172 3053 \nL 1172 1153 \nQ 1172 725 1289 603 \nQ 1406 481 1766 481 \nL 2356 481 \nL 2356 0 \nL 1766 0 \nQ 1100 0 847 248 \nQ 594 497 594 1153 \nL 594 3053 \nL 172 3053 \nL 172 3500 \nL 594 3500 \nL 594 4494 \nL 1172 4494 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6f\" d=\"M 1959 3097 \nQ 1497 3097 1228 2736 \nQ 959 2375 959 1747 \nQ 959 1119 1226 758 \nQ 1494 397 1959 397 \nQ 2419 397 2687 759 \nQ 2956 1122 2956 1747 \nQ 2956 2369 2687 2733 \nQ 2419 3097 1959 3097 \nz\nM 1959 3584 \nQ 2709 3584 3137 3096 \nQ 3566 2609 3566 1747 \nQ 3566 888 3137 398 \nQ 2709 -91 1959 -91 \nQ 1206 -91 779 398 \nQ 353 888 353 1747 \nQ 353 2609 779 3096 \nQ 1206 3584 1959 3584 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6b\" d=\"M 581 4863 \nL 1159 4863 \nL 1159 1991 \nL 2875 3500 \nL 3609 3500 \nL 1753 1863 \nL 3688 0 \nL 2938 0 \nL 1159 1709 \nL 1159 0 \nL 581 0 \nL 581 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \nL 3597 1613 \nL 953 1613 \nQ 991 1019 1311 708 \nQ 1631 397 2203 397 \nQ 2534 397 2845 478 \nQ 3156 559 3463 722 \nL 3463 178 \nQ 3153 47 2828 -22 \nQ 2503 -91 2169 -91 \nQ 1331 -91 842 396 \nQ 353 884 353 1716 \nQ 353 2575 817 3079 \nQ 1281 3584 2069 3584 \nQ 2775 3584 3186 3129 \nQ 3597 2675 3597 1894 \nz\nM 3022 2063 \nQ 3016 2534 2758 2815 \nQ 2500 3097 2075 3097 \nQ 1594 3097 1305 2825 \nQ 1016 2553 972 2059 \nL 3022 2063 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6e\" d=\"M 3513 2113 \nL 3513 0 \nL 2938 0 \nL 2938 2094 \nQ 2938 2591 2744 2837 \nQ 2550 3084 2163 3084 \nQ 1697 3084 1428 2787 \nQ 1159 2491 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1366 3272 1645 3428 \nQ 1925 3584 2291 3584 \nQ 2894 3584 3203 3211 \nQ 3513 2838 3513 2113 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-3a\" d=\"M 750 794 \nL 1409 794 \nL 1409 0 \nL 750 0 \nL 750 794 \nz\nM 750 3309 \nL 1409 3309 \nL 1409 2516 \nL 750 2516 \nL 750 3309 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-20\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-78\" d=\"M 3513 3500 \nL 2247 1797 \nL 3578 0 \nL 2900 0 \nL 1881 1375 \nL 863 0 \nL 184 0 \nL 1544 1831 \nL 300 3500 \nL 978 3500 \nL 1906 2253 \nL 2834 3500 \nL 3513 3500 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-74\"/>\n <use xlink:href=\"#DejaVuSans-6f\" x=\"39.208984\"/>\n <use xlink:href=\"#DejaVuSans-6b\" x=\"100.390625\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"154.675781\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"216.199219\"/>\n <use xlink:href=\"#DejaVuSans-3a\" x=\"279.578125\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"313.269531\"/>\n <use xlink:href=\"#DejaVuSans-78\" x=\"345.056641\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_51\">\n <path d=\"M 45.478125 139.5 \nL 240.778125 139.5 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_52\">\n <defs>\n <path id=\"m673f3cc2aa\" d=\"M 0 0 \nL -3.5 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m673f3cc2aa\" x=\"45.478125\" y=\"139.5\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- $\\mathdefault{10^{0}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 143.299219) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_53\">\n <path d=\"M 45.478125 101.936282 \nL 240.778125 101.936282 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_54\">\n <g>\n <use xlink:href=\"#m673f3cc2aa\" x=\"45.478125\" y=\"101.936282\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- $\\mathdefault{10^{1}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 105.735501) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.684375)\"/>\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(128.203125 38.965625) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_55\">\n <path d=\"M 45.478125 64.372564 \nL 240.778125 64.372564 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_56\">\n <g>\n <use xlink:href=\"#m673f3cc2aa\" x=\"45.478125\" y=\"64.372564\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- $\\mathdefault{10^{2}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 68.171783) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_57\">\n <path d=\"M 45.478125 26.808846 \nL 240.778125 26.808846 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_58\">\n <g>\n <use xlink:href=\"#m673f3cc2aa\" x=\"45.478125\" y=\"26.808846\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- $\\mathdefault{10^{3}}$ -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 30.608065) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(0 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-30\" transform=\"translate(63.623047 0.765625)\"/>\n <use xlink:href=\"#DejaVuSans-33\" transform=\"translate(128.203125 39.046875) scale(0.7)\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_59\">\n <defs>\n <path id=\"md3a4a7234e\" d=\"M 0 0 \nL -2 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.6\"/>\n </defs>\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"145.318694\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_6\">\n <g id=\"line2d_60\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"143.1403\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_7\">\n <g id=\"line2d_61\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"141.218821\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_8\">\n <g id=\"line2d_62\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"128.192194\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_9\">\n <g id=\"line2d_63\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"121.577552\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_10\">\n <g id=\"line2d_64\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"116.884388\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_11\">\n <g id=\"line2d_65\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"113.244088\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_12\">\n <g id=\"line2d_66\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"110.269746\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_13\">\n <g id=\"line2d_67\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"107.754976\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_14\">\n <g id=\"line2d_68\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"105.576583\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_15\">\n <g id=\"line2d_69\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"103.655104\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_16\">\n <g id=\"line2d_70\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"90.628476\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_17\">\n <g id=\"line2d_71\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"84.013834\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_18\">\n <g id=\"line2d_72\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"79.32067\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_19\">\n <g id=\"line2d_73\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"75.68037\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_20\">\n <g id=\"line2d_74\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"72.706028\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_21\">\n <g id=\"line2d_75\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"70.191258\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_22\">\n <g id=\"line2d_76\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"68.012865\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_23\">\n <g id=\"line2d_77\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"66.091386\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_24\">\n <g id=\"line2d_78\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"53.064758\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_25\">\n <g id=\"line2d_79\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"46.450116\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_26\">\n <g id=\"line2d_80\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"41.756953\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_27\">\n <g id=\"line2d_81\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"38.116652\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_28\">\n <g id=\"line2d_82\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"35.14231\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_29\">\n <g id=\"line2d_83\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"32.62754\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_30\">\n <g id=\"line2d_84\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"30.449147\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_31\">\n <g id=\"line2d_85\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"28.527668\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_32\">\n <g id=\"line2d_86\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"15.501041\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_33\">\n <g id=\"line2d_87\">\n <g>\n <use xlink:href=\"#md3a4a7234e\" x=\"45.478125\" y=\"8.886398\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.6\"/>\n </g>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- frequency: n(x) -->\n <g style=\"fill: #ffffff\" transform=\"translate(14.798438 114.517188) rotate(-90) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-66\" d=\"M 2375 4863 \nL 2375 4384 \nL 1825 4384 \nQ 1516 4384 1395 4259 \nQ 1275 4134 1275 3809 \nL 1275 3500 \nL 2222 3500 \nL 2222 3053 \nL 1275 3053 \nL 1275 0 \nL 697 0 \nL 697 3053 \nL 147 3053 \nL 147 3500 \nL 697 3500 \nL 697 3744 \nQ 697 4328 969 4595 \nQ 1241 4863 1831 4863 \nL 2375 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-72\" d=\"M 2631 2963 \nQ 2534 3019 2420 3045 \nQ 2306 3072 2169 3072 \nQ 1681 3072 1420 2755 \nQ 1159 2438 1159 1844 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1341 3275 1631 3429 \nQ 1922 3584 2338 3584 \nQ 2397 3584 2469 3576 \nQ 2541 3569 2628 3553 \nL 2631 2963 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-71\" d=\"M 947 1747 \nQ 947 1113 1208 752 \nQ 1469 391 1925 391 \nQ 2381 391 2643 752 \nQ 2906 1113 2906 1747 \nQ 2906 2381 2643 2742 \nQ 2381 3103 1925 3103 \nQ 1469 3103 1208 2742 \nQ 947 2381 947 1747 \nz\nM 2906 525 \nQ 2725 213 2448 61 \nQ 2172 -91 1784 -91 \nQ 1150 -91 751 415 \nQ 353 922 353 1747 \nQ 353 2572 751 3078 \nQ 1150 3584 1784 3584 \nQ 2172 3584 2448 3432 \nQ 2725 3281 2906 2969 \nL 2906 3500 \nL 3481 3500 \nL 3481 -1331 \nL 2906 -1331 \nL 2906 525 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-75\" d=\"M 544 1381 \nL 544 3500 \nL 1119 3500 \nL 1119 1403 \nQ 1119 906 1312 657 \nQ 1506 409 1894 409 \nQ 2359 409 2629 706 \nQ 2900 1003 2900 1516 \nL 2900 3500 \nL 3475 3500 \nL 3475 0 \nL 2900 0 \nL 2900 538 \nQ 2691 219 2414 64 \nQ 2138 -91 1772 -91 \nQ 1169 -91 856 284 \nQ 544 659 544 1381 \nz\nM 1991 3584 \nL 1991 3584 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-63\" d=\"M 3122 3366 \nL 3122 2828 \nQ 2878 2963 2633 3030 \nQ 2388 3097 2138 3097 \nQ 1578 3097 1268 2742 \nQ 959 2388 959 1747 \nQ 959 1106 1268 751 \nQ 1578 397 2138 397 \nQ 2388 397 2633 464 \nQ 2878 531 3122 666 \nL 3122 134 \nQ 2881 22 2623 -34 \nQ 2366 -91 2075 -91 \nQ 1284 -91 818 406 \nQ 353 903 353 1747 \nQ 353 2603 823 3093 \nQ 1294 3584 2113 3584 \nQ 2378 3584 2631 3529 \nQ 2884 3475 3122 3366 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-79\" d=\"M 2059 -325 \nQ 1816 -950 1584 -1140 \nQ 1353 -1331 966 -1331 \nL 506 -1331 \nL 506 -850 \nL 844 -850 \nQ 1081 -850 1212 -737 \nQ 1344 -625 1503 -206 \nL 1606 56 \nL 191 3500 \nL 800 3500 \nL 1894 763 \nL 2988 3500 \nL 3597 3500 \nL 2059 -325 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-28\" d=\"M 1984 4856 \nQ 1566 4138 1362 3434 \nQ 1159 2731 1159 2009 \nQ 1159 1288 1364 580 \nQ 1569 -128 1984 -844 \nL 1484 -844 \nQ 1016 -109 783 600 \nQ 550 1309 550 2009 \nQ 550 2706 781 3412 \nQ 1013 4119 1484 4856 \nL 1984 4856 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-29\" d=\"M 513 4856 \nL 1013 4856 \nQ 1481 4119 1714 3412 \nQ 1947 2706 1947 2009 \nQ 1947 1309 1714 600 \nQ 1481 -109 1013 -844 \nL 513 -844 \nQ 928 -128 1133 580 \nQ 1338 1288 1338 2009 \nQ 1338 2731 1133 3434 \nQ 928 4138 513 4856 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-66\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"35.205078\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"74.068359\"/>\n <use xlink:href=\"#DejaVuSans-71\" x=\"135.591797\"/>\n <use xlink:href=\"#DejaVuSans-75\" x=\"199.068359\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"262.447266\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"323.970703\"/>\n <use xlink:href=\"#DejaVuSans-63\" x=\"387.349609\"/>\n <use xlink:href=\"#DejaVuSans-79\" x=\"442.330078\"/>\n <use xlink:href=\"#DejaVuSans-3a\" x=\"494.259766\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"527.951172\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"559.738281\"/>\n <use xlink:href=\"#DejaVuSans-28\" x=\"623.117188\"/>\n <use xlink:href=\"#DejaVuSans-78\" x=\"662.130859\"/>\n <use xlink:href=\"#DejaVuSans-29\" x=\"721.310547\"/>\n </g>\n </g>\n </g>\n <g id=\"line2d_88\">\n <path d=\"M -1 22.934991 \nL 54.355398 22.948175 \nL 66.297697 23.233932 \nL 73.283494 24.458034 \nL 78.239996 30.126092 \nL 82.084558 32.744485 \nL 85.225793 36.502574 \nL 87.88167 36.830949 \nL 90.182295 40.091237 \nL 94.026857 40.3137 \nL 95.668965 43.749961 \nL 97.168092 47.517487 \nL 98.547156 48.168938 \nL 101.012654 51.43591 \nL 102.124594 51.809238 \nL 103.169102 52.741704 \nL 104.15389 53.064758 \nL 105.085419 56.910265 \nL 105.969156 57.541843 \nL 106.809766 59.236831 \nL 107.611264 59.236831 \nL 108.377128 59.598035 \nL 109.110391 60.218404 \nL 109.813718 60.473311 \nL 110.489455 60.995394 \nL 111.139687 61.128568 \nL 112.37086 61.128568 \nL 113.519892 61.672409 \nL 114.066893 62.235006 \nL 114.597061 62.235006 \nL 115.111401 62.378741 \nL 115.61083 62.378741 \nL 116.096189 62.523752 \nL 116.568248 63.421982 \nL 117.027718 63.576615 \nL 117.475252 63.89035 \nL 117.911455 65.381982 \nL 118.752065 65.732828 \nL 119.157475 65.732828 \nL 119.553563 65.911122 \nL 119.94075 66.273664 \nL 121.407942 67.023852 \nL 122.097198 67.023852 \nL 122.431754 67.216916 \nL 122.759937 67.216916 \nL 123.081986 67.610036 \nL 123.708567 68.636395 \nL 124.013515 69.065728 \nL 124.313159 69.284707 \nL 124.897252 69.284707 \nL 126.009193 70.191258 \nL 126.53936 70.191258 \nL 126.798449 70.425992 \nL 127.553129 72.436374 \nL 128.038488 72.980215 \nL 128.276134 72.980215 \nL 128.510547 73.542812 \nL 128.970017 73.542812 \nL 129.417551 74.42485 \nL 129.637033 74.42485 \nL 130.898262 76.009951 \nL 131.690544 76.009951 \nL 131.883049 76.346328 \nL 132.073428 76.346328 \nL 132.261726 76.689788 \nL 132.447988 76.689788 \nL 132.632259 77.040634 \nL 133.173531 77.040634 \nL 133.350241 77.399192 \nL 133.525158 77.399192 \nL 133.869751 78.140852 \nL 134.207587 78.140852 \nL 134.374053 78.524722 \nL 134.538926 78.524722 \nL 134.864013 79.32067 \nL 135.340424 79.32067 \nL 135.650867 80.157455 \nL 135.804015 80.157455 \nL 135.955814 80.592513 \nL 136.54998 80.592513 \nL 136.695374 81.039492 \nL 137.40449 81.039492 \nL 137.542877 81.499064 \nL 138.085571 81.499064 \nL 138.218615 81.971958 \nL 138.868847 81.971958 \nL 138.995999 82.458971 \nL 139.247523 82.458971 \nL 139.371922 82.960971 \nL 139.860723 82.960971 \nL 139.980787 83.47891 \nL 140.218433 83.47891 \nL 140.336039 84.013834 \nL 140.568868 84.013834 \nL 140.684113 84.566894 \nL 140.798592 84.566894 \nL 141.025294 85.139364 \nL 141.469941 85.139364 \nL 141.688034 85.732655 \nL 142.010082 85.732655 \nL 142.221485 86.34834 \nL 142.738914 86.34834 \nL 142.941611 86.988176 \nL 143.141952 86.988176 \nL 143.33999 87.654134 \nL 143.632843 87.654134 \nL 143.825349 88.34844 \nL 144.204025 88.34844 \nL 144.390288 89.073613 \nL 145.204412 89.073613 \nL 145.380221 89.832527 \nL 145.981796 89.832527 \nL 146.149886 90.628476 \nL 147.046164 90.628476 \nL 147.204231 91.46526 \nL 147.898113 91.46526 \nL 148.048587 92.347298 \nL 148.271861 92.347298 \nL 148.419119 93.279764 \nL 148.924831 93.279764 \nL 149.066635 94.268777 \nL 150.160914 94.268777 \nL 150.292938 95.32164 \nL 150.938298 95.32164 \nL 151.064519 96.44717 \nL 151.803022 96.44717 \nL 151.923086 97.656146 \nL 153.246839 97.656146 \nL 153.41224 98.96194 \nL 154.163784 98.96194 \nL 154.320651 100.381419 \nL 155.767648 100.381419 \nL 155.910629 101.936282 \nL 157.496553 101.936282 \nL 157.625933 103.655104 \nL 159.107149 103.655104 \nL 159.225022 105.576583 \nL 161.427476 105.576583 \nL 161.56476 107.754976 \nL 164.103032 107.754976 \nL 164.220637 110.269746 \nL 166.674411 110.269746 \nL 166.801003 113.244088 \nL 170.013563 113.244088 \nL 170.138714 116.884388 \nL 174.078613 116.884388 \nL 174.193969 121.577552 \nL 179.386992 121.577552 \nL 179.508069 128.192194 \nL 186.804739 128.192194 \nL 186.922828 139.5 \nL 199.579747 139.5 \nL 199.579747 139.5 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_89\">\n <path d=\"M -1 55.798556 \nL 54.355398 55.812292 \nL 73.283494 62.523752 \nL 78.239996 62.966686 \nL 82.084558 64.04951 \nL 85.225793 64.536523 \nL 87.88167 67.023852 \nL 90.182295 68.425892 \nL 92.21159 69.506666 \nL 94.026857 70.664152 \nL 95.668965 70.905841 \nL 97.168092 72.171104 \nL 98.547156 72.436374 \nL 99.823969 72.436374 \nL 101.012654 72.706028 \nL 102.124594 75.357316 \nL 103.169102 75.357316 \nL 104.15389 76.009951 \nL 105.085419 76.009951 \nL 105.969156 76.689788 \nL 106.809766 76.689788 \nL 108.377128 77.399192 \nL 109.813718 77.399192 \nL 110.489455 77.765807 \nL 111.139687 77.765807 \nL 111.766268 78.917842 \nL 112.37086 79.32067 \nL 112.954953 79.32067 \nL 113.519892 79.733698 \nL 115.111401 79.733698 \nL 115.61083 80.592513 \nL 116.096189 81.039492 \nL 117.027718 81.039492 \nL 117.475252 81.971958 \nL 118.336886 81.971958 \nL 118.752065 82.960971 \nL 119.157475 82.960971 \nL 119.94075 84.013834 \nL 121.052691 84.013834 \nL 121.756017 85.139364 \nL 122.431754 85.139364 \nL 122.759937 85.732655 \nL 123.708567 85.732655 \nL 124.013515 86.34834 \nL 124.607681 86.34834 \nL 124.897252 86.988176 \nL 125.462191 86.988176 \nL 125.737863 87.654134 \nL 126.53936 87.654134 \nL 126.798449 88.34844 \nL 127.553129 88.34844 \nL 127.797518 89.073613 \nL 129.637033 89.073613 \nL 129.853754 89.832527 \nL 130.898262 89.832527 \nL 131.099774 90.628476 \nL 131.495862 90.628476 \nL 131.690544 91.46526 \nL 133.173531 91.46526 \nL 133.350241 92.347298 \nL 134.538926 92.347298 \nL 134.702236 93.279764 \nL 135.18308 93.279764 \nL 135.340424 94.268777 \nL 137.542877 94.268777 \nL 137.680162 95.32164 \nL 139.980787 95.32164 \nL 140.10002 96.44717 \nL 141.796053 96.44717 \nL 142.010082 97.656146 \nL 143.535777 97.656146 \nL 143.729364 98.96194 \nL 145.292541 98.96194 \nL 145.467457 100.381419 \nL 147.438644 100.381419 \nL 147.593166 101.936282 \nL 150.489097 101.936282 \nL 150.61864 103.655104 \nL 152.854615 103.655104 \nL 152.967594 105.576583 \nL 156.099442 105.576583 \nL 156.239707 107.754976 \nL 159.458377 107.754976 \nL 159.57388 110.269746 \nL 163.225504 110.269746 \nL 163.349233 113.244088 \nL 167.82918 113.244088 \nL 167.947593 116.884388 \nL 174.128146 116.884388 \nL 174.243171 121.577552 \nL 182.205262 121.577552 \nL 182.318375 128.192194 \nL 195.477351 128.192194 \nL 195.591578 139.5 \nL 225.183092 139.5 \nL 225.183092 139.5 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #bf00bf; stroke-width: 1.5\"/>\n </g>\n <g id=\"line2d_90\">\n <path d=\"M -1 83.998438 \nL 54.355398 84.013834 \nL 66.297697 87.654134 \nL 73.283494 94.268777 \nL 78.239996 95.32164 \nL 82.084558 95.32164 \nL 85.225793 96.44717 \nL 87.88167 96.44717 \nL 90.182295 97.656146 \nL 92.21159 97.656146 \nL 94.026857 98.96194 \nL 98.547156 98.96194 \nL 99.823969 100.381419 \nL 105.969156 100.381419 \nL 106.809766 101.936282 \nL 109.813718 101.936282 \nL 110.489455 103.655104 \nL 114.066893 103.655104 \nL 114.597061 105.576583 \nL 121.052691 105.576583 \nL 121.407942 107.754976 \nL 126.276316 107.754976 \nL 126.53936 110.269746 \nL 132.632259 110.269746 \nL 132.814579 113.244088 \nL 140.568868 113.244088 \nL 140.684113 116.884388 \nL 148.271861 116.884388 \nL 148.419119 121.577552 \nL 160.652212 121.577552 \nL 160.795788 128.192194 \nL 181.787567 128.192194 \nL 181.903446 139.5 \nL 231.900852 139.5 \nL 231.900852 139.5 \n\" clip-path=\"url(#p000c6e7d8a)\" style=\"fill: none; stroke-dasharray: 9.6,2.4,1.5,2.4; stroke-dashoffset: 0; stroke: #008000; stroke-width: 1.5\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 45.478125 145.8 \nL 45.478125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 240.778125 145.8 \nL 240.778125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 45.478125 145.8 \nL 240.778125 145.8 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 45.478125 7.2 \nL 240.778125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"legend_1\">\n <g id=\"patch_7\">\n <path d=\"M 159.996875 59.234375 \nL 233.778125 59.234375 \nQ 235.778125 59.234375 235.778125 57.234375 \nL 235.778125 14.2 \nQ 235.778125 12.2 233.778125 12.2 \nL 159.996875 12.2 \nQ 157.996875 12.2 157.996875 14.2 \nL 157.996875 57.234375 \nQ 157.996875 59.234375 159.996875 59.234375 \nz\n\" style=\"opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n </g>\n <g id=\"line2d_91\">\n <path d=\"M 161.996875 20.298438 \nL 171.996875 20.298438 \nL 181.996875 20.298438 \n\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"text_12\">\n <!-- unigram -->\n <g style=\"fill: #ffffff\" transform=\"translate(189.996875 23.798438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-69\" d=\"M 603 3500 \nL 1178 3500 \nL 1178 0 \nL 603 0 \nL 603 3500 \nz\nM 603 4863 \nL 1178 4863 \nL 1178 4134 \nL 603 4134 \nL 603 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-67\" d=\"M 2906 1791 \nQ 2906 2416 2648 2759 \nQ 2391 3103 1925 3103 \nQ 1463 3103 1205 2759 \nQ 947 2416 947 1791 \nQ 947 1169 1205 825 \nQ 1463 481 1925 481 \nQ 2391 481 2648 825 \nQ 2906 1169 2906 1791 \nz\nM 3481 434 \nQ 3481 -459 3084 -895 \nQ 2688 -1331 1869 -1331 \nQ 1566 -1331 1297 -1286 \nQ 1028 -1241 775 -1147 \nL 775 -588 \nQ 1028 -725 1275 -790 \nQ 1522 -856 1778 -856 \nQ 2344 -856 2625 -561 \nQ 2906 -266 2906 331 \nL 2906 616 \nQ 2728 306 2450 153 \nQ 2172 0 1784 0 \nQ 1141 0 747 490 \nQ 353 981 353 1791 \nQ 353 2603 747 3093 \nQ 1141 3584 1784 3584 \nQ 2172 3584 2450 3431 \nQ 2728 3278 2906 2969 \nL 2906 3500 \nL 3481 3500 \nL 3481 434 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-61\" d=\"M 2194 1759 \nQ 1497 1759 1228 1600 \nQ 959 1441 959 1056 \nQ 959 750 1161 570 \nQ 1363 391 1709 391 \nQ 2188 391 2477 730 \nQ 2766 1069 2766 1631 \nL 2766 1759 \nL 2194 1759 \nz\nM 3341 1997 \nL 3341 0 \nL 2766 0 \nL 2766 531 \nQ 2569 213 2275 61 \nQ 1981 -91 1556 -91 \nQ 1019 -91 701 211 \nQ 384 513 384 1019 \nQ 384 1609 779 1909 \nQ 1175 2209 1959 2209 \nL 2766 2209 \nL 2766 2266 \nQ 2766 2663 2505 2880 \nQ 2244 3097 1772 3097 \nQ 1472 3097 1187 3025 \nQ 903 2953 641 2809 \nL 641 3341 \nQ 956 3463 1253 3523 \nQ 1550 3584 1831 3584 \nQ 2591 3584 2966 3190 \nQ 3341 2797 3341 1997 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6d\" d=\"M 3328 2828 \nQ 3544 3216 3844 3400 \nQ 4144 3584 4550 3584 \nQ 5097 3584 5394 3201 \nQ 5691 2819 5691 2113 \nL 5691 0 \nL 5113 0 \nL 5113 2094 \nQ 5113 2597 4934 2840 \nQ 4756 3084 4391 3084 \nQ 3944 3084 3684 2787 \nQ 3425 2491 3425 1978 \nL 3425 0 \nL 2847 0 \nL 2847 2094 \nQ 2847 2600 2669 2842 \nQ 2491 3084 2119 3084 \nQ 1678 3084 1418 2786 \nQ 1159 2488 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1356 3278 1631 3431 \nQ 1906 3584 2284 3584 \nQ 2666 3584 2933 3390 \nQ 3200 3197 3328 2828 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-75\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"63.378906\"/>\n <use xlink:href=\"#DejaVuSans-69\" x=\"126.757812\"/>\n <use xlink:href=\"#DejaVuSans-67\" x=\"154.541016\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"218.017578\"/>\n <use xlink:href=\"#DejaVuSans-61\" x=\"259.130859\"/>\n <use xlink:href=\"#DejaVuSans-6d\" x=\"320.410156\"/>\n </g>\n </g>\n <g id=\"line2d_92\">\n <path d=\"M 161.996875 34.976563 \nL 171.996875 34.976563 \nL 181.996875 34.976563 \n\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #bf00bf; stroke-width: 1.5\"/>\n </g>\n <g id=\"text_13\">\n <!-- bigram -->\n <g style=\"fill: #ffffff\" transform=\"translate(189.996875 38.476563) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-62\" d=\"M 3116 1747 \nQ 3116 2381 2855 2742 \nQ 2594 3103 2138 3103 \nQ 1681 3103 1420 2742 \nQ 1159 2381 1159 1747 \nQ 1159 1113 1420 752 \nQ 1681 391 2138 391 \nQ 2594 391 2855 752 \nQ 3116 1113 3116 1747 \nz\nM 1159 2969 \nQ 1341 3281 1617 3432 \nQ 1894 3584 2278 3584 \nQ 2916 3584 3314 3078 \nQ 3713 2572 3713 1747 \nQ 3713 922 3314 415 \nQ 2916 -91 2278 -91 \nQ 1894 -91 1617 61 \nQ 1341 213 1159 525 \nL 1159 0 \nL 581 0 \nL 581 4863 \nL 1159 4863 \nL 1159 2969 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-62\"/>\n <use xlink:href=\"#DejaVuSans-69\" x=\"63.476562\"/>\n <use xlink:href=\"#DejaVuSans-67\" x=\"91.259766\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"154.736328\"/>\n <use xlink:href=\"#DejaVuSans-61\" x=\"195.849609\"/>\n <use xlink:href=\"#DejaVuSans-6d\" x=\"257.128906\"/>\n </g>\n </g>\n <g id=\"line2d_93\">\n <path d=\"M 161.996875 49.654688 \nL 171.996875 49.654688 \nL 181.996875 49.654688 \n\" style=\"fill: none; stroke-dasharray: 9.6,2.4,1.5,2.4; stroke-dashoffset: 0; stroke: #008000; stroke-width: 1.5\"/>\n </g>\n <g id=\"text_14\">\n <!-- trigram -->\n <g style=\"fill: #ffffff\" transform=\"translate(189.996875 53.154688) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-74\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"39.208984\"/>\n <use xlink:href=\"#DejaVuSans-69\" x=\"80.322266\"/>\n <use xlink:href=\"#DejaVuSans-67\" x=\"108.105469\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"171.582031\"/>\n <use xlink:href=\"#DejaVuSans-61\" x=\"212.695312\"/>\n <use xlink:href=\"#DejaVuSans-6d\" x=\"273.974609\"/>\n </g>\n </g>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p000c6e7d8a\">\n <rect x=\"45.478125\" y=\"7.2\" width=\"195.3\" height=\"138.6\"/>\n </clipPath>\n </defs>\n</svg>\n"
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 103
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.196704442Z",
"start_time": "2026-04-22T07:03:26.148119411Z"
}
},
"cell_type": "code",
"source": [
"import random\n",
"def seq_data_iter_random(corpus, batch_size, num_steps): #@save\n",
" \"\"\"使用随机抽样生成一个小批量子序列\"\"\"\n",
" # 从随机偏移量开始对序列进行分区随机范围包括num_steps-1\n",
" corpus = corpus[random.randint(0, num_steps - 1):]\n",
" # 减去1是因为我们需要考虑标签\n",
" num_subseqs = (len(corpus) - 1) // num_steps\n",
" # 长度为num_steps的子序列的起始索引\n",
" initial_indices = list(range(0, num_subseqs * num_steps, num_steps))\n",
" # 在随机抽样的迭代过程中,\n",
" # 来自两个相邻的、随机的、小批量中的子序列不一定在原始序列上相邻\n",
" random.shuffle(initial_indices)\n",
" def data(pos):\n",
" # 返回从pos位置开始的长度为num_steps的序列\n",
" return corpus[pos: pos + num_steps]\n",
" num_batches = num_subseqs // batch_size\n",
" for i in range(0, batch_size * num_batches, batch_size):\n",
" # 在这里initial_indices包含子序列的随机起始索引\n",
" initial_indices_per_batch = initial_indices[i: i + batch_size]\n",
" X = [data(j) for j in initial_indices_per_batch]\n",
" Y = [data(j + 1) for j in initial_indices_per_batch]\n",
" yield torch.tensor(X), torch.tensor(Y)"
],
"id": "fd015793938b83ab",
"outputs": [],
"execution_count": 104
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.251762886Z",
"start_time": "2026-04-22T07:03:26.199184612Z"
}
},
"cell_type": "code",
"source": [
"my_seq = list(range(35))\n",
"for X, Y in seq_data_iter_random(my_seq, batch_size=2, num_steps=5):\n",
" print('X: ', X, '\\nY:', Y)"
],
"id": "8961f4934b8c7cc",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X: tensor([[ 3, 4, 5, 6, 7],\n",
" [28, 29, 30, 31, 32]]) \n",
"Y: tensor([[ 4, 5, 6, 7, 8],\n",
" [29, 30, 31, 32, 33]])\n",
"X: tensor([[23, 24, 25, 26, 27],\n",
" [ 8, 9, 10, 11, 12]]) \n",
"Y: tensor([[24, 25, 26, 27, 28],\n",
" [ 9, 10, 11, 12, 13]])\n",
"X: tensor([[18, 19, 20, 21, 22],\n",
" [13, 14, 15, 16, 17]]) \n",
"Y: tensor([[19, 20, 21, 22, 23],\n",
" [14, 15, 16, 17, 18]])\n"
]
}
],
"execution_count": 105
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.315745320Z",
"start_time": "2026-04-22T07:03:26.265138594Z"
}
},
"cell_type": "code",
"source": [
"def seq_data_iter_sequential(corpus, batch_size, num_steps): #@save\n",
" \"\"\"使用顺序分区生成一个小批量子序列\"\"\"\n",
" # 从随机偏移量开始划分序列\n",
" offset = random.randint(0, num_steps)\n",
" num_tokens = ((len(corpus) - offset - 1) // batch_size) * batch_size\n",
" Xs = torch.tensor(corpus[offset: offset + num_tokens])\n",
" Ys = torch.tensor(corpus[offset + 1: offset + 1 + num_tokens])\n",
" Xs, Ys = Xs.reshape(batch_size, -1), Ys.reshape(batch_size, -1)\n",
" num_batches = Xs.shape[1] // num_steps\n",
" for i in range(0, num_steps * num_batches, num_steps):\n",
" X = Xs[:, i: i + num_steps]\n",
" Y = Ys[:, i: i + num_steps]\n",
" yield X, Y"
],
"id": "621b66c0614b22da",
"outputs": [],
"execution_count": 106
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.366004915Z",
"start_time": "2026-04-22T07:03:26.318858875Z"
}
},
"cell_type": "code",
"source": [
"class SeqDataLoader:\n",
" \"\"\"加载序列数据的迭代器\"\"\"\n",
" def __init__(self, batch_size, num_steps, use_random_iter, max_tokens):\n",
" if use_random_iter:\n",
" self.data_iter_fn = seq_data_iter_random\n",
" else:\n",
" self.data_iter_fn = seq_data_iter_sequential\n",
" self.corpus, self.vocab = load_corpus_time_machine(max_tokens)\n",
" self.batch_size, self.num_steps = batch_size, num_steps\n",
" def __iter__(self):\n",
" return self.data_iter_fn(self.corpus, self.batch_size, self.num_steps)\n",
"def load_data_time_machine(batch_size, num_steps, #@save\n",
" use_random_iter=False, max_tokens=10000):\n",
" \"\"\"返回时光机器数据集的迭代器和词表\"\"\"\n",
" data_iter = SeqDataLoader(\n",
" batch_size, num_steps, use_random_iter, max_tokens)\n",
" return data_iter, data_iter.vocab"
],
"id": "f09fe2507a925fe9",
"outputs": [],
"execution_count": 107
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.415821442Z",
"start_time": "2026-04-22T07:03:26.368476221Z"
}
},
"cell_type": "code",
"source": [
"batch_size, num_steps = 32, 35\n",
"train_iter, vocab = load_data_time_machine(batch_size, num_steps)"
],
"id": "69272a664d3b9ae1",
"outputs": [],
"execution_count": 108
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.469093543Z",
"start_time": "2026-04-22T07:03:26.417213406Z"
}
},
"cell_type": "code",
"source": "F.one_hot(torch.tensor([0,2]),len(vocab))",
"id": "35806d36e5ec3ca7",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0],\n",
" [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0]])"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 109
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.612564439Z",
"start_time": "2026-04-22T07:03:26.520392652Z"
}
},
"cell_type": "code",
"source": [
"X = torch.arange(10).reshape((2, 5))\n",
"F.one_hot(X.T, 28).shape"
],
"id": "6a4695284b898013",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([5, 2, 28])"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 110
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.703519372Z",
"start_time": "2026-04-22T07:03:26.641662463Z"
}
},
"cell_type": "code",
"source": [
"def get_params(vocab_size, num_hiddens, device):\n",
" num_inputs = num_outputs = vocab_size\n",
" def normal(shape):\n",
" return torch.randn(size=shape, device=device) * 0.01\n",
" # 隐藏层参数\n",
" W_xh = normal((num_inputs, num_hiddens))\n",
" W_hh = normal((num_hiddens, num_hiddens))\n",
" b_h = torch.zeros(num_hiddens, device=device)\n",
" # 输出层参数\n",
" W_hq = normal((num_hiddens, num_outputs))\n",
" b_q = torch.zeros(num_outputs, device=device)\n",
" # 附加梯度\n",
" params = [W_xh, W_hh, b_h, W_hq, b_q]\n",
" '''\n",
" W_xh x->H_t\n",
" W_hh H_t-1->H_t\n",
" W_hq H_t->opt\n",
" '''\n",
" for param in params:\n",
" param.requires_grad_(True)\n",
" return params\n",
"def init_rnn_state(batch_size, num_hiddens, device):\n",
" return (torch.zeros((batch_size, num_hiddens), device=device), )\n",
"def rnn(inputs,state,params):\n",
" W_xh,W_hh,b_h,W_hq,b_q = params\n",
" H, = state\n",
" outputs = []\n",
" for X in inputs: # X (batchs,vocab)\n",
" H = torch.tanh(torch.mm(X,W_xh)+torch.mm(H,W_hh)+b_h)\n",
" Y = torch.mm(H,W_hq)+b_q\n",
" outputs.append(Y)\n",
" return torch.cat(outputs,dim=0),(H,)\n",
"class RNNModelScratch: #@save\n",
" \"\"\"从零开始实现的循环神经网络模型\"\"\"\n",
" def __init__(self, vocab_size, num_hiddens, device,\n",
" get_params, init_state, forward_fn):\n",
" self.vocab_size, self.num_hiddens = vocab_size, num_hiddens\n",
" self.params = get_params(vocab_size, num_hiddens, device)\n",
" self.init_state, self.forward_fn = init_state, forward_fn\n",
" def __call__(self, X, state):\n",
" X = F.one_hot(X.T, self.vocab_size).type(torch.float32)\n",
" return self.forward_fn(X, state, self.params)\n",
" def begin_state(self, batch_size, device):\n",
" return self.init_state(batch_size, self.num_hiddens, device)"
],
"id": "405f7c6af8bdd939",
"outputs": [],
"execution_count": 111
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.793241936Z",
"start_time": "2026-04-22T07:03:26.704490837Z"
}
},
"cell_type": "code",
"source": [
"num_hiddens = 512\n",
"net = RNNModelScratch(len(vocab), num_hiddens, d2l.try_gpu(), get_params,\n",
"init_rnn_state, rnn)\n",
"state = net.begin_state(X.shape[0], d2l.try_gpu())\n",
"Y, new_state = net(X.to(d2l.try_gpu()), state)\n",
"Y.shape, len(new_state), new_state[0].shape"
],
"id": "7bdd0b37b1458ec2",
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([10, 28]), 1, torch.Size([2, 512]))"
]
},
"execution_count": 112,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 112
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.859603241Z",
"start_time": "2026-04-22T07:03:26.795131832Z"
}
},
"cell_type": "code",
"source": [
"def predict_ch8(prefix, num_preds, net, vocab, device): #@save\n",
" \"\"\"在prefix后面生成新字符\"\"\"\n",
" state = net.begin_state(batch_size=1, device=device)\n",
" outputs = [vocab[prefix[0]]]\n",
" get_input = lambda: torch.tensor([outputs[-1]], device=device).reshape((1, 1))\n",
" for y in prefix[1:]: # 预热期\n",
" _, state = net(get_input(), state)\n",
" outputs.append(vocab[y])\n",
" for _ in range(num_preds): # 预测num_preds步\n",
" y, state = net(get_input(), state)\n",
" outputs.append(int(y.argmax(dim=1).reshape(1)))\n",
" return ''.join([vocab.idx_to_token[i] for i in outputs])\n",
"predict_ch8('time traveller ', 10, net, vocab, d2l.try_gpu())"
],
"id": "f38dbe2b11e02bc2",
"outputs": [
{
"data": {
"text/plain": [
"'time traveller v<unk>xmpussss'"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 113
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.909151706Z",
"start_time": "2026-04-22T07:03:26.861214463Z"
}
},
"cell_type": "code",
"source": [
"def grad_clipping(net, theta): #@save\n",
" \"\"\"裁剪梯度\"\"\"\n",
" if isinstance(net, nn.Module):\n",
" params = [p for p in net.parameters() if p.requires_grad]\n",
" else:\n",
" params = net.params\n",
" norm = torch.sqrt(sum(torch.sum((p.grad ** 2)) for p in params))\n",
" if norm > theta:\n",
" for param in params:\n",
" param.grad[:] *= theta / norm"
],
"id": "6c19717736ffbc68",
"outputs": [],
"execution_count": 114
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:26.964267753Z",
"start_time": "2026-04-22T07:03:26.913802768Z"
}
},
"cell_type": "code",
"source": [
"import math\n",
"def train_epoch_ch8(net, train_iter, loss, updater, device, use_random_iter):\n",
" \"\"\"训练网络一个迭代周期定义见第8章\"\"\"\n",
" state, timer = None, d2l.Timer()\n",
" metric = d2l.Accumulator(2) # 训练损失之和,词元数量\n",
" for X, Y in train_iter:\n",
" if state is None or use_random_iter:\n",
" # 在第一次迭代或使用随机抽样时初始化state\n",
" state = net.begin_state(batch_size=X.shape[0], device=device)\n",
" else:\n",
" if isinstance(net, nn.Module) and not isinstance(state, tuple):\n",
" # state对于nn.GRU是个张量\n",
" state.detach_()\n",
" else:\n",
" # state对于nn.LSTM或对于我们从零开始实现的模型是个张量\n",
" for s in state:\n",
" s.detach_()\n",
" y = Y.T.reshape(-1)\n",
" X, y = X.to(device), y.to(device)\n",
" y_hat, state = net(X, state)\n",
" l = loss(y_hat, y.long()).mean()\n",
" if isinstance(updater, torch.optim.Optimizer):\n",
" updater.zero_grad()\n",
" l.backward()\n",
" grad_clipping(net, 1)\n",
" updater.step()\n",
" else:\n",
" l.backward()\n",
" grad_clipping(net, 1)\n",
" # 因为已经调用了mean函数\n",
" updater(batch_size=1)\n",
" metric.add(l * y.numel(), y.numel())\n",
" return math.exp(metric[0]/metric[1]),metric[1]/timer.stop()\n"
],
"id": "37ef611dedcb714b",
"outputs": [],
"execution_count": 115
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.028276769Z",
"start_time": "2026-04-22T07:03:26.966889257Z"
}
},
"cell_type": "code",
"source": [
"def train_ch8(net, train_iter, vocab, lr, num_epochs, device,\n",
"use_random_iter=False):\n",
" \"\"\"训练模型定义见第8章\"\"\"\n",
" loss = nn.CrossEntropyLoss()\n",
" animator = d2l.Animator(xlabel='epoch', ylabel='perplexity',\n",
" legend=['train'], xlim=[10, num_epochs])\n",
" # 初始化\n",
" if isinstance(net, nn.Module):\n",
" updater = torch.optim.SGD(net.parameters(), lr)\n",
" else:\n",
" updater = lambda batch_size: d2l.sgd(net.params, lr, batch_size)\n",
" predict = lambda prefix: predict_ch8(prefix, 50, net, vocab, device)\n",
" # 训练和预测\n",
" for epoch in range(num_epochs):\n",
" ppl, speed = train_epoch_ch8(\n",
" net, train_iter, loss, updater, device, use_random_iter)\n",
" if (epoch + 1) % 10 == 0:\n",
" print(predict('time traveller'))\n",
" animator.add(epoch + 1, [ppl])\n",
" print(f'困惑度 {ppl:.1f}, {speed:.1f} 词元/秒 {str(device)}')\n",
" print(predict('time traveller'))\n",
" print(predict('traveller'))"
],
"id": "c96b60b55664378a",
"outputs": [],
"execution_count": 116
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.077729796Z",
"start_time": "2026-04-22T07:03:27.030591268Z"
}
},
"cell_type": "code",
"source": [
"num_epochs, lr = 500, 1\n",
"#train_ch8(net, train_iter, vocab, lr, num_epochs, d2l.try_gpu())"
],
"id": "ab4a2fbf4dfd21ef",
"outputs": [],
"execution_count": 117
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.135654266Z",
"start_time": "2026-04-22T07:03:27.079991786Z"
}
},
"cell_type": "code",
"source": [
"batch_size, num_steps = 32, 35\n",
"train_iter, vocab = load_data_time_machine(batch_size, num_steps)"
],
"id": "74d672745751714",
"outputs": [],
"execution_count": 118
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.595345257Z",
"start_time": "2026-04-22T07:03:27.137667402Z"
}
},
"cell_type": "code",
"source": [
"num_hiddens = 256\n",
"rnn_layer = nn.RNN(len(vocab), num_hiddens)\n",
"state = torch.zeros((1,batch_size,num_hiddens))\n",
"X = torch.rand(size=(num_steps, batch_size, len(vocab)))\n",
"Y, state_new = rnn_layer(X, state)\n",
"Y.shape, state_new.shape"
],
"id": "9694c029c9e657e8",
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([35, 32, 256]), torch.Size([1, 32, 256]))"
]
},
"execution_count": 119,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 119
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.653466458Z",
"start_time": "2026-04-22T07:03:27.598468205Z"
}
},
"cell_type": "code",
"source": [
"class RNNModel(nn.Module):\n",
" \"\"\"循环神经网络模型\"\"\"\n",
" def __init__(self, rnn_layer, vocab_size, **kwargs):\n",
" super(RNNModel, self).__init__(**kwargs)\n",
" self.rnn = rnn_layer\n",
" self.vocab_size = vocab_size\n",
" self.num_hiddens = self.rnn.hidden_size\n",
" # 如果RNN是双向的之后将介绍num_directions应该是2否则应该是1\n",
" if not self.rnn.bidirectional:\n",
" self.num_directions = 1\n",
" self.linear = nn.Linear(self.num_hiddens, self.vocab_size)\n",
" else:\n",
" self.num_directions = 2\n",
" self.linear = nn.Linear(self.num_hiddens * 2, self.vocab_size)\n",
" def forward(self, inputs, state):\n",
" X = F.one_hot(inputs.T.long(), self.vocab_size)\n",
" X = X.to(torch.float32)\n",
" Y, state = self.rnn(X, state)\n",
" # 全连接层首先将Y的形状改为(时间步数*批量大小,隐藏单元数)\n",
" # 它的输出形状是(时间步数*批量大小,词表大小)。\n",
" output = self.linear(Y.reshape((-1, Y.shape[-1])))\n",
" return output, state\n",
" def begin_state(self, device, batch_size=1):\n",
" if not isinstance(self.rnn, nn.LSTM):\n",
" # nn.GRU以张量作为隐状态\n",
" return torch.zeros((self.num_directions * self.rnn.num_layers,\n",
" batch_size, self.num_hiddens),\n",
" device=device)\n",
" else:\n",
" # nn.LSTM以元组作为隐状态\n",
" return (torch.zeros((\n",
" self.num_directions * self.rnn.num_layers,\n",
" batch_size, self.num_hiddens), device=device),\n",
" torch.zeros((\n",
" self.num_directions * self.rnn.num_layers,\n",
" batch_size, self.num_hiddens), device=device))"
],
"id": "858873034be01538",
"outputs": [],
"execution_count": 120
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.712481585Z",
"start_time": "2026-04-22T07:03:27.663190923Z"
}
},
"cell_type": "code",
"source": [
"device = d2l.try_gpu()\n",
"net = RNNModel(rnn_layer, vocab_size=len(vocab))\n",
"net = net.to(device)\n",
"#predict_ch8('time traveller', 10, net, vocab, device)"
],
"id": "d59c1599998c8fd4",
"outputs": [],
"execution_count": 121
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.761031426Z",
"start_time": "2026-04-22T07:03:27.714738716Z"
}
},
"cell_type": "code",
"source": [
"vocab_size, num_hiddens, device = len(vocab), 256, d2l.try_gpu()\n",
"num_inputs = vocab_size\n",
"gru_layer = nn.GRU(num_inputs, num_hiddens)\n",
"model = RNNModel(gru_layer, len(vocab))\n",
"model = model.to(device)\n",
"#train_ch8(model, train_iter, vocab, lr, num_epochs, device)"
],
"id": "adda23bc3664ec6b",
"outputs": [],
"execution_count": 122
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.809310056Z",
"start_time": "2026-04-22T07:03:27.763581864Z"
}
},
"cell_type": "code",
"source": [
"num_inputs = vocab_size\n",
"lstm_layer = nn.LSTM(num_inputs, num_hiddens)\n",
"model = RNNModel(lstm_layer, len(vocab))\n",
"model = model.to(device)\n",
"#train_ch8(model, train_iter, vocab, lr, num_epochs, device)"
],
"id": "b4e30d643d6f755d",
"outputs": [],
"execution_count": 123
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.856847550Z",
"start_time": "2026-04-22T07:03:27.811694587Z"
}
},
"cell_type": "code",
"source": [
"d2l.DATA_HUB['fra-eng'] = (d2l.DATA_URL + 'fra-eng.zip',\n",
" '94646ad1522d915e7b0f9296181140edcf86a4f5')"
],
"id": "50554e839be36011",
"outputs": [],
"execution_count": 124
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.906829883Z",
"start_time": "2026-04-22T07:03:27.859224691Z"
}
},
"cell_type": "code",
"source": [
"import os\n",
"def read_data_nmt():\n",
" \"\"\"载入“英语-法语”数据集\"\"\"\n",
" data_dir = d2l.download_extract('fra-eng')\n",
" print(data_dir)\n",
" with open(os.path.join(data_dir, 'fra.txt'), 'r',\n",
" encoding='utf-8') as f:\n",
" return f.read()"
],
"id": "9cd4287ed84db220",
"outputs": [],
"execution_count": 125
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:27.980494182Z",
"start_time": "2026-04-22T07:03:27.909008466Z"
}
},
"cell_type": "code",
"source": [
"raw_text = read_data_nmt()\n",
"print(raw_text[:75])"
],
"id": "7c4452b3b6a32f91",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"../data/fra-eng\n",
"Go.\tVa !\n",
"Hi.\tSalut !\n",
"Run!\tCours!\n",
"Run!\tCourez!\n",
"Who?\tQui ?\n",
"Wow!\tÇa alors!\n",
"\n"
]
}
],
"execution_count": 126
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:29.415816650Z",
"start_time": "2026-04-22T07:03:27.981645004Z"
}
},
"cell_type": "code",
"source": [
"def preprocess_nmt(text):\n",
" def no_space(char,prev_char):\n",
" return char in set(',.!?') and prev_char != ' '\n",
" text = text.replace('\\u202f',' ').replace('\\xa0',' ').lower()\n",
" out = [' ' + char if i >0 and no_space(char,text[i-1]) else char for i,char in enumerate(text)]\n",
" return ''.join(out)\n",
"text = preprocess_nmt(raw_text)\n",
"print(text[:80])"
],
"id": "1c729da265572287",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"go .\tva !\n",
"hi .\tsalut !\n",
"run !\tcours !\n",
"run !\tcourez !\n",
"who ?\tqui ?\n",
"wow !\tça alors !\n"
]
}
],
"execution_count": 127
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:30.160936469Z",
"start_time": "2026-04-22T07:03:30.102689660Z"
}
},
"cell_type": "code",
"source": [
"def tokenize_nmt(text,num_examples=None):\n",
" source,target = [],[]\n",
" for i,line in enumerate(text.split('\\n')):\n",
" if num_examples and i > num_examples:\n",
" break\n",
" parts = line.split('\\t')\n",
" if len(parts) == 2:\n",
" source.append(parts[0].split(' '))\n",
" target.append(parts[1].split(' '))\n",
" return source,target\n",
"\n"
],
"id": "ca16ef22cbe2c02a",
"outputs": [],
"execution_count": 128
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:30.821851145Z",
"start_time": "2026-04-22T07:03:30.165447701Z"
}
},
"cell_type": "code",
"source": [
"source, target = tokenize_nmt(text)\n",
"source[:5], target[:5]"
],
"id": "5ece5cb4b78168d0",
"outputs": [
{
"data": {
"text/plain": [
"([['go', '.'], ['hi', '.'], ['run', '!'], ['run', '!'], ['who', '?']],\n",
" [['va', '!'], ['salut', '!'], ['cours', '!'], ['courez', '!'], ['qui', '?']])"
]
},
"execution_count": 129,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 129
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:31.001500702Z",
"start_time": "2026-04-22T07:03:30.869254698Z"
}
},
"cell_type": "code",
"source": [
"def show_list_len_pair_hist(legend,xlabel,ylabel,xlist,ylist):\n",
" d2l.set_figsize()\n",
" _,_,patches = d2l.plt.hist([[len(l) for l in xlist],[len(l) for l in ylist]])\n",
" d2l.plt.xlabel(xlabel)\n",
" d2l.plt.ylabel(ylabel)\n",
" for patch in patches[1].patches:\n",
" patch.set_hatch('/')\n",
" d2l.plt.legend(legend)\n",
"\n",
"show_list_len_pair_hist(['source','target'],'# tokens per sequence','count',source,target)"
],
"id": "518249f852ec54c4",
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 350x250 with 1 Axes>"
],
"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<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"274.320356pt\" height=\"183.35625pt\" viewBox=\"0 0 274.320356 183.35625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n <metadata>\n <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" 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>2026-04-22T15:03:30.973116</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.7.2, 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-linejoin: round; stroke-linecap: butt}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 183.35625 \nL 274.320356 183.35625 \nL 274.320356 0 \nL 0 0 \nz\n\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 66.053125 145.8 \nL 261.353125 145.8 \nL 261.353125 7.2 \nL 66.053125 7.2 \nz\n\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 74.930398 145.8 \nL 82.177151 145.8 \nL 82.177151 13.8 \nL 74.930398 13.8 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 93.047281 145.8 \nL 100.294034 145.8 \nL 100.294034 70.342894 \nL 93.047281 70.342894 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 111.164164 145.8 \nL 118.410917 145.8 \nL 118.410917 141.170363 \nL 111.164164 141.170363 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 129.281047 145.8 \nL 136.5278 145.8 \nL 136.5278 145.34327 \nL 129.281047 145.34327 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_7\">\n <path d=\"M 147.39793 145.8 \nL 154.644683 145.8 \nL 154.644683 145.744022 \nL 147.39793 145.744022 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_8\">\n <path d=\"M 165.514813 145.8 \nL 172.761567 145.8 \nL 172.761567 145.783461 \nL 165.514813 145.783461 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_9\">\n <path d=\"M 183.631696 145.8 \nL 190.87845 145.8 \nL 190.87845 145.792367 \nL 183.631696 145.792367 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_10\">\n <path d=\"M 201.74858 145.8 \nL 208.995333 145.8 \nL 208.995333 145.798728 \nL 201.74858 145.798728 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_11\">\n <path d=\"M 219.865463 145.8 \nL 227.112216 145.8 \nL 227.112216 145.797456 \nL 219.865463 145.797456 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_12\">\n <path d=\"M 237.982346 145.8 \nL 245.229099 145.8 \nL 245.229099 145.8 \nL 237.982346 145.8 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"patch_13\">\n <path d=\"M 82.177151 145.8 \nL 89.423904 145.8 \nL 89.423904 26.779268 \nL 82.177151 26.779268 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_14\">\n <path d=\"M 100.294034 145.8 \nL 107.540787 145.8 \nL 107.540787 60.492034 \nL 100.294034 60.492034 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_15\">\n <path d=\"M 118.410917 145.8 \nL 125.65767 145.8 \nL 125.65767 138.604279 \nL 118.410917 138.604279 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_16\">\n <path d=\"M 136.5278 145.8 \nL 143.774554 145.8 \nL 143.774554 144.858551 \nL 136.5278 144.858551 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_17\">\n <path d=\"M 154.644683 145.8 \nL 161.891437 145.8 \nL 161.891437 145.691861 \nL 154.644683 145.691861 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_18\">\n <path d=\"M 172.761567 145.8 \nL 180.00832 145.8 \nL 180.00832 145.758016 \nL 172.761567 145.758016 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_19\">\n <path d=\"M 190.87845 145.8 \nL 198.125203 145.8 \nL 198.125203 145.797456 \nL 190.87845 145.797456 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_20\">\n <path d=\"M 208.995333 145.8 \nL 216.242086 145.8 \nL 216.242086 145.797456 \nL 208.995333 145.797456 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_21\">\n <path d=\"M 227.112216 145.8 \nL 234.358969 145.8 \nL 234.358969 145.797456 \nL 227.112216 145.797456 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"patch_22\">\n <path d=\"M 245.229099 145.8 \nL 252.475852 145.8 \nL 252.475852 145.796183 \nL 245.229099 145.796183 \nz\n\" clip-path=\"url(#p080f3d0d15)\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <defs>\n <path id=\"m94cc068d5f\" d=\"M 0 0 \nL 0 3.5 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m94cc068d5f\" x=\"66.648394\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(63.467144 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-30\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_2\">\n <g>\n <use xlink:href=\"#m94cc068d5f\" x=\"131.351548\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 20 -->\n <g style=\"fill: #ffffff\" transform=\"translate(124.989048 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-32\" d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-32\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_3\">\n <g>\n <use xlink:href=\"#m94cc068d5f\" x=\"196.054702\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 40 -->\n <g style=\"fill: #ffffff\" transform=\"translate(189.692202 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-34\" d=\"M 2419 4116 \nL 825 1625 \nL 2419 1625 \nL 2419 4116 \nz\nM 2253 4666 \nL 3047 4666 \nL 3047 1625 \nL 3713 1625 \nL 3713 1100 \nL 3047 1100 \nL 3047 0 \nL 2419 0 \nL 2419 1100 \nL 313 1100 \nL 313 1709 \nL 2253 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-34\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_4\">\n <g>\n <use xlink:href=\"#m94cc068d5f\" x=\"260.757856\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 60 -->\n <g style=\"fill: #ffffff\" transform=\"translate(254.395356 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-36\" d=\"M 2113 2584 \nQ 1688 2584 1439 2293 \nQ 1191 2003 1191 1497 \nQ 1191 994 1439 701 \nQ 1688 409 2113 409 \nQ 2538 409 2786 701 \nQ 3034 994 3034 1497 \nQ 3034 2003 2786 2293 \nQ 2538 2584 2113 2584 \nz\nM 3366 4563 \nL 3366 3988 \nQ 3128 4100 2886 4159 \nQ 2644 4219 2406 4219 \nQ 1781 4219 1451 3797 \nQ 1122 3375 1075 2522 \nQ 1259 2794 1537 2939 \nQ 1816 3084 2150 3084 \nQ 2853 3084 3261 2657 \nQ 3669 2231 3669 1497 \nQ 3669 778 3244 343 \nQ 2819 -91 2113 -91 \nQ 1303 -91 875 529 \nQ 447 1150 447 2328 \nQ 447 3434 972 4092 \nQ 1497 4750 2381 4750 \nQ 2619 4750 2861 4703 \nQ 3103 4656 3366 4563 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-36\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n </g>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- # tokens per sequence -->\n <g style=\"fill: #ffffff\" transform=\"translate(105.760937 174.076563) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-23\" d=\"M 3272 2816 \nL 2363 2816 \nL 2100 1772 \nL 3016 1772 \nL 3272 2816 \nz\nM 2803 4594 \nL 2478 3297 \nL 3391 3297 \nL 3719 4594 \nL 4219 4594 \nL 3897 3297 \nL 4872 3297 \nL 4872 2816 \nL 3775 2816 \nL 3519 1772 \nL 4513 1772 \nL 4513 1294 \nL 3397 1294 \nL 3072 0 \nL 2572 0 \nL 2894 1294 \nL 1978 1294 \nL 1656 0 \nL 1153 0 \nL 1478 1294 \nL 494 1294 \nL 494 1772 \nL 1594 1772 \nL 1856 2816 \nL 850 2816 \nL 850 3297 \nL 1978 3297 \nL 2297 4594 \nL 2803 4594 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-20\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \nL 1172 3500 \nL 2356 3500 \nL 2356 3053 \nL 1172 3053 \nL 1172 1153 \nQ 1172 725 1289 603 \nQ 1406 481 1766 481 \nL 2356 481 \nL 2356 0 \nL 1766 0 \nQ 1100 0 847 248 \nQ 594 497 594 1153 \nL 594 3053 \nL 172 3053 \nL 172 3500 \nL 594 3500 \nL 594 4494 \nL 1172 4494 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6f\" d=\"M 1959 3097 \nQ 1497 3097 1228 2736 \nQ 959 2375 959 1747 \nQ 959 1119 1226 758 \nQ 1494 397 1959 397 \nQ 2419 397 2687 759 \nQ 2956 1122 2956 1747 \nQ 2956 2369 2687 2733 \nQ 2419 3097 1959 3097 \nz\nM 1959 3584 \nQ 2709 3584 3137 3096 \nQ 3566 2609 3566 1747 \nQ 3566 888 3137 398 \nQ 2709 -91 1959 -91 \nQ 1206 -91 779 398 \nQ 353 888 353 1747 \nQ 353 2609 779 3096 \nQ 1206 3584 1959 3584 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6b\" d=\"M 581 4863 \nL 1159 4863 \nL 1159 1991 \nL 2875 3500 \nL 3609 3500 \nL 1753 1863 \nL 3688 0 \nL 2938 0 \nL 1159 1709 \nL 1159 0 \nL 581 0 \nL 581 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \nL 3597 1613 \nL 953 1613 \nQ 991 1019 1311 708 \nQ 1631 397 2203 397 \nQ 2534 397 2845 478 \nQ 3156 559 3463 722 \nL 3463 178 \nQ 3153 47 2828 -22 \nQ 2503 -91 2169 -91 \nQ 1331 -91 842 396 \nQ 353 884 353 1716 \nQ 353 2575 817 3079 \nQ 1281 3584 2069 3584 \nQ 2775 3584 3186 3129 \nQ 3597 2675 3597 1894 \nz\nM 3022 2063 \nQ 3016 2534 2758 2815 \nQ 2500 3097 2075 3097 \nQ 1594 3097 1305 2825 \nQ 1016 2553 972 2059 \nL 3022 2063 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6e\" d=\"M 3513 2113 \nL 3513 0 \nL 2938 0 \nL 2938 2094 \nQ 2938 2591 2744 2837 \nQ 2550 3084 2163 3084 \nQ 1697 3084 1428 2787 \nQ 1159 2491 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1366 3272 1645 3428 \nQ 1925 3584 2291 3584 \nQ 2894 3584 3203 3211 \nQ 3513 2838 3513 2113 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-73\" d=\"M 2834 3397 \nL 2834 2853 \nQ 2591 2978 2328 3040 \nQ 2066 3103 1784 3103 \nQ 1356 3103 1142 2972 \nQ 928 2841 928 2578 \nQ 928 2378 1081 2264 \nQ 1234 2150 1697 2047 \nL 1894 2003 \nQ 2506 1872 2764 1633 \nQ 3022 1394 3022 966 \nQ 3022 478 2636 193 \nQ 2250 -91 1575 -91 \nQ 1294 -91 989 -36 \nQ 684 19 347 128 \nL 347 722 \nQ 666 556 975 473 \nQ 1284 391 1588 391 \nQ 1994 391 2212 530 \nQ 2431 669 2431 922 \nQ 2431 1156 2273 1281 \nQ 2116 1406 1581 1522 \nL 1381 1569 \nQ 847 1681 609 1914 \nQ 372 2147 372 2553 \nQ 372 3047 722 3315 \nQ 1072 3584 1716 3584 \nQ 2034 3584 2315 3537 \nQ 2597 3491 2834 3397 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-70\" d=\"M 1159 525 \nL 1159 -1331 \nL 581 -1331 \nL 581 3500 \nL 1159 3500 \nL 1159 2969 \nQ 1341 3281 1617 3432 \nQ 1894 3584 2278 3584 \nQ 2916 3584 3314 3078 \nQ 3713 2572 3713 1747 \nQ 3713 922 3314 415 \nQ 2916 -91 2278 -91 \nQ 1894 -91 1617 61 \nQ 1341 213 1159 525 \nz\nM 3116 1747 \nQ 3116 2381 2855 2742 \nQ 2594 3103 2138 3103 \nQ 1681 3103 1420 2742 \nQ 1159 2381 1159 1747 \nQ 1159 1113 1420 752 \nQ 1681 391 2138 391 \nQ 2594 391 2855 752 \nQ 3116 1113 3116 1747 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-72\" d=\"M 2631 2963 \nQ 2534 3019 2420 3045 \nQ 2306 3072 2169 3072 \nQ 1681 3072 1420 2755 \nQ 1159 2438 1159 1844 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1341 3275 1631 3429 \nQ 1922 3584 2338 3584 \nQ 2397 3584 2469 3576 \nQ 2541 3569 2628 3553 \nL 2631 2963 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-71\" d=\"M 947 1747 \nQ 947 1113 1208 752 \nQ 1469 391 1925 391 \nQ 2381 391 2643 752 \nQ 2906 1113 2906 1747 \nQ 2906 2381 2643 2742 \nQ 2381 3103 1925 3103 \nQ 1469 3103 1208 2742 \nQ 947 2381 947 1747 \nz\nM 2906 525 \nQ 2725 213 2448 61 \nQ 2172 -91 1784 -91 \nQ 1150 -91 751 415 \nQ 353 922 353 1747 \nQ 353 2572 751 3078 \nQ 1150 3584 1784 3584 \nQ 2172 3584 2448 3432 \nQ 2725 3281 2906 2969 \nL 2906 3500 \nL 3481 3500 \nL 3481 -1331 \nL 2906 -1331 \nL 2906 525 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-75\" d=\"M 544 1381 \nL 544 3500 \nL 1119 3500 \nL 1119 1403 \nQ 1119 906 1312 657 \nQ 1506 409 1894 409 \nQ 2359 409 2629 706 \nQ 2900 1003 2900 1516 \nL 2900 3500 \nL 3475 3500 \nL 3475 0 \nL 2900 0 \nL 2900 538 \nQ 2691 219 2414 64 \nQ 2138 -91 1772 -91 \nQ 1169 -91 856 284 \nQ 544 659 544 1381 \nz\nM 1991 3584 \nL 1991 3584 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-63\" d=\"M 3122 3366 \nL 3122 2828 \nQ 2878 2963 2633 3030 \nQ 2388 3097 2138 3097 \nQ 1578 3097 1268 2742 \nQ 959 2388 959 1747 \nQ 959 1106 1268 751 \nQ 1578 397 2138 397 \nQ 2388 397 2633 464 \nQ 2878 531 3122 666 \nL 3122 134 \nQ 2881 22 2623 -34 \nQ 2366 -91 2075 -91 \nQ 1284 -91 818 406 \nQ 353 903 353 1747 \nQ 353 2603 823 3093 \nQ 1294 3584 2113 3584 \nQ 2378 3584 2631 3529 \nQ 2884 3475 3122 3366 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-23\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"83.789062\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"115.576172\"/>\n <use xlink:href=\"#DejaVuSans-6f\" x=\"154.785156\"/>\n <use xlink:href=\"#DejaVuSans-6b\" x=\"215.966797\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"270.251953\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"331.775391\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"395.154297\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"447.253906\"/>\n <use xlink:href=\"#DejaVuSans-70\" x=\"479.041016\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"542.517578\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"604.041016\"/>\n <use xlink:href=\"#DejaVuSans-20\" x=\"645.154297\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"676.941406\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"729.041016\"/>\n <use xlink:href=\"#DejaVuSans-71\" x=\"790.564453\"/>\n <use xlink:href=\"#DejaVuSans-75\" x=\"854.041016\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"917.419922\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"978.943359\"/>\n <use xlink:href=\"#DejaVuSans-63\" x=\"1042.322266\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"1097.302734\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_5\">\n <defs>\n <path id=\"m0ac5e02ff8\" d=\"M 0 0 \nL -3.5 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#m0ac5e02ff8\" x=\"66.053125\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- 0 -->\n <g style=\"fill: #ffffff\" transform=\"translate(52.690625 149.599219) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_6\">\n <g>\n <use xlink:href=\"#m0ac5e02ff8\" x=\"66.053125\" y=\"120.355443\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 20000 -->\n <g style=\"fill: #ffffff\" transform=\"translate(27.240625 124.154662) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-32\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"254.492188\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_7\">\n <g>\n <use xlink:href=\"#m0ac5e02ff8\" x=\"66.053125\" y=\"94.910886\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 40000 -->\n <g style=\"fill: #ffffff\" transform=\"translate(27.240625 98.710105) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-34\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"254.492188\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_8\">\n <g>\n <use xlink:href=\"#m0ac5e02ff8\" x=\"66.053125\" y=\"69.466329\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- 60000 -->\n <g style=\"fill: #ffffff\" transform=\"translate(27.240625 73.265548) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-36\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"254.492188\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_9\">\n <g>\n <use xlink:href=\"#m0ac5e02ff8\" x=\"66.053125\" y=\"44.021772\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 80000 -->\n <g style=\"fill: #ffffff\" transform=\"translate(27.240625 47.820991) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-38\" d=\"M 2034 2216 \nQ 1584 2216 1326 1975 \nQ 1069 1734 1069 1313 \nQ 1069 891 1326 650 \nQ 1584 409 2034 409 \nQ 2484 409 2743 651 \nQ 3003 894 3003 1313 \nQ 3003 1734 2745 1975 \nQ 2488 2216 2034 2216 \nz\nM 1403 2484 \nQ 997 2584 770 2862 \nQ 544 3141 544 3541 \nQ 544 4100 942 4425 \nQ 1341 4750 2034 4750 \nQ 2731 4750 3128 4425 \nQ 3525 4100 3525 3541 \nQ 3525 3141 3298 2862 \nQ 3072 2584 2669 2484 \nQ 3125 2378 3379 2068 \nQ 3634 1759 3634 1313 \nQ 3634 634 3220 271 \nQ 2806 -91 2034 -91 \nQ 1263 -91 848 271 \nQ 434 634 434 1313 \nQ 434 1759 690 2068 \nQ 947 2378 1403 2484 \nz\nM 1172 3481 \nQ 1172 3119 1398 2916 \nQ 1625 2713 2034 2713 \nQ 2441 2713 2670 2916 \nQ 2900 3119 2900 3481 \nQ 2900 3844 2670 4047 \nQ 2441 4250 2034 4250 \nQ 1625 4250 1398 4047 \nQ 1172 3844 1172 3481 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-38\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"254.492188\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_6\">\n <g id=\"line2d_10\">\n <g>\n <use xlink:href=\"#m0ac5e02ff8\" x=\"66.053125\" y=\"18.577216\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- 100000 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 22.376434) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-31\" d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"254.492188\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"318.115234\"/>\n </g>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- count -->\n <g style=\"fill: #ffffff\" transform=\"translate(14.798438 90.60625) rotate(-90) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-63\"/>\n <use xlink:href=\"#DejaVuSans-6f\" x=\"54.980469\"/>\n <use xlink:href=\"#DejaVuSans-75\" x=\"116.162109\"/>\n <use xlink:href=\"#DejaVuSans-6e\" x=\"179.541016\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"242.919922\"/>\n </g>\n </g>\n </g>\n <g id=\"patch_23\">\n <path d=\"M 66.053125 145.8 \nL 66.053125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_24\">\n <path d=\"M 261.353125 145.8 \nL 261.353125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_25\">\n <path d=\"M 66.053125 145.8 \nL 261.353125 145.8 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_26\">\n <path d=\"M 66.053125 7.2 \nL 261.353125 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"legend_1\">\n <g id=\"patch_27\">\n <path d=\"M 189.15 44.55625 \nL 254.353125 44.55625 \nQ 256.353125 44.55625 256.353125 42.55625 \nL 256.353125 14.2 \nQ 256.353125 12.2 254.353125 12.2 \nL 189.15 12.2 \nQ 187.15 12.2 187.15 14.2 \nL 187.15 42.55625 \nQ 187.15 44.55625 189.15 44.55625 \nz\n\" style=\"opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n </g>\n <g id=\"patch_28\">\n <path d=\"M 191.15 23.798438 \nL 211.15 23.798438 \nL 211.15 16.798438 \nL 191.15 16.798438 \nz\n\" style=\"fill: #8dd3c7\"/>\n </g>\n <g id=\"text_13\">\n <!-- source -->\n <g style=\"fill: #ffffff\" transform=\"translate(219.15 23.798438) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-73\"/>\n <use xlink:href=\"#DejaVuSans-6f\" x=\"52.099609\"/>\n <use xlink:href=\"#DejaVuSans-75\" x=\"113.28125\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"176.660156\"/>\n <use xlink:href=\"#DejaVuSans-63\" x=\"215.523438\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"270.503906\"/>\n </g>\n </g>\n <g id=\"patch_29\">\n <path d=\"M 191.15 38.476562 \nL 211.15 38.476562 \nL 211.15 31.476562 \nL 191.15 31.476562 \nz\n\" style=\"fill: url(#h6a8879fef6)\"/>\n </g>\n <g id=\"text_14\">\n <!-- target -->\n <g style=\"fill: #ffffff\" transform=\"translate(219.15 38.476562) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-61\" d=\"M 2194 1759 \nQ 1497 1759 1228 1600 \nQ 959 1441 959 1056 \nQ 959 750 1161 570 \nQ 1363 391 1709 391 \nQ 2188 391 2477 730 \nQ 2766 1069 2766 1631 \nL 2766 1759 \nL 2194 1759 \nz\nM 3341 1997 \nL 3341 0 \nL 2766 0 \nL 2766 531 \nQ 2569 213 2275 61 \nQ 1981 -91 1556 -91 \nQ 1019 -91 701 211 \nQ 384 513 384 1019 \nQ 384 1609 779 1909 \nQ 1175 2209 1959 2209 \nL 2766 2209 \nL 2766 2266 \nQ 2766 2663 2505 2880 \nQ 2244 3097 1772 3097 \nQ 1472 3097 1187 3025 \nQ 903 2953 641 2809 \nL 641 3341 \nQ 956 3463 1253 3523 \nQ 1550 3584 1831 3584 \nQ 2591 3584 2966 3190 \nQ 3341 2797 3341 1997 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-67\" d=\"M 2906 1791 \nQ 2906 2416 2648 2759 \nQ 2391 3103 1925 3103 \nQ 1463 3103 1205 2759 \nQ 947 2416 947 1791 \nQ 947 1169 1205 825 \nQ 1463 481 1925 481 \nQ 2391 481 2648 825 \nQ 2906 1169 2906 1791 \nz\nM 3481 434 \nQ 3481 -459 3084 -895 \nQ 2688 -1331 1869 -1331 \nQ 1566 -1331 1297 -1286 \nQ 1028 -1241 775 -1147 \nL 775 -588 \nQ 1028 -725 1275 -790 \nQ 1522 -856 1778 -856 \nQ 2344 -856 2625 -561 \nQ 2906 -266 2906 331 \nL 2906 616 \nQ 2728 306 2450 153 \nQ 2172 0 1784 0 \nQ 1141 0 747 490 \nQ 353 981 353 1791 \nQ 353 2603 747 3093 \nQ 1141 3584 1784 3584 \nQ 2172 3584 2450 3431 \nQ 2728 3278 2906 2969 \nL 2906 3500 \nL 3481 3500 \nL 3481 434 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-74\"/>\n <use xlink:href=\"#DejaVuSans-61\" x=\"39.208984\"/>\n <use xlink:href=\"#DejaVuSans-72\" x=\"100.488281\"/>\n <use xlink:href=\"#DejaVuSans-67\" x=\"139.851562\"/>\n <use xlink:href=\"#DejaVuSans-65\" x=\"203.328125\"/>\n <use xlink:href=\"#DejaVuSans-74\" x=\"264.851562\"/>\n </g>\n </g>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p080f3d0d15\">\n <rect x=\"66.053125\" y=\"7.2\" width=\"195.3\" height=\"138.6\"/>\n </clipPath>\n </defs>\n <defs>\n <pattern id=\"h6a8879fef6\" patternUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"72\" height=\"72\">\n <rect x=\"0\" y=\"0\" width=\"73\" height=\"73\" fill=\"#feffb3\"/>\n <path d=\"M -36 36 \nL 36 -36 \nM -24 48 \nL 48 -24 \nM -12 60 \nL 60 -12 \nM 0 72 \nL 72 0 \nM 12 84 \nL 84 12 \nM 24 96 \nL 96 24 \nM 36 108 \nL 108 36 \n\" style=\"fill: #000000; stroke: #000000; stroke-width: 1.0; stroke-linecap: butt; stroke-linejoin: miter\"/>\n </pattern>\n </defs>\n</svg>\n"
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 130
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:31.126122101Z",
"start_time": "2026-04-22T07:03:31.016562308Z"
}
},
"cell_type": "code",
"source": [
"src_vocab=Vocab(source,min_freq=2,reserved_tokens=['<pad>','<bos>','<eos>'])\n",
"len(src_vocab)"
],
"id": "c2dc82617d5a41a4",
"outputs": [
{
"data": {
"text/plain": [
"10012"
]
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 131
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:31.181454267Z",
"start_time": "2026-04-22T07:03:31.127995134Z"
}
},
"cell_type": "code",
"source": [
"def truncate_pad(line,num_steps,padding_token):\n",
" if len(line) > num_steps:\n",
" return line[:num_steps]\n",
" return line + [padding_token] * (num_steps - len(line))\n",
"truncate_pad(src_vocab[source[0]], 10, src_vocab['<pad>'])"
],
"id": "93ae326a3258ecc",
"outputs": [
{
"data": {
"text/plain": [
"[47, 4, 1, 1, 1, 1, 1, 1, 1, 1]"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 132
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:31.244013357Z",
"start_time": "2026-04-22T07:03:31.194631134Z"
}
},
"cell_type": "code",
"source": [
"def build_array_nmt(lines, vocab, num_steps):\n",
" \"\"\"将机器翻译的文本序列转换成小批量\"\"\"\n",
" lines = [vocab[l] for l in lines]\n",
" lines = [l + [vocab['<eos>']] for l in lines]\n",
" array = torch.tensor([truncate_pad(\n",
" l, num_steps, vocab['<pad>']) for l in lines])\n",
" valid_len = (array != vocab['<pad>']).type(torch.int32).sum(1)\n",
" return array, valid_len"
],
"id": "acd4344e678cf487",
"outputs": [],
"execution_count": 133
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:31.295907069Z",
"start_time": "2026-04-22T07:03:31.246433021Z"
}
},
"cell_type": "code",
"source": [
"def load_data_nmt(batch_size, num_steps, num_examples=600):\n",
" \"\"\"返回翻译数据集的迭代器和词表\"\"\"\n",
" text = preprocess_nmt(read_data_nmt())\n",
" source, target = tokenize_nmt(text, num_examples)\n",
" src_vocab = d2l.Vocab(source, min_freq=2,\n",
" reserved_tokens=['<pad>', '<bos>', '<eos>'])\n",
" tgt_vocab = d2l.Vocab(target, min_freq=2,\n",
" reserved_tokens=['<pad>', '<bos>', '<eos>'])\n",
" src_array, src_valid_len = build_array_nmt(source, src_vocab, num_steps)\n",
" tgt_array, tgt_valid_len = build_array_nmt(target, tgt_vocab, num_steps)\n",
" data_arrays = (src_array, src_valid_len, tgt_array, tgt_valid_len)\n",
" data_iter = d2l.load_array(data_arrays, batch_size)\n",
" return data_iter, src_vocab, tgt_vocab"
],
"id": "62586b0175993a4f",
"outputs": [],
"execution_count": 134
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:32.568811153Z",
"start_time": "2026-04-22T07:03:31.298284240Z"
}
},
"cell_type": "code",
"source": [
"train_iter, src_vocab, tgt_vocab = load_data_nmt(batch_size=2, num_steps=8)\n",
"for X, X_valid_len, Y, Y_valid_len in train_iter:\n",
" print('X:', X.type(torch.int32))\n",
" print('X的有效长度:', X_valid_len)\n",
" print('Y:', Y.type(torch.int32))\n",
" print('Y的有效长度:', Y_valid_len)\n",
" break"
],
"id": "87a2f147db41a91d",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"../data/fra-eng\n",
"X: tensor([[ 83, 163, 2, 4, 5, 5, 5, 5],\n",
" [ 29, 69, 2, 4, 5, 5, 5, 5]], dtype=torch.int32)\n",
"X的有效长度: tensor([4, 4])\n",
"Y: tensor([[100, 171, 6, 2, 4, 5, 5, 5],\n",
" [191, 6, 2, 4, 5, 5, 5, 5]], dtype=torch.int32)\n",
"Y的有效长度: tensor([5, 4])\n"
]
}
],
"execution_count": 135
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:32.679822180Z",
"start_time": "2026-04-22T07:03:32.616779320Z"
}
},
"cell_type": "code",
"source": [
"class Encoder(nn.Module):\n",
" def __init__(self,**kargs):\n",
" super(Encoder,self).__init__(**kargs)\n",
" def forward(self,X,*args):\n",
" raise NotImplementedError(\"必须实现这个方法\")\n",
"class Decoder(nn.Module):\n",
" \"\"\"编码器-解码器架构的基本解码器接口\"\"\"\n",
" def __init__(self, **kwargs):\n",
" super(Decoder, self).__init__(**kwargs)\n",
" def init_state(self, enc_outputs, *args):\n",
" raise NotImplementedError\n",
" def forward(self, X, state):\n",
" raise NotImplementedError\n",
"class EncoderDecoder(nn.Module):\n",
" \"\"\"编码器-解码器架构的基类\"\"\"\n",
" def __init__(self, encoder, decoder, **kwargs):\n",
" super(EncoderDecoder, self).__init__(**kwargs)\n",
" self.encoder = encoder\n",
" self.decoder = decoder\n",
" def forward(self, enc_X, dec_X, *args):\n",
" enc_outputs = self.encoder(enc_X, *args)\n",
" dec_state = self.decoder.init_state(enc_outputs, *args)\n",
" return self.decoder(dec_X, dec_state)\n",
"class Seq2SeqEncoder(Encoder):\n",
" def __init__(self,vocab_size,embed_size,num_hiddens,num_layers,dropout=0,**kwargs):\n",
" super(Seq2SeqEncoder, self).__init__(**kwargs)\n",
" self.embedding = nn.Embedding(vocab_size, embed_size)\n",
" self.rnn = nn.GRU(embed_size,num_hiddens,num_layers,dropout=dropout)\n",
" def forward(self,X,*args):\n",
" X = self.embedding(X)\n",
" X = X.permute(1,0,2) #(batch,steps,embed_size) -> (steps,batch,embed_size)\n",
" output,state = self.rnn(X)\n",
" return output,state\n",
" # shape of output (steps,batch,num_hiddens)\n",
" # shape of state (num_layers,batch,num_hiddens)\n",
"encoder = Seq2SeqEncoder(vocab_size=10, embed_size=8, num_hiddens=16,\n",
" num_layers=2)\n",
"X = torch.zeros((4,7),dtype=torch.long) #one-hot is integer\n",
"output,state = encoder(X)\n",
"output.shape\n"
],
"id": "d0d01aef4857ee9c",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([7, 4, 16])"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 136
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:32.745403173Z",
"start_time": "2026-04-22T07:03:32.681269832Z"
}
},
"cell_type": "code",
"source": "state.shape",
"id": "bba15a040c10cb01",
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([2, 4, 16])"
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 137
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:32.800607701Z",
"start_time": "2026-04-22T07:03:32.749059569Z"
}
},
"cell_type": "code",
"source": [
"class Seq2SeqDecoder(Decoder):\n",
" def __init__(self,vocab_size,embed_size,num_hiddens,num_layers,dropout=0,**kwargs):\n",
" super(Seq2SeqDecoder, self).__init__(**kwargs)\n",
" self.embedding = nn.Embedding(vocab_size, embed_size)\n",
" self.rnn = nn.GRU(embed_size+num_hiddens,num_hiddens,num_layers,dropout=dropout)\n",
" self.dense = nn.Linear(num_hiddens,vocab_size)\n",
" def init_state(self,enc_outputs,*args):\n",
" return enc_outputs[1]\n",
" def forward(self,X,state):\n",
" X = self.embedding(X).permute(1,0,2)\n",
" context = state[-1].repeat(X.shape[0],1,1)\n",
" X_and_context = torch.cat((X,context),2)\n",
" output,state = self.rnn(X_and_context,state)\n",
" output = self.dense(output).permute(1,0,2)\n",
" return output,state"
],
"id": "b659bfd2fdcabebe",
"outputs": [],
"execution_count": 138
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:32.863556712Z",
"start_time": "2026-04-22T07:03:32.801449588Z"
}
},
"cell_type": "code",
"source": [
"decoder = Seq2SeqDecoder(vocab_size=10, embed_size=8, num_hiddens=16,\n",
"num_layers=2)\n",
"decoder.eval()\n",
"state = decoder.init_state(encoder(X))\n",
"output, state = decoder(X, state)\n",
"output.shape, state.shape"
],
"id": "e9c451e560ce3769",
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([4, 7, 10]), torch.Size([2, 4, 16]))"
]
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 139
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:32.926789294Z",
"start_time": "2026-04-22T07:03:32.864974421Z"
}
},
"cell_type": "code",
"source": [
"def sequence_mask(X, valid_len, value=0):\n",
" \"\"\"在序列中屏蔽不相关的项\"\"\"\n",
" maxlen = X.size(1)\n",
" mask = torch.arange((maxlen), dtype=torch.float32,\n",
" device=X.device)[None, :] < valid_len[:, None]\n",
" X[~mask] = value\n",
" return X\n",
"X = torch.tensor([[1, 2, 3], [4, 5, 6]])\n",
"sequence_mask(X, torch.tensor([1, 2]))"
],
"id": "9ee2db877c089d48",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[1, 0, 0],\n",
" [4, 5, 0]])"
]
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 140
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:33.055040504Z",
"start_time": "2026-04-22T07:03:32.985613772Z"
}
},
"cell_type": "code",
"source": [
"X = torch.ones(2, 3, 4)\n",
"sequence_mask(X, torch.tensor([1, 2]), value=-1)"
],
"id": "caca450bdfe7f650",
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[ 1., 1., 1., 1.],\n",
" [-1., -1., -1., -1.],\n",
" [-1., -1., -1., -1.]],\n",
"\n",
" [[ 1., 1., 1., 1.],\n",
" [ 1., 1., 1., 1.],\n",
" [-1., -1., -1., -1.]]])"
]
},
"execution_count": 141,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 141
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:03:33.183816304Z",
"start_time": "2026-04-22T07:03:33.114715644Z"
}
},
"cell_type": "code",
"source": [
"class MaskedSoftmaxCELoss(nn.CrossEntropyLoss):\n",
" \"\"\"带遮蔽的softmax交叉熵损失函数\"\"\"\n",
" # pred的形状(batch_size,num_steps,vocab_size)\n",
" # label的形状(batch_size,num_steps)\n",
" # valid_len的形状(batch_size,)\n",
" def forward(self, pred, label, valid_len):\n",
" weights = torch.ones_like(label)\n",
" weights = sequence_mask(weights, valid_len)\n",
" self.reduction='none'\n",
" unweighted_loss = super(MaskedSoftmaxCELoss, self).forward(\n",
" pred.permute(0, 2, 1), label)\n",
" weighted_loss = (unweighted_loss * weights).mean(dim=1)\n",
" return weighted_loss\n",
"loss = MaskedSoftmaxCELoss()\n",
"loss(torch.ones(3, 4, 10), torch.ones((3, 4), dtype=torch.long),\n",
"torch.tensor([4, 2, 0]))"
],
"id": "46fc96f0246f32b7",
"outputs": [
{
"data": {
"text/plain": [
"tensor([2.3026, 1.1513, 0.0000])"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 142
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:11:21.961865073Z",
"start_time": "2026-04-22T07:11:21.895381436Z"
}
},
"cell_type": "code",
"source": [
"def train_seq2seq(net, data_iter, lr, num_epochs, tgt_vocab, device):\n",
" \"\"\"训练序列到序列模型\"\"\"\n",
" def xavier_init_weights(m):\n",
" if type(m) == nn.Linear:\n",
" nn.init.xavier_uniform_(m.weight)\n",
" if type(m) == nn.GRU:\n",
" for param in m._flat_weights_names:\n",
" if \"weight\" in param:\n",
" nn.init.xavier_uniform_(m._parameters[param])\n",
" net.apply(xavier_init_weights)\n",
" net.to(device)\n",
" optimizer = torch.optim.Adam(net.parameters(), lr=lr)\n",
" loss = MaskedSoftmaxCELoss()\n",
" net.train()\n",
" animator = d2l.Animator(xlabel='epoch', ylabel='loss',\n",
" xlim=[10, num_epochs])\n",
" for epoch in range(num_epochs):\n",
" timer = d2l.Timer()\n",
" metric = d2l.Accumulator(2) # 训练损失总和,词元数量\n",
" for batch in data_iter:\n",
" optimizer.zero_grad()\n",
" X, X_valid_len, Y, Y_valid_len = [x.to(device) for x in batch]\n",
" bos = torch.tensor([tgt_vocab['<bos>']] * Y.shape[0],\n",
" device=device).reshape(-1, 1)\n",
" dec_input = torch.cat([bos, Y[:, :-1]], 1) # 强制教学\n",
" Y_hat, _ = net(X, dec_input, X_valid_len)\n",
" l = loss(Y_hat, Y, Y_valid_len)\n",
" l.sum().backward() # 损失函数的标量进行“反向传播”\n",
" d2l.grad_clipping(net, 1)\n",
" num_tokens = Y_valid_len.sum()\n",
" optimizer.step()\n",
" with torch.no_grad():\n",
" metric.add(l.sum(), num_tokens)\n",
" if (epoch + 1) % 10 == 0:\n",
" animator.add(epoch + 1, (metric[0] / metric[1],))"
],
"id": "69c315b5875fc288",
"outputs": [],
"execution_count": 153
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-22T07:13:26.866073447Z",
"start_time": "2026-04-22T07:11:51.132170814Z"
}
},
"cell_type": "code",
"source": [
"embed_size, num_hiddens, num_layers, dropout = 32, 32, 2, 0.1\n",
"batch_size, num_steps = 64, 10\n",
"lr, num_epochs, device = 0.005, 300, d2l.try_gpu()\n",
"train_iter, src_vocab, tgt_vocab = load_data_nmt(batch_size, num_steps)\n",
"encoder = Seq2SeqEncoder(len(src_vocab), embed_size, num_hiddens, num_layers,\n",
"dropout)\n",
"decoder = Seq2SeqDecoder(len(tgt_vocab), embed_size, num_hiddens, num_layers,\n",
"dropout)\n",
"net = EncoderDecoder(encoder, decoder)\n",
"train_seq2seq(net, train_iter, lr, num_epochs, tgt_vocab, device)"
],
"id": "58e54d7b6b77205d",
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 350x250 with 1 Axes>"
],
"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<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"262.1875pt\" height=\"183.35625pt\" viewBox=\"0 0 262.1875 183.35625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n <metadata>\n <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" 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>2026-04-22T15:13:26.821924</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.7.2, 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-linejoin: round; stroke-linecap: butt}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 183.35625 \nL 262.1875 183.35625 \nL 262.1875 0 \nL 0 0 \nz\n\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 50.14375 145.8 \nL 245.44375 145.8 \nL 245.44375 7.2 \nL 50.14375 7.2 \nz\n\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path d=\"M 77.081681 145.8 \nL 77.081681 7.2 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path id=\"mcb3ceca69b\" d=\"M 0 0 \nL 0 3.5 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#mcb3ceca69b\" x=\"77.081681\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 50 -->\n <g style=\"fill: #ffffff\" transform=\"translate(70.719181 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-35\" d=\"M 691 4666 \nL 3169 4666 \nL 3169 4134 \nL 1269 4134 \nL 1269 2991 \nQ 1406 3038 1543 3061 \nQ 1681 3084 1819 3084 \nQ 2600 3084 3056 2656 \nQ 3513 2228 3513 1497 \nQ 3513 744 3044 326 \nQ 2575 -91 1722 -91 \nQ 1428 -91 1123 -41 \nQ 819 9 494 109 \nL 494 744 \nQ 775 591 1075 516 \nQ 1375 441 1709 441 \nQ 2250 441 2565 725 \nQ 2881 1009 2881 1497 \nQ 2881 1984 2565 2268 \nQ 2250 2553 1709 2553 \nQ 1456 2553 1204 2497 \nQ 953 2441 691 2322 \nL 691 4666 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-35\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path d=\"M 110.754095 145.8 \nL 110.754095 7.2 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use xlink:href=\"#mcb3ceca69b\" x=\"110.754095\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 100 -->\n <g style=\"fill: #ffffff\" transform=\"translate(101.210345 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-31\" d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path d=\"M 144.426509 145.8 \nL 144.426509 7.2 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_6\">\n <g>\n <use xlink:href=\"#mcb3ceca69b\" x=\"144.426509\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 150 -->\n <g style=\"fill: #ffffff\" transform=\"translate(134.882759 160.398438) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-31\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_7\">\n <path d=\"M 178.098922 145.8 \nL 178.098922 7.2 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_8\">\n <g>\n <use xlink:href=\"#mcb3ceca69b\" x=\"178.098922\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 200 -->\n <g style=\"fill: #ffffff\" transform=\"translate(168.555172 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-32\" d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-32\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_9\">\n <path d=\"M 211.771336 145.8 \nL 211.771336 7.2 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_10\">\n <g>\n <use xlink:href=\"#mcb3ceca69b\" x=\"211.771336\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 250 -->\n <g style=\"fill: #ffffff\" transform=\"translate(202.227586 160.398438) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-32\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_6\">\n <g id=\"line2d_11\">\n <path d=\"M 245.44375 145.8 \nL 245.44375 7.2 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_12\">\n <g>\n <use xlink:href=\"#mcb3ceca69b\" x=\"245.44375\" y=\"145.8\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- 300 -->\n <g style=\"fill: #ffffff\" transform=\"translate(235.9 160.398438) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-33\" d=\"M 2597 2516 \nQ 3050 2419 3304 2112 \nQ 3559 1806 3559 1356 \nQ 3559 666 3084 287 \nQ 2609 -91 1734 -91 \nQ 1441 -91 1130 -33 \nQ 819 25 488 141 \nL 488 750 \nQ 750 597 1062 519 \nQ 1375 441 1716 441 \nQ 2309 441 2620 675 \nQ 2931 909 2931 1356 \nQ 2931 1769 2642 2001 \nQ 2353 2234 1838 2234 \nL 1294 2234 \nL 1294 2753 \nL 1863 2753 \nQ 2328 2753 2575 2939 \nQ 2822 3125 2822 3475 \nQ 2822 3834 2567 4026 \nQ 2313 4219 1838 4219 \nQ 1578 4219 1281 4162 \nQ 984 4106 628 3988 \nL 628 4550 \nQ 988 4650 1302 4700 \nQ 1616 4750 1894 4750 \nQ 2613 4750 3031 4423 \nQ 3450 4097 3450 3541 \nQ 3450 3153 3228 2886 \nQ 3006 2619 2597 2516 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-33\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n </g>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- epoch -->\n <g style=\"fill: #ffffff\" transform=\"translate(132.565625 174.076563) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \nL 3597 1613 \nL 953 1613 \nQ 991 1019 1311 708 \nQ 1631 397 2203 397 \nQ 2534 397 2845 478 \nQ 3156 559 3463 722 \nL 3463 178 \nQ 3153 47 2828 -22 \nQ 2503 -91 2169 -91 \nQ 1331 -91 842 396 \nQ 353 884 353 1716 \nQ 353 2575 817 3079 \nQ 1281 3584 2069 3584 \nQ 2775 3584 3186 3129 \nQ 3597 2675 3597 1894 \nz\nM 3022 2063 \nQ 3016 2534 2758 2815 \nQ 2500 3097 2075 3097 \nQ 1594 3097 1305 2825 \nQ 1016 2553 972 2059 \nL 3022 2063 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-70\" d=\"M 1159 525 \nL 1159 -1331 \nL 581 -1331 \nL 581 3500 \nL 1159 3500 \nL 1159 2969 \nQ 1341 3281 1617 3432 \nQ 1894 3584 2278 3584 \nQ 2916 3584 3314 3078 \nQ 3713 2572 3713 1747 \nQ 3713 922 3314 415 \nQ 2916 -91 2278 -91 \nQ 1894 -91 1617 61 \nQ 1341 213 1159 525 \nz\nM 3116 1747 \nQ 3116 2381 2855 2742 \nQ 2594 3103 2138 3103 \nQ 1681 3103 1420 2742 \nQ 1159 2381 1159 1747 \nQ 1159 1113 1420 752 \nQ 1681 391 2138 391 \nQ 2594 391 2855 752 \nQ 3116 1113 3116 1747 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-6f\" d=\"M 1959 3097 \nQ 1497 3097 1228 2736 \nQ 959 2375 959 1747 \nQ 959 1119 1226 758 \nQ 1494 397 1959 397 \nQ 2419 397 2687 759 \nQ 2956 1122 2956 1747 \nQ 2956 2369 2687 2733 \nQ 2419 3097 1959 3097 \nz\nM 1959 3584 \nQ 2709 3584 3137 3096 \nQ 3566 2609 3566 1747 \nQ 3566 888 3137 398 \nQ 2709 -91 1959 -91 \nQ 1206 -91 779 398 \nQ 353 888 353 1747 \nQ 353 2609 779 3096 \nQ 1206 3584 1959 3584 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-63\" d=\"M 3122 3366 \nL 3122 2828 \nQ 2878 2963 2633 3030 \nQ 2388 3097 2138 3097 \nQ 1578 3097 1268 2742 \nQ 959 2388 959 1747 \nQ 959 1106 1268 751 \nQ 1578 397 2138 397 \nQ 2388 397 2633 464 \nQ 2878 531 3122 666 \nL 3122 134 \nQ 2881 22 2623 -34 \nQ 2366 -91 2075 -91 \nQ 1284 -91 818 406 \nQ 353 903 353 1747 \nQ 353 2603 823 3093 \nQ 1294 3584 2113 3584 \nQ 2378 3584 2631 3529 \nQ 2884 3475 3122 3366 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-68\" d=\"M 3513 2113 \nL 3513 0 \nL 2938 0 \nL 2938 2094 \nQ 2938 2591 2744 2837 \nQ 2550 3084 2163 3084 \nQ 1697 3084 1428 2787 \nQ 1159 2491 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 4863 \nL 1159 4863 \nL 1159 2956 \nQ 1366 3272 1645 3428 \nQ 1925 3584 2291 3584 \nQ 2894 3584 3203 3211 \nQ 3513 2838 3513 2113 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-65\"/>\n <use xlink:href=\"#DejaVuSans-70\" x=\"61.523438\"/>\n <use xlink:href=\"#DejaVuSans-6f\" x=\"125\"/>\n <use xlink:href=\"#DejaVuSans-63\" x=\"186.181641\"/>\n <use xlink:href=\"#DejaVuSans-68\" x=\"241.162109\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_13\">\n <path d=\"M 50.14375 118.012368 \nL 245.44375 118.012368 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_14\">\n <defs>\n <path id=\"md502b8e6b2\" d=\"M 0 0 \nL -3.5 0 \n\" style=\"stroke: #ffffff; stroke-width: 0.8\"/>\n </defs>\n <g>\n <use xlink:href=\"#md502b8e6b2\" x=\"50.14375\" y=\"118.012368\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 0.05 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 121.811587) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-2e\" d=\"M 684 794 \nL 1344 794 \nL 1344 0 \nL 684 0 \nL 684 794 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"159.033203\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_15\">\n <path d=\"M 50.14375 83.801835 \nL 245.44375 83.801835 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_16\">\n <g>\n <use xlink:href=\"#md502b8e6b2\" x=\"50.14375\" y=\"83.801835\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- 0.10 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 87.601054) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-31\" x=\"95.410156\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"159.033203\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_17\">\n <path d=\"M 50.14375 49.591302 \nL 245.44375 49.591302 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_18\">\n <g>\n <use xlink:href=\"#md502b8e6b2\" x=\"50.14375\" y=\"49.591302\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 0.15 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 53.390521) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-31\" x=\"95.410156\"/>\n <use xlink:href=\"#DejaVuSans-35\" x=\"159.033203\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_19\">\n <path d=\"M 50.14375 15.380769 \nL 245.44375 15.380769 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linecap: square\"/>\n </g>\n <g id=\"line2d_20\">\n <g>\n <use xlink:href=\"#md502b8e6b2\" x=\"50.14375\" y=\"15.380769\" style=\"fill: #ffffff; stroke: #ffffff; stroke-width: 0.8\"/>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- 0.20 -->\n <g style=\"fill: #ffffff\" transform=\"translate(20.878125 19.179988) scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-30\"/>\n <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n <use xlink:href=\"#DejaVuSans-32\" x=\"95.410156\"/>\n <use xlink:href=\"#DejaVuSans-30\" x=\"159.033203\"/>\n </g>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- loss -->\n <g style=\"fill: #ffffff\" transform=\"translate(14.798437 86.157813) rotate(-90) scale(0.1 -0.1)\">\n <defs>\n <path id=\"DejaVuSans-6c\" d=\"M 603 4863 \nL 1178 4863 \nL 1178 0 \nL 603 0 \nL 603 4863 \nz\n\" transform=\"scale(0.015625)\"/>\n <path id=\"DejaVuSans-73\" d=\"M 2834 3397 \nL 2834 2853 \nQ 2591 2978 2328 3040 \nQ 2066 3103 1784 3103 \nQ 1356 3103 1142 2972 \nQ 928 2841 928 2578 \nQ 928 2378 1081 2264 \nQ 1234 2150 1697 2047 \nL 1894 2003 \nQ 2506 1872 2764 1633 \nQ 3022 1394 3022 966 \nQ 3022 478 2636 193 \nQ 2250 -91 1575 -91 \nQ 1294 -91 989 -36 \nQ 684 19 347 128 \nL 347 722 \nQ 666 556 975 473 \nQ 1284 391 1588 391 \nQ 1994 391 2212 530 \nQ 2431 669 2431 922 \nQ 2431 1156 2273 1281 \nQ 2116 1406 1581 1522 \nL 1381 1569 \nQ 847 1681 609 1914 \nQ 372 2147 372 2553 \nQ 372 3047 722 3315 \nQ 1072 3584 1716 3584 \nQ 2034 3584 2315 3537 \nQ 2597 3491 2834 3397 \nz\n\" transform=\"scale(0.015625)\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-6c\"/>\n <use xlink:href=\"#DejaVuSans-6f\" x=\"27.783203\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"88.964844\"/>\n <use xlink:href=\"#DejaVuSans-73\" x=\"141.064453\"/>\n </g>\n </g>\n </g>\n <g id=\"line2d_21\">\n <path d=\"M 50.14375 13.5 \nL 56.878233 52.041384 \nL 63.612716 77.110567 \nL 70.347198 93.768993 \nL 77.081681 105.991888 \nL 83.816164 114.271117 \nL 90.550647 120.460776 \nL 97.285129 125.072429 \nL 104.019612 128.007914 \nL 110.754095 130.113611 \nL 117.488578 132.081389 \nL 124.22306 133.646383 \nL 130.957543 134.365704 \nL 137.692026 135.201548 \nL 144.426509 135.609472 \nL 151.160991 136.261299 \nL 157.895474 137.16748 \nL 164.629957 137.491503 \nL 171.36444 137.707089 \nL 178.098922 137.888631 \nL 184.833405 138.142651 \nL 191.567888 138.347476 \nL 198.302371 137.893253 \nL 205.036853 138.796715 \nL 211.771336 138.831946 \nL 218.505819 138.458281 \nL 225.240302 138.872205 \nL 231.974784 139.5 \nL 238.709267 138.988206 \nL 245.44375 139.090791 \n\" clip-path=\"url(#p033e6c5bf4)\" style=\"fill: none; stroke: #8dd3c7; stroke-width: 1.5; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 50.14375 145.8 \nL 50.14375 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 245.44375 145.8 \nL 245.44375 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 50.14375 145.8 \nL 245.44375 145.8 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 50.14375 7.2 \nL 245.44375 7.2 \n\" style=\"fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p033e6c5bf4\">\n <rect x=\"50.14375\" y=\"7.2\" width=\"195.3\" height=\"138.6\"/>\n </clipPath>\n </defs>\n</svg>\n"
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 155
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": "",
"id": "15f5b277bf8d51ed"
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}