[bc029c]: / cloudCode / Training / training_sagemaker.ipynb

Download this file

1000 lines (999 with data), 146.8 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "92dfda08",
   "metadata": {},
   "outputs": [],
   "source": [
    "%store -r data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "15783048",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "smote Counter({1: 4032, 0: 4032, 2: 4032})\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from collections import Counter\n",
    "from sklearn import preprocessing\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "def oversampling_smote(X,y):\n",
    "    from imblearn.over_sampling import SMOTE\n",
    "    oversample = SMOTE()\n",
    "    X_smote, y_smote = oversample.fit_resample(X, y)\n",
    "    print(\"smote\", Counter(y_smote))\n",
    "    return X_smote, y_smote, oversampling_smote.__name__\n",
    "\n",
    "X = data\n",
    "X = X.drop('mood', axis =1)\n",
    "X = X.drop('time', axis =1)\n",
    "X = X.drop('encoder_output', axis =1)\n",
    "\n",
    "y = data['mood']\n",
    "\n",
    "transform = LabelEncoder()\n",
    "y = transform.fit_transform(y)\n",
    "\n",
    "X, y, tech_name = oversampling_smote(X,y)\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a6825448",
   "metadata": {},
   "outputs": [],
   "source": [
    "bucket = \"iotproj-training\"\n",
    "prefix = \"sagemaker\"\n",
    "s3_train_key = \"{}/train/recordio-pb-data\".format(prefix)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "81fcdc16",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import io\n",
    "import boto3\n",
    "import sagemaker\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import sagemaker.amazon.common as smac\n",
    "from sagemaker import get_execution_role\n",
    "from sagemaker.predictor import csv_serializer, json_deserializer\n",
    "\n",
    "\n",
    "vectors = np.array([t.tolist() for t in X_train.values]).astype(\"float32\")\n",
    "labels = np.array([t.tolist() for t in y_train]).astype(\"float32\")\n",
    "\n",
    "vectors_test = np.array([t.tolist() for t in X_test.values]).astype(\"float32\")\n",
    "labels_test = np.array([t.tolist() for t in y_test]).astype(\"float32\")\n",
    "\n",
    "buf = io.BytesIO()\n",
    "smac.write_numpy_to_dense_tensor(buf, vectors, labels)\n",
    "buf.seek(0)\n",
    "boto3.resource(\"s3\").Bucket(bucket).Object(s3_train_key).upload_fileobj(buf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8b97eea5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sagemaker/train/recordio-pb-data\n"
     ]
    }
   ],
   "source": [
    "# Confirm access to s3 bucket\n",
    "for obj in boto3.resource(\"s3\").Bucket(bucket).objects.all():\n",
    "    print(obj.key)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dcf26858",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sagemaker.amazon.amazon_estimator import get_image_uri\n",
    "role = 'sagemaker_permissions'\n",
    "from sagemaker.serializers import CSVSerializer\n",
    "from sagemaker.deserializers import JSONDeserializer\n",
    "\n",
    "\n",
    "def predictor_from_hyperparams(s3_train_data, hyperparams, output_path):\n",
    "    \n",
    "    #Create an Estimator from the given hyperparams, fit to training data, and return a deployed predictor\n",
    "\n",
    "    # specify algorithm containers and instantiate an Estimator with given hyperparams\n",
    "    container = get_image_uri(boto3.Session().region_name, \"linear-learner\")\n",
    "\n",
    "    linear = sagemaker.estimator.Estimator(\n",
    "        container,\n",
    "        role,\n",
    "        train_instance_count=1,\n",
    "        train_instance_type=\"ml.m4.xlarge\",\n",
    "        output_path=output_path,\n",
    "        sagemaker_session=sagemaker.Session(),\n",
    "    )\n",
    "    linear.set_hyperparameters(**hyperparams)\n",
    "    # train model\n",
    "    linear.fit({\"train\": s3_train_data})\n",
    "    # deploy a predictor\n",
    "    linear_predictor = linear.deploy(initial_instance_count=1, instance_type=\"ml.m4.xlarge\")\n",
    "    linear_predictor.serializer = csv_serializer\n",
    "    linear_predictor.deserializer = json_deserializer\n",
    "    return linear_predictor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "422b88b4",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The method get_image_uri has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "Defaulting to the only supported framework/algorithm version: 1. Ignoring framework/algorithm version: 1.\n",
      "train_instance_count has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "train_instance_type has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2021-12-06 19:27:04 Starting - Starting the training job...\n",
      "2021-12-06 19:27:27 Starting - Launching requested ML instancesProfilerReport-1638818824: InProgress\n",
      "......\n",
      "2021-12-06 19:28:28 Starting - Preparing the instances for training.........\n",
      "2021-12-06 19:30:08 Downloading - Downloading input data...\n",
      "2021-12-06 19:30:33 Training - Downloading the training image...\n",
      "2021-12-06 19:31:08 Uploading - Uploading generated training model\u001b[34mDocker entrypoint called with argument(s): train\u001b[0m\n",
      "\u001b[34mRunning default environment configuration script\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:00 INFO 140097345783616] Reading default configuration from /opt/amazon/lib/python3.7/site-packages/algorithm/resources/default-input.json: {'mini_batch_size': '1000', 'epochs': '15', 'feature_dim': 'auto', 'use_bias': 'true', 'binary_classifier_model_selection_criteria': 'accuracy', 'f_beta': '1.0', 'target_recall': '0.8', 'target_precision': '0.8', 'num_models': 'auto', 'num_calibration_samples': '10000000', 'init_method': 'uniform', 'init_scale': '0.07', 'init_sigma': '0.01', 'init_bias': '0.0', 'optimizer': 'auto', 'loss': 'auto', 'margin': '1.0', 'quantile': '0.5', 'loss_insensitivity': '0.01', 'huber_delta': '1.0', 'num_classes': '1', 'accuracy_top_k': '3', 'wd': 'auto', 'l1': 'auto', 'momentum': 'auto', 'learning_rate': 'auto', 'beta_1': 'auto', 'beta_2': 'auto', 'bias_lr_mult': 'auto', 'bias_wd_mult': 'auto', 'use_lr_scheduler': 'true', 'lr_scheduler_step': 'auto', 'lr_scheduler_factor': 'auto', 'lr_scheduler_minimum_lr': 'auto', 'positive_example_weight_mult': '1.0', 'balance_multiclass_weights': 'false', 'normalize_data': 'true', 'normalize_label': 'auto', 'unbias_data': 'auto', 'unbias_label': 'auto', 'num_point_for_scaler': '10000', '_kvstore': 'auto', '_num_gpus': 'auto', '_num_kv_servers': 'auto', '_log_level': 'info', '_tuning_objective_metric': '', 'early_stopping_patience': '3', 'early_stopping_tolerance': '0.001', '_enable_profiler': 'false'}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:00 INFO 140097345783616] Merging with provided configuration from /opt/ml/input/config/hyperparameters.json: {'loss': 'softmax_loss', 'feature_dim': '2', 'num_classes': '3', 'predictor_type': 'multiclass_classifier', 'epochs': '20'}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:00 INFO 140097345783616] Final configuration: {'mini_batch_size': '1000', 'epochs': '20', 'feature_dim': '2', 'use_bias': 'true', 'binary_classifier_model_selection_criteria': 'accuracy', 'f_beta': '1.0', 'target_recall': '0.8', 'target_precision': '0.8', 'num_models': 'auto', 'num_calibration_samples': '10000000', 'init_method': 'uniform', 'init_scale': '0.07', 'init_sigma': '0.01', 'init_bias': '0.0', 'optimizer': 'auto', 'loss': 'softmax_loss', 'margin': '1.0', 'quantile': '0.5', 'loss_insensitivity': '0.01', 'huber_delta': '1.0', 'num_classes': '3', 'accuracy_top_k': '3', 'wd': 'auto', 'l1': 'auto', 'momentum': 'auto', 'learning_rate': 'auto', 'beta_1': 'auto', 'beta_2': 'auto', 'bias_lr_mult': 'auto', 'bias_wd_mult': 'auto', 'use_lr_scheduler': 'true', 'lr_scheduler_step': 'auto', 'lr_scheduler_factor': 'auto', 'lr_scheduler_minimum_lr': 'auto', 'positive_example_weight_mult': '1.0', 'balance_multiclass_weights': 'false', 'normalize_data': 'true', 'normalize_label': 'auto', 'unbias_data': 'auto', 'unbias_label': 'auto', 'num_point_for_scaler': '10000', '_kvstore': 'auto', '_num_gpus': 'auto', '_num_kv_servers': 'auto', '_log_level': 'info', '_tuning_objective_metric': '', 'early_stopping_patience': '3', 'early_stopping_tolerance': '0.001', '_enable_profiler': 'false', 'predictor_type': 'multiclass_classifier'}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:00 WARNING 140097345783616] Loggers have already been setup.\u001b[0m\n",
      "\u001b[34mProcess 1 is a worker.\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:00 INFO 140097345783616] Using default worker.\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Checkpoint loading and saving are disabled.\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:01.038] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 0, \"duration\": 20, \"num_examples\": 1, \"num_bytes\": 52000}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Create Store: local\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:01.102] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 1, \"duration\": 63, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Scaler algorithm parameters\n",
      " <algorithm.scaler.ScalerAlgorithmStable object at 0x7f6a9405e7d0>\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Scaling model computed with parameters:\n",
      " {'stdev_label': None, 'stdev_weight': \u001b[0m\n",
      "\u001b[34m[1178.3011     28.126144]\u001b[0m\n",
      "\u001b[34m<NDArray 2 @cpu(0)>, 'mean_label': None, 'mean_weight': \u001b[0m\n",
      "\u001b[34m[3589.018     94.85509]\u001b[0m\n",
      "\u001b[34m<NDArray 2 @cpu(0)>}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] nvidia-smi: took 0.032 seconds to run.\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] nvidia-smi identified 0 GPUs.\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Number of GPUs being used: 0\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.2024217, \"EndTime\": 1638819061.2024622, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"Meta\": \"init_train_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 9912.0, \"count\": 1, \"min\": 9912, \"max\": 9912}, \"Total Batches Seen\": {\"sum\": 10.0, \"count\": 1, \"min\": 10, \"max\": 10}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 2.0, \"count\": 1, \"min\": 2, \"max\": 2}, \"Number of Records Since Last Reset\": {\"sum\": 0.0, \"count\": 1, \"min\": 0, \"max\": 0}, \"Number of Batches Since Last Reset\": {\"sum\": 0.0, \"count\": 1, \"min\": 0, \"max\": 0}}}\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:01.457] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 4, \"duration\": 255, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.458053, \"EndTime\": 1638819061.458136, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.980259635925293, \"count\": 1, \"min\": 0.980259635925293, \"max\": 0.980259635925293}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.458365, \"EndTime\": 1638819061.4583902, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.9413233871459961, \"count\": 1, \"min\": 0.9413233871459961, \"max\": 0.9413233871459961}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4585545, \"EndTime\": 1638819061.4586482, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.826169662475586, \"count\": 1, \"min\": 0.826169662475586, \"max\": 0.826169662475586}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.458725, \"EndTime\": 1638819061.4587429, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 1.0003428115844726, \"count\": 1, \"min\": 1.0003428115844726, \"max\": 1.0003428115844726}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4588075, \"EndTime\": 1638819061.4588256, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.9237593536376953, \"count\": 1, \"min\": 0.9237593536376953, \"max\": 0.9237593536376953}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4590452, \"EndTime\": 1638819061.4590657, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.9536591491699219, \"count\": 1, \"min\": 0.9536591491699219, \"max\": 0.9536591491699219}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4592793, \"EndTime\": 1638819061.4593043, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.7710823440551757, \"count\": 1, \"min\": 0.7710823440551757, \"max\": 0.7710823440551757}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4593751, \"EndTime\": 1638819061.4593925, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 1.0392893295288086, \"count\": 1, \"min\": 1.0392893295288086, \"max\": 1.0392893295288086}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4594553, \"EndTime\": 1638819061.4594736, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.6460162048339844, \"count\": 1, \"min\": 0.6460162048339844, \"max\": 0.6460162048339844}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4596908, \"EndTime\": 1638819061.459711, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 1.002318675994873, \"count\": 1, \"min\": 1.002318675994873, \"max\": 1.002318675994873}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4599125, \"EndTime\": 1638819061.459936, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 1.0417518539428712, \"count\": 1, \"min\": 1.0417518539428712, \"max\": 1.0417518539428712}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4600642, \"EndTime\": 1638819061.4600973, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.7939973106384277, \"count\": 1, \"min\": 0.7939973106384277, \"max\": 0.7939973106384277}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #quality_metric: host=algo-1, epoch=0, train multiclass_cross_entropy_objective <loss>=0.980259635925293\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=0, criteria=multiclass_cross_entropy_objective, value=0.6460162048339844\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Epoch 0: Loss improved. Updating best model\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Saving model for epoch: 0\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Saved checkpoint to \"/tmp/tmp_q1zsgh6/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #progress_metric: host=algo-1, completed 5.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.2027528, \"EndTime\": 1638819061.498481, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 0, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 18824.0, \"count\": 1, \"min\": 18824, \"max\": 18824}, \"Total Batches Seen\": {\"sum\": 19.0, \"count\": 1, \"min\": 19, \"max\": 19}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 3.0, \"count\": 1, \"min\": 3, \"max\": 3}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=30084.287727052862 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:01.728] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 6, \"duration\": 228, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.728606, \"EndTime\": 1638819061.7286751, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.7643161010742188, \"count\": 1, \"min\": 0.7643161010742188, \"max\": 0.7643161010742188}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.7287946, \"EndTime\": 1638819061.728998, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.6920842590332031, \"count\": 1, \"min\": 0.6920842590332031, \"max\": 0.6920842590332031}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.7290845, \"EndTime\": 1638819061.7291055, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.47095896530151365, \"count\": 1, \"min\": 0.47095896530151365, \"max\": 0.47095896530151365}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.729164, \"EndTime\": 1638819061.7292638, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.6852618789672852, \"count\": 1, \"min\": 0.6852618789672852, \"max\": 0.6852618789672852}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.729454, \"EndTime\": 1638819061.7294748, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.685533187866211, \"count\": 1, \"min\": 0.685533187866211, \"max\": 0.685533187866211}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.7295291, \"EndTime\": 1638819061.7295465, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.7472627716064453, \"count\": 1, \"min\": 0.7472627716064453, \"max\": 0.7472627716064453}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.7297883, \"EndTime\": 1638819061.7298095, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.544004623413086, \"count\": 1, \"min\": 0.544004623413086, \"max\": 0.544004623413086}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.7299337, \"EndTime\": 1638819061.7299633, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.8595264358520508, \"count\": 1, \"min\": 0.8595264358520508, \"max\": 0.8595264358520508}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.7301102, \"EndTime\": 1638819061.73013, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.25828735160827637, \"count\": 1, \"min\": 0.25828735160827637, \"max\": 0.25828735160827637}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.7302668, \"EndTime\": 1638819061.730289, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.21187644004821776, \"count\": 1, \"min\": 0.21187644004821776, \"max\": 0.21187644004821776}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.730349, \"EndTime\": 1638819061.7303665, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.8944516067504883, \"count\": 1, \"min\": 0.8944516067504883, \"max\": 0.8944516067504883}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.7304418, \"EndTime\": 1638819061.7304616, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.31442445755004883, \"count\": 1, \"min\": 0.31442445755004883, \"max\": 0.31442445755004883}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #quality_metric: host=algo-1, epoch=1, train multiclass_cross_entropy_objective <loss>=0.7643161010742188\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=1, criteria=multiclass_cross_entropy_objective, value=0.21187644004821776\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Epoch 1: Loss improved. Updating best model\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Saving model for epoch: 1\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Saved checkpoint to \"/tmp/tmpd17wu3h9/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #progress_metric: host=algo-1, completed 10.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.4997694, \"EndTime\": 1638819061.744321, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 1, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 27736.0, \"count\": 1, \"min\": 27736, \"max\": 27736}, \"Total Batches Seen\": {\"sum\": 28.0, \"count\": 1, \"min\": 28, \"max\": 28}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 4.0, \"count\": 1, \"min\": 4, \"max\": 4}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=36416.91956244715 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:01.918] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 8, \"duration\": 173, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9180696, \"EndTime\": 1638819061.9181626, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.6065733718872071, \"count\": 1, \"min\": 0.6065733718872071, \"max\": 0.6065733718872071}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.918281, \"EndTime\": 1638819061.9183028, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.5230986976623535, \"count\": 1, \"min\": 0.5230986976623535, \"max\": 0.5230986976623535}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9183898, \"EndTime\": 1638819061.918409, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.33693537521362305, \"count\": 1, \"min\": 0.33693537521362305, \"max\": 0.33693537521362305}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9184656, \"EndTime\": 1638819061.9184835, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4876424903869629, \"count\": 1, \"min\": 0.4876424903869629, \"max\": 0.4876424903869629}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9185658, \"EndTime\": 1638819061.9185848, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.5223569755554199, \"count\": 1, \"min\": 0.5223569755554199, \"max\": 0.5223569755554199}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9186625, \"EndTime\": 1638819061.9186795, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.6247017364501953, \"count\": 1, \"min\": 0.6247017364501953, \"max\": 0.6247017364501953}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9187324, \"EndTime\": 1638819061.9187481, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.49836857604980467, \"count\": 1, \"min\": 0.49836857604980467, \"max\": 0.49836857604980467}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9188251, \"EndTime\": 1638819061.9188416, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.7140587615966797, \"count\": 1, \"min\": 0.7140587615966797, \"max\": 0.7140587615966797}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9188943, \"EndTime\": 1638819061.918911, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.1971806755065918, \"count\": 1, \"min\": 0.1971806755065918, \"max\": 0.1971806755065918}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9189918, \"EndTime\": 1638819061.9190078, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.1948902359008789, \"count\": 1, \"min\": 0.1948902359008789, \"max\": 0.1948902359008789}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9190593, \"EndTime\": 1638819061.9190762, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.7701567611694335, \"count\": 1, \"min\": 0.7701567611694335, \"max\": 0.7701567611694335}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9191582, \"EndTime\": 1638819061.919177, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.24839077949523924, \"count\": 1, \"min\": 0.24839077949523924, \"max\": 0.24839077949523924}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #quality_metric: host=algo-1, epoch=2, train multiclass_cross_entropy_objective <loss>=0.6065733718872071\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=2, criteria=multiclass_cross_entropy_objective, value=0.1948902359008789\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Epoch 2: Loss improved. Updating best model\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Saving model for epoch: 2\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] Saved checkpoint to \"/tmp/tmprfd_038m/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #progress_metric: host=algo-1, completed 15.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.744657, \"EndTime\": 1638819061.9298806, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 2, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 36648.0, \"count\": 1, \"min\": 36648, \"max\": 36648}, \"Total Batches Seen\": {\"sum\": 37.0, \"count\": 1, \"min\": 37, \"max\": 37}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 5.0, \"count\": 1, \"min\": 5, \"max\": 5}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:01 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=48085.30045628736 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:02.160] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 10, \"duration\": 229, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.1601846, \"EndTime\": 1638819062.1605158, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.49481079864501953, \"count\": 1, \"min\": 0.49481079864501953, \"max\": 0.49481079864501953}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.160697, \"EndTime\": 1638819062.1609104, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4127955207824707, \"count\": 1, \"min\": 0.4127955207824707, \"max\": 0.4127955207824707}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.1611676, \"EndTime\": 1638819062.161197, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.29915340423583986, \"count\": 1, \"min\": 0.29915340423583986, \"max\": 0.29915340423583986}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.16128, \"EndTime\": 1638819062.1614707, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.37024770736694335, \"count\": 1, \"min\": 0.37024770736694335, \"max\": 0.37024770736694335}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.1615565, \"EndTime\": 1638819062.1617365, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4184146156311035, \"count\": 1, \"min\": 0.4184146156311035, \"max\": 0.4184146156311035}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.1618197, \"EndTime\": 1638819062.1618721, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.533210262298584, \"count\": 1, \"min\": 0.533210262298584, \"max\": 0.533210262298584}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.1619563, \"EndTime\": 1638819062.1619816, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.48657284927368166, \"count\": 1, \"min\": 0.48657284927368166, \"max\": 0.48657284927368166}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.162089, \"EndTime\": 1638819062.162113, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.6001024551391602, \"count\": 1, \"min\": 0.6001024551391602, \"max\": 0.6001024551391602}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.1622303, \"EndTime\": 1638819062.1622555, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.18709988784790038, \"count\": 1, \"min\": 0.18709988784790038, \"max\": 0.18709988784790038}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.1623335, \"EndTime\": 1638819062.1623917, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2615427207946777, \"count\": 1, \"min\": 0.2615427207946777, \"max\": 0.2615427207946777}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.162472, \"EndTime\": 1638819062.1624942, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.6693940505981445, \"count\": 1, \"min\": 0.6693940505981445, \"max\": 0.6693940505981445}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.162598, \"EndTime\": 1638819062.1626198, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.23175976753234864, \"count\": 1, \"min\": 0.23175976753234864, \"max\": 0.23175976753234864}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #quality_metric: host=algo-1, epoch=3, train multiclass_cross_entropy_objective <loss>=0.49481079864501953\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=3, criteria=multiclass_cross_entropy_objective, value=0.18709988784790038\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Epoch 3: Loss improved. Updating best model\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saving model for epoch: 3\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saved checkpoint to \"/tmp/tmpqb8pz6sl/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #progress_metric: host=algo-1, completed 20.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.9301095, \"EndTime\": 1638819062.1768692, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 3, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 45560.0, \"count\": 1, \"min\": 45560, \"max\": 45560}, \"Total Batches Seen\": {\"sum\": 46.0, \"count\": 1, \"min\": 46, \"max\": 46}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 6.0, \"count\": 1, \"min\": 6, \"max\": 6}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=36093.69121730969 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:02.339] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 12, \"duration\": 161, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.3392231, \"EndTime\": 1638819062.3392863, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4187787094116211, \"count\": 1, \"min\": 0.4187787094116211, \"max\": 0.4187787094116211}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.339387, \"EndTime\": 1638819062.33943, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.34516167831420896, \"count\": 1, \"min\": 0.34516167831420896, \"max\": 0.34516167831420896}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.3394847, \"EndTime\": 1638819062.3394988, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.30071350479125974, \"count\": 1, \"min\": 0.30071350479125974, \"max\": 0.30071350479125974}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.3395417, \"EndTime\": 1638819062.339553, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.30465493774414065, \"count\": 1, \"min\": 0.30465493774414065, \"max\": 0.30465493774414065}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.339594, \"EndTime\": 1638819062.3396053, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.35452362060546877, \"count\": 1, \"min\": 0.35452362060546877, \"max\": 0.35452362060546877}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.3396451, \"EndTime\": 1638819062.3396564, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4612355918884277, \"count\": 1, \"min\": 0.4612355918884277, \"max\": 0.4612355918884277}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.3396957, \"EndTime\": 1638819062.339707, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.48389573669433594, \"count\": 1, \"min\": 0.48389573669433594, \"max\": 0.48389573669433594}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.339746, \"EndTime\": 1638819062.3397567, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.514047664642334, \"count\": 1, \"min\": 0.514047664642334, \"max\": 0.514047664642334}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.339796, \"EndTime\": 1638819062.3398068, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.18561925315856934, \"count\": 1, \"min\": 0.18561925315856934, \"max\": 0.18561925315856934}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.3398461, \"EndTime\": 1638819062.3398569, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.18463293266296388, \"count\": 1, \"min\": 0.18463293266296388, \"max\": 0.18463293266296388}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.3398967, \"EndTime\": 1638819062.3399074, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.5901951751708985, \"count\": 1, \"min\": 0.5901951751708985, \"max\": 0.5901951751708985}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.339947, \"EndTime\": 1638819062.339958, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2221366138458252, \"count\": 1, \"min\": 0.2221366138458252, \"max\": 0.2221366138458252}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #quality_metric: host=algo-1, epoch=4, train multiclass_cross_entropy_objective <loss>=0.4187787094116211\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=4, criteria=multiclass_cross_entropy_objective, value=0.18463293266296388\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Epoch 4: Loss improved. Updating best model\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saving model for epoch: 4\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saved checkpoint to \"/tmp/tmptyvwwzgu/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #progress_metric: host=algo-1, completed 25.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.1772137, \"EndTime\": 1638819062.3507724, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 4, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 54472.0, \"count\": 1, \"min\": 54472, \"max\": 54472}, \"Total Batches Seen\": {\"sum\": 55.0, \"count\": 1, \"min\": 55, \"max\": 55}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 7.0, \"count\": 1, \"min\": 7, \"max\": 7}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=51316.965992913305 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:02.502] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 14, \"duration\": 151, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.5027468, \"EndTime\": 1638819062.5028234, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3663074073791504, \"count\": 1, \"min\": 0.3663074073791504, \"max\": 0.3663074073791504}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.502925, \"EndTime\": 1638819062.502946, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3024066505432129, \"count\": 1, \"min\": 0.3024066505432129, \"max\": 0.3024066505432129}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.5030031, \"EndTime\": 1638819062.5030212, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3161426010131836, \"count\": 1, \"min\": 0.3161426010131836, \"max\": 0.3161426010131836}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.50308, \"EndTime\": 1638819062.5030966, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2664819679260254, \"count\": 1, \"min\": 0.2664819679260254, \"max\": 0.2664819679260254}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.5031497, \"EndTime\": 1638819062.503166, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3161484832763672, \"count\": 1, \"min\": 0.3161484832763672, \"max\": 0.3161484832763672}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.503223, \"EndTime\": 1638819062.503241, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.40357398223876956, \"count\": 1, \"min\": 0.40357398223876956, \"max\": 0.40357398223876956}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.5032947, \"EndTime\": 1638819062.5033112, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.48362954711914063, \"count\": 1, \"min\": 0.48362954711914063, \"max\": 0.48362954711914063}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.5033643, \"EndTime\": 1638819062.5033808, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4490441627502441, \"count\": 1, \"min\": 0.4490441627502441, \"max\": 0.4490441627502441}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.5034337, \"EndTime\": 1638819062.5034513, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.18726333618164062, \"count\": 1, \"min\": 0.18726333618164062, \"max\": 0.18726333618164062}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.503509, \"EndTime\": 1638819062.5035262, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2656487731933594, \"count\": 1, \"min\": 0.2656487731933594, \"max\": 0.2656487731933594}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.503579, \"EndTime\": 1638819062.5035963, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.5284857330322266, \"count\": 1, \"min\": 0.5284857330322266, \"max\": 0.5284857330322266}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.50365, \"EndTime\": 1638819062.503668, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.21912233924865723, \"count\": 1, \"min\": 0.21912233924865723, \"max\": 0.21912233924865723}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #quality_metric: host=algo-1, epoch=5, train multiclass_cross_entropy_objective <loss>=0.3663074073791504\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=5, criteria=multiclass_cross_entropy_objective, value=0.18726333618164062\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saving model for epoch: 5\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saved checkpoint to \"/tmp/tmpxe8aik6f/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #progress_metric: host=algo-1, completed 30.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.3509755, \"EndTime\": 1638819062.5172877, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 5, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 63384.0, \"count\": 1, \"min\": 63384, \"max\": 63384}, \"Total Batches Seen\": {\"sum\": 64.0, \"count\": 1, \"min\": 64, \"max\": 64}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 8.0, \"count\": 1, \"min\": 8, \"max\": 8}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=53528.02551269549 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:02.683] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 16, \"duration\": 165, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6836603, \"EndTime\": 1638819062.6837533, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.33045352935791017, \"count\": 1, \"min\": 0.33045352935791017, \"max\": 0.33045352935791017}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6838927, \"EndTime\": 1638819062.6839397, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2754493293762207, \"count\": 1, \"min\": 0.2754493293762207, \"max\": 0.2754493293762207}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6840732, \"EndTime\": 1638819062.6840966, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.33208465957641603, \"count\": 1, \"min\": 0.33208465957641603, \"max\": 0.33208465957641603}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6842089, \"EndTime\": 1638819062.6842313, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.24366120147705078, \"count\": 1, \"min\": 0.24366120147705078, \"max\": 0.24366120147705078}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6843479, \"EndTime\": 1638819062.684389, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2930734939575195, \"count\": 1, \"min\": 0.2930734939575195, \"max\": 0.2930734939575195}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6844547, \"EndTime\": 1638819062.6844738, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3571049880981445, \"count\": 1, \"min\": 0.3571049880981445, \"max\": 0.3571049880981445}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6845872, \"EndTime\": 1638819062.6846273, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4836674537658691, \"count\": 1, \"min\": 0.4836674537658691, \"max\": 0.4836674537658691}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6847315, \"EndTime\": 1638819062.6847732, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.40076565933227537, \"count\": 1, \"min\": 0.40076565933227537, \"max\": 0.40076565933227537}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6848338, \"EndTime\": 1638819062.6849327, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.1911371669769287, \"count\": 1, \"min\": 0.1911371669769287, \"max\": 0.1911371669769287}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6850033, \"EndTime\": 1638819062.6850219, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.18202655792236327, \"count\": 1, \"min\": 0.18202655792236327, \"max\": 0.18202655792236327}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.6851258, \"EndTime\": 1638819062.6851466, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4815195579528809, \"count\": 1, \"min\": 0.4815195579528809, \"max\": 0.4815195579528809}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.685239, \"EndTime\": 1638819062.685261, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2153040065765381, \"count\": 1, \"min\": 0.2153040065765381, \"max\": 0.2153040065765381}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #quality_metric: host=algo-1, epoch=6, train multiclass_cross_entropy_objective <loss>=0.33045352935791017\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=6, criteria=multiclass_cross_entropy_objective, value=0.18202655792236327\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Epoch 6: Loss improved. Updating best model\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saving model for epoch: 6\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saved checkpoint to \"/tmp/tmp74mo6dop/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #progress_metric: host=algo-1, completed 35.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.517665, \"EndTime\": 1638819062.6988685, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 6, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 72296.0, \"count\": 1, \"min\": 72296, \"max\": 72296}, \"Total Batches Seen\": {\"sum\": 73.0, \"count\": 1, \"min\": 73, \"max\": 73}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=49131.49868035036 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:02.862] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 18, \"duration\": 163, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8627384, \"EndTime\": 1638819062.862808, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3050705909729004, \"count\": 1, \"min\": 0.3050705909729004, \"max\": 0.3050705909729004}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8629029, \"EndTime\": 1638819062.862925, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.25767714500427247, \"count\": 1, \"min\": 0.25767714500427247, \"max\": 0.25767714500427247}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8629866, \"EndTime\": 1638819062.8630056, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.33920886993408206, \"count\": 1, \"min\": 0.33920886993408206, \"max\": 0.33920886993408206}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8630636, \"EndTime\": 1638819062.863081, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.22890775871276856, \"count\": 1, \"min\": 0.22890775871276856, \"max\": 0.22890775871276856}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8631973, \"EndTime\": 1638819062.8632185, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2790426368713379, \"count\": 1, \"min\": 0.2790426368713379, \"max\": 0.2790426368713379}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8632655, \"EndTime\": 1638819062.8632827, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3196294059753418, \"count\": 1, \"min\": 0.3196294059753418, \"max\": 0.3196294059753418}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8633268, \"EndTime\": 1638819062.8633437, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.48367192077636717, \"count\": 1, \"min\": 0.48367192077636717, \"max\": 0.48367192077636717}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8633957, \"EndTime\": 1638819062.8634112, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3644644203186035, \"count\": 1, \"min\": 0.3644644203186035, \"max\": 0.3644644203186035}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8634512, \"EndTime\": 1638819062.8634667, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.19573068618774414, \"count\": 1, \"min\": 0.19573068618774414, \"max\": 0.19573068618774414}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8635063, \"EndTime\": 1638819062.863522, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.25854025840759276, \"count\": 1, \"min\": 0.25854025840759276, \"max\": 0.25854025840759276}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8635614, \"EndTime\": 1638819062.863577, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4456962089538574, \"count\": 1, \"min\": 0.4456962089538574, \"max\": 0.4456962089538574}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8636389, \"EndTime\": 1638819062.8636518, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.21530379295349122, \"count\": 1, \"min\": 0.21530379295349122, \"max\": 0.21530379295349122}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #quality_metric: host=algo-1, epoch=7, train multiclass_cross_entropy_objective <loss>=0.3050705909729004\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=7, criteria=multiclass_cross_entropy_objective, value=0.19573068618774414\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saving model for epoch: 7\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] Saved checkpoint to \"/tmp/tmpa98ccggf/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #progress_metric: host=algo-1, completed 40.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.699239, \"EndTime\": 1638819062.8759596, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 7, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 81208.0, \"count\": 1, \"min\": 81208, \"max\": 81208}, \"Total Batches Seen\": {\"sum\": 82.0, \"count\": 1, \"min\": 82, \"max\": 82}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 10.0, \"count\": 1, \"min\": 10, \"max\": 10}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:02 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=50386.64814734935 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:03.052] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 20, \"duration\": 176, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0526614, \"EndTime\": 1638819063.0527267, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.28681057357788087, \"count\": 1, \"min\": 0.28681057357788087, \"max\": 0.28681057357788087}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0528104, \"EndTime\": 1638819063.052829, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2455206413269043, \"count\": 1, \"min\": 0.2455206413269043, \"max\": 0.2455206413269043}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0528665, \"EndTime\": 1638819063.052876, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.33809293365478515, \"count\": 1, \"min\": 0.33809293365478515, \"max\": 0.33809293365478515}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0529094, \"EndTime\": 1638819063.0529234, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2190519733428955, \"count\": 1, \"min\": 0.2190519733428955, \"max\": 0.2190519733428955}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0529723, \"EndTime\": 1638819063.0529878, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2703887939453125, \"count\": 1, \"min\": 0.2703887939453125, \"max\": 0.2703887939453125}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0530374, \"EndTime\": 1638819063.053053, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.28946059036254884, \"count\": 1, \"min\": 0.28946059036254884, \"max\": 0.28946059036254884}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.053101, \"EndTime\": 1638819063.0531707, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4836849136352539, \"count\": 1, \"min\": 0.4836849136352539, \"max\": 0.4836849136352539}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0532339, \"EndTime\": 1638819063.053251, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.33701605987548827, \"count\": 1, \"min\": 0.33701605987548827, \"max\": 0.33701605987548827}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0533087, \"EndTime\": 1638819063.0533535, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.19860692596435547, \"count\": 1, \"min\": 0.19860692596435547, \"max\": 0.19860692596435547}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.053461, \"EndTime\": 1638819063.0534823, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.19006218338012695, \"count\": 1, \"min\": 0.19006218338012695, \"max\": 0.19006218338012695}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.053541, \"EndTime\": 1638819063.0535586, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4186338348388672, \"count\": 1, \"min\": 0.4186338348388672, \"max\": 0.4186338348388672}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.0536158, \"EndTime\": 1638819063.0536342, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2132500915527344, \"count\": 1, \"min\": 0.2132500915527344, \"max\": 0.2132500915527344}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, epoch=8, train multiclass_cross_entropy_objective <loss>=0.28681057357788087\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=8, criteria=multiclass_cross_entropy_objective, value=0.19006218338012695\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Saving model for epoch: 8\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Saved checkpoint to \"/tmp/tmpygeqt9av/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #progress_metric: host=algo-1, completed 45.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819062.8762898, \"EndTime\": 1638819063.0650067, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 8, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 90120.0, \"count\": 1, \"min\": 90120, \"max\": 90120}, \"Total Batches Seen\": {\"sum\": 91.0, \"count\": 1, \"min\": 91, \"max\": 91}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 11.0, \"count\": 1, \"min\": 11, \"max\": 11}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=47186.14502369429 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:03.266] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 22, \"duration\": 200, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2662811, \"EndTime\": 1638819063.2663531, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.27327856826782226, \"count\": 1, \"min\": 0.27327856826782226, \"max\": 0.27327856826782226}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2664998, \"EndTime\": 1638819063.2665246, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.23694992065429688, \"count\": 1, \"min\": 0.23694992065429688, \"max\": 0.23694992065429688}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.266583, \"EndTime\": 1638819063.2666004, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.33333993530273437, \"count\": 1, \"min\": 0.33333993530273437, \"max\": 0.33333993530273437}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2666569, \"EndTime\": 1638819063.266675, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.21191947174072265, \"count\": 1, \"min\": 0.21191947174072265, \"max\": 0.21191947174072265}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2667303, \"EndTime\": 1638819063.2667463, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.26505270767211914, \"count\": 1, \"min\": 0.26505270767211914, \"max\": 0.26505270767211914}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2667985, \"EndTime\": 1638819063.2668154, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.26525230979919434, \"count\": 1, \"min\": 0.26525230979919434, \"max\": 0.26525230979919434}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2668746, \"EndTime\": 1638819063.2668924, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4838173065185547, \"count\": 1, \"min\": 0.4838173065185547, \"max\": 0.4838173065185547}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2669475, \"EndTime\": 1638819063.2669644, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.3159718208312988, \"count\": 1, \"min\": 0.3159718208312988, \"max\": 0.3159718208312988}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2670221, \"EndTime\": 1638819063.2670388, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.19919631385803221, \"count\": 1, \"min\": 0.19919631385803221, \"max\": 0.19919631385803221}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2670898, \"EndTime\": 1638819063.2671065, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.23332466316223144, \"count\": 1, \"min\": 0.23332466316223144, \"max\": 0.23332466316223144}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2671587, \"EndTime\": 1638819063.2671742, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.39805950927734374, \"count\": 1, \"min\": 0.39805950927734374, \"max\": 0.39805950927734374}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.2672253, \"EndTime\": 1638819063.2672422, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.21425713729858398, \"count\": 1, \"min\": 0.21425713729858398, \"max\": 0.21425713729858398}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, epoch=9, train multiclass_cross_entropy_objective <loss>=0.27327856826782226\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=9, criteria=multiclass_cross_entropy_objective, value=0.19919631385803221\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Saving model for epoch: 9\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Saved checkpoint to \"/tmp/tmpgiaahqtk/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #progress_metric: host=algo-1, completed 50.0 % of epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.065322, \"EndTime\": 1638819063.2798266, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 9, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 99032.0, \"count\": 1, \"min\": 99032, \"max\": 99032}, \"Total Batches Seen\": {\"sum\": 100.0, \"count\": 1, \"min\": 100, \"max\": 100}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 12.0, \"count\": 1, \"min\": 12, \"max\": 12}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=41515.30933314971 records/second\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:03.486] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 24, \"duration\": 206, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.4865098, \"EndTime\": 1638819063.486585, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 0}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.26296467208862306, \"count\": 1, \"min\": 0.26296467208862306, \"max\": 0.26296467208862306}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.4866955, \"EndTime\": 1638819063.4867184, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 1}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2306549663543701, \"count\": 1, \"min\": 0.2306549663543701, \"max\": 0.2306549663543701}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.486779, \"EndTime\": 1638819063.4867954, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 2}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.32983756256103514, \"count\": 1, \"min\": 0.32983756256103514, \"max\": 0.32983756256103514}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.4868503, \"EndTime\": 1638819063.4868672, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 3}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.20661183929443358, \"count\": 1, \"min\": 0.20661183929443358, \"max\": 0.20661183929443358}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.486926, \"EndTime\": 1638819063.4869435, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 4}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2618070945739746, \"count\": 1, \"min\": 0.2618070945739746, \"max\": 0.2618070945739746}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.4869974, \"EndTime\": 1638819063.4870129, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 5}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.24591060256958008, \"count\": 1, \"min\": 0.24591060256958008, \"max\": 0.24591060256958008}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.487066, \"EndTime\": 1638819063.4870837, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 6}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.4837432975769043, \"count\": 1, \"min\": 0.4837432975769043, \"max\": 0.4837432975769043}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.4871404, \"EndTime\": 1638819063.4871583, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 7}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2995083999633789, \"count\": 1, \"min\": 0.2995083999633789, \"max\": 0.2995083999633789}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.4872139, \"EndTime\": 1638819063.4872332, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 8}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.19857675743103026, \"count\": 1, \"min\": 0.19857675743103026, \"max\": 0.19857675743103026}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.487295, \"EndTime\": 1638819063.4873142, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 9}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.2292112350463867, \"count\": 1, \"min\": 0.2292112350463867, \"max\": 0.2292112350463867}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.487372, \"EndTime\": 1638819063.4873908, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 10}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.38237915802001954, \"count\": 1, \"min\": 0.38237915802001954, \"max\": 0.38237915802001954}}}\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.4874487, \"EndTime\": 1638819063.4874673, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"model\": 11}, \"Metrics\": {\"train_multiclass_cross_entropy_objective\": {\"sum\": 0.21278374862670899, \"count\": 1, \"min\": 0.21278374862670899, \"max\": 0.21278374862670899}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, epoch=10, train multiclass_cross_entropy_objective <loss>=0.26296467208862306\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #early_stopping_criteria_metric: host=algo-1, epoch=10, criteria=multiclass_cross_entropy_objective, value=0.19857675743103026\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Saving model for epoch: 10\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Saved checkpoint to \"/tmp/tmp_gtk53r_/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Early stop condition met. Stopping training.\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #progress_metric: host=algo-1, completed 100 % epochs\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819063.28017, \"EndTime\": 1638819063.5017972, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\", \"epoch\": 10, \"Meta\": \"training_data_iter\"}, \"Metrics\": {\"Total Records Seen\": {\"sum\": 107944.0, \"count\": 1, \"min\": 107944, \"max\": 107944}, \"Total Batches Seen\": {\"sum\": 109.0, \"count\": 1, \"min\": 109, \"max\": 109}, \"Max Records Seen Between Resets\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Max Batches Seen Between Resets\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}, \"Reset Count\": {\"sum\": 13.0, \"count\": 1, \"min\": 13, \"max\": 13}, \"Number of Records Since Last Reset\": {\"sum\": 8912.0, \"count\": 1, \"min\": 8912, \"max\": 8912}, \"Number of Batches Since Last Reset\": {\"sum\": 9.0, \"count\": 1, \"min\": 9, \"max\": 9}}}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #throughput_metric: host=algo-1, train throughput=40182.14064745688 records/second\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 WARNING 140097345783616] wait_for_all_workers will not sync workers since the kv store is not running distributed\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 WARNING 140097345783616] wait_for_all_workers will not sync workers since the kv store is not running distributed\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:03.508] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 26, \"duration\": 5, \"num_examples\": 1, \"num_bytes\": 52000}\u001b[0m\n",
      "\u001b[34m[2021-12-06 19:31:03.625] [tensorio] [info] epoch_stats={\"data_pipeline\": \"/opt/ml/input/data/train\", \"epoch\": 28, \"duration\": 93, \"num_examples\": 9, \"num_bytes\": 463424}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #train_score (algo-1) : ('multiclass_cross_entropy_objective', 0.1794032434158736)\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #train_score (algo-1) : ('multiclass_accuracy', 0.9296454219030521)\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #train_score (algo-1) : ('multiclass_top_k_accuracy_3', 1.0)\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #train_score (algo-1) : ('dcg', 0.9731968069847011)\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #train_score (algo-1) : ('macro_recall', 0.92919105)\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #train_score (algo-1) : ('macro_precision', 0.9274226)\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #train_score (algo-1) : ('macro_f_1.000', 0.9280742)\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, train multiclass_cross_entropy_objective <loss>=0.1794032434158736\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, train multiclass_accuracy <score>=0.9296454219030521\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, train multiclass_top_k_accuracy_3 <score>=1.0\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, train dcg <score>=0.9731968069847011\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, train macro_recall <score>=0.9291910529136658\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, train macro_precision <score>=0.9274225831031799\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] #quality_metric: host=algo-1, train macro_f_1.000 <score>=0.9280741810798645\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Best model found for hyperparameters: {\"optimizer\": \"rmsprop\", \"learning_rate\": 0.1375588030986051, \"l1\": 0.18357933947725055, \"wd\": 0.00487966012373174, \"lr_scheduler_step\": 75, \"lr_scheduler_factor\": 0.9036731578757322, \"lr_scheduler_minimum_lr\": 3.888186473153664e-06}\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Saved checkpoint to \"/tmp/tmppgm9j9hx/mx-mod-0000.params\"\u001b[0m\n",
      "\u001b[34m[12/06/2021 19:31:03 INFO 140097345783616] Test data is not provided.\u001b[0m\n",
      "\u001b[34m#metrics {\"StartTime\": 1638819061.0170057, \"EndTime\": 1638819063.6663308, \"Dimensions\": {\"Algorithm\": \"Linear Learner\", \"Host\": \"algo-1\", \"Operation\": \"training\"}, \"Metrics\": {\"initialize.time\": {\"sum\": 182.77978897094727, \"count\": 1, \"min\": 182.77978897094727, \"max\": 182.77978897094727}, \"epochs\": {\"sum\": 20.0, \"count\": 1, \"min\": 20, \"max\": 20}, \"check_early_stopping.time\": {\"sum\": 15.863656997680664, \"count\": 11, \"min\": 0.24080276489257812, \"max\": 8.376121520996094}, \"update.time\": {\"sum\": 2228.377103805542, \"count\": 11, \"min\": 162.25337982177734, \"max\": 273.35143089294434}, \"finalize.time\": {\"sum\": 153.66578102111816, \"count\": 1, \"min\": 153.66578102111816, \"max\": 153.66578102111816}, \"setuptime\": {\"sum\": 26.188135147094727, \"count\": 1, \"min\": 26.188135147094727, \"max\": 26.188135147094727}, \"totaltime\": {\"sum\": 2919.6150302886963, \"count\": 1, \"min\": 2919.6150302886963, \"max\": 2919.6150302886963}}}\u001b[0m\n",
      "\n",
      "2021-12-06 19:31:29 Completed - Training job completed\n",
      "Training seconds: 73\n",
      "Billable seconds: 73\n",
      "-------!"
     ]
    }
   ],
   "source": [
    "# Training a multiclass classifier with softmax loss\n",
    "linearlearner_hyperparams = {\n",
    "    \"feature_dim\": 2,\n",
    "    \"predictor_type\": \"multiclass_classifier\",\n",
    "    \"loss\": \"softmax_loss\",\n",
    "    \"num_classes\" : 3,\n",
    "    \"epochs\": 20,\n",
    "}\n",
    "linearlearner_output_path = \"s3://{}/{}/svm/output\".format(bucket, prefix)\n",
    "s3_train_path = os.path.join(\"s3://\", bucket, s3_train_key)\n",
    "linearlearner_predictor = predictor_from_hyperparams(s3_train_path, linearlearner_hyperparams, linearlearner_output_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "b9b9e3c8",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The csv_serializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n",
      "The json_deserializer has been renamed in sagemaker>=2.\n",
      "See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.925\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWsAAAEWCAYAAACg+rZnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAArp0lEQVR4nO3deZwU1bnG8d8zM6AgKIvAoICCQryKiMaYuCsGETc0mCB64xIVSdTkmpjoNbkGl5gYsxhXJMa471tQXIMKaFwARRBXxIUdBAF3YXjvH1WDPcMsPdA90w3Pl099pqvq1KnTNcPbp0+dc0oRgZmZFbaSpi6AmZnVz8HazKwIOFibmRUBB2szsyLgYG1mVgQcrM3MioCDta0zSS0kPShpmaS71yGfYyU9nsuyNQVJj0g6vqnLYesXB+sNiKRjJE2S9ImkeWlQ2SsHWR8FdALaR8T31zaTiLg1Ig7MQXmqkLSfpJB0X7XtO6Xbn84ynxGSbqkvXUQMjIgb17K4ZjVysN5ASPo5cBlwMUlg7QZcDQzKQfZbAW9FxMoc5JUvi4A9JLXP2HY88FauTqCE/09ZXvgPawMgaTPgAuC0iLgvIj6NiBUR8WBE/DJNs5GkyyTNTZfLJG2U7ttP0mxJv5C0MK2Vn5juOx84DxiS1thPql4DlbR1WoMtS9dPkDRT0seS3pV0bMb2ZzKO20PSxLR5ZaKkPTL2PS3pQknPpvk8LmnzOi7DV8ADwNHp8aXAD4Bbq12rv0maJWm5pMmS9k63HwScm/E+X8kox+8kPQt8BvRIt52c7r9G0j0Z+V8iaawkZfv7MwMH6w3F7sDGwP11pPk18B2gL7ATsBvwm4z95cBmwJbAScBVktpGxG9Jaut3RkSriPhHXQWRtAlwOTAwIloDewBTakjXDhiTpm0P/AUYU61mfAxwItARaA6cVde5gZuA49LXA4DpwNxqaSaSXIN2wG3A3ZI2johHq73PnTKO+SEwDGgNvF8tv18AfdIPor1Jrt3x4XkerIEcrDcM7YEP62mmOBa4ICIWRsQi4HySIFRpRbp/RUQ8DHwCfGMty7MK6C2pRUTMi4jpNaQ5BHg7Im6OiJURcTvwBnBYRpp/RsRbEfE5cBdJkK1VRPwHaCfpGyRB+6Ya0twSEYvTc/4Z2Ij63+cNETE9PWZFtfw+A/6b5MPmFuCMiJhdT35ma3Cw3jAsBjavbIaoxRZUrRW+n25bnUe1YP8Z0KqhBYmIT4EhwHBgnqQxkrbLojyVZdoyY33+WpTnZuB0YH9q+KaRNvW8nja9LCX5NlFX8wrArLp2RsSLwExAJB8qZg3mYL1heA74AjiijjRzSW4UVurGmk0E2foUaJmxXp65MyIei4j+QGeS2vLfsyhPZZnmrGWZKt0M/AR4OK31rpY2U5xN0pbdNiLaAMtIgixAbU0XdTZpSDqNpIY+F/jVWpfcNmgO1huAiFhGchPwKklHSGopqZmkgZL+mCa7HfiNpA7pjbrzSL62r40pwD6SuqU3N/+3coekTpIOT9uuvyRpTqmoIY+HgV5pd8MySUOA7YGH1rJMAETEu8C+JG301bUGVpL0HCmTdB6wacb+BcDWDenxIakXcBFJU8gPgV9J6rt2pbcNmYP1BiIi/gL8nOSm4SKSr+6nk/SQgCSgTAKmAtOAl9Jta3OuJ4A707wmUzXAlpDcdJsLLCEJnD+pIY/FwKFp2sUkNdJDI+LDtSlTtbyfiYiavjU8BjxC0p3vfZJvI5lNHJUDfhZLeqm+86TNTrcAl0TEKxHxNkmPkpsre9qYZUu+KW1mVvhcszYzKwIO1mZmOSbp+nQA2au17JekyyXNkDRV0i715elgbWaWezcAB9WxfyDQM12GAdfUl6GDtZlZjkXEeJIb6LUZBNwUieeBNpI615VnXYMkmlSLbkN95zPPPv/g/KYuglmO9FrnuVYaEnO+mHXHqSQ14kqjImJUA063JVV7Gs1Ot82r7YCCDdZmZo2pIRMmpoG5IcF5jdPVlG1dBzhYm5kBatxW4dlA14z1LtQzYtht1mZmJDXrbJccGA0cl/YK+Q6wLCJqbQIB16zNzICGNYPUn5duB/YjmUBtNvBboBlARIwkmU7hYGAGySRkJ9aXp4O1mRmQPI8iNyJiaD37AzitIXk6WJuZkduadT44WJuZ4WBtZlYUGrk3SIM5WJuZ4Zq1mVlRcLA2MysCJTnsDZIPDtZmZrhmbWZWFByszcyKgIO1mVlRcLA2Myt4JSWFHQ4Lu3RmZo3Eg2LMzIqA26zNzIqAtM5PBssrB2szM1yzNjMrCm6zNjMrAu4NYmZWBAq9Zp230knqna+8zcxyTiXZL00gnzXrkZKaAzcAt0XE0jyey8xsnRT6Dca8lS4i9gKOBboCkyTdJql/vs5nZrYuJGW9NIW8tllHxNuSfgNMAi4HdlbyTs+NiPvyeW4zs4Yo9DbrvAVrSX2AE4FDgCeAwyLiJUlbAM8BDtZmVjBUsuE+fOBK4O8ktejPKzdGxNy0tm1mVjgKu2Kdn2AtqRSYFRE317S/tu1mZk1mQxxuHhEVktpLah4RX+XjHGZmOVXgwTqfFf/3gWcl/Z+kn1cueTxf3oy89FTef2kkk574Y61p/nz+8bw6/q+8+Ngl9O299ert/ffdiVee+jOvjv8rZ/3k8EYobfEaP34yAwYMp3//YYwadfca+yOCiy66lv79h3HYYWcwffqMrI+1hK9xHUoasDRR8fJlLvBQeo7WGUvRufnucQw67g+17h+wf1+22bqc3vucyenn/J3Lf3cSACUl4rKLTmTQ8Zew8wFn8f3D92C7nls2VrGLSkVFBRdcMJLrrhvBmDFX8dBD45kx44MqacaPn8x7783l8cev5cILT2PEiGuyPtZ8jesTJcp6aQp5u8EYEefnK+/G9uyLb9Cty+a17j/0wG9y270TAHjx5RlstmlLyju2YasuHXjnvfm898FCAO5+8DkOPXBX3nh7TqOUu5hMnfo2W23Vma5dywE45JB9GDv2BbbdttvqNGPHPs8RR/RDEn37bsfy5Z+ycOES5sxZWO+x5mtcryYKwtnKZ9e9B4GotnkZSZ/rayPii3ydu7FtUd6O2fMWr16fM38JW5S3Y4vytsyem7F93mJ267ttUxSx4C1YsJjy8q8/EDt1as/UqW/Vmaa8vD0LFizO6ljzNa7XBtxmPRP4hKT73t+B5cACoFe6vt4Qa/6SI6LGkU5R/ePLgOR6VVf9+tV07SRldaz5GtdLDViaQD77We8cEftkrD8oaXxE7CNpek0HSBoGDAMoa7srZa2KoxY6Z/5iunRuv3p9y/J2zFvwEc2bldFli4ztndszd+FHTVHEgldevjnz53+4en3BgsV07NiuWpr2VdLMn5+kWbFiZb3Hmq9xvQq8GSSfNesOklY3aKWvK79H1didLyJGRcSuEbFrsQRqgDFPvMQxg/cGYLedt2X5x58xf+FSJr3yDtt2L2errh1o1qyU7x+2O2OemNzEpS1MO+7Yk/fem8usWfP56qsVjBkznn79dquSpl+/b/PAA08SEUyZ8gatW7ekY8d2WR1rvsb1krJfmkA+a9a/AJ6R9A7JF4fuwE8kbQLcmMfz5tyNV5zB3rv/F5u3bc2MF67kwr/cQ7NmyaW77pZ/8+iTLzNg/75Mn3AZn33+JaeedS0AFRWrOPP/buDBm/+X0tISbrzzaV5/a3ZTvpWCVVZWynnnDefkk39LRcUqBg/+Lj17bsXttz8CwNChA9l3310ZN24S/fsPo0WLjbj44p/VeaxV5Wtcj9LCrlmrpraonGUubQRsRxKs32jITcUW3Ya6dTfPPv9gvemwYxu8XuscaXsOvD7rmPP2Iz9q9Mie7+7d3wR2APoAP5B0XJ7PZ2a2VkLKeqmPpIMkvSlphqRzati/maQHJb0iabqkE+vLM59d924GtgGmABXp5gBuytc5zczWWo5uMKZzI10F9AdmAxMljY6I1zKSnQa8FhGHSeoAvCnp1rqm58hnm/WuwPaRz3YWM7NcyV3Dxm7AjIiYCSDpDmAQkBmsA2idzu/fClgCrKwr03w2g7wKlOcxfzOz3GlAbxBJwyRNyliGZeS0JTArY312ui3TlcB/kUzLMQ34WUSsqqt4+axZbw68JulF4Mt0W0TEoDye08xs7TSgN0hEjAJG1bK7poyqtzAMIGki7kfSXPyEpAkRsby2c+YzWI/IeC1gL2BoHs9nZrb2ctd/ejbJs2crdSGpQWc6EfhD2kw8Q9K7JD3nXqwt03w+MHccyVwgh5A84fwAYGS+zmdmtk5yNyhmItBTUndJzYGjgdHV0nxAEhOR1An4BskUHbXKec1aUq+0cEOBxcCdJP2598/1uczMciZHVdeIWCnpdOAxoBS4PiKmSxqe7h8JXAjcIGkaScvD2RHxYa2Zkp9mkDeACSQPyJ0BIOnMPJzHzCx3cjiMPCIeBh6utm1kxuu5wIENyTMfzSCDgfnAU5L+LukAmmyeKjOz7ESpsl6aQs6DdUTcHxFDSBrLnwbOBDpJukZSgz5JzMwaTYFP5JTPG4yfRsStEXEoyd3QKcAawy7NzApCgc9n3SiPfoyIJRFxbUT0a4zzmZk1WImyX5pAPvtZm5kVjwJ/8o2DtZkZFHw3CAdrMzOAskZpFV5rDtZmZkC4Zm1mVgQK/IG5DtZmZuAbjGZmRcE1azOzIlDY9xcdrM3MACgt7GjtYG1mBlk9tbwpOVibmYGbQczMioJvMJqZFQE3g5iZFYEmeqhAthyszcyAcDOImVkRcLA2MysCbrM2MysC7rpnZlYEXLNeO59/cH5TF2G912Pn0U1dhA3Cyy/s2NRFWO9t1rzXumfihw+YmRU+Dzc3MysGhV2xdrA2MwPcZm1mVhTcz9rMrAg4WJuZFb7w3CBmZkXAbdZmZkXAzSBmZkWgsGO1g7WZGUBJgfezLvDimZk1jpKS7Jf6SDpI0puSZkg6p5Y0+0maImm6pHH15ematZkZoBzdYJRUClwF9AdmAxMljY6I1zLStAGuBg6KiA8kdawvX9eszcxIOoNku9RjN2BGRMyMiK+AO4BB1dIcA9wXER8ARMTC+jJ1sDYzo2HBWtIwSZMylmEZWW0JzMpYn51uy9QLaCvpaUmTJR1XX/ncDGJmBqgBVdeIGAWMqi2rmg6ptl4GfBM4AGgBPCfp+Yh4q7ZzOlibmZHTMTGzga4Z612AuTWk+TAiPgU+lTQe2AmoNVi7GcTMDCgtyX6px0Sgp6TukpoDRwPVn/TxL2BvSWWSWgLfBl6vK1PXrM3MyF3NOiJWSjodeAwoBa6PiOmShqf7R0bE65IeBaYCq4DrIuLVuvJ1sDYzI3dd9wAi4mHg4WrbRlZbvxS4NNs8GxSsJbUFukbE1IYcZ2ZW6Bpyg7Ep1Fu8tGvJppLaAa8A/5T0l/wXzcys8eSwn3VeZPNZsllELAe+B/wzIr4JfDe/xTIza1y5HG6el/JlkaZMUmfgB8BDDclc0p8k7bBWJTMza0Qlyn5pkvJlkeYCkruaMyJioqQewNtZ5v8GMErSC5KGS9psbQtqZpZPRd8MEhF3R0SfiPhJuj4zIgZnk3lEXBcRewLHAVsDUyXdJmn/dSm0mVmuFXqwrrU3iKQrWHOI5GoR8dNsTpDOQLVdunxIcpPy55JOjYijG1ZcM7P8UBE/KWbSumae9ho5HBgLXBwRL6a7LpH05rrmb2aWKwX+CMbag3VE3JiD/F8FfhMRn9Wwb7cc5G9mlhOF/qSYegfFSOoAnA1sD2xcuT0i+mWR/z+BIyXtRdKk8kxE3J8ev2ytSmxmlgcF3gqSVW+QW0kmGOkOnA+8RzJRSTauAoYD00hq2adKuqrhxTQzy6+ivcGYoX1E/EPSzyJiHDAum+eFpfYFekdEAEi6kSRwm5kVlKIfbg6sSH/Ok3SIpJ1J5mfNxptAt4z1riSzTBWV8eMnM2DAcPr3H8aoUXevsT8iuOiia+nffxiHHXYG06fPyPpY+9o+e2zNv+//EU/+6ySGn7jmLY3WrZrz98uOZMydx/HoPSdw1OG9V+87YeguPHL3CTx6zwmceMwujVnsovLcM69x1GEX8b2DL+DG655YY/97Mxfwo2P/wp67nMktN4ytsu/C/7uVAfuey9FH/r6xituoCr1mnU2wvigdzPIL4CzgOuDMLPNvD7yezi/yNPAa0EHSaEnV53ctSBUVFVxwwUiuu24EY8ZcxUMPjWfGjA+qpBk/fjLvvTeXxx+/lgsvPI0RI67J+lhLlJSI88/5Lieefi8DBv+Tww7ajm17tK+S5oc/2JkZMxdzyJCbOOaUOzn35/vSrKyEXttszpDv9eHIH97CIUNupN8+27B1tzZN80YKWEXFKv74u7v529XDufNf5/LYI5OZ+c68Kmk23awlZ/3vYI494YA1jj9k0Lf52zU/bqziNjpJWS9Nod5mkIioHGK+DGjoYJbzGlyiAjN16ttstVVnunYtB+CQQ/Zh7NgX2Hbbr78wjB37PEcc0Q9J9O27HcuXf8rChUuYM2dhvcdaYqfe5bw/6yNmzUnuOz/02Bv0328bZsxcvDpNEGyySXMAWrZoztJlX7CyYhXbdG/HlGlz+eKLlQC8MHkWB+7fk1E3ZntrZcMwfdr7dOnWgS27bg7AgQN3YfxT0+ixTefVadq1b0279q15Zvz0NY7fZddtmTtn8Rrb1xfrQ2+Qf1LD4JiI+FF9x0bEOEnlJN30ApgYEfPXpqBNZcGCxZSXb756vVOn9kyd+ladacrL27NgweKsjrVEecfWzFvw8er1eQs+oW/vzlXS3HTHy4y67Eief3w4m2zSnJ+e/RAR8NY7H3LW6XvRZrON+eLLley3Vw+mvVZUf2aNYtHCpXQqb7N6vWOnNkyf+n7TFajAFHo/62w+Sx4CxqTLWGBT4JNsMpd0MvAiyYx9RwHPS6o1yGc+MXjUqDuzOUXepfdGq6j+NaiGJEjK6lirXVSrI+yzR3def3Mh3zlwJIcefRMjzjmAVps05513l3DtDS9y0zXf54arBvPGWwupWLmqiUpduGr6Oy34CNWICn0ip2yaQe7NXJd0O/DvLPP/JbBzRCxOj20P/Ae4vpZzZTwx+K1ah7o3pvLyzZk//8PV6wsWLKZjx3bV0rSvkmb+/CTNihUr6z3WEvMXfkznTq1Xr3fu1IqFi6rWCY46vDcj//kCAO/PWsqsOcvosXU7pk6fz10PvMpdDyRPRTrr9L2YvyCr+sQGpWOnNiyYv3T1+sIFS+nQcdOmK1CBWR/6WVfXk6o9POoyG/g4Y/1jYNZanLPJ7LhjT957by6zZs3nq69WMGbMePr1q9pToV+/b/PAA08SEUyZ8gatW7ekY8d2WR1rianT57N1t7Z02WIzmpWVcOiA7fj30+9USTN3/nL22G0rADZv15IeW7dd3cbdvm1LALYob82Afj0Z/Widzx7dIG3fuxuz3l/EnNmLWbFiJY8/8hJ777djUxerYJQosl6aQjZt1h9Ttc16PsmIxmzMAV6Q9K80j0HAi5J+DhARBf/EmbKyUs47bzgnn/xbKipWMXjwd+nZcytuv/0RAIYOHci+++7KuHGT6N9/GC1abMTFF/+szmNtTRUVwYhLxnLj1YMpKSnh7n9N4+2ZiznmqJ0AuO2eV7ji789x6fkDeeSu40Hikr+N56OlnwNw9Z8Op02bFqxcWcFv/zCW5R9/2ZRvpyCVlZXyy3OP4qfDr2ZVxSoOO/I7bLNtZ+696xkABv9gLz78cDknDLmUTz/9ApWUcMfNT3PHv86lVasW/OZXNzB54gyWLv2EQw/4P0457WAGfW/3pn1TOVRW4DVr1dSumrPMpd/WtT8izq99b2E0g6zPeuxcFL0ni97LL7j2mm+bNR+wzqH2sCcmZB1zHuy/d6OH9mxq1mMj4oD6ttWk7mBsZlY4Cr3Nuq75rDcGWgKbp081r3wrmwJbZJN5OgnUr4AdaPgkUGZmjabAu1nXWbM+FfgfksA8ma+D9XKSCZqycStwJ3AoyYROxwOL1qagZmb5VLQ164j4G/A3SWdExBVrmf+6TAJlZtZo1ES9PLKVTc1/laQ2lSuS2kr6SZb5r8skUGZmjaZM2S9NIZtgfUpELK1ciYiPgFOyzH9dJoEyM2s0Rd/PGiiRpIw5qUuB5tlkvo6TQJmZNZqibbPO8Bhwl6SRJANbhgOP1HVArp6MbmbWWIq5N0ils4FhwI9JeoS8DHSu84iqT0Y/H6hzcIyZWVMr+pp1RKyS9DzQAxgCtAPureeY1U9Gl/Q/OXpSuplZ3jRVW3S26hoU0ws4GhgKLCbpL01ENLTtubCvgJkZhT83SF016zeACcBhETEDQJJ7cpjZeqloa9bAYJKa9VOSHgXu4OtRjHWqNlNfS0nLK3cBERGeRNfMCkrRtllHxP3A/ZI2AY4g6R/dSdI1wP0R8Xgdx7aubZ+ZWSEq9GBdb2+ViPg0Im6NiENJRh9OAc7Jd8HMzBpTSQOW+kg6SNKbkmZIqjVeSvqWpApJR9WXZzZd91aLiCXAteliZrbeKCvJTZt1OnDwKqA/ydOyJkoaHRGv1ZDuEpKxLPUq9H7gZmaNIoc1692AGRExMyK+IrnfN6iGdGeQdINemG35zMw2eA15urmkYZImZSzDMrLakqrPmp2dbltN0pbAkcDIbMvXoGYQM7P1VUOmSI2IUcCo2rKq6ZBq65cBZ0dEhZTdnU0HazMzctobZDbQNWO9CzC3WppdgTvSQL05cLCklRHxQG2ZOlibmZHTNuGJQE9J3YE5JONVjslMEBHdK19LugF4qK5ADQ7WZmZA7nqDRMRKSaeT9PIoBa6PiOmShqf7s26nrlK+nJTOzKzI5XJQTEQ8DDxcbVuNQToiTsgmTwdrMzOSKnAhc7A2M6O4J3IyM9tgFPrcIA7WZmY4WJuZFYVmBT6e28HazAy3WZuZFQU3g5iZFQF33VtLK1Z92tRFWO9NfXGXpi7CBmHn3ac3dRHWe29PGrDOebhmbWZWBJrlaLh5vjhYm5nhmrWZWVFwsDYzKwIO1mZmRaDU/azNzApfgQ9gdLA2MwMoK/Bo7WBtZoabQczMioJvMJqZFQEHazOzIuBgbWZWBDzc3MysCBR4ZxAHazMzcDOImVlRKHWwNjMrfH6sl5lZEXAziJlZEShzsDYzK3xysDYzK3wFHqsdrM3MwDVrM7Oi4EExZmZFQO66Z2ZW+Nx1z8ysCBR4rC74Zhozs0ZRouyX+kg6SNKbkmZIOqeG/cdKmpou/5G0U315umZtZkbuataSSoGrgP7AbGCipNER8VpGsneBfSPiI0kDgVHAt+vK18HazIycdt3bDZgRETOTfHUHMAhYHawj4j8Z6Z8HutSXqZtBzMxIgmG2i6RhkiZlLMMystoSmJWxPjvdVpuTgEfqK59r1mZmNKw3SESMImm6qElNOdXYL1DS/iTBeq/6zpmXYC1pGrUUDiAi+uTjvGZmayuHvUFmA10z1rsAc9c4n9QHuA4YGBGL68s0XzXrQ9Ofp6U/b05/Hgt8lqdz5s0zE6bwh4tvpGLVKgYf1Y+TTxlUZX9E8PuLb2TC+JfZeOON+N3FP2b7Hbqv3l9RsYoh3z+Xjh3bcvXIsxu7+EXjP89M509/uIuKiuCIwXty4skDquyPCC79/V08O2E6G2/cnBG/O47/2r4bALfd/CQP3PsMEXDkUXtyzA8PaIq3UPD23r0bvzlrH0pLxF0PvMaoGydX2d9qk+b8+cID6VzemrJS8Y9bXubeB18H4IRj+vKDQdsTwFszFnP2+f/mq68qmuBd5EcOB8VMBHpK6g7MAY4Gjql6LnUD7gN+GBFvZZNpXtqsI+L9iHgf2DMifhUR09LlHGBAfccXkoqKVVx04fVcM+ocRj/4Zx4e8yzvzJhdJc2E8VP44P15PPzoZYw4/xQuvOC6KvtvufkRevTYojGLXXQqKlbxh4vu4PJrTuee0efx2MMTmfnOvCppnp0wnVkfLOSBh8/nNyOO4fcX3g7AjLfn8MC9z3Dj7edw+72/ZsK4aXzw/sKmeBsFraREjDh7P07+6WgGfv9WDh3Qi227t62S5r9/0IcZ7y7h8GNu579PvY9z/mcvmpWV0KnDJhw3pA9HHncnhwy5jZISceiBPZvoneSHGrDUJSJWAqcDjwGvA3dFxHRJwyUNT5OdB7QHrpY0RdKk+sqX7xuMm0ha3RYjaQ9gkzyfM6emTZ1Bt27ldO3aiWbNyxh48B48+WTV6/rUk5M4fNA+SGKnvj35ePlnLFr4EQDz5y9m/LiXGHxUv6YoftGYPu09unbrQJeuHWjWrIwDB+7K00++UiXNuKde4ZDDv4MkdtypB598/BmLFi3j3Znz6d2nOy1aNKesrJRddu3FU2OnNM0bKWB9dujE+7OWMmvOclasXMWYx9/igH17VEkTEWzSshkALVs2Z9nyL1hZsQqAstISNt6ojNJS0WLjMhYu+rTR30M+Sdkv9YmIhyOiV0RsExG/S7eNjIiR6euTI6JtRPRNl13ryzPfwfok4CpJ70l6D7ga+FGez5lTCxcuoby8/er1Tp3asXDBkippFiyolqa8HQsWJmku+f2N/PysY1Ghj2VtYgsXLqVT+de1vE6d2rJo4dKqaRZUTdOxU1sWLVjKtttuwcuTZ7B06Sd8/vlXPDvhVRbM/6ixil40yjtuwrwFn6xen7/wEzp1bFUlzS13TWWb7u149tEf8dAdQ7noTxOIgAWLPuUft7zMuIdO4D+PnsTHn3zFMy/Mqn6Kolaq7JemkNfeIBExGdhJ0qaAImJZPs+XD1FDM5aqfbTWlubppybTrt1m7LBDD158cXqeSrh+iBouYnbXGbpv05njf3QgPznlclq23IhevbpQWupeqWtaM8pUv+57796N199axA+H30+3Lptxw1WDmHTMHEpKSjhg3+70O/xGln/8FZdfMpDDB36D0Y+82ViFz7tCr07lveuepEOAHYCNK//zRcQFtaQdBgwDuPqaX3PysMH5Ll69OnVqx/z5X9+oXbBgCR06Vm3nKy+vlmb+Ejp2aMvjj73A009NZsL4l/nyqxV8+snnnP2rK7nkj6c3WvmLRadObavUhhcs+IjNO2xWNU15myppFi74iM07tgHgiMF7csTgPQG48rIH6Fhe9XdkSU26c6eva9LlHVut0ZQx+LDtufaG5KbjB7OXMXvucnps3Y4tylsze+5yliz9AoDHn3qHXfqUr1/BusCjdV6rH5JGAkOAM0g+uL4PbFVb+ogYFRG7RsSuhRCoAXrvuA0fvD+f2bMXsuKrlTzy8H/Yf/9vVkmz3/7fZPS/xhMRvDLlbVq1bkmHjm058+dDGfv01Tw+9kou/fNP2e3bOzhQ12L73lsx64OFzJn9IStWrOTxRyax7/5Ve3jus18fxox+nohg2iszadWqBR3SgL5k8XIA5s1bwpNjp3DQwHqbADc4015bwNZd29Bli01pVlbCIQf2Yuz4d6ukmTv/Y3bfLRlM175dC7pv1ZZZs5cxb/7H9O1dzsYbJfW73b/VhXfeW7+amnJ1gzFf8l2z3iMi+kiaGhHnS/ozSXeVolFWVsq5vzmRU0++mIpVqzjye/uzbc+u3HnHEwAMObo/++y7MxPGT2HggJ/RYuONuPDi4fXkatWVlZXyq3OP5vRTr6CiYhWDjtyDbbbdgnvuHA/AUUP2Ya99evPshFcZNPA8Nm7RnBEXHrf6+F+eOYplSz+lrKyUc359NJtuVlT3sRtFRUVw/qXjuP6KwyktLeGe0a8xY+YShg7uDcDt977KVddN5JIR3+WhO4YiiUuv+A8fLfuCj5Z9waNj3+GBW4+momIVr725iDvve7WJ31FuFfptJdXUVpizzKUXIuLbkp4HvgcsAaZFRL19flasermwZwJfD3xZsX7VjArVzrv7fkW+vT3pjHUOtfM+ezDrmNO55WGNHtrzXbN+SFIb4I9AZe/762pPbmbWNEo2xCfFSPoWMCsiLkzXWwHTgDeAv+bjnGZm62JDvcF4LfAVgKR9gD+k25ZR++QnZmZNZkO9wVgaEZUjR4YAoyLiXuBeSVPydE4zs7VW6D3z81W+UkmVHwQHAE9m7PO0rGZWcHI53Dwf8hU4bwfGSfoQ+ByYACBpW5KmEDOzgqICr1vnJVhHxO8kjQU6A4/H1/0DS0gGyJiZFRRpAwzWABHxfA3bspq31cys8RV2dxC3H5uZAXKwNjMrBg7WZmYFb4NtszYzKyYbZG8QM7Ni4zZrM7Oi4Jq1mVnBq/4YuULjYG1mBrg3iJlZEXCbtZlZERClTV2EOjlYm5nhNmszsyLhYG1mVvA8KMbMrCi4Zm1mVvA8N4iZWRFwM4iZWVFwM4iZWcHzoBgzsyLgftZmZkXBbdZmZgWv0G8wFnbpzMwaiaSslyzyOkjSm5JmSDqnhv2SdHm6f6qkXerL08HazAxIwmG2S+0klQJXAQOB7YGhkravlmwg0DNdhgHXZFM6M7MNnhrwrx67ATMiYmZEfAXcAQyqlmYQcFMkngfaSOpcV6YF22bdrGTnwr41WwNJwyJiVFOXI1vNivCjutiuMcDbk/o1dREapBivcW70yjrmSBpGUiOuNCrjmm0JzMrYNxv4drUsakqzJTCvtnMW4X/Xgjas/iS2jnyN88/XuB4RMSoids1YMj/cagr6UW09mzRVOFibmeXWbKBrxnoXYO5apKnCwdrMLLcmAj0ldZfUHDgaGF0tzWjguLRXyHeAZRFRaxMIFHCbdZHaANv5Gp2vcf75Gq+DiFgp6XTgMaAUuD4ipksanu4fCTwMHAzMAD4DTqwvX0XU2UxiZmYFwM0gZmZFwMHazKwIOFjXQtKRkkLSdk1dlvWNpE+qrZ8g6cqmKs+GSNKvJU1PhzpPkVS9H3Btx20t6dV8l8/W5GBdu6HAMyR3cteZJN/MtYIgaXfgUGCXiOgDfJeqAzSsADlY10BSK2BP4CTSYC1pP0lPS7pH0huSblU6o4ukg9Ntz6STszyUbh8haZSkx4GbJE2Q1DfjPM9K6tPob7CASTpM0guSXpb0b0md0u0jJN0s6UlJb0s6Jd2+n6Txku6X9JqkkZJKJJ0k6a8Z+Z4i6S9N9b4KTGfgw4j4EiAiPoyIuZLOkzRR0qvp323l3/c3Jb0i6TngtKYs+IbMwbpmRwCPRsRbwJKMGbF2Bv6HZHKWHsCekjYGrgUGRsReQIdqeX0TGBQRxwDXAScASOoFbBQRU/P7VgpSi/Sr9xRJU4ALMvY9A3wnInYmmVPhVxn7+gCHALsD50naIt2+G/ALYEdgG+B76bGHS2qWpjkR+Gee3k+xeRzoKuktSVdL2jfdfmVEfCsiegMtSGrfkFy3n0bE7k1RWEs4WNdsKMl/dtKfQ9PXL0bE7IhYBUwBtga2A2ZGxLtpmtur5TU6Ij5PX98NHJoGkB8BN+Sl9IXv84joW7kA52Xs6wI8Jmka8Etgh4x9/4qIzyPiQ+ApkiANye9lZkRUkFz/vSLiU+BJkuu9HdAsIqbl+X0VhYj4hKQSMQxYBNwp6QRg//RbzTSgH7CDpM2ANhExLj385qYos3lQzBoktSf5Q+0tKUg6tQdJJ/YvM5JWkFy/+iZ/+bTyRUR8JukJkhm3fgDsmsOiry+uAP4SEaMl7QeMyNhXfVBA1LP9OuBc4A1cq64i/WB7Gng6Dc6nknxz2TUiZkkaAWxM8vftwRgFwDXrNR1FMnXhVhGxdUR0Bd4F9qol/RtAD0lbp+tD6sn/OuByYGJELMlFgdczmwFz0tfHV9s3SNLG6QfqfiTDegF2S4f2lpBc/2cAIuIFkvkXjmHNbzwbLEnfkNQzY1Nf4M309YfpPZujACJiKbBMUuXf/7GNVU6ryjXrNQ0F/lBt273Aj4F3qieOiM8l/QR4VNKHwIt1ZR4RkyUtxzW92owA7pY0B3ge6J6x70VgDNANuDC9KdYLeI7kd7YjMB64P+OYu4C+EfFRI5S9WLQCrpDUBlhJMuR5GLAUmAa8x9cfhJC0918v6TOSIdTWBDzcPAcktYqIT9K751cBb0fEX2tJuwXJ18/t0rZvy0L6tfyTiPhTte37AWdFxKE1HEbaM+evETE232U0yyc3g+TGKWmvhukkX+OvrSmRpOOAF4BfO1Dnl6Q2kt4iuZnpQG1FzzVrM7Mi4Jq1mVkRcLA2MysCDtZmZkXAwdpyQlJFOnz8VUl3S2q5DnndIOmo9PV1kravI+1+kvbIWB+e3sg1W684WFuuVA4h7w18BQzP3CmpdG0yjYiTI+K1OpLsB6wO1hExMiJuWptzmRUyB2vLhwnAtmmt9ylJtwHTJJVKujSd2W2qpFMBlLgynTVvDNCxMiMlMx3umr4+SNJL6QxwY9NRo8OBM9Na/d7p7Hxnpen7Sno+Pdf9ktpm5HmJpBfTyYz2TrfvkG6bkh6TOcrPrEl5BKPllJJ5uwcCj6abdgN6R8S7koaRPMX5W5I2Ap5VMn3szsA3SEYgdgJeA66vlm8H4O/APmle7SJiiaSRZAyWkXRAxmE3AWdExDhJFwC/JZk1EaAsInaTdHC6/bskgf9vEXGrkqdSr9W3AbN8cLC2XGmRDgyCpGb9D5LmiRczZiQ8EOhT2R5NMoCoJ7APcHs6udBcSU/WkP93gPGVedU3r0oNs8XdSDLrYaX70p+TSWZPhGTY+q8ldQHui4i3637LZo3Hwdpy5fN0utPVktH3X886SDKD2xkR8Vi1dAdT/8xuuZ79rXIGxcrZE4mI2yS9QDJn9mOSTo6Imj44zBqd26ytMT0G/LjygQCSeknahGTypaPTNu3OwP41HPscsK+k7umx7dLtHwOtqyeOiGXAR5Xt0cAPgXHV02WS1INkbvLLgdEkU4aaFQTXrK0xXUfS5PBSOunVIpKn8txPMof4NOAtagiqEbEobfO+L50KdSHQH3gQuEfSIOCMaocdD4xMuxHOJJk9ri5DgP+WtAKYT9Un2Jg1Kc8NYmZWBNwMYmZWBByszcyKgIO1mVkRcLA2MysCDtZmZkXAwdrMrAg4WJuZFYH/Bwu+25yE06xFAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "label_map = {0:'Angry', 1:'Happy', 2:'Sad'}\n",
    "\n",
    "def evaluate_metrics(predictor, test_features, test_labels):\n",
    "    # Evaluate a model on a test set using the given prediction endpoint. Display classification metrics.\n",
    "    \n",
    "    prediction_batches = [\n",
    "        predictor.predict(batch)[\"predictions\"]\n",
    "        for batch in np.array_split(test_features, 100)\n",
    "    ]\n",
    "    # parse raw predictions json to exctract predicted label\n",
    "    test_preds = np.concatenate(\n",
    "        [np.array([x[\"predicted_label\"] for x in batch]) for batch in prediction_batches]\n",
    "    )\n",
    "    test_preds = test_preds.reshape((-1,))\n",
    "    \n",
    "    # calculate accuracy\n",
    "    accuracy = (test_preds == test_labels).sum() / test_labels.shape[0]\n",
    "    \n",
    "    # calculate recall for each class\n",
    "    recall_per_class, classes = [], []\n",
    "    for target_label in np.unique(test_labels):\n",
    "        recall_numerator = np.logical_and(test_preds == target_label, test_labels == target_label).sum()\n",
    "        recall_denominator = (test_labels == target_label).sum()\n",
    "        recall_per_class.append(recall_numerator / recall_denominator)\n",
    "        classes.append(label_map[target_label])\n",
    "    recall = pd.DataFrame({'recall': recall_per_class, 'class_label': classes})\n",
    "    recall.sort_values('class_label', ascending=False, inplace=True)\n",
    "\n",
    "    # calculate confusion matrix\n",
    "    label_mapper = np.vectorize(lambda x: label_map[x])\n",
    "    confusion_matrix = pd.crosstab(label_mapper(test_labels), label_mapper(test_preds), \n",
    "                                   rownames=['Actuals'], colnames=['Predictions'], normalize='index')\n",
    "\n",
    "    # display results\n",
    "    sns.heatmap(confusion_matrix, annot=True, fmt='.2f', cmap=\"YlGnBu\").set_title('Confusion Matrix')  \n",
    "    ax = recall.plot(kind='barh', x='class_label', y='recall', color='steelblue', title='Recall', legend=False)\n",
    "    ax.set_ylabel('')\n",
    "    print('Accuracy: {:.3f}'.format(accuracy))\n",
    "    \n",
    "# evaluate metrics of the model trained with hyperparameters\n",
    "evaluate_metrics(linearlearner_predictor, vectors_test, labels_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "40afda4c",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}