{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "id": "Ic4_occAAiAT" }, "outputs": [], "source": [ "import os\n", "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # 设置日志级别为ERROR,以减少警告信息\n", "# 禁用 Gemini 的底层库(gRPC 和 Abseil)在初始化日志警告\n", "os.environ[\"GRPC_VERBOSITY\"] = \"ERROR\"\n", "os.environ[\"GLOG_minloglevel\"] = \"3\" # 0: INFO, 1: WARNING, 2: ERROR, 3: FATAL\n", "os.environ[\"GLOG_minloglevel\"] = \"true\"\n", "import logging\n", "import tensorflow as tf\n", "tf.get_logger().setLevel(logging.ERROR)\n", "tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)\n", "!export TF_FORCE_GPU_ALLOW_GROWTH=true" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "cellView": "form", "id": "ioaprt5q5US7" }, "outputs": [], "source": [ "# Copyright 2019 The TensorFlow Authors.\n", "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "cellView": "form", "id": "yCl0eTNH5RS3" }, "outputs": [], "source": [ "#@title MIT License\n", "#\n", "# Copyright (c) 2017 François Chollet\n", "#\n", "# Permission is hereby granted, free of charge, to any person obtaining a\n", "# copy of this software and associated documentation files (the \"Software\"),\n", "# to deal in the Software without restriction, including without limitation\n", "# the rights to use, copy, modify, merge, publish, distribute, sublicense,\n", "# and/or sell copies of the Software, and to permit persons to whom the\n", "# Software is furnished to do so, subject to the following conditions:\n", "#\n", "# The above copyright notice and this permission notice shall be included in\n", "# all copies or substantial portions of the Software.\n", "#\n", "# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n", "# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n", "# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n", "# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n", "# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n", "# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n", "# DEALINGS IN THE SOFTWARE." ] }, { "cell_type": "markdown", "metadata": { "id": "ItXfxkxvosLH" }, "source": [ "# 电影评论文本分类" ] }, { "cell_type": "markdown", "metadata": { "id": "hKY4XMc9o8iB" }, "source": [ "
![]() | \n",
" ![]() | \n",
" ![]() | \n",
" ![]() | \n",
"
Model: \"sequential\"\n",
"
\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", "│ embedding (Embedding) │ ? │ 0 (unbuilt) │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dropout (Dropout) │ ? │ 0 (unbuilt) │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ global_average_pooling1d │ ? │ 0 (unbuilt) │\n", "│ (GlobalAveragePooling1D) │ │ │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dropout_1 (Dropout) │ ? │ 0 (unbuilt) │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dense (Dense) │ ? │ 0 (unbuilt) │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n", "\n" ], "text/plain": [ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", "│ embedding (\u001b[38;5;33mEmbedding\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ global_average_pooling1d │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", "│ (\u001b[38;5;33mGlobalAveragePooling1D\u001b[0m) │ │ │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dense (\u001b[38;5;33mDense\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Total params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Non-trainable params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = tf.keras.Sequential([\n", " layers.Embedding(max_features + 1, embedding_dim),\n", " layers.Dropout(0.2),\n", " layers.GlobalAveragePooling1D(),\n", " layers.Dropout(0.2),\n", " layers.Dense(1)])\n", "\n", "model.summary()" ] }, { "cell_type": "markdown", "metadata": { "id": "6PbKQ6mucuKL" }, "source": [ "层按顺序堆叠以构建分类器:\n", "\n", "1. 第一个层是 `Embedding` 层。此层采用整数编码的评论,并查找每个单词索引的嵌入向量。这些向量是通过模型训练学习到的。向量向输出数组增加了一个维度。得到的维度为:`(batch, sequence, embedding)`。要详细了解嵌入向量,请参阅[单词嵌入向量](https://tensorflow.google.cn/text/guide/word_embeddings)教程。\n", "2. 接下来,`GlobalAveragePooling1D` 将通过对序列维度求平均值来为每个样本返回一个定长输出向量。这允许模型以尽可能最简单的方式处理变长输入。\n", "3. 最后一层与单个输出结点密集连接。" ] }, { "cell_type": "markdown", "metadata": { "id": "L4EqVWg4-llM" }, "source": [ "### 损失函数与优化器\n", "\n", "模型训练需要一个损失函数和一个优化器。由于这是一个二元分类问题,并且模型输出概率(具有 Sigmoid 激活的单一单元层),我们将使用 `losses.BinaryCrossentropy` 损失函数。\n", "\n", "现在,配置模型以使用优化器和损失函数:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "id": "Mr0GP-cQ-llN" }, "outputs": [], "source": [ "model.compile(loss=losses.BinaryCrossentropy(from_logits=True),\n", " optimizer='adam',\n", " metrics=[tf.metrics.BinaryAccuracy(threshold=0.0)])" ] }, { "cell_type": "markdown", "metadata": { "id": "35jv_fzP-llU" }, "source": [ "### 训练模型\n", "\n", "将 `dataset` 对象传递给 fit 方法,对模型进行训练。" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "id": "tXSGrjWZ-llW" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", "I0000 00:00:1729736653.040209 3211559 service.cc:146] XLA service 0x7ff5cc046510 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n", "I0000 00:00:1729736653.040274 3211559 service.cc:154] StreamExecutor device (0): NVIDIA GeForce RTX 3090, Compute Capability 8.6\n", "I0000 00:00:1729736653.040291 3211559 service.cc:154] StreamExecutor device (1): NVIDIA GeForce RTX 2080 Ti, Compute Capability 7.5\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m 62/625\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - binary_accuracy: 0.5149 - loss: 0.6927" ] }, { "name": "stderr", "output_type": "stream", "text": [ "I0000 00:00:1729736655.192179 3211559 device_compiler.h:188] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 5ms/step - binary_accuracy: 0.5839 - loss: 0.6812 - val_binary_accuracy: 0.7276 - val_loss: 0.6142\n", "Epoch 2/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.7579 - loss: 0.5812 - val_binary_accuracy: 0.8058 - val_loss: 0.5011\n", "Epoch 3/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.8244 - loss: 0.4678 - val_binary_accuracy: 0.8306 - val_loss: 0.4291\n", "Epoch 4/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.8530 - loss: 0.3968 - val_binary_accuracy: 0.8352 - val_loss: 0.3904\n", "Epoch 5/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.8662 - loss: 0.3499 - val_binary_accuracy: 0.8526 - val_loss: 0.3592\n", "Epoch 6/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.8814 - loss: 0.3168 - val_binary_accuracy: 0.8552 - val_loss: 0.3425\n", "Epoch 7/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.8901 - loss: 0.2914 - val_binary_accuracy: 0.8474 - val_loss: 0.3385\n", "Epoch 8/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.9014 - loss: 0.2706 - val_binary_accuracy: 0.8564 - val_loss: 0.3247\n", "Epoch 9/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.9059 - loss: 0.2541 - val_binary_accuracy: 0.8594 - val_loss: 0.3166\n", "Epoch 10/10\n", "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - binary_accuracy: 0.9119 - loss: 0.2395 - val_binary_accuracy: 0.8610 - val_loss: 0.3143\n" ] } ], "source": [ "epochs = 10\n", "history = model.fit(\n", " train_ds,\n", " validation_data=val_ds,\n", " epochs=epochs)" ] }, { "cell_type": "markdown", "metadata": { "id": "9EEGuDVuzb5r" }, "source": [ "### 评估模型\n", "\n", "我们来看一下模型的性能如何。将返回两个值。损失值(loss)(一个表示误差的数字,值越低越好)与准确率(accuracy)。" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "id": "zOMKywn4zReN" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 2ms/step - binary_accuracy: 0.8558 - loss: 0.3287\n", "Loss: 0.33292046189308167\n", "Accuracy: 0.8543599843978882\n" ] } ], "source": [ "loss, accuracy = model.evaluate(test_ds)\n", "\n", "print(\"Loss: \", loss)\n", "print(\"Accuracy: \", accuracy)" ] }, { "cell_type": "markdown", "metadata": { "id": "z1iEXVTR0Z2t" }, "source": [ "这种十分简单的方式实现了约 86% 的准确率。" ] }, { "cell_type": "markdown", "metadata": { "id": "ldbQqCw2Xc1W" }, "source": [ "### 创建准确率和损失随时间变化的图表\n", "\n", "`model.fit()` 会返回包含一个字典的 `History` 对象。该字典包含训练过程中产生的所有信息:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "id": "-YcvZsdvWfDf" }, "outputs": [ { "data": { "text/plain": [ "dict_keys(['binary_accuracy', 'loss', 'val_binary_accuracy', 'val_loss'])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "history_dict = history.history\n", "history_dict.keys()" ] }, { "cell_type": "markdown", "metadata": { "id": "1_CH32qJXruI" }, "source": [ "其中有四个条目:每个条目代表训练和验证过程中的一项监测指标。您可以使用这些指标来绘制用于比较的训练损失和验证损失图表,以及训练准确率和验证准确率图表:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "id": "2SEMeQ5YXs8z" }, "outputs": [ { "data": { "image/png": "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pxcREXErloWb/Pnz4+npyalTp5zaT506RUhISKLvCQ0NpXTp0k6rz5YrV46oqChi73K/tbe3N4GBgU6PzFa+PPTsaW6//DLExWV6CSIiIm7DsnDj5eVF9erVWb9+vaMtLi6O9evXU6dOnUTfU69ePQ4ePEjcbelg//79hIaG4uXlleE1p8WoURAQAL/8Ap98YnU1IiIirsvSy1IDBw7kvffe48MPP2Tv3r306tWLy5cv0717dwC6dOnCkCFDHPv36tWLc+fO0b9/f/bv388333zD+PHj6d27t1UfIdkKFry1mOaQIXDlirX1iIiIuKocVp48IiKCM2fOMGLECKKioqhSpQqrVq1yDDI+evQoHh638ld4eDirV6/mpZdeolKlShQuXJj+/fszOJuM1B0wAObMgSNHYOpUGDrU6opERERcj6Xz3FghM+e5ScyiRfD005ArFxw8aM5iLCIiIknLFvPcuKuOHaFWLbh8GUaMsLoaERER16Nwk8lsNpgyxdx+/33YvdvaekRERFyNwo0F6tWDdu3MW8LjVw8XERGR9KFwY5E33oCcOWHNGli1yupqREREXIfCjUVKloR+/cztQYPM5RlEREQk7RRuLDR0KOTNC3v2mONvREREJO0UbiyUJw+MHGlujxgBmbhguYiIiMtSuLFYr15QujScPg1vvml1NSIiItmfwo3FcuaEiRPN7SlT4OhRa+sRERHJ7hRusoCWLaFRI7h27db6UyIiIpI6CjdZgM0Gkyebfy5cCNu3W12RiIhI9qVwk0VUqwadO5vbAweCe634JSIikn4UbrKQcePA1xd+/BGWLrW6GhERkexJ4SYLCQu7tRzDq69CbKy19YiIiGRHCjdZzKuvQkgI/PUXzJpldTUiIiLZj8JNFuPvD6+/bm6PHQvnzllbj4iISHajcJMFdesGlSrB+fMwZozV1YiIiGQvCjdZkKcnTJpkbs+aBQcOWFuPiIhIdqJwk0U98gg89pi5WvjgwVZXIyIikn0o3GRhb71l9uIsXQrff291NSIiItmDwk0WVr489Ohhbr/8MsTFWVuPiIhIdqBwk8WNHg0BAfDLL/DJJ1ZXIyIikvUp3GRxBQveWkxzyBC4csXaekRERLI6hZtsYMAAKFIE/vkHpk61uhoREZGsTeEmG/DxgTfeMLffeAOioqytR0REJCtTuMkmOnaEWrXg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zDPPkC9fPnx9falYsSI///yz1WW5JbvdzvDhwylevDi+vr6ULFmSsWPHJmvdIUm7H374gRYtWlCoUCFsNhvLli1zet0wDEaMGEFoaCi+vr40adKEAwcOZFp9Cjfi8P3339O7d2+2bt3K2rVruXHjBo8++iiXL1+2ujS3tn37dt59910qVapkdSlu7fz589SrV4+cOXOycuVK/vjjDyZPnkyePHmsLs0tvfnmm8yePZuZM2eyd+9e3nzzTSZOnMiMGTOsLs0tXL58mcqVKzNr1qxEX584cSJvv/02c+bM4aeffiJXrlw0bdqUa9euZUp9uhVc7urMmTMULFiQ77//ngYNGlhdjlu6dOkS1apV45133uH111+nSpUqTJs2zeqy3NJrr73Gpk2b2Lhxo9WlCPDEE08QHBzM+++/72hr27Ytvr6+fPzxxxZW5n5sNhtLly6ldevWgNlrU6hQIV5++WUGDRoEQHR0NMHBwcyfP5+OHTtmeE3quZG7io6OBiBv3rwWV+K+evfuzeOPP06TJk2sLsXtLV++nBo1atC+fXsKFixI1apVee+996wuy23VrVuX9evXs3//fgB+/fVXfvzxR5o3b25xZXLo0CGioqKc/r8VFBRE7dq12bJlS6bU4HYLZ0ryxMXFMWDAAOrVq8f9999vdTlu6dNPP2XHjh1s377d6lIE+Pvvv5k9ezYDBw7kv//9L9u3b6dfv354eXnRtWtXq8tzO6+99hoxMTGULVsWT09P7HY748aNo1OnTlaX5vaioqIACA4OdmoPDg52vJbRFG4kUb179+b333/nxx9/tLoUt3Ts2DH69+/P2rVr8fHxsbocwQz8NWrUYPz48QBUrVqV33//nTlz5ijcWOCzzz5j4cKFfPLJJ1SoUIFdu3YxYMAAChUqpJ+H6LKUJNSnTx++/vprNmzYQFhYmNXluKVffvmF06dPU61aNXLkyEGOHDn4/vvvefvtt8mRIwd2u93qEt1OaGgo5cuXd2orV64cR48etagi9/bKK6/w2muv0bFjRypWrEjnzp156aWXmDBhgtWlub2QkBAATp065dR+6tQpx2sZTeFGHAzDoE+fPixdupRvv/2W4sWLW12S22rcuDG7d+9m165djkeNGjXo1KkTu3btwtPT0+oS3U69evUSTI2wf/9+ihYtalFF7u3KlSt4eDh/hXl6ehIXF2dRRRKvePHihISEsH79ekdbTEwMP/30E3Xq1MmUGnRZShx69+7NJ598wpdffklAQIDj2mhQUBC+vr4WV+deAgICEox1ypUrF/ny5dMYKIu89NJL1K1bl/Hjx9OhQwe2bdvG3LlzmTt3rtWluaUWLVowbtw4ihQpQoUKFdi5cydTpkzh2Weftbo0t3Dp0iUOHjzoeH7o0CF27dpF3rx5KVKkCAMGDOD111+nVKlSFC9enOHDh1OoUCHHHVUZzhD5HyDRx7x586wuTQzDaNiwodG/f3+ry3BrX331lXH//fcb3t7eRtmyZY25c+daXZLbiomJMfr3728UKVLE8PHxMUqUKGEMHTrUuH79utWluYUNGzYk+n3RtWtXwzAMIy4uzhg+fLgRHBxseHt7G40bNzb27duXafVpnhsRERFxKRpzIyIiIi5F4UZERERcisKNiIiIuBSFGxEREXEpCjciIiLiUhRuRERExKUo3IiIiIhLUbgREbdks9lYtmyZ1WWISAZQuBGRTNetWzdsNluCR7NmzawuTURcgNaWEhFLNGvWjHnz5jm1eXt7W1SNiLgS9dyIiCW8vb0JCQlxeuTJkwcwLxnNnj2b5s2b4+vrS4kSJViyZInT+3fv3s3DDz+Mr68v+fLlo2fPnly6dMlpnw8++IAKFSrg7e1NaGgoffr0cXr97NmzPPnkk/j5+VGqVCmWL1/ueO38+fN06tSJAgUK4OvrS6lSpRKEMRHJmhRuRCRLGj58OG3btuXXX3+lU6dOdOzYkb179wJw+fJlmjZtSp48edi+fTuff/4569atcwovs2fPpnfv3vTs2ZPdu3ezfPly7rvvPqdzjB49mg4dOvDbb7/x2GOP0alTJ86dO+c4/x9//MHKlSvZu3cvs2fPJn/+/Jn3FyAiqZdpS3SKiPxP165dDU9PTyNXrlxOj3HjxhmGYa5Q/8ILLzi9p3bt2kavXr0MwzCMuXPnGnny5DEuXbrkeP2bb74xPDw8jKioKMMwDKNQoULG0KFD71oDYAwbNszx/NKlSwZgrFy50jAMw2jRooXRvXv39PnAIpKpNOZGRCzx0EMPMXv2bKe2vHnzOrbr1Knj9FqdOnXYtWsXAHv37qVy5crkypXL8Xq9evWIi4tj37592Gw2Tpw4QePGjZOsoVKlSo7tXLlyERgYyOnTpwHo1asXbdu2ZceOHTz66KO0bt2aunXrpuqzikjmUrgREUvkypUrwWWi9OLr65us/XLmzOn03GazERcXB0Dz5s05cuQIK1asYO3atTRu3JjevXszadKkdK9XRNKXxtyISJa0devWBM/LlSsHQLly5fj111+5fPmy4/VNmzbh4eFBmTJlCAgIoFixYqxfvz5NNRQoUICuXbvy8ccfM23aNObOnZum44lI5lDPjYhY4vr160RFRTm15ciRwzFo9/PPP6dGjRo8+OCDLFy4kG3btvH+++8D0KlTJ0aOHEnXrl0ZNWoUZ86coW/fvnTu3Jng4GAARo0axQsvvEDBggVp3rw5Fy9eZNOmTfTt2zdZ9Y0YMYLq1atToUIFrl+/ztdff+0IVyKStSnciIglVq1aRWhoqFNbmTJl+PPPPwHzTqZPP/2UF198kdDQUBYtWkT58uUB8PPzY/Xq1fTv35+aNWvi5+dH27ZtmTJliuNYXbt25dq1a0ydOpVBgwaRP39+2rVrl+z6vLy8GDJkCIcPH8bX15f69evz6aefpsMnF5GMZjMMw7C6CBGR29lsNpYuXUrr1q2tLkVEsiGNuRERERGXonAjIiIiLkVjbkQky9HVchFJC/XciIiIiEtRuBERERGXonAjIiIiLkXhRkRERFyKwo2IiIi4FIUbERERcSkKNyIiIuJSFG5ERETEpSjciIiIiEv5fyoPS/0n5x5tAAAAAElFTkSuQmCC", "text/plain": [ "