diff --git a/01.getting-started/01.train-within-notebook/01.train-within-notebook.ipynb b/01.getting-started/01.train-within-notebook/01.train-within-notebook.ipynb index 566dfea14..85ca1c407 100644 --- a/01.getting-started/01.train-within-notebook/01.train-within-notebook.ipynb +++ b/01.getting-started/01.train-within-notebook/01.train-within-notebook.ipynb @@ -447,8 +447,9 @@ }, "outputs": [], "source": [ - "for m in ws.models(name='best_model'):\n", - " print(m.name, m.version)" + "models = ws.models(name='best_model')\n", + "for name, m in models.items():\n", + " print(name, m.version)" ] }, { diff --git a/01.getting-started/07.hyperdrive-with-sklearn/.ipynb_checkpoints/07.hyperdrive-with-sklearn-checkpoint.ipynb b/01.getting-started/07.hyperdrive-with-sklearn/.ipynb_checkpoints/07.hyperdrive-with-sklearn-checkpoint.ipynb deleted file mode 100644 index beec8dc59..000000000 --- a/01.getting-started/07.hyperdrive-with-sklearn/.ipynb_checkpoints/07.hyperdrive-with-sklearn-checkpoint.ipynb +++ /dev/null @@ -1,4031 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 07. HyperDrive with scikit-learn\n", - "- Create Batch AI cluster\n", - "- Train on a single node\n", - "- Set up Hyperdrive\n", - "- Parameter sweep with Hyperdrive on Batch AI cluster\n", - "- Monitor parameter sweep runs with run history widget\n", - "- Find best model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create An Experiment\n", - "**Experiment** is a logical container in an Azure ML Workspace. It hosts run records which can include run metrics and output artifacts from your experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "experiment_name = 'hyperdrive-with-sklearn'\n", - "experiment = Experiment(workspace = ws, name = experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create a folder to store the training script." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "script_folder = './samples/hyperdrive-with-sklearn'\n", - "os.makedirs(script_folder, exist_ok = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Provision New Cluster\n", - "Create a new Batch AI cluster using the following Python code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create mlc", - "batchai" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.compute import BatchAiCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "\n", - "# choose a name for your cluster\n", - "batchai_cluster_name = ws.name + \"cpu\"\n", - "\n", - "found = False\n", - "# see if this compute target already exists in the workspace\n", - "for ct in ws.compute_targets():\n", - " print(ct.name, ct.type)\n", - " if (ct.name == batchai_cluster_name and ct.type == 'BatchAI'):\n", - " found = True\n", - " print('found compute target. just use it.')\n", - " compute_target = ct\n", - " break\n", - " \n", - "if not found:\n", - " print('creating a new compute target...')\n", - " provisioning_config = BatchAiCompute.provisioning_configuration(vm_size = \"STANDARD_D2_V2\", # for GPU, use \"STANDARD_NC6\"\n", - " #vm_priority = 'lowpriority', # optional\n", - " autoscale_enabled = True,\n", - " cluster_min_nodes = 1, \n", - " cluster_max_nodes = 4)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws,batchai_cluster_name, provisioning_config)\n", - " \n", - " # can poll for a minimum number of nodes and for a specific timeout. \n", - " # if no min node count is provided it will use the scale settings for the cluster\n", - " compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - " # For a more detailed view of current BatchAI cluster status, use the 'status' property \n", - " print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Ridge Regression with scikit-learn" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from shutil import copyfile\n", - "# copy the diabetes_sklearn.py file to the project folder\n", - "copyfile('./diabetes_sklearn.py', os.path.join(script_folder, 'diabetes_sklearn.py'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# review the diabetes_sklearn.py file if you'd like\n", - "with open(os.path.join(script_folder, 'diabetes_sklearn.py'), 'r') as fin:\n", - " print (fin.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an estimator for the sklearn script\n", - "You can use an estimator pattern to run the script. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.estimator import Estimator\n", - "script_params = {\n", - " '--alpha': 0.1\n", - "}\n", - "\n", - "sk_est = Estimator(source_directory = script_folder,\n", - " script_params = script_params,\n", - " compute_target = compute_target,\n", - " entry_script = 'diabetes_sklearn.py',\n", - " conda_packages = ['scikit-learn'])\n", - " #custom_docker_base_image = 'ninghai/azureml:0.3') # use a custom image here" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai" - ] - }, - "outputs": [], - "source": [ - "# start the job\n", - "from azureml.core.experiment import Experiment\n", - "\n", - "run = experiment.submit(sk_est)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### View run details\n", - "**IMPORTANT**: please use Chrome to navigate the below URL." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai" - ] - }, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.widgets import RunDetails\n", - "\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also check the Batch AI cluster and job status using az-cli commands:\n", - "\n", - "```shell\n", - "# check cluster status. You can see how many nodes are running.\n", - "$ az batchai cluster list\n", - "\n", - "# check job status. You can see how many jobs are running\n", - "$ az batchai job list\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Now Try a Hyperdrive run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.hyperdrive import *\n", - "\n", - "# parameter space to sweep over\n", - "ps = RandomParameterSampling(\n", - " {\n", - " \"alpha\": uniform(0.0, 1.0)\n", - " }\n", - ")\n", - "\n", - "# early termniation policy\n", - "# check every 2 iterations and if the primary metric (epoch_val_acc) falls\n", - "# outside of the range of 10% of the best recorded run so far, terminate it.\n", - "etp = BanditPolicy(slack_factor = 0.1, evaluation_interval = 2)\n", - "\n", - "# Hyperdrive run configuration\n", - "hrc = HyperDriveRunConfig(\n", - " estimator = sk_est,\n", - " hyperparameter_sampling = ps,\n", - " policy = etp,\n", - " # metric to watch (for early termination)\n", - " primary_metric_name = 'mse',\n", - " # terminate if metric falls below threshold\n", - " primary_metric_goal = PrimaryMetricGoal.MINIMIZE,\n", - " max_total_runs = 20,\n", - " max_concurrent_runs = 4,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "hyperdrive run", - "batchai" - ] - }, - "outputs": [], - "source": [ - "# Start Hyperdrive run\n", - "\n", - "hr = experiment.submit(hrc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Use a widget to show runs\n", - "Runs will automatically start to show in the following widget once rendered. You can keep the Notebook open and watch them \"grow\"." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.widgets import RunDetails\n", - "RunDetails(hr).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note**: This is a sample image with 200 runs. Your result might look different.\n", - "![img](../images/hyperdrive-sklearn.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check cluster status, pay attention to the # of running nodes\n", - "# !az batchai cluster list -o table\n", - "\n", - "# check the Batch AI job queue. Notice the Job name is the run history Id. Pay attention to the State of the job.\n", - "# !az batchai job list -o table" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Find best run\n", - "Wait until all Hyperdrive runs finish before running the below cells." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "hr.get_status()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history", - "get metrics" - ] - }, - "outputs": [], - "source": [ - "from tqdm import tqdm\n", - "\n", - "runs = {}\n", - "\n", - "for r in tqdm(hr.get_children()):\n", - " metrics = r.get_metrics()\n", - " if ('mse' in metrics.keys()):\n", - " runs[r.id] = metrics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "best_run_id = min(runs, key = lambda k: runs[k]['mse'])\n", - "best_run = runs[best_run_id]\n", - "print('Best Run: alpha = {0:.4f}, MSE = {1:.4f}'.format(best_run['alpha'], best_run['mse']))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot the best run [Optional] \n", - "Note you will need to install `matplotlib` for this." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import matplotlib\n", - "from matplotlib import pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# get metrics of alpha and mse for all runs\n", - "metrics = np.array([[runs[r]['alpha'], runs[r]['mse']] for r in runs])\n", - "\n", - "# sort the metrics by alpha values\n", - "metrics = np.array(sorted(metrics, key = lambda m: m[0]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.title('MSE over alpha', fontsize = 16)\n", - "\n", - "plt.plot(metrics[:,0], metrics[:,1], 'r--')\n", - "plt.plot(metrics[:,0], metrics[:,1], 'bo')\n", - "\n", - "plt.xlabel('alpha', fontsize = 14)\n", - "plt.ylabel('mean squared error', fontsize = 14)\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.6.5" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "state": { - "7cf278f65a36435fb03137ca56bcd263": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "83e0767b6c3a41a2833d0f8fcf690c72": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "aa3181a75ca34d729b0dce89e779ec0e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_train_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowHyperDriveRunsView", - "layout": "IPY_MODEL_7cf278f65a36435fb03137ca56bcd263", - "value": [ - { - "run_id": "hyperdrive-sklearn-diabetes_1526126138942", - "status": "Running", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-e2e-rg%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2euapws/projects/hyperdrive-sklearn-diabetes/run-history/run-details/hyperdrive-sklearn-diabetes_1526126138942?type=HyperDrive" - }, - [ - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.411237364035508", - "created_time": "2018-05-12 12:12:51.261530+00:00", - "created_time_dt": "2018-05-12T12:12:51.261530", - "duration": "0:00:12", - "end_time": "2018-05-12 12:13:03.803382+00:00", - "hyperdrive_id": "8382", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8382_0beb029b", - "metric": 3295.672, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.409690853942327", - "created_time": "2018-05-12 13:13:23.950880+00:00", - "created_time_dt": "2018-05-12T13:13:23.950880", - "duration": "0:00:28", - "end_time": "2018-05-12 13:13:52.707230+00:00", - "hyperdrive_id": "8479", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8479_5832d5b1", - "metric": 3295.6743, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.417026424561565", - "created_time": "2018-05-12 12:08:27.465571+00:00", - "created_time_dt": "2018-05-12T12:08:27.465571", - "duration": "0:00:12", - "end_time": "2018-05-12 12:08:39.848811+00:00", - "hyperdrive_id": "8370", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8370_c9260eec", - "metric": 3295.6834, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.417442688875759", - "created_time": "2018-05-12 13:03:26.849626+00:00", - "created_time_dt": "2018-05-12T13:03:26.849626", - "duration": "0:00:14", - "end_time": "2018-05-12 13:03:41.499999+00:00", - "hyperdrive_id": "8468", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8468_5e92ff25", - "metric": 3295.6854, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.40612547022086", - "created_time": "2018-05-12 12:40:16.219170+00:00", - "created_time_dt": "2018-05-12T12:40:16.219170", - "duration": "0:00:12", - "end_time": "2018-05-12 12:40:29.063299+00:00", - "hyperdrive_id": "8436", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8436_8d7667d7", - "metric": 3295.6882, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.404098690541524", - "created_time": "2018-05-12 12:28:12.532204+00:00", - "created_time_dt": "2018-05-12T12:28:12.532204", - "duration": "0:00:12", - "end_time": "2018-05-12 12:28:25.123133+00:00", - "hyperdrive_id": "8415", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8415_cd663398", - "metric": 3295.7016, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.422501486914154", - "created_time": "2018-05-12 12:06:04.978496+00:00", - "created_time_dt": "2018-05-12T12:06:04.978496", - "duration": "0:00:13", - "end_time": "2018-05-12 12:06:18.355669+00:00", - "hyperdrive_id": "8363", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8363_b1db4981", - "metric": 3295.7227, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.423906941816355", - "created_time": "2018-05-12 12:27:06.723050+00:00", - "created_time_dt": "2018-05-12T12:27:06.723050", - "duration": "0:00:14", - "end_time": "2018-05-12 12:27:20.746252+00:00", - "hyperdrive_id": "8414", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8414_8f74b802", - "metric": 3295.7372, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.431026531225767", - "created_time": "2018-05-12 12:25:04.908855+00:00", - "created_time_dt": "2018-05-12T12:25:04.908855", - "duration": "0:00:14", - "end_time": "2018-05-12 12:25:19.602114+00:00", - "hyperdrive_id": "8409", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8409_5345e6b2", - "metric": 3295.8375, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.393032827195967", - "created_time": "2018-05-12 12:07:13.020312+00:00", - "created_time_dt": "2018-05-12T12:07:13.020312", - "duration": "0:00:34", - "end_time": "2018-05-12 12:07:47.944409+00:00", - "hyperdrive_id": "8367", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8367_c39107f9", - "metric": 3295.8465, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.436567624426189", - "created_time": "2018-05-12 13:04:49.897871+00:00", - "created_time_dt": "2018-05-12T13:04:49.897871", - "duration": "0:00:14", - "end_time": "2018-05-12 13:05:04.491673+00:00", - "hyperdrive_id": "8470", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8470_a73b2d7b", - "metric": 3295.9462, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.383629052679639", - "created_time": "2018-05-12 12:12:37.531581+00:00", - "created_time_dt": "2018-05-12T12:12:37.531581", - "duration": "0:00:12", - "end_time": "2018-05-12 12:12:50.210199+00:00", - "hyperdrive_id": "8381", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8381_b638e983", - "metric": 3296.0679, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.382111348518354", - "created_time": "2018-05-12 11:55:54.563179+00:00", - "created_time_dt": "2018-05-12T11:55:54.563179", - "duration": "0:00:13", - "end_time": "2018-05-12 11:56:07.888796+00:00", - "hyperdrive_id": "8327", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8327_a045606f", - "metric": 3296.1124, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.381187002593777", - "created_time": "2018-05-12 12:09:12.703228+00:00", - "created_time_dt": "2018-05-12T12:09:12.703228", - "duration": "0:00:17", - "end_time": "2018-05-12 12:09:29.741640+00:00", - "hyperdrive_id": "8373", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8373_053f25c6", - "metric": 3296.1406, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.379109970937149", - "created_time": "2018-05-12 13:02:00.253981+00:00", - "created_time_dt": "2018-05-12T13:02:00.253981", - "duration": "0:00:12", - "end_time": "2018-05-12 13:02:12.909525+00:00", - "hyperdrive_id": "8466", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8466_a379787d", - "metric": 3296.2076, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.448204115660274", - "created_time": "2018-05-12 13:44:11.787530+00:00", - "created_time_dt": "2018-05-12T13:44:11.787530", - "duration": "0:00:13", - "end_time": "2018-05-12 13:44:25.111437+00:00", - "hyperdrive_id": "8514", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8514_3f6ef25a", - "metric": 3296.2587, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.448713062576673", - "created_time": "2018-05-12 12:49:55.612577+00:00", - "created_time_dt": "2018-05-12T12:49:55.612577", - "duration": "0:00:30", - "end_time": "2018-05-12 12:50:26.163813+00:00", - "hyperdrive_id": "8449", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8449_d0363c5b", - "metric": 3296.275, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.451812447966424", - "created_time": "2018-05-12 13:46:02.887675+00:00", - "created_time_dt": "2018-05-12T13:46:02.887675", - "duration": "0:00:13", - "end_time": "2018-05-12 13:46:15.984786+00:00", - "hyperdrive_id": "8515", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8515_131388fa", - "metric": 3296.3782, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.454660892639694", - "created_time": "2018-05-12 12:08:27.411796+00:00", - "created_time_dt": "2018-05-12T12:08:27.411796", - "duration": "0:00:45", - "end_time": "2018-05-12 12:09:12.989012+00:00", - "hyperdrive_id": "8372", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8372_94748f49", - "metric": 3296.4798, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.45772812795942", - "created_time": "2018-05-12 13:15:05.575428+00:00", - "created_time_dt": "2018-05-12T13:15:05.575428", - "duration": "0:00:28", - "end_time": "2018-05-12 13:15:34.181749+00:00", - "hyperdrive_id": "8481", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8481_7b4d7aae", - "metric": 3296.5964, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.459845797045424", - "created_time": "2018-05-12 12:14:11.140060+00:00", - "created_time_dt": "2018-05-12T12:14:11.140060", - "duration": "0:00:13", - "end_time": "2018-05-12 12:14:24.996486+00:00", - "hyperdrive_id": "8386", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8386_f396881b", - "metric": 3296.6811, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.366571747107722", - "created_time": "2018-05-12 12:08:27.253377+00:00", - "created_time_dt": "2018-05-12T12:08:27.253377", - "duration": "0:00:29", - "end_time": "2018-05-12 12:08:56.307309+00:00", - "hyperdrive_id": "8371", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8371_cd392eb6", - "metric": 3296.7127, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.462046659150171", - "created_time": "2018-05-12 12:42:50.088268+00:00", - "created_time_dt": "2018-05-12T12:42:50.088268", - "duration": "0:00:29", - "end_time": "2018-05-12 12:43:19.725900+00:00", - "hyperdrive_id": "8440", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8440_2809b87a", - "metric": 3296.7729, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.466061327723322", - "created_time": "2018-05-12 13:32:48.214641+00:00", - "created_time_dt": "2018-05-12T13:32:48.214641", - "duration": "0:00:33", - "end_time": "2018-05-12 13:33:21.400760+00:00", - "hyperdrive_id": "8502", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8502_f26e1d7a", - "metric": 3296.9498, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.360764179714059", - "created_time": "2018-05-12 12:52:59.773606+00:00", - "created_time_dt": "2018-05-12T12:52:59.773606", - "duration": "0:00:29", - "end_time": "2018-05-12 12:53:29.269383+00:00", - "hyperdrive_id": "8454", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8454_d048fd67", - "metric": 3297.0072, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.357261239177847", - "created_time": "2018-05-12 12:00:06.195143+00:00", - "created_time_dt": "2018-05-12T12:00:06.195143", - "duration": "0:00:15", - "end_time": "2018-05-12 12:00:21.894647+00:00", - "hyperdrive_id": "8343", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8343_4b4ee27d", - "metric": 3297.2039, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.357032645286086", - "created_time": "2018-05-12 12:29:17.822255+00:00", - "created_time_dt": "2018-05-12T12:29:17.822255", - "duration": "0:00:13", - "end_time": "2018-05-12 12:29:31.531549+00:00", - "hyperdrive_id": "8418", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8418_17853174", - "metric": 3297.2173, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.478523449448336", - "created_time": "2018-05-12 12:11:12.128813+00:00", - "created_time_dt": "2018-05-12T12:11:12.128813", - "duration": "0:00:12", - "end_time": "2018-05-12 12:11:24.470896+00:00", - "hyperdrive_id": "8378", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8378_137b1616", - "metric": 3297.5751, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.478800785224639", - "created_time": "2018-05-12 13:48:14.367164+00:00", - "created_time_dt": "2018-05-12T13:48:14.367164", - "duration": "0:00:32", - "end_time": "2018-05-12 13:48:46.834752+00:00", - "hyperdrive_id": "8518", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8518_729c4598", - "metric": 3297.5903, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.344791270146422", - "created_time": "2018-05-12 13:00:23.018949+00:00", - "created_time_dt": "2018-05-12T13:00:23.018949", - "duration": "0:00:31", - "end_time": "2018-05-12 13:00:54.639071+00:00", - "hyperdrive_id": "8464", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8464_7857e9c2", - "metric": 3298.0249, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.338103667119868", - "created_time": "2018-05-12 13:21:55.155823+00:00", - "created_time_dt": "2018-05-12T13:21:55.155823", - "duration": "0:00:30", - "end_time": "2018-05-12 13:22:26.141154+00:00", - "hyperdrive_id": "8489", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8489_b7ffca04", - "metric": 3298.5454, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.332097037995421", - "created_time": "2018-05-12 13:42:09.096805+00:00", - "created_time_dt": "2018-05-12T13:42:09.096805", - "duration": "0:00:18", - "end_time": "2018-05-12 13:42:27.483311+00:00", - "hyperdrive_id": "8511", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8511_ec3cc7c9", - "metric": 3299.0623, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.331939228048221", - "created_time": "2018-05-12 12:45:34.049683+00:00", - "created_time_dt": "2018-05-12T12:45:34.049683", - "duration": "0:00:14", - "end_time": "2018-05-12 12:45:48.102359+00:00", - "hyperdrive_id": "8444", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8444_46d2f35f", - "metric": 3299.0766, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.505093423597719", - "created_time": "2018-05-12 13:18:18.551188+00:00", - "created_time_dt": "2018-05-12T13:18:18.551188", - "duration": "0:00:13", - "end_time": "2018-05-12 13:18:31.915661+00:00", - "hyperdrive_id": "8486", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8486_c437b7f7", - "metric": 3299.2713, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.506815861512464", - "created_time": "2018-05-12 12:27:06.875070+00:00", - "created_time_dt": "2018-05-12T12:27:06.875070", - "duration": "0:00:12", - "end_time": "2018-05-12 12:27:19.538922+00:00", - "hyperdrive_id": "8413", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8413_a969f346", - "metric": 3299.3974, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.509599014162797", - "created_time": "2018-05-12 12:02:10.749542+00:00", - "created_time_dt": "2018-05-12T12:02:10.749542", - "duration": "0:00:22", - "end_time": "2018-05-12 12:02:32.904491+00:00", - "hyperdrive_id": "8351", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8351_08acc5b3", - "metric": 3299.605, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.511754766725497", - "created_time": "2018-05-12 12:31:33.630006+00:00", - "created_time_dt": "2018-05-12T12:31:33.630006", - "duration": "0:00:13", - "end_time": "2018-05-12 12:31:46.932013+00:00", - "hyperdrive_id": "8421", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8421_d66288a6", - "metric": 3299.7693, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.517357778454532", - "created_time": "2018-05-12 13:32:47.999414+00:00", - "created_time_dt": "2018-05-12T13:32:47.999414", - "duration": "0:00:16", - "end_time": "2018-05-12 13:33:04.221248+00:00", - "hyperdrive_id": "8501", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8501_f6988ef5", - "metric": 3300.2095, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.319331797643165", - "created_time": "2018-05-12 13:23:42.824307+00:00", - "created_time_dt": "2018-05-12T13:23:42.824307", - "duration": "0:00:14", - "end_time": "2018-05-12 13:23:56.961000+00:00", - "hyperdrive_id": "8491", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8491_f97ca369", - "metric": 3300.3225, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.319074585293429", - "created_time": "2018-05-12 13:32:34.003659+00:00", - "created_time_dt": "2018-05-12T13:32:34.003659", - "duration": "0:00:14", - "end_time": "2018-05-12 13:32:48.094689+00:00", - "hyperdrive_id": "8500", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8500_d491060c", - "metric": 3300.3502, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.318218570599629", - "created_time": "2018-05-12 12:05:05.927100+00:00", - "created_time_dt": "2018-05-12T12:05:05.927100", - "duration": "0:00:18", - "end_time": "2018-05-12 12:05:23.961623+00:00", - "hyperdrive_id": "8360", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8360_8d3ad717", - "metric": 3300.4432, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.310459620980281", - "created_time": "2018-05-12 13:01:59.639205+00:00", - "created_time_dt": "2018-05-12T13:01:59.639205", - "duration": "0:00:30", - "end_time": "2018-05-12 13:02:29.644690+00:00", - "hyperdrive_id": "8465", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8465_a642fe78", - "metric": 3301.3332, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.308825721895932", - "created_time": "2018-05-12 12:26:00.849703+00:00", - "created_time_dt": "2018-05-12T12:26:00.849703", - "duration": "0:00:14", - "end_time": "2018-05-12 12:26:14.900534+00:00", - "hyperdrive_id": "8411", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8411_59c695f4", - "metric": 3301.5318, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.306982685343673", - "created_time": "2018-05-12 13:25:29.647713+00:00", - "created_time_dt": "2018-05-12T13:25:29.647713", - "duration": "0:00:12", - "end_time": "2018-05-12 13:25:42.574230+00:00", - "hyperdrive_id": "8494", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8494_5b797969", - "metric": 3301.7606, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.306861470957928", - "created_time": "2018-05-12 12:04:02.669871+00:00", - "created_time_dt": "2018-05-12T12:04:02.669871", - "duration": "0:00:11", - "end_time": "2018-05-12 12:04:14.471005+00:00", - "hyperdrive_id": "8357", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8357_d468e6ae", - "metric": 3301.7758, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.539137316483953", - "created_time": "2018-05-12 13:15:05.900228+00:00", - "created_time_dt": "2018-05-12T13:15:05.900228", - "duration": "0:00:43", - "end_time": "2018-05-12 13:15:49.159519+00:00", - "hyperdrive_id": "8482", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8482_d29d0b57", - "metric": 3302.0981, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.54004647672626", - "created_time": "2018-05-12 12:32:49.211373+00:00", - "created_time_dt": "2018-05-12T12:32:49.211373", - "duration": "0:00:14", - "end_time": "2018-05-12 12:33:03.460382+00:00", - "hyperdrive_id": "8423", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8423_88f12348", - "metric": 3302.1828, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.543570780620328", - "created_time": "2018-05-12 12:41:33.851103+00:00", - "created_time_dt": "2018-05-12T12:41:33.851103", - "duration": "0:00:13", - "end_time": "2018-05-12 12:41:47.611145+00:00", - "hyperdrive_id": "8438", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8438_9402e974", - "metric": 3302.5156, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.289360077382501", - "created_time": "2018-05-12 12:06:44.051674+00:00", - "created_time_dt": "2018-05-12T12:06:44.051674", - "duration": "0:00:30", - "end_time": "2018-05-12 12:07:14.422703+00:00", - "hyperdrive_id": "8365", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8365_1677e84b", - "metric": 3304.2101, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.568847163331273", - "created_time": "2018-05-12 13:29:05.740663+00:00", - "created_time_dt": "2018-05-12T13:29:05.740663", - "duration": "0:00:44", - "end_time": "2018-05-12 13:29:49.857716+00:00", - "hyperdrive_id": "8497", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8497_7c3c2de2", - "metric": 3305.0952, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.283304106660311", - "created_time": "2018-05-12 12:17:26.855111+00:00", - "created_time_dt": "2018-05-12T12:17:26.855111", - "duration": "0:00:13", - "end_time": "2018-05-12 12:17:40.339685+00:00", - "hyperdrive_id": "8394", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8394_7d55e673", - "metric": 3305.1657, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.569536449260573", - "created_time": "2018-05-12 12:02:44.927994+00:00", - "created_time_dt": "2018-05-12T12:02:44.927994", - "duration": "0:00:21", - "end_time": "2018-05-12 12:03:06.734426+00:00", - "hyperdrive_id": "8352", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8352_3e2d86ef", - "metric": 3305.1701, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.571288125093237", - "created_time": "2018-05-12 12:23:04.038356+00:00", - "created_time_dt": "2018-05-12T12:23:04.038356", - "duration": "0:00:13", - "end_time": "2018-05-12 12:23:17.679064+00:00", - "hyperdrive_id": "8405", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8405_39ff6a35", - "metric": 3305.3615, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.571422319269393", - "created_time": "2018-05-12 13:29:04.794872+00:00", - "created_time_dt": "2018-05-12T13:29:04.794872", - "duration": "0:00:14", - "end_time": "2018-05-12 13:29:19.297193+00:00", - "hyperdrive_id": "8498", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8498_d7b81242", - "metric": 3305.3762, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.277607345545865", - "created_time": "2018-05-12 12:01:28.481497+00:00", - "created_time_dt": "2018-05-12T12:01:28.481497", - "duration": "0:00:14", - "end_time": "2018-05-12 12:01:42.740559+00:00", - "hyperdrive_id": "8348", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8348_5aef9466", - "metric": 3306.1203, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.275710729664475", - "created_time": "2018-05-12 12:23:03.837019+00:00", - "created_time_dt": "2018-05-12T12:23:03.837019", - "duration": "0:00:13", - "end_time": "2018-05-12 12:23:17.610482+00:00", - "hyperdrive_id": "8406", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8406_223e6751", - "metric": 3306.4502, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.581090311656388", - "created_time": "2018-05-12 13:00:22.858936+00:00", - "created_time_dt": "2018-05-12T13:00:22.858936", - "duration": "0:00:14", - "end_time": "2018-05-12 13:00:37.036926+00:00", - "hyperdrive_id": "8463", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8463_6eabc2c8", - "metric": 3306.4598, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.584829683488196", - "created_time": "2018-05-12 12:16:37.017705+00:00", - "created_time_dt": "2018-05-12T12:16:37.017705", - "duration": "0:00:12", - "end_time": "2018-05-12 12:16:49.387251+00:00", - "hyperdrive_id": "8392", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8392_a2a09d84", - "metric": 3306.8908, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.586916241458208", - "created_time": "2018-05-12 12:55:57.923024+00:00", - "created_time_dt": "2018-05-12T12:55:57.923024", - "duration": "0:00:13", - "end_time": "2018-05-12 12:56:11.355696+00:00", - "hyperdrive_id": "8457", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8457_a77f0d12", - "metric": 3307.134, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.590137507820594", - "created_time": "2018-05-12 12:04:42.201135+00:00", - "created_time_dt": "2018-05-12T12:04:42.201135", - "duration": "0:00:26", - "end_time": "2018-05-12 12:05:08.306074+00:00", - "hyperdrive_id": "8358", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8358_dbe58158", - "metric": 3307.5135, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.594865526074826", - "created_time": "2018-05-12 12:29:17.694994+00:00", - "created_time_dt": "2018-05-12T12:29:17.694994", - "duration": "0:00:12", - "end_time": "2018-05-12 12:29:30.169420+00:00", - "hyperdrive_id": "8417", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8417_badf4e15", - "metric": 3308.079, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.597001755207444", - "created_time": "2018-05-12 12:32:49.199564+00:00", - "created_time_dt": "2018-05-12T12:32:49.199564", - "duration": "0:00:13", - "end_time": "2018-05-12 12:33:03.126949+00:00", - "hyperdrive_id": "8424", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8424_54ed03ea", - "metric": 3308.3377, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.598431037514433", - "created_time": "2018-05-12 12:37:43.626336+00:00", - "created_time_dt": "2018-05-12T12:37:43.626336", - "duration": "0:00:31", - "end_time": "2018-05-12 12:38:15.527333+00:00", - "hyperdrive_id": "8432", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8432_46629b39", - "metric": 3308.512, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.599236029376656", - "created_time": "2018-05-12 11:57:07.392595+00:00", - "created_time_dt": "2018-05-12T11:57:07.392595", - "duration": "0:00:41", - "end_time": "2018-05-12 11:57:48.659976+00:00", - "hyperdrive_id": "8333", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8333_52ae9b26", - "metric": 3308.6105, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.601084397755814", - "created_time": "2018-05-12 11:57:34.200139+00:00", - "created_time_dt": "2018-05-12T11:57:34.200139", - "duration": "0:01:23", - "end_time": "2018-05-12 11:58:58.143110+00:00", - "hyperdrive_id": "8335", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8335_cce61bd6", - "metric": 3308.8378, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.262097025735337", - "created_time": "2018-05-12 12:19:16.917910+00:00", - "created_time_dt": "2018-05-12T12:19:16.917910", - "duration": "0:00:13", - "end_time": "2018-05-12 12:19:30.324225+00:00", - "hyperdrive_id": "8397", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8397_dd81df0e", - "metric": 3309.0036, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.604705870252792", - "created_time": "2018-05-12 13:48:00.448137+00:00", - "created_time_dt": "2018-05-12T13:48:00.448137", - "duration": "0:00:13", - "end_time": "2018-05-12 13:48:14.174291+00:00", - "hyperdrive_id": "8516", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8516_b74e4c8b", - "metric": 3309.2874, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.260351772485082", - "created_time": "2018-05-12 12:40:16.140757+00:00", - "created_time_dt": "2018-05-12T12:40:16.140757", - "duration": "0:00:29", - "end_time": "2018-05-12 12:40:46.115691+00:00", - "hyperdrive_id": "8435", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8435_f6976bb9", - "metric": 3309.355, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.260086732484324", - "created_time": "2018-05-12 12:23:59.882354+00:00", - "created_time_dt": "2018-05-12T12:23:59.882354", - "duration": "0:00:14", - "end_time": "2018-05-12 12:24:14.855275+00:00", - "hyperdrive_id": "8408", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8408_9c5acb0f", - "metric": 3309.4088, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.258916574615307", - "created_time": "2018-05-12 13:36:21.596115+00:00", - "created_time_dt": "2018-05-12T13:36:21.596115", - "duration": "0:00:50", - "end_time": "2018-05-12 13:37:12.123919+00:00", - "hyperdrive_id": "8504", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8504_0c6a00e8", - "metric": 3309.6482, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.611064223594442", - "created_time": "2018-05-12 12:44:18.250013+00:00", - "created_time_dt": "2018-05-12T12:44:18.250013", - "duration": "0:00:29", - "end_time": "2018-05-12 12:44:47.391810+00:00", - "hyperdrive_id": "8442", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8442_abd96bbf", - "metric": 3310.0902, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.256461605043284", - "created_time": "2018-05-12 12:54:31.251204+00:00", - "created_time_dt": "2018-05-12T12:54:31.251204", - "duration": "0:00:29", - "end_time": "2018-05-12 12:55:00.767057+00:00", - "hyperdrive_id": "8455", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8455_b1c25c7c", - "metric": 3310.1585, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.612949039336068", - "created_time": "2018-05-12 12:41:33.890361+00:00", - "created_time_dt": "2018-05-12T12:41:33.890361", - "duration": "0:00:30", - "end_time": "2018-05-12 12:42:04.062774+00:00", - "hyperdrive_id": "8437", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8437_6c50e94e", - "metric": 3310.3315, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.255526064542372", - "created_time": "2018-05-12 13:21:55.194489+00:00", - "created_time_dt": "2018-05-12T13:21:55.194489", - "duration": "0:00:13", - "end_time": "2018-05-12 13:22:08.712290+00:00", - "hyperdrive_id": "8488", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8488_c295f3e2", - "metric": 3310.356, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.2549933776509", - "created_time": "2018-05-12 13:52:12.028365+00:00", - "created_time_dt": "2018-05-12T13:52:12.028365", - "duration": "0:00:13", - "end_time": "2018-05-12 13:52:25.432736+00:00", - "hyperdrive_id": "8520", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8520_0caa9d1d", - "metric": 3310.4692, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.614709777900403", - "created_time": "2018-05-12 13:18:18.431023+00:00", - "created_time_dt": "2018-05-12T13:18:18.431023", - "duration": "0:00:30", - "end_time": "2018-05-12 13:18:48.651732+00:00", - "hyperdrive_id": "8485", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8485_4590c651", - "metric": 3310.5581, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.253919017785107", - "created_time": "2018-05-12 13:39:56.741734+00:00", - "created_time_dt": "2018-05-12T13:39:56.741734", - "duration": "0:01:03", - "end_time": "2018-05-12 13:41:00.308668+00:00", - "hyperdrive_id": "8510", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8510_49564c20", - "metric": 3310.699, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.616902331561374", - "created_time": "2018-05-12 11:56:01.551240+00:00", - "created_time_dt": "2018-05-12T11:56:01.551240", - "duration": "0:01:12", - "end_time": "2018-05-12 11:57:13.590773+00:00", - "hyperdrive_id": "8330", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8330_f4b61ef0", - "metric": 3310.8422, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.25086514487739", - "created_time": "2018-05-12 13:36:21.728793+00:00", - "created_time_dt": "2018-05-12T13:36:21.728793", - "duration": "0:00:33", - "end_time": "2018-05-12 13:36:54.777053+00:00", - "hyperdrive_id": "8505", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8505_cea12178", - "metric": 3311.3645, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.621860856811298", - "created_time": "2018-05-12 12:33:54.903277+00:00", - "created_time_dt": "2018-05-12T12:33:54.903277", - "duration": "0:00:13", - "end_time": "2018-05-12 12:34:08.188676+00:00", - "hyperdrive_id": "8426", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8426_10eb543c", - "metric": 3311.4917, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.24900598383144", - "created_time": "2018-05-12 12:13:25.069763+00:00", - "created_time_dt": "2018-05-12T12:13:25.069763", - "duration": "0:00:25", - "end_time": "2018-05-12 12:13:50.748571+00:00", - "hyperdrive_id": "8383", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8383_c3046cd8", - "metric": 3311.7784, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.6241675621646", - "created_time": "2018-05-12 12:06:44.216070+00:00", - "created_time_dt": "2018-05-12T12:06:44.216070", - "duration": "0:00:12", - "end_time": "2018-05-12 12:06:56.959070+00:00", - "hyperdrive_id": "8366", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8366_f69aa45d", - "metric": 3311.7972, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.625703892831805", - "created_time": "2018-05-12 12:03:08.955336+00:00", - "created_time_dt": "2018-05-12T12:03:08.955336", - "duration": "0:00:31", - "end_time": "2018-05-12 12:03:40.562848+00:00", - "hyperdrive_id": "8353", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8353_a9ca61ba", - "metric": 3312.0018, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.628276137144992", - "created_time": "2018-05-12 13:10:08.091192+00:00", - "created_time_dt": "2018-05-12T13:10:08.091192", - "duration": "0:00:13", - "end_time": "2018-05-12 13:10:21.613075+00:00", - "hyperdrive_id": "8475", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8475_849afdb5", - "metric": 3312.3465, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.628845460109139", - "created_time": "2018-05-12 12:57:35.276994+00:00", - "created_time_dt": "2018-05-12T12:57:35.276994", - "duration": "0:00:13", - "end_time": "2018-05-12 12:57:48.651279+00:00", - "hyperdrive_id": "8459", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8459_6791263c", - "metric": 3312.4231, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.63976851775956", - "created_time": "2018-05-12 13:11:47.176422+00:00", - "created_time_dt": "2018-05-12T13:11:47.176422", - "duration": "0:00:44", - "end_time": "2018-05-12 13:12:31.806029+00:00", - "hyperdrive_id": "8477", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8477_e415c4e4", - "metric": 3313.9173, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.64333587616801", - "created_time": "2018-05-12 11:58:56.044779+00:00", - "created_time_dt": "2018-05-12T11:58:56.044779", - "duration": "0:01:09", - "end_time": "2018-05-12 12:00:05.332499+00:00", - "hyperdrive_id": "8339", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8339_de3651e2", - "metric": 3314.4149, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.651378196123682", - "created_time": "2018-05-12 12:01:04.756275+00:00", - "created_time_dt": "2018-05-12T12:01:04.756275", - "duration": "0:00:53", - "end_time": "2018-05-12 12:01:58.228294+00:00", - "hyperdrive_id": "8346", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8346_bd6c414b", - "metric": 3315.5536, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.652689173629813", - "created_time": "2018-05-12 12:39:00.282391+00:00", - "created_time_dt": "2018-05-12T12:39:00.282391", - "duration": "0:00:12", - "end_time": "2018-05-12 12:39:13.084499+00:00", - "hyperdrive_id": "8434", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8434_8af5e86e", - "metric": 3315.7414, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.231071484600443", - "created_time": "2018-05-12 11:55:54.528694+00:00", - "created_time_dt": "2018-05-12T11:55:54.528694", - "duration": "0:00:29", - "end_time": "2018-05-12 11:56:23.827901+00:00", - "hyperdrive_id": "8328", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8328_21815c4b", - "metric": 3316.1244, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.227069222503092", - "created_time": "2018-05-12 12:35:12.203475+00:00", - "created_time_dt": "2018-05-12T12:35:12.203475", - "duration": "0:00:13", - "end_time": "2018-05-12 12:35:25.412676+00:00", - "hyperdrive_id": "8428", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8428_4bc7ce29", - "metric": 3317.1849, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.223418940687153", - "created_time": "2018-05-12 12:58:56.432059+00:00", - "created_time_dt": "2018-05-12T12:58:56.432059", - "duration": "0:00:14", - "end_time": "2018-05-12 12:59:10.619204+00:00", - "hyperdrive_id": "8461", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8461_cd6afd47", - "metric": 3318.1821, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.670450207932727", - "created_time": "2018-05-12 11:59:52.831246+00:00", - "created_time_dt": "2018-05-12T11:59:52.831246", - "duration": "0:00:44", - "end_time": "2018-05-12 12:00:37.246166+00:00", - "hyperdrive_id": "8342", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8342_e752fb63", - "metric": 3318.3439, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.222216466573058", - "created_time": "2018-05-12 12:10:27.604728+00:00", - "created_time_dt": "2018-05-12T12:10:27.604728", - "duration": "0:02:02", - "end_time": "2018-05-12 12:12:30.373183+00:00", - "hyperdrive_id": "8377", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8377_75383e3d", - "metric": 3318.517, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.222056103824308", - "created_time": "2018-05-12 12:01:04.816005+00:00", - "created_time_dt": "2018-05-12T12:01:04.816005", - "duration": "0:00:23", - "end_time": "2018-05-12 12:01:28.176392+00:00", - "hyperdrive_id": "8347", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8347_796e4acb", - "metric": 3318.5619, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.672122563818468", - "created_time": "2018-05-12 12:49:55.647218+00:00", - "created_time_dt": "2018-05-12T12:49:55.647218", - "duration": "0:00:13", - "end_time": "2018-05-12 12:50:09.437568+00:00", - "hyperdrive_id": "8450", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8450_4d73ae11", - "metric": 3318.5944, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.674219319793153", - "created_time": "2018-05-12 12:06:19.493627+00:00", - "created_time_dt": "2018-05-12T12:06:19.493627", - "duration": "0:00:14", - "end_time": "2018-05-12 12:06:33.612828+00:00", - "hyperdrive_id": "8364", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8364_616bf29d", - "metric": 3318.9097, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.676816186158726", - "created_time": "2018-05-12 11:57:20.761449+00:00", - "created_time_dt": "2018-05-12T11:57:20.761449", - "duration": "0:00:45", - "end_time": "2018-05-12 11:58:06.670890+00:00", - "hyperdrive_id": "8334", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8334_59867097", - "metric": 3319.3021, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.677040806205791", - "created_time": "2018-05-12 12:42:49.923029+00:00", - "created_time_dt": "2018-05-12T12:42:49.923029", - "duration": "0:00:14", - "end_time": "2018-05-12 12:43:04.705488+00:00", - "hyperdrive_id": "8439", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8439_ef9bc000", - "metric": 3319.3362, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.217998990024581", - "created_time": "2018-05-12 13:07:59.395985+00:00", - "created_time_dt": "2018-05-12T13:07:59.395985", - "duration": "0:00:46", - "end_time": "2018-05-12 13:08:45.534751+00:00", - "hyperdrive_id": "8472", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8472_350a8911", - "metric": 3319.7167, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.6799503791279", - "created_time": "2018-05-12 13:04:49.831744+00:00", - "created_time_dt": "2018-05-12T13:04:49.831744", - "duration": "0:00:30", - "end_time": "2018-05-12 13:05:20.589562+00:00", - "hyperdrive_id": "8469", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8469_8ff01e12", - "metric": 3319.7786, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.685038562031804", - "created_time": "2018-05-12 12:01:57.377138+00:00", - "created_time_dt": "2018-05-12T12:01:57.377138", - "duration": "0:00:18", - "end_time": "2018-05-12 12:02:16.176403+00:00", - "hyperdrive_id": "8349", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8349_9dd0edcd", - "metric": 3320.5588, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.213186744612845", - "created_time": "2018-05-12 11:59:28.796665+00:00", - "created_time_dt": "2018-05-12T11:59:28.796665", - "duration": "0:00:20", - "end_time": "2018-05-12 11:59:48.832949+00:00", - "hyperdrive_id": "8341", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8341_8a47e3c3", - "metric": 3321.1344, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.21256169431142", - "created_time": "2018-05-12 12:14:55.830300+00:00", - "created_time_dt": "2018-05-12T12:14:55.830300", - "duration": "0:00:13", - "end_time": "2018-05-12 12:15:08.838193+00:00", - "hyperdrive_id": "8387", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8387_4de71177", - "metric": 3321.3224, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.691031495877125", - "created_time": "2018-05-12 11:59:14.526241+00:00", - "created_time_dt": "2018-05-12T11:59:14.526241", - "duration": "0:00:17", - "end_time": "2018-05-12 11:59:31.757101+00:00", - "hyperdrive_id": "8340", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8340_f729e8a8", - "metric": 3321.4879, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.211515835622294", - "created_time": "2018-05-12 13:56:22.463994+00:00", - "created_time_dt": "2018-05-12T13:56:22.463994", - "duration": "0:00:14", - "end_time": "2018-05-12 13:56:36.879820+00:00", - "hyperdrive_id": "8526", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8526_fc03d679", - "metric": 3321.639, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.694531075877101", - "created_time": "2018-05-12 13:03:26.709852+00:00", - "created_time_dt": "2018-05-12T13:03:26.709852", - "duration": "0:00:30", - "end_time": "2018-05-12 13:03:57.298099+00:00", - "hyperdrive_id": "8467", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8467_820bf267", - "metric": 3322.0354, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.696647020776985", - "created_time": "2018-05-12 12:17:26.399107+00:00", - "created_time_dt": "2018-05-12T12:17:26.399107", - "duration": "0:00:13", - "end_time": "2018-05-12 12:17:39.855186+00:00", - "hyperdrive_id": "8393", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8393_e269fd60", - "metric": 3322.3682, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.207668270269089", - "created_time": "2018-05-12 12:23:59.802255+00:00", - "created_time_dt": "2018-05-12T12:23:59.802255", - "duration": "0:00:14", - "end_time": "2018-05-12 12:24:13.954962+00:00", - "hyperdrive_id": "8407", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8407_f600791c", - "metric": 3322.8255, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.704450171518138", - "created_time": "2018-05-12 12:51:33.047182+00:00", - "created_time_dt": "2018-05-12T12:51:33.047182", - "duration": "0:00:13", - "end_time": "2018-05-12 12:51:46.189745+00:00", - "hyperdrive_id": "8452", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8452_7a96c125", - "metric": 3323.6069, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.204555124314782", - "created_time": "2018-05-12 11:55:54.722551+00:00", - "created_time_dt": "2018-05-12T11:55:54.722551", - "duration": "0:00:45", - "end_time": "2018-05-12 11:56:40.533180+00:00", - "hyperdrive_id": "8329", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8329_3f426453", - "metric": 3323.811, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.203734687408454", - "created_time": "2018-05-12 12:07:13.094366+00:00", - "created_time_dt": "2018-05-12T12:07:13.094366", - "duration": "0:00:18", - "end_time": "2018-05-12 12:07:31.308677+00:00", - "hyperdrive_id": "8368", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8368_cb6c8945", - "metric": 3324.0745, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.709476658707224", - "created_time": "2018-05-12 12:11:12.061752+00:00", - "created_time_dt": "2018-05-12T12:11:12.061752", - "duration": "0:00:28", - "end_time": "2018-05-12 12:11:40.328129+00:00", - "hyperdrive_id": "8379", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8379_c9ae195c", - "metric": 3324.4139, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.202618610645979", - "created_time": "2018-05-12 12:52:59.522663+00:00", - "created_time_dt": "2018-05-12T12:52:59.522663", - "duration": "0:00:13", - "end_time": "2018-05-12 12:53:12.744129+00:00", - "hyperdrive_id": "8453", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8453_2704afe0", - "metric": 3324.4356, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.710489985561568", - "created_time": "2018-05-12 12:13:25.214412+00:00", - "created_time_dt": "2018-05-12T12:13:25.214412", - "duration": "0:00:13", - "end_time": "2018-05-12 12:13:38.794172+00:00", - "hyperdrive_id": "8384", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8384_29ac75d7", - "metric": 3324.5775, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.201388195391872", - "created_time": "2018-05-12 12:11:57.134173+00:00", - "created_time_dt": "2018-05-12T12:11:57.134173", - "duration": "0:00:12", - "end_time": "2018-05-12 12:12:09.855865+00:00", - "hyperdrive_id": "8380", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8380_0393567a", - "metric": 3324.8372, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.199904360954639", - "created_time": "2018-05-12 12:05:06.281666+00:00", - "created_time_dt": "2018-05-12T12:05:06.281666", - "duration": "0:00:35", - "end_time": "2018-05-12 12:05:41.415671+00:00", - "hyperdrive_id": "8361", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8361_790554e0", - "metric": 3325.3264, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.715946699073426", - "created_time": "2018-05-12 13:50:03.986351+00:00", - "created_time_dt": "2018-05-12T13:50:03.986351", - "duration": "0:00:13", - "end_time": "2018-05-12 13:50:17.671869+00:00", - "hyperdrive_id": "8519", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8519_b45b95fe", - "metric": 3325.4631, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.716295824315661", - "created_time": "2018-05-12 12:22:03.607952+00:00", - "created_time_dt": "2018-05-12T12:22:03.607952", - "duration": "0:00:12", - "end_time": "2018-05-12 12:22:16.329865+00:00", - "hyperdrive_id": "8403", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8403_111315cc", - "metric": 3325.5201, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.721309232403544", - "created_time": "2018-05-12 12:09:47.802542+00:00", - "created_time_dt": "2018-05-12T12:09:47.802542", - "duration": "0:00:12", - "end_time": "2018-05-12 12:10:00.639613+00:00", - "hyperdrive_id": "8375", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8375_083d89cd", - "metric": 3326.3413, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.722171183492785", - "created_time": "2018-05-12 13:56:22.539569+00:00", - "created_time_dt": "2018-05-12T13:56:22.539569", - "duration": "0:00:29", - "end_time": "2018-05-12 13:56:52.506291+00:00", - "hyperdrive_id": "8524", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8524_80f88880", - "metric": 3326.4832, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.726313386025429", - "created_time": "2018-05-12 12:44:18.163495+00:00", - "created_time_dt": "2018-05-12T12:44:18.163495", - "duration": "0:00:13", - "end_time": "2018-05-12 12:44:31.168855+00:00", - "hyperdrive_id": "8441", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8441_020fdf69", - "metric": 3327.1678, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.72930361168177", - "created_time": "2018-05-12 13:25:30.013247+00:00", - "created_time_dt": "2018-05-12T13:25:30.013247", - "duration": "0:00:50", - "end_time": "2018-05-12 13:26:20.789242+00:00", - "hyperdrive_id": "8492", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8492_c360744c", - "metric": 3327.6647, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.735331084674993", - "created_time": "2018-05-12 12:19:17.001645+00:00", - "created_time_dt": "2018-05-12T12:19:17.001645", - "duration": "0:00:12", - "end_time": "2018-05-12 12:19:29.055472+00:00", - "hyperdrive_id": "8398", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8398_6057c4b8", - "metric": 3328.6733, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.741333101612688", - "created_time": "2018-05-12 12:30:24.252672+00:00", - "created_time_dt": "2018-05-12T12:30:24.252672", - "duration": "0:00:16", - "end_time": "2018-05-12 12:30:40.316267+00:00", - "hyperdrive_id": "8420", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8420_6adb8838", - "metric": 3329.6868, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.742368394312335", - "created_time": "2018-05-12 13:48:00.662005+00:00", - "created_time_dt": "2018-05-12T13:48:00.662005", - "duration": "0:00:29", - "end_time": "2018-05-12 13:48:29.733162+00:00", - "hyperdrive_id": "8517", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8517_01c069cd", - "metric": 3329.8625, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.74451533044112", - "created_time": "2018-05-12 12:00:06.297211+00:00", - "created_time_dt": "2018-05-12T12:00:06.297211", - "duration": "0:01:05", - "end_time": "2018-05-12 12:01:11.612251+00:00", - "hyperdrive_id": "8344", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8344_2036cd0a", - "metric": 3330.2276, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.750274984006123", - "created_time": "2018-05-12 12:39:00.160319+00:00", - "created_time_dt": "2018-05-12T12:39:00.160319", - "duration": "0:00:29", - "end_time": "2018-05-12 12:39:29.832125+00:00", - "hyperdrive_id": "8433", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8433_2238faf6", - "metric": 3331.2128, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.757819319976897", - "created_time": "2018-05-12 12:21:08.554079+00:00", - "created_time_dt": "2018-05-12T12:21:08.554079", - "duration": "0:00:13", - "end_time": "2018-05-12 12:21:21.958887+00:00", - "hyperdrive_id": "8402", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8402_b2533d98", - "metric": 3332.5151, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.765019942269395", - "created_time": "2018-05-12 12:31:33.508670+00:00", - "created_time_dt": "2018-05-12T12:31:33.508670", - "duration": "0:00:12", - "end_time": "2018-05-12 12:31:46.245844+00:00", - "hyperdrive_id": "8422", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8422_a004deac", - "metric": 3333.7701, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.772240783940475", - "created_time": "2018-05-12 13:11:46.536678+00:00", - "created_time_dt": "2018-05-12T13:11:46.536678", - "duration": "0:00:13", - "end_time": "2018-05-12 13:12:00.351416+00:00", - "hyperdrive_id": "8478", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8478_f9b60072", - "metric": 3335.0403, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.775376593821348", - "created_time": "2018-05-12 11:57:51.483491+00:00", - "created_time_dt": "2018-05-12T11:57:51.483491", - "duration": "0:00:49", - "end_time": "2018-05-12 11:58:41.345056+00:00", - "hyperdrive_id": "8336", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8336_8d9fcbf2", - "metric": 3335.5954, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.776902840582832", - "created_time": "2018-05-12 13:16:42.209279+00:00", - "created_time_dt": "2018-05-12T13:16:42.209279", - "duration": "0:00:12", - "end_time": "2018-05-12 13:16:54.766193+00:00", - "hyperdrive_id": "8483", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8483_a61bd458", - "metric": 3335.8663, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.787404580220175", - "created_time": "2018-05-12 13:44:16.718411+00:00", - "created_time_dt": "2018-05-12T13:44:16.718411", - "duration": "0:00:41", - "end_time": "2018-05-12 13:44:58.084345+00:00", - "hyperdrive_id": "8513", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8513_9bff58a2", - "metric": 3337.7437, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.789523827771144", - "created_time": "2018-05-12 13:20:06.458660+00:00", - "created_time_dt": "2018-05-12T13:20:06.458660", - "duration": "0:00:14", - "end_time": "2018-05-12 13:20:21.078795+00:00", - "hyperdrive_id": "8487", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8487_ff1fa053", - "metric": 3338.1253, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.802056733580286", - "created_time": "2018-05-12 11:58:06.769725+00:00", - "created_time_dt": "2018-05-12T11:58:06.769725", - "duration": "0:00:17", - "end_time": "2018-05-12 11:58:23.830337+00:00", - "hyperdrive_id": "8337", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8337_27db767d", - "metric": 3340.4001, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.158706098065124", - "created_time": "2018-05-12 13:07:59.714140+00:00", - "created_time_dt": "2018-05-12T13:07:59.714140", - "duration": "0:00:12", - "end_time": "2018-05-12 13:08:12.356448+00:00", - "hyperdrive_id": "8471", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8471_4684fafc", - "metric": 3341.1883, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.81666319772656", - "created_time": "2018-05-12 12:57:35.142880+00:00", - "created_time_dt": "2018-05-12T12:57:35.142880", - "duration": "0:00:29", - "end_time": "2018-05-12 12:58:05.114772+00:00", - "hyperdrive_id": "8460", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8460_a5bfa8fb", - "metric": 3343.0888, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.153939964737971", - "created_time": "2018-05-12 12:26:01.040538+00:00", - "created_time_dt": "2018-05-12T12:26:01.040538", - "duration": "0:00:13", - "end_time": "2018-05-12 12:26:14.946367+00:00", - "hyperdrive_id": "8412", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8412_f38b79e1", - "metric": 3343.3287, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.818247357781626", - "created_time": "2018-05-12 12:51:32.713599+00:00", - "created_time_dt": "2018-05-12T12:51:32.713599", - "duration": "0:00:28", - "end_time": "2018-05-12 12:52:01.253396+00:00", - "hyperdrive_id": "8451", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8451_02f74578", - "metric": 3343.3827, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.819893819434544", - "created_time": "2018-05-12 11:58:31.362582+00:00", - "created_time_dt": "2018-05-12T11:58:31.362582", - "duration": "0:00:43", - "end_time": "2018-05-12 11:59:15.122246+00:00", - "hyperdrive_id": "8338", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8338_1d2f97a7", - "metric": 3343.6887, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.152741652399469", - "created_time": "2018-05-12 12:16:36.776970+00:00", - "created_time_dt": "2018-05-12T12:16:36.776970", - "duration": "0:00:12", - "end_time": "2018-05-12 12:16:49.408701+00:00", - "hyperdrive_id": "8391", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8391_4fee6774", - "metric": 3343.8776, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.821590167168393", - "created_time": "2018-05-12 13:27:06.766331+00:00", - "created_time_dt": "2018-05-12T13:27:06.766331", - "duration": "0:00:13", - "end_time": "2018-05-12 13:27:20.387070+00:00", - "hyperdrive_id": "8495", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8495_d4f07494", - "metric": 3344.0045, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.15225619855891", - "created_time": "2018-05-12 13:39:56.625205+00:00", - "created_time_dt": "2018-05-12T13:39:56.625205", - "duration": "0:00:13", - "end_time": "2018-05-12 13:40:10.343274+00:00", - "hyperdrive_id": "8509", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8509_0ced32a8", - "metric": 3344.1012, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.826290872584932", - "created_time": "2018-05-12 12:48:28.934533+00:00", - "created_time_dt": "2018-05-12T12:48:28.934533", - "duration": "0:00:13", - "end_time": "2018-05-12 12:48:41.996203+00:00", - "hyperdrive_id": "8447", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8447_cc33a2e2", - "metric": 3344.8821, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.150287304842608", - "created_time": "2018-05-12 12:20:11.826010+00:00", - "created_time_dt": "2018-05-12T12:20:11.826010", - "duration": "0:00:14", - "end_time": "2018-05-12 12:20:26.700669+00:00", - "hyperdrive_id": "8400", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8400_fb9de45f", - "metric": 3345.0153, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.827917639441571", - "created_time": "2018-05-12 13:30:45.754478+00:00", - "created_time_dt": "2018-05-12T13:30:45.754478", - "duration": "0:00:17", - "end_time": "2018-05-12 13:31:03.690041+00:00", - "hyperdrive_id": "8499", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8499_5da756fc", - "metric": 3345.1866, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.831400494081907", - "created_time": "2018-05-12 13:25:29.760666+00:00", - "created_time_dt": "2018-05-12T13:25:29.760666", - "duration": "0:00:28", - "end_time": "2018-05-12 13:25:58.618049+00:00", - "hyperdrive_id": "8493", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8493_1067756d", - "metric": 3345.8403, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.143633113372336", - "created_time": "2018-05-12 12:15:41.187737+00:00", - "created_time_dt": "2018-05-12T12:15:41.187737", - "duration": "0:00:13", - "end_time": "2018-05-12 12:15:54.635649+00:00", - "hyperdrive_id": "8390", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8390_6bb4c33e", - "metric": 3348.1929, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.843864112354753", - "created_time": "2018-05-12 13:11:46.478245+00:00", - "created_time_dt": "2018-05-12T13:11:46.478245", - "duration": "0:00:30", - "end_time": "2018-05-12 13:12:16.864318+00:00", - "hyperdrive_id": "8476", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8476_7d515d12", - "metric": 3348.1958, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.844834242372722", - "created_time": "2018-05-12 13:34:34.862819+00:00", - "created_time_dt": "2018-05-12T13:34:34.862819", - "duration": "0:00:18", - "end_time": "2018-05-12 13:34:53.000220+00:00", - "hyperdrive_id": "8503", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8503_22cc2459", - "metric": 3348.3802, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.847189528199022", - "created_time": "2018-05-12 12:05:30.243006+00:00", - "created_time_dt": "2018-05-12T12:05:30.243006", - "duration": "0:00:27", - "end_time": "2018-05-12 12:05:57.958523+00:00", - "hyperdrive_id": "8362", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8362_507ea67e", - "metric": 3348.8285, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.847412052270933", - "created_time": "2018-05-12 13:52:12.711262+00:00", - "created_time_dt": "2018-05-12T13:52:12.711262", - "duration": "0:00:29", - "end_time": "2018-05-12 13:52:41.855615+00:00", - "hyperdrive_id": "8522", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8522_49d2012a", - "metric": 3348.8709, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.849158168297161", - "created_time": "2018-05-12 12:35:11.088836+00:00", - "created_time_dt": "2018-05-12T12:35:11.088836", - "duration": "0:00:29", - "end_time": "2018-05-12 12:35:40.836866+00:00", - "hyperdrive_id": "8427", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8427_c559cbd5", - "metric": 3349.2039, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.858392736114089", - "created_time": "2018-05-12 12:10:27.136482+00:00", - "created_time_dt": "2018-05-12T12:10:27.136482", - "duration": "0:00:13", - "end_time": "2018-05-12 12:10:40.337157+00:00", - "hyperdrive_id": "8376", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8376_eae11b68", - "metric": 3350.9728, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.858806435401327", - "created_time": "2018-05-12 12:18:21.437029+00:00", - "created_time_dt": "2018-05-12T12:18:21.437029", - "duration": "0:00:15", - "end_time": "2018-05-12 12:18:37.238879+00:00", - "hyperdrive_id": "8395", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8395_7ad8e7cc", - "metric": 3351.0523, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.870882618277203", - "created_time": "2018-05-12 12:54:31.035593+00:00", - "created_time_dt": "2018-05-12T12:54:31.035593", - "duration": "0:00:13", - "end_time": "2018-05-12 12:54:44.090425+00:00", - "hyperdrive_id": "8456", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8456_6948cbcc", - "metric": 3353.3854, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.870957972314387", - "created_time": "2018-05-12 12:03:37.974468+00:00", - "created_time_dt": "2018-05-12T12:03:37.974468", - "duration": "0:00:54", - "end_time": "2018-05-12 12:04:32.645363+00:00", - "hyperdrive_id": "8356", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8356_c89bedd1", - "metric": 3353.4, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.874263482882214", - "created_time": "2018-05-12 13:44:12.039777+00:00", - "created_time_dt": "2018-05-12T13:44:12.039777", - "duration": "0:00:28", - "end_time": "2018-05-12 13:44:40.898814+00:00", - "hyperdrive_id": "8512", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8512_c8b83bf0", - "metric": 3354.0423, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.874529541822094", - "created_time": "2018-05-12 13:39:56.277448+00:00", - "created_time_dt": "2018-05-12T13:39:56.277448", - "duration": "0:00:29", - "end_time": "2018-05-12 13:40:25.570608+00:00", - "hyperdrive_id": "8507", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8507_1cd72ece", - "metric": 3354.094, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.875032535947787", - "created_time": "2018-05-12 12:03:09.088430+00:00", - "created_time_dt": "2018-05-12T12:03:09.088430", - "duration": "0:00:14", - "end_time": "2018-05-12 12:03:23.413857+00:00", - "hyperdrive_id": "8354", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8354_ba9b01e8", - "metric": 3354.1919, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.131482857415543", - "created_time": "2018-05-12 12:00:40.831510+00:00", - "created_time_dt": "2018-05-12T12:00:40.831510", - "duration": "0:00:13", - "end_time": "2018-05-12 12:00:54.473484+00:00", - "hyperdrive_id": "8345", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8345_e90e298a", - "metric": 3354.3567, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.876760429991959", - "created_time": "2018-05-12 11:56:29.419120+00:00", - "created_time_dt": "2018-05-12T11:56:29.419120", - "duration": "0:01:00", - "end_time": "2018-05-12 11:57:29.880644+00:00", - "hyperdrive_id": "8331", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8331_23196033", - "metric": 3354.5285, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.879527886321761", - "created_time": "2018-05-12 12:48:29.201551+00:00", - "created_time_dt": "2018-05-12T12:48:29.201551", - "duration": "0:00:28", - "end_time": "2018-05-12 12:48:57.994549+00:00", - "hyperdrive_id": "8448", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8448_0adee24d", - "metric": 3355.0683, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.882185892591819", - "created_time": "2018-05-12 12:36:28.013382+00:00", - "created_time_dt": "2018-05-12T12:36:28.013382", - "duration": "0:00:12", - "end_time": "2018-05-12 12:36:40.470870+00:00", - "hyperdrive_id": "8429", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8429_38aa4de9", - "metric": 3355.5878, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.898540073965212", - "created_time": "2018-05-12 13:52:12.001244+00:00", - "created_time_dt": "2018-05-12T13:52:12.001244", - "duration": "0:01:56", - "end_time": "2018-05-12 13:54:08.239396+00:00", - "hyperdrive_id": "8521", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8521_bdd8810c", - "metric": 3358.8047, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.898790550820804", - "created_time": "2018-05-12 12:45:34.119530+00:00", - "created_time_dt": "2018-05-12T12:45:34.119530", - "duration": "0:00:29", - "end_time": "2018-05-12 12:46:03.683003+00:00", - "hyperdrive_id": "8443", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8443_6ecf5b63", - "metric": 3358.8543, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.123019805934679", - "created_time": "2018-05-12 13:18:18.097594+00:00", - "created_time_dt": "2018-05-12T13:18:18.097594", - "duration": "0:00:48", - "end_time": "2018-05-12 13:19:06.174482+00:00", - "hyperdrive_id": "8484", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8484_90ffa59e", - "metric": 3358.9367, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.909619395012488", - "created_time": "2018-05-12 12:04:37.269556+00:00", - "created_time_dt": "2018-05-12T12:04:37.269556", - "duration": "0:00:13", - "end_time": "2018-05-12 12:04:50.677702+00:00", - "hyperdrive_id": "8359", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8359_bec7b5c7", - "metric": 3361.0033, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.116537281119354", - "created_time": "2018-05-12 12:25:05.224578+00:00", - "created_time_dt": "2018-05-12T12:25:05.224578", - "duration": "0:00:13", - "end_time": "2018-05-12 12:25:19.188493+00:00", - "hyperdrive_id": "8410", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8410_481b4e19", - "metric": 3362.6096, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.922247917060456", - "created_time": "2018-05-12 12:55:58.393210+00:00", - "created_time_dt": "2018-05-12T12:55:58.393210", - "duration": "0:00:28", - "end_time": "2018-05-12 12:56:27.202928+00:00", - "hyperdrive_id": "8458", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8458_118e67f8", - "metric": 3363.527, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.924207993821612", - "created_time": "2018-05-12 13:07:59.698584+00:00", - "created_time_dt": "2018-05-12T13:07:59.698584", - "duration": "0:00:28", - "end_time": "2018-05-12 13:08:28.412662+00:00", - "hyperdrive_id": "8473", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8473_92f27331", - "metric": 3363.9203, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.9281605775003", - "created_time": "2018-05-12 12:33:55.035789+00:00", - "created_time_dt": "2018-05-12T12:33:55.035789", - "duration": "0:00:13", - "end_time": "2018-05-12 12:34:08.214661+00:00", - "hyperdrive_id": "8425", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8425_1500a0dd", - "metric": 3364.7148, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.928925041400716", - "created_time": "2018-05-12 12:03:37.850247+00:00", - "created_time_dt": "2018-05-12T12:03:37.850247", - "duration": "0:00:19", - "end_time": "2018-05-12 12:03:57.704131+00:00", - "hyperdrive_id": "8355", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8355_42f510c9", - "metric": 3364.8687, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.929577236031663", - "created_time": "2018-05-12 13:21:55.037697+00:00", - "created_time_dt": "2018-05-12T13:21:55.037697", - "duration": "0:00:48", - "end_time": "2018-05-12 13:22:43.185540+00:00", - "hyperdrive_id": "8490", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8490_5ea3cd3f", - "metric": 3365, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.112224359908429", - "created_time": "2018-05-12 11:56:42.923129+00:00", - "created_time_dt": "2018-05-12T11:56:42.923129", - "duration": "0:00:14", - "end_time": "2018-05-12 11:56:57.464771+00:00", - "hyperdrive_id": "8332", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8332_5219ec61", - "metric": 3365.1342, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.93757819924753", - "created_time": "2018-05-12 12:28:12.472109+00:00", - "created_time_dt": "2018-05-12T12:28:12.472109", - "duration": "0:00:13", - "end_time": "2018-05-12 12:28:25.911571+00:00", - "hyperdrive_id": "8416", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8416_95953de1", - "metric": 3366.6147, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.940420194928342", - "created_time": "2018-05-12 12:22:03.666129+00:00", - "created_time_dt": "2018-05-12T12:22:03.666129", - "duration": "0:00:12", - "end_time": "2018-05-12 12:22:16.335802+00:00", - "hyperdrive_id": "8404", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8404_d0736441", - "metric": 3367.1899, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.943042536771435", - "created_time": "2018-05-12 13:54:15.260969+00:00", - "created_time_dt": "2018-05-12T13:54:15.260969", - "duration": "0:00:11", - "end_time": "2018-05-12 13:54:26.918336+00:00", - "hyperdrive_id": "8523", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8523_76882d61", - "metric": 3367.7213, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.106668849133971", - "created_time": "2018-05-12 12:09:52.702880+00:00", - "created_time_dt": "2018-05-12T12:09:52.702880", - "duration": "0:00:25", - "end_time": "2018-05-12 12:10:18.241796+00:00", - "hyperdrive_id": "8374", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8374_9e11481e", - "metric": 3368.4832, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.954067716722258", - "created_time": "2018-05-12 12:30:24.308130+00:00", - "created_time_dt": "2018-05-12T12:30:24.308130", - "duration": "0:00:16", - "end_time": "2018-05-12 12:30:40.608925+00:00", - "hyperdrive_id": "8419", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8419_1b2ded51", - "metric": 3369.9633, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.104027755017491", - "created_time": "2018-05-12 12:20:11.870461+00:00", - "created_time_dt": "2018-05-12T12:20:11.870461", - "duration": "0:00:14", - "end_time": "2018-05-12 12:20:26.823381+00:00", - "hyperdrive_id": "8399", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8399_70048e50", - "metric": 3370.114, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.104023113674115", - "created_time": "2018-05-12 12:07:53.084399+00:00", - "created_time_dt": "2018-05-12T12:07:53.084399", - "duration": "0:00:13", - "end_time": "2018-05-12 12:08:06.237712+00:00", - "hyperdrive_id": "8369", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8369_993e0dd7", - "metric": 3370.1169, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.955790693896138", - "created_time": "2018-05-12 12:47:02.252823+00:00", - "created_time_dt": "2018-05-12T12:47:02.252823", - "duration": "0:00:30", - "end_time": "2018-05-12 12:47:32.329335+00:00", - "hyperdrive_id": "8445", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8445_c70f8879", - "metric": 3370.3148, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.957619945976621", - "created_time": "2018-05-12 12:14:10.784220+00:00", - "created_time_dt": "2018-05-12T12:14:10.784220", - "duration": "0:00:13", - "end_time": "2018-05-12 12:14:23.785111+00:00", - "hyperdrive_id": "8385", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8385_8b801e22", - "metric": 3370.6882, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.958613790873744", - "created_time": "2018-05-12 12:21:08.499878+00:00", - "created_time_dt": "2018-05-12T12:21:08.499878", - "duration": "0:00:12", - "end_time": "2018-05-12 12:21:21.109495+00:00", - "hyperdrive_id": "8401", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8401_b84ee061", - "metric": 3370.8913, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0991051795076507", - "created_time": "2018-05-12 13:15:04.980450+00:00", - "created_time_dt": "2018-05-12T13:15:04.980450", - "duration": "0:00:13", - "end_time": "2018-05-12 13:15:18.786874+00:00", - "hyperdrive_id": "8480", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8480_614cf569", - "metric": 3373.221, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.970852980638722", - "created_time": "2018-05-12 12:36:27.820576+00:00", - "created_time_dt": "2018-05-12T12:36:27.820576", - "duration": "0:00:29", - "end_time": "2018-05-12 12:36:57.322649+00:00", - "hyperdrive_id": "8430", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8430_b2673e0c", - "metric": 3373.3991, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.979767975474247", - "created_time": "2018-05-12 13:07:59.532196+00:00", - "created_time_dt": "2018-05-12T13:07:59.532196", - "duration": "0:01:02", - "end_time": "2018-05-12 13:09:02.075600+00:00", - "hyperdrive_id": "8474", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8474_fcd51b10", - "metric": 3375.2343, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.984154480758112", - "created_time": "2018-05-12 12:14:55.708218+00:00", - "created_time_dt": "2018-05-12T12:14:55.708218", - "duration": "0:00:13", - "end_time": "2018-05-12 12:15:09.126182+00:00", - "hyperdrive_id": "8388", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8388_c4f98fe4", - "metric": 3376.1398, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.987309642340916", - "created_time": "2018-05-12 12:02:10.550056+00:00", - "created_time_dt": "2018-05-12T12:02:10.550056", - "duration": "0:00:39", - "end_time": "2018-05-12 12:02:50.233034+00:00", - "hyperdrive_id": "8350", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8350_73634488", - "metric": 3376.7921, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0726051008474307", - "created_time": "2018-05-12 13:36:21.997998+00:00", - "created_time_dt": "2018-05-12T13:36:21.997998", - "duration": "0:00:17", - "end_time": "2018-05-12 13:36:39.458975+00:00", - "hyperdrive_id": "8506", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8506_97095faa", - "metric": 3391.4684, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0704611645652615", - "created_time": "2018-05-12 12:37:43.597084+00:00", - "created_time_dt": "2018-05-12T12:37:43.597084", - "duration": "0:00:13", - "end_time": "2018-05-12 12:37:56.959322+00:00", - "hyperdrive_id": "8431", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8431_c751fb54", - "metric": 3393.0553, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0473324391576943", - "created_time": "2018-05-12 13:40:01.568786+00:00", - "created_time_dt": "2018-05-12T13:40:01.568786", - "duration": "0:00:41", - "end_time": "2018-05-12 13:40:43.404157+00:00", - "hyperdrive_id": "8508", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8508_8b1d3c4f", - "metric": 3411.0568, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0423407988138264", - "created_time": "2018-05-12 12:58:56.644162+00:00", - "created_time_dt": "2018-05-12T12:58:56.644162", - "duration": "0:00:31", - "end_time": "2018-05-12 12:59:28.208493+00:00", - "hyperdrive_id": "8462", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8462_296fe088", - "metric": 3415.083, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0356284101972079", - "created_time": "2018-05-12 13:29:08.960435+00:00", - "created_time_dt": "2018-05-12T13:29:08.960435", - "duration": "0:00:25", - "end_time": "2018-05-12 13:29:34.834119+00:00", - "hyperdrive_id": "8496", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8496_37c0fdc0", - "metric": 3420.4809, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0348149292173761", - "created_time": "2018-05-12 12:47:02.035005+00:00", - "created_time_dt": "2018-05-12T12:47:02.035005", - "duration": "0:00:13", - "end_time": "2018-05-12 12:47:15.727381+00:00", - "hyperdrive_id": "8446", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8446_8bd39a10", - "metric": 3421.1286, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.00351793616431617", - "created_time": "2018-05-12 13:56:22.665906+00:00", - "created_time_dt": "2018-05-12T13:56:22.665906", - "duration": "0:00:44", - "end_time": "2018-05-12 13:57:07.550427+00:00", - "hyperdrive_id": "8525", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8525_e1268c9b", - "metric": 3432.3808, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0127022983869274", - "created_time": "2018-05-12 12:18:21.730539+00:00", - "created_time_dt": "2018-05-12T12:18:21.730539", - "duration": "0:00:13", - "end_time": "2018-05-12 12:18:35.552439+00:00", - "hyperdrive_id": "8396", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8396_836f4190", - "metric": 3435.4146, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0109599437801077", - "created_time": "2018-05-12 12:15:41.253563+00:00", - "created_time_dt": "2018-05-12T12:15:41.253563", - "duration": "0:00:14", - "end_time": "2018-05-12 12:15:55.261054+00:00", - "hyperdrive_id": "8389", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8389_3429880c", - "metric": 3435.7702, - "start_time": "None", - "status": "Completed" - } - ], - { - "categories": [ - "8327", - "8328", - "8329", - "8330", - "8331", - "8332", - "8333", - "8334", - "8335", - "8336", - "8337", - "8338", - "8339", - "8340", - "8341", - "8342", - "8343", - "8344", - "8345", - "8346", - "8347", - "8348", - "8349", - "8350", - "8351", - "8352", - "8353", - "8354", - "8355", - "8356", - "8357", - "8358", - "8359", - "8360", - "8361", - "8362", - "8363", - "8364", - "8365", - "8366", - "8367", - "8368", - "8369", - "8370", - "8371", - "8372", - "8373", - "8374", - "8375", - "8376", - "8377", - "8378", - "8379", - "8380", - "8381", - "8382", - "8383", - "8384", - "8385", - "8386", - "8387", - "8388", - "8389", - "8390", - "8391", - "8392", - "8393", - "8394", - "8395", - "8396", - "8397", - "8398", - "8399", - "8400", - "8401", - "8402", - "8403", - "8404", - "8405", - "8406", - "8407", - "8408", - "8409", - "8410", - "8411", - "8412", - "8413", - "8414", - "8415", - "8416", - "8417", - "8418", - "8419", - "8420", - "8421", - "8422", - "8423", - "8424", - "8425", - "8426", - "8427", - "8428", - "8429", - "8430", - "8431", - "8432", - "8433", - "8434", - "8435", - "8436", - "8437", - "8438", - "8439", - "8440", - "8441", - "8442", - "8443", - "8444", - "8445", - "8446", - "8447", - "8448", - "8449", - "8450", - "8451", - "8452", - "8453", - "8454", - "8455", - "8456", - "8457", - "8458", - "8459", - "8460", - "8461", - "8462", - "8463", - "8464", - "8465", - "8466", - "8467", - "8468", - "8469", - "8470", - "8471", - "8472", - "8473", - "8474", - "8475", - "8476", - "8477", - "8478", - "8479", - "8480", - "8481", - "8482", - "8483", - "8484", - "8485", - "8486", - "8487", - "8488", - "8489", - "8490", - "8491", - "8492", - "8493", - "8494", - "8495", - "8496", - "8497", - "8498", - "8499", - "8500", - "8501", - "8502", - "8503", - "8504", - "8505", - "8506", - "8507", - "8508", - "8509", - "8510", - "8511", - "8512", - "8513", - "8514", - "8515", - "8516", - "8517", - "8518", - "8519", - "8520", - "8521", - "8522", - "8523", - "8524", - "8525", - "8526" - ], - "metricName": "mse", - "series": [ - { - "mode": "markers", - "name": "mse", - "stepped": false, - "type": "scatter", - "uid": "836252", - "x": [ - "8327", - "8328", - "8329", - "8330", - "8331", - "8332", - "8333", - "8334", - "8335", - "8336", - "8337", - "8338", - "8339", - "8340", - "8341", - "8342", - "8343", - "8344", - "8345", - "8346", - "8347", - "8348", - "8349", - "8350", - "8351", - "8352", - "8353", - "8354", - "8355", - "8356", - "8357", - "8358", - "8359", - "8360", - "8361", - "8362", - "8363", - "8364", - "8365", - "8366", - "8367", - "8368", - "8369", - "8370", - "8371", - "8372", - "8373", - "8374", - "8375", - "8376", - "8377", - "8378", - "8379", - "8380", - "8381", - "8382", - "8383", - "8384", - "8385", - "8386", - "8387", - "8388", - "8389", - "8390", - "8391", - "8392", - "8393", - "8394", - "8395", - "8396", - "8397", - "8398", - "8399", - "8400", - "8401", - "8402", - "8403", - "8404", - "8405", - "8406", - "8407", - "8408", - "8409", - "8410", - "8411", - "8412", - "8413", - "8414", - "8415", - "8416", - "8417", - "8418", - "8419", - "8420", - "8421", - "8422", - "8423", - "8424", - "8425", - "8426", - "8427", - "8428", - "8429", - "8430", - "8431", - "8432", - "8433", - "8434", - "8435", - "8436", - "8437", - "8438", - "8439", - "8440", - "8441", - "8442", - "8443", - "8444", - "8445", - "8446", - "8447", - "8448", - "8449", - "8450", - "8451", - "8452", - "8453", - "8454", - "8455", - "8456", - "8457", - "8458", - "8459", - "8460", - "8461", - "8462", - "8463", - "8464", - "8465", - "8466", - "8467", - "8468", - "8469", - "8470", - "8471", - "8472", - "8473", - "8474", - "8475", - "8476", - "8477", - "8478", - "8479", - "8480", - "8481", - "8482", - "8483", - "8484", - "8485", - "8486", - "8487", - "8488", - "8489", - "8490", - "8491", - "8492", - "8493", - "8494", - "8495", - "8496", - "8497", - "8498", - "8499", - "8500", - "8501", - "8502", - "8503", - "8504", - "8505", - "8506", - "8507", - "8508", - "8509", - "8510", - "8511", - "8512", - "8513", - "8514", - "8515", - "8516", - "8517", - "8518", - "8519", - "8520", - "8521", - "8522", - "8523", - "8524", - "8525", - "8526" - ] - }, - { - "line": { - "shape": "hv" - }, - "mode": "lines", - "name": "mse_min", - "stepped": true, - "type": "scatter", - "uid": "aa1605", - "x": [ - "8327", - "8328", - "8329", - "8330", - "8331", - "8332", - "8333", - "8334", - "8335", - "8336", - "8337", - "8338", - "8339", - "8340", - "8341", - "8342", - "8343", - "8344", - "8345", - "8346", - "8347", - "8348", - "8349", - "8350", - "8351", - "8352", - "8353", - "8354", - "8355", - "8356", - "8357", - "8358", - "8359", - "8360", - "8361", - "8362", - "8363", - "8364", - "8365", - "8366", - "8367", - "8368", - "8369", - "8370", - "8371", - "8372", - "8373", - "8374", - "8375", - "8376", - "8377", - "8378", - "8379", - "8380", - "8381", - "8382", - "8383", - "8384", - "8385", - "8386", - "8387", - "8388", - "8389", - "8390", - "8391", - "8392", - "8393", - "8394", - "8395", - "8396", - "8397", - "8398", - "8399", - "8400", - "8401", - "8402", - "8403", - "8404", - "8405", - "8406", - "8407", - "8408", - "8409", - "8410", - "8411", - "8412", - "8413", - "8414", - "8415", - "8416", - "8417", - "8418", - "8419", - "8420", - "8421", - "8422", - "8423", - "8424", - "8425", - "8426", - "8427", - "8428", - "8429", - "8430", - "8431", - "8432", - "8433", - "8434", - "8435", - "8436", - "8437", - "8438", - "8439", - "8440", - "8441", - "8442", - "8443", - "8444", - "8445", - "8446", - "8447", - "8448", - "8449", - "8450", - "8451", - "8452", - "8453", - "8454", - "8455", - "8456", - "8457", - "8458", - "8459", - "8460", - "8461", - "8462", - "8463", - "8464", - "8465", - "8466", - "8467", - "8468", - "8469", - "8470", - "8471", - "8472", - "8473", - "8474", - "8475", - "8476", - "8477", - "8478", - "8479", - "8480", - "8481", - "8482", - "8483", - "8484", - "8485", - "8486", - "8487", - "8488", - "8489", - "8490", - "8491", - "8492", - "8493", - "8494", - "8495", - "8496", - "8497", - "8498", - "8499", - "8500", - "8501", - "8502", - "8503", - "8504", - "8505", - "8506", - "8507", - "8508", - "8509", - "8510", - "8511", - "8512", - "8513", - "8514", - "8515", - "8516", - "8517", - "8518", - "8519", - "8520", - "8521", - "8522", - "8523", - "8524", - "8525", - "8526" - ] - } - ], - "showLegend": false, - "title": "HyperDrive Run Primary Metric : mse" - } - ] - } - }, - "f5ccd42f25e8402bbcccf511b3c6e08f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_train_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowHyperDriveRunsView", - "layout": "IPY_MODEL_83e0767b6c3a41a2833d0f8fcf690c72", - "value": [ - { - "run_id": "hyperdrive-sklearn-diabetes_1526099364301", - "status": "Running", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-e2e-rg%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2euapws/projects/hyperdrive-sklearn-diabetes/run-history/run-details/hyperdrive-sklearn-diabetes_1526099364301?type=HyperDrive" - }, - [ - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.393891676993532", - "created_time": "2018-05-12 04:34:15.248693+00:00", - "created_time_dt": "2018-05-12T04:34:15.248693", - "duration": "0:00:19", - "end_time": "2018-05-12 04:34:34.352899+00:00", - "hyperdrive_id": "8324", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8324_3d18af85", - "metric": 3295.8309, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.375901006177515", - "created_time": "2018-05-12 04:33:51.986890+00:00", - "created_time_dt": "2018-05-12T04:33:51.986890", - "duration": "0:00:25", - "end_time": "2018-05-12 04:34:17.199718+00:00", - "hyperdrive_id": "8323", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8323_ef8a489b", - "metric": 3296.3202, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.358260413565936", - "created_time": "2018-05-12 04:29:36.537978+00:00", - "created_time_dt": "2018-05-12T04:29:36.537978", - "duration": "0:00:30", - "end_time": "2018-05-12 04:30:07.443012+00:00", - "hyperdrive_id": "8307", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8307_6bb93d21", - "metric": 3297.1463, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.505489715550404", - "created_time": "2018-05-12 04:33:25.471155+00:00", - "created_time_dt": "2018-05-12T04:33:25.471155", - "duration": "0:00:33", - "end_time": "2018-05-12 04:33:59.378295+00:00", - "hyperdrive_id": "8322", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8322_5151e960", - "metric": 3299.3001, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.513294267924078", - "created_time": "2018-05-12 04:31:23.890814+00:00", - "created_time_dt": "2018-05-12T04:31:23.890814", - "duration": "0:00:38", - "end_time": "2018-05-12 04:32:02.172094+00:00", - "hyperdrive_id": "8315", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8315_a8d0df53", - "metric": 3299.8883, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.320051010308542", - "created_time": "2018-05-12 04:32:09.433779+00:00", - "created_time_dt": "2018-05-12T04:32:09.433779", - "duration": "0:00:43", - "end_time": "2018-05-12 04:32:53.026804+00:00", - "hyperdrive_id": "8318", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8318_9c385d92", - "metric": 3300.2455, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.658960235847498", - "created_time": "2018-05-12 04:32:47.239418+00:00", - "created_time_dt": "2018-05-12T04:32:47.239418", - "duration": "0:00:55", - "end_time": "2018-05-12 04:33:43.185284+00:00", - "hyperdrive_id": "8320", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8320_2e273b36", - "metric": 3316.6481, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.222378138720275", - "created_time": "2018-05-12 04:31:50.981871+00:00", - "created_time_dt": "2018-05-12T04:31:50.981871", - "duration": "0:00:28", - "end_time": "2018-05-12 04:32:19.478985+00:00", - "hyperdrive_id": "8317", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8317_7551a3d3", - "metric": 3318.4718, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.196888642456712", - "created_time": "2018-05-12 04:31:05.402230+00:00", - "created_time_dt": "2018-05-12T04:31:05.402230", - "duration": "0:00:23", - "end_time": "2018-05-12 04:31:29.205264+00:00", - "hyperdrive_id": "8314", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8314_24c262a7", - "metric": 3326.3371, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.189096447548258", - "created_time": "2018-05-12 04:34:39.460591+00:00", - "created_time_dt": "2018-05-12T04:34:39.460591", - "duration": "0:00:29", - "end_time": "2018-05-12 04:35:08.900171+00:00", - "hyperdrive_id": "8326", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8326_9e14bae2", - "metric": 3329.0536, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.150066832506793", - "created_time": "2018-05-12 04:30:12.926261+00:00", - "created_time_dt": "2018-05-12T04:30:12.926261", - "duration": "0:00:42", - "end_time": "2018-05-12 04:30:55.921563+00:00", - "hyperdrive_id": "8311", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8311_eaaf9dd9", - "metric": 3345.1184, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.853877240746265", - "created_time": "2018-05-12 04:34:15.379264+00:00", - "created_time_dt": "2018-05-12T04:34:15.379264", - "duration": "0:00:36", - "end_time": "2018-05-12 04:34:51.753259+00:00", - "hyperdrive_id": "8325", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8325_76cf6d75", - "metric": 3350.1062, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.864495102907021", - "created_time": "2018-05-12 04:29:36.618937+00:00", - "created_time_dt": "2018-05-12T04:29:36.618937", - "duration": "0:00:47", - "end_time": "2018-05-12 04:30:23.776039+00:00", - "hyperdrive_id": "8309", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8309_950b505d", - "metric": 3352.1487, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.102729222141871", - "created_time": "2018-05-12 04:29:36.417036+00:00", - "created_time_dt": "2018-05-12T04:29:36.417036", - "duration": "0:00:13", - "end_time": "2018-05-12 04:29:50.008716+00:00", - "hyperdrive_id": "8308", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8308_9e19788b", - "metric": 3370.925, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.98813448350046", - "created_time": "2018-05-12 04:29:36.482277+00:00", - "created_time_dt": "2018-05-12T04:29:36.482277", - "duration": "0:01:02", - "end_time": "2018-05-12 04:30:39.202800+00:00", - "hyperdrive_id": "8310", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8310_b7a0d869", - "metric": 3376.9628, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.992686382474524", - "created_time": "2018-05-12 04:32:23.342063+00:00", - "created_time_dt": "2018-05-12T04:32:23.342063", - "duration": "0:00:45", - "end_time": "2018-05-12 04:33:08.616066+00:00", - "hyperdrive_id": "8319", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8319_7d385753", - "metric": 3377.9056, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0720166631869791", - "created_time": "2018-05-12 04:33:00.471785+00:00", - "created_time_dt": "2018-05-12T04:33:00.471785", - "duration": "0:00:24", - "end_time": "2018-05-12 04:33:25.342289+00:00", - "hyperdrive_id": "8321", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8321_93092a4f", - "metric": 3391.9024, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0399458028478119", - "created_time": "2018-05-12 04:31:37.490004+00:00", - "created_time_dt": "2018-05-12T04:31:37.490004", - "duration": "0:00:58", - "end_time": "2018-05-12 04:32:36.227261+00:00", - "hyperdrive_id": "8316", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8316_47adbb4d", - "metric": 3417.0157, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0371855776131041", - "created_time": "2018-05-12 04:30:40.022059+00:00", - "created_time_dt": "2018-05-12T04:30:40.022059", - "duration": "0:00:31", - "end_time": "2018-05-12 04:31:11.265877+00:00", - "hyperdrive_id": "8313", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8313_a2cf1a87", - "metric": 3419.2355, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0108521659414031", - "created_time": "2018-05-12 04:30:26.126697+00:00", - "created_time_dt": "2018-05-12T04:30:26.126697", - "duration": "0:01:19", - "end_time": "2018-05-12 04:31:45.385829+00:00", - "hyperdrive_id": "8312", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8312_333b9d43", - "metric": 3435.7832, - "start_time": "None", - "status": "Completed" - } - ], - { - "categories": [ - "8307", - "8308", - "8309", - "8310", - "8311", - "8312", - "8313", - "8314", - "8315", - "8316", - "8317", - "8318", - "8319", - "8320", - "8321", - "8322", - "8323", - "8324", - "8325", - "8326" - ], - "metricName": "mse", - "series": [ - { - "mode": "markers", - "name": "mse", - "stepped": false, - "type": "scatter", - "uid": "0d668b", - "x": [ - "8307", - "8308", - "8309", - "8310", - "8311", - "8312", - "8313", - "8314", - "8315", - "8316", - "8317", - "8318", - "8319", - "8320", - "8321", - "8322", - "8323", - "8324", - "8325", - "8326" - ], - "y": [ - 3297.146322567479, - 3370.9250492845417, - 3352.1487032874497, - 3376.962795304554, - 3345.1183624558485, - 3435.783246565139, - 3419.235515804575, - 3326.3371118238074, - 3299.888294102396, - 3417.015692446415, - 3318.471799408107, - 3300.2455334502383, - 3377.9056290478743, - 3316.6480785229305, - 3391.902383224928, - 3299.300119043289, - 3296.320211066935, - 3295.8308612858723, - 3350.1062329850233, - 3329.0535888350505 - ] - }, - { - "line": { - "shape": "hv" - }, - "mode": "lines", - "name": "mse_min", - "stepped": true, - "type": "scatter", - "uid": "686b96", - "x": [ - "8307", - "8308", - "8309", - "8310", - "8311", - "8312", - "8313", - "8314", - "8315", - "8316", - "8317", - "8318", - "8319", - "8320", - "8321", - "8322", - "8323", - "8324", - "8325", - "8326" - ], - "y": [ - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3296.320211066935, - 3295.8308612858723, - 3295.8308612858723, - 3295.8308612858723 - ] - } - ], - "showLegend": false, - "title": "HyperDrive Run Primary Metric : mse" - } - ] - } - } - }, - "version_major": 2, - "version_minor": 0 - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/07.hyperdrive-with-sklearn/07.hyperdrive-with-sklearn.ipynb b/01.getting-started/07.hyperdrive-with-sklearn/07.hyperdrive-with-sklearn.ipynb deleted file mode 100644 index 26e80c05c..000000000 --- a/01.getting-started/07.hyperdrive-with-sklearn/07.hyperdrive-with-sklearn.ipynb +++ /dev/null @@ -1,4033 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 07. HyperDrive with scikit-learn\n", - "- Create Batch AI cluster\n", - "- Train on a single node\n", - "- Set up Hyperdrive\n", - "- Parameter sweep with Hyperdrive on Batch AI cluster\n", - "- Monitor parameter sweep runs with run history widget\n", - "- Find best model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create An Experiment\n", - "**Experiment** is a logical container in an Azure ML Workspace. It hosts run records which can include run metrics and output artifacts from your experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "experiment_name = 'hyperdrive-with-sklearn'\n", - "experiment = Experiment(workspace = ws, name = experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create a folder to store the training script." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "script_folder = './samples/hyperdrive-with-sklearn'\n", - "os.makedirs(script_folder, exist_ok = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Provision New Cluster\n", - "Create a new Batch AI cluster using the following Python code.\n", - "\n", - "**Note**: As with other Azure services, there are limits on certain resources (for eg. BatchAI cluster size) associated with the Azure Machine Learning service. Please read [this article](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-manage-quotas) on the default limits and how to request more quota." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create mlc", - "batchai" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.compute import BatchAiCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "\n", - "# choose a name for your cluster\n", - "batchai_cluster_name = ws.name + \"cpu\"\n", - "\n", - "found = False\n", - "# see if this compute target already exists in the workspace\n", - "for ct in ws.compute_targets():\n", - " print(ct.name, ct.type)\n", - " if (ct.name == batchai_cluster_name and ct.type == 'BatchAI'):\n", - " found = True\n", - " print('found compute target. just use it.')\n", - " compute_target = ct\n", - " break\n", - " \n", - "if not found:\n", - " print('creating a new compute target...')\n", - " provisioning_config = BatchAiCompute.provisioning_configuration(vm_size = \"STANDARD_D2_V2\", # for GPU, use \"STANDARD_NC6\"\n", - " #vm_priority = 'lowpriority', # optional\n", - " autoscale_enabled = True,\n", - " cluster_min_nodes = 1, \n", - " cluster_max_nodes = 4)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws,batchai_cluster_name, provisioning_config)\n", - " \n", - " # can poll for a minimum number of nodes and for a specific timeout. \n", - " # if no min node count is provided it will use the scale settings for the cluster\n", - " compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - " # For a more detailed view of current BatchAI cluster status, use the 'status' property \n", - " print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Ridge Regression with scikit-learn" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from shutil import copyfile\n", - "# copy the diabetes_sklearn.py file to the project folder\n", - "copyfile('./diabetes_sklearn.py', os.path.join(script_folder, 'diabetes_sklearn.py'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# review the diabetes_sklearn.py file if you'd like\n", - "with open(os.path.join(script_folder, 'diabetes_sklearn.py'), 'r') as fin:\n", - " print (fin.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an estimator for the sklearn script\n", - "You can use an estimator pattern to run the script. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.estimator import Estimator\n", - "script_params = {\n", - " '--alpha': 0.1\n", - "}\n", - "\n", - "sk_est = Estimator(source_directory = script_folder,\n", - " script_params = script_params,\n", - " compute_target = compute_target,\n", - " entry_script = 'diabetes_sklearn.py',\n", - " conda_packages = ['scikit-learn'])\n", - " #custom_docker_base_image = 'ninghai/azureml:0.3') # use a custom image here" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai" - ] - }, - "outputs": [], - "source": [ - "# start the job\n", - "from azureml.core.experiment import Experiment\n", - "\n", - "run = experiment.submit(sk_est)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### View run details\n", - "**IMPORTANT**: please use Chrome to navigate the below URL." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai" - ] - }, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.widgets import RunDetails\n", - "\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also check the Batch AI cluster and job status using az-cli commands:\n", - "\n", - "```shell\n", - "# check cluster status. You can see how many nodes are running.\n", - "$ az batchai cluster list\n", - "\n", - "# check job status. You can see how many jobs are running\n", - "$ az batchai job list\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Now Try a Hyperdrive run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.hyperdrive import *\n", - "\n", - "# parameter space to sweep over\n", - "ps = RandomParameterSampling(\n", - " {\n", - " \"alpha\": uniform(0.0, 1.0)\n", - " }\n", - ")\n", - "\n", - "# early termniation policy\n", - "# check every 2 iterations and if the primary metric (epoch_val_acc) falls\n", - "# outside of the range of 10% of the best recorded run so far, terminate it.\n", - "etp = BanditPolicy(slack_factor = 0.1, evaluation_interval = 2)\n", - "\n", - "# Hyperdrive run configuration\n", - "hrc = HyperDriveRunConfig(\n", - " estimator = sk_est,\n", - " hyperparameter_sampling = ps,\n", - " policy = etp,\n", - " # metric to watch (for early termination)\n", - " primary_metric_name = 'mse',\n", - " # terminate if metric falls below threshold\n", - " primary_metric_goal = PrimaryMetricGoal.MINIMIZE,\n", - " max_total_runs = 20,\n", - " max_concurrent_runs = 4,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "hyperdrive run", - "batchai" - ] - }, - "outputs": [], - "source": [ - "# Start Hyperdrive run\n", - "\n", - "hr = experiment.submit(hrc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Use a widget to show runs\n", - "Runs will automatically start to show in the following widget once rendered. You can keep the Notebook open and watch them \"grow\"." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.widgets import RunDetails\n", - "RunDetails(hr).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note**: This is a sample image with 200 runs. Your result might look different.\n", - "![img](../images/hyperdrive-sklearn.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check cluster status, pay attention to the # of running nodes\n", - "# !az batchai cluster list -o table\n", - "\n", - "# check the Batch AI job queue. Notice the Job name is the run history Id. Pay attention to the State of the job.\n", - "# !az batchai job list -o table" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Find best run\n", - "Wait until all Hyperdrive runs finish before running the below cells." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "hr.get_status()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history", - "get metrics" - ] - }, - "outputs": [], - "source": [ - "from tqdm import tqdm\n", - "\n", - "runs = {}\n", - "\n", - "for r in tqdm(hr.get_children()):\n", - " metrics = r.get_metrics()\n", - " if ('mse' in metrics.keys()):\n", - " runs[r.id] = metrics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "best_run_id = min(runs, key = lambda k: runs[k]['mse'])\n", - "best_run = runs[best_run_id]\n", - "print('Best Run: alpha = {0:.4f}, MSE = {1:.4f}'.format(best_run['alpha'], best_run['mse']))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot the best run [Optional] \n", - "Note you will need to install `matplotlib` for this." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import matplotlib\n", - "from matplotlib import pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# get metrics of alpha and mse for all runs\n", - "metrics = np.array([[runs[r]['alpha'], runs[r]['mse']] for r in runs])\n", - "\n", - "# sort the metrics by alpha values\n", - "metrics = np.array(sorted(metrics, key = lambda m: m[0]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.title('MSE over alpha', fontsize = 16)\n", - "\n", - "plt.plot(metrics[:,0], metrics[:,1], 'r--')\n", - "plt.plot(metrics[:,0], metrics[:,1], 'bo')\n", - "\n", - "plt.xlabel('alpha', fontsize = 14)\n", - "plt.ylabel('mean squared error', fontsize = 14)\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.6.5" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "state": { - "7cf278f65a36435fb03137ca56bcd263": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "83e0767b6c3a41a2833d0f8fcf690c72": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "aa3181a75ca34d729b0dce89e779ec0e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_train_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowHyperDriveRunsView", - "layout": "IPY_MODEL_7cf278f65a36435fb03137ca56bcd263", - "value": [ - { - "run_id": "hyperdrive-sklearn-diabetes_1526126138942", - "status": "Running", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-e2e-rg%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2euapws/projects/hyperdrive-sklearn-diabetes/run-history/run-details/hyperdrive-sklearn-diabetes_1526126138942?type=HyperDrive" - }, - [ - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.411237364035508", - "created_time": "2018-05-12 12:12:51.261530+00:00", - "created_time_dt": "2018-05-12T12:12:51.261530", - "duration": "0:00:12", - "end_time": "2018-05-12 12:13:03.803382+00:00", - "hyperdrive_id": "8382", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8382_0beb029b", - "metric": 3295.672, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.409690853942327", - "created_time": "2018-05-12 13:13:23.950880+00:00", - "created_time_dt": "2018-05-12T13:13:23.950880", - "duration": "0:00:28", - "end_time": "2018-05-12 13:13:52.707230+00:00", - "hyperdrive_id": "8479", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8479_5832d5b1", - "metric": 3295.6743, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.417026424561565", - "created_time": "2018-05-12 12:08:27.465571+00:00", - "created_time_dt": "2018-05-12T12:08:27.465571", - "duration": "0:00:12", - "end_time": "2018-05-12 12:08:39.848811+00:00", - "hyperdrive_id": "8370", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8370_c9260eec", - "metric": 3295.6834, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.417442688875759", - "created_time": "2018-05-12 13:03:26.849626+00:00", - "created_time_dt": "2018-05-12T13:03:26.849626", - "duration": "0:00:14", - "end_time": "2018-05-12 13:03:41.499999+00:00", - "hyperdrive_id": "8468", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8468_5e92ff25", - "metric": 3295.6854, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.40612547022086", - "created_time": "2018-05-12 12:40:16.219170+00:00", - "created_time_dt": "2018-05-12T12:40:16.219170", - "duration": "0:00:12", - "end_time": "2018-05-12 12:40:29.063299+00:00", - "hyperdrive_id": "8436", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8436_8d7667d7", - "metric": 3295.6882, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.404098690541524", - "created_time": "2018-05-12 12:28:12.532204+00:00", - "created_time_dt": "2018-05-12T12:28:12.532204", - "duration": "0:00:12", - "end_time": "2018-05-12 12:28:25.123133+00:00", - "hyperdrive_id": "8415", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8415_cd663398", - "metric": 3295.7016, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.422501486914154", - "created_time": "2018-05-12 12:06:04.978496+00:00", - "created_time_dt": "2018-05-12T12:06:04.978496", - "duration": "0:00:13", - "end_time": "2018-05-12 12:06:18.355669+00:00", - "hyperdrive_id": "8363", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8363_b1db4981", - "metric": 3295.7227, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.423906941816355", - "created_time": "2018-05-12 12:27:06.723050+00:00", - "created_time_dt": "2018-05-12T12:27:06.723050", - "duration": "0:00:14", - "end_time": "2018-05-12 12:27:20.746252+00:00", - "hyperdrive_id": "8414", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8414_8f74b802", - "metric": 3295.7372, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.431026531225767", - "created_time": "2018-05-12 12:25:04.908855+00:00", - "created_time_dt": "2018-05-12T12:25:04.908855", - "duration": "0:00:14", - "end_time": "2018-05-12 12:25:19.602114+00:00", - "hyperdrive_id": "8409", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8409_5345e6b2", - "metric": 3295.8375, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.393032827195967", - "created_time": "2018-05-12 12:07:13.020312+00:00", - "created_time_dt": "2018-05-12T12:07:13.020312", - "duration": "0:00:34", - "end_time": "2018-05-12 12:07:47.944409+00:00", - "hyperdrive_id": "8367", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8367_c39107f9", - "metric": 3295.8465, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.436567624426189", - "created_time": "2018-05-12 13:04:49.897871+00:00", - "created_time_dt": "2018-05-12T13:04:49.897871", - "duration": "0:00:14", - "end_time": "2018-05-12 13:05:04.491673+00:00", - "hyperdrive_id": "8470", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8470_a73b2d7b", - "metric": 3295.9462, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.383629052679639", - "created_time": "2018-05-12 12:12:37.531581+00:00", - "created_time_dt": "2018-05-12T12:12:37.531581", - "duration": "0:00:12", - "end_time": "2018-05-12 12:12:50.210199+00:00", - "hyperdrive_id": "8381", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8381_b638e983", - "metric": 3296.0679, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.382111348518354", - "created_time": "2018-05-12 11:55:54.563179+00:00", - "created_time_dt": "2018-05-12T11:55:54.563179", - "duration": "0:00:13", - "end_time": "2018-05-12 11:56:07.888796+00:00", - "hyperdrive_id": "8327", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8327_a045606f", - "metric": 3296.1124, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.381187002593777", - "created_time": "2018-05-12 12:09:12.703228+00:00", - "created_time_dt": "2018-05-12T12:09:12.703228", - "duration": "0:00:17", - "end_time": "2018-05-12 12:09:29.741640+00:00", - "hyperdrive_id": "8373", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8373_053f25c6", - "metric": 3296.1406, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.379109970937149", - "created_time": "2018-05-12 13:02:00.253981+00:00", - "created_time_dt": "2018-05-12T13:02:00.253981", - "duration": "0:00:12", - "end_time": "2018-05-12 13:02:12.909525+00:00", - "hyperdrive_id": "8466", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8466_a379787d", - "metric": 3296.2076, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.448204115660274", - "created_time": "2018-05-12 13:44:11.787530+00:00", - "created_time_dt": "2018-05-12T13:44:11.787530", - "duration": "0:00:13", - "end_time": "2018-05-12 13:44:25.111437+00:00", - "hyperdrive_id": "8514", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8514_3f6ef25a", - "metric": 3296.2587, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.448713062576673", - "created_time": "2018-05-12 12:49:55.612577+00:00", - "created_time_dt": "2018-05-12T12:49:55.612577", - "duration": "0:00:30", - "end_time": "2018-05-12 12:50:26.163813+00:00", - "hyperdrive_id": "8449", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8449_d0363c5b", - "metric": 3296.275, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.451812447966424", - "created_time": "2018-05-12 13:46:02.887675+00:00", - "created_time_dt": "2018-05-12T13:46:02.887675", - "duration": "0:00:13", - "end_time": "2018-05-12 13:46:15.984786+00:00", - "hyperdrive_id": "8515", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8515_131388fa", - "metric": 3296.3782, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.454660892639694", - "created_time": "2018-05-12 12:08:27.411796+00:00", - "created_time_dt": "2018-05-12T12:08:27.411796", - "duration": "0:00:45", - "end_time": "2018-05-12 12:09:12.989012+00:00", - "hyperdrive_id": "8372", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8372_94748f49", - "metric": 3296.4798, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.45772812795942", - "created_time": "2018-05-12 13:15:05.575428+00:00", - "created_time_dt": "2018-05-12T13:15:05.575428", - "duration": "0:00:28", - "end_time": "2018-05-12 13:15:34.181749+00:00", - "hyperdrive_id": "8481", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8481_7b4d7aae", - "metric": 3296.5964, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.459845797045424", - "created_time": "2018-05-12 12:14:11.140060+00:00", - "created_time_dt": "2018-05-12T12:14:11.140060", - "duration": "0:00:13", - "end_time": "2018-05-12 12:14:24.996486+00:00", - "hyperdrive_id": "8386", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8386_f396881b", - "metric": 3296.6811, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.366571747107722", - "created_time": "2018-05-12 12:08:27.253377+00:00", - "created_time_dt": "2018-05-12T12:08:27.253377", - "duration": "0:00:29", - "end_time": "2018-05-12 12:08:56.307309+00:00", - "hyperdrive_id": "8371", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8371_cd392eb6", - "metric": 3296.7127, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.462046659150171", - "created_time": "2018-05-12 12:42:50.088268+00:00", - "created_time_dt": "2018-05-12T12:42:50.088268", - "duration": "0:00:29", - "end_time": "2018-05-12 12:43:19.725900+00:00", - "hyperdrive_id": "8440", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8440_2809b87a", - "metric": 3296.7729, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.466061327723322", - "created_time": "2018-05-12 13:32:48.214641+00:00", - "created_time_dt": "2018-05-12T13:32:48.214641", - "duration": "0:00:33", - "end_time": "2018-05-12 13:33:21.400760+00:00", - "hyperdrive_id": "8502", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8502_f26e1d7a", - "metric": 3296.9498, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.360764179714059", - "created_time": "2018-05-12 12:52:59.773606+00:00", - "created_time_dt": "2018-05-12T12:52:59.773606", - "duration": "0:00:29", - "end_time": "2018-05-12 12:53:29.269383+00:00", - "hyperdrive_id": "8454", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8454_d048fd67", - "metric": 3297.0072, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.357261239177847", - "created_time": "2018-05-12 12:00:06.195143+00:00", - "created_time_dt": "2018-05-12T12:00:06.195143", - "duration": "0:00:15", - "end_time": "2018-05-12 12:00:21.894647+00:00", - "hyperdrive_id": "8343", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8343_4b4ee27d", - "metric": 3297.2039, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.357032645286086", - "created_time": "2018-05-12 12:29:17.822255+00:00", - "created_time_dt": "2018-05-12T12:29:17.822255", - "duration": "0:00:13", - "end_time": "2018-05-12 12:29:31.531549+00:00", - "hyperdrive_id": "8418", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8418_17853174", - "metric": 3297.2173, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.478523449448336", - "created_time": "2018-05-12 12:11:12.128813+00:00", - "created_time_dt": "2018-05-12T12:11:12.128813", - "duration": "0:00:12", - "end_time": "2018-05-12 12:11:24.470896+00:00", - "hyperdrive_id": "8378", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8378_137b1616", - "metric": 3297.5751, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.478800785224639", - "created_time": "2018-05-12 13:48:14.367164+00:00", - "created_time_dt": "2018-05-12T13:48:14.367164", - "duration": "0:00:32", - "end_time": "2018-05-12 13:48:46.834752+00:00", - "hyperdrive_id": "8518", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8518_729c4598", - "metric": 3297.5903, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.344791270146422", - "created_time": "2018-05-12 13:00:23.018949+00:00", - "created_time_dt": "2018-05-12T13:00:23.018949", - "duration": "0:00:31", - "end_time": "2018-05-12 13:00:54.639071+00:00", - "hyperdrive_id": "8464", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8464_7857e9c2", - "metric": 3298.0249, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.338103667119868", - "created_time": "2018-05-12 13:21:55.155823+00:00", - "created_time_dt": "2018-05-12T13:21:55.155823", - "duration": "0:00:30", - "end_time": "2018-05-12 13:22:26.141154+00:00", - "hyperdrive_id": "8489", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8489_b7ffca04", - "metric": 3298.5454, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.332097037995421", - "created_time": "2018-05-12 13:42:09.096805+00:00", - "created_time_dt": "2018-05-12T13:42:09.096805", - "duration": "0:00:18", - "end_time": "2018-05-12 13:42:27.483311+00:00", - "hyperdrive_id": "8511", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8511_ec3cc7c9", - "metric": 3299.0623, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.331939228048221", - "created_time": "2018-05-12 12:45:34.049683+00:00", - "created_time_dt": "2018-05-12T12:45:34.049683", - "duration": "0:00:14", - "end_time": "2018-05-12 12:45:48.102359+00:00", - "hyperdrive_id": "8444", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8444_46d2f35f", - "metric": 3299.0766, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.505093423597719", - "created_time": "2018-05-12 13:18:18.551188+00:00", - "created_time_dt": "2018-05-12T13:18:18.551188", - "duration": "0:00:13", - "end_time": "2018-05-12 13:18:31.915661+00:00", - "hyperdrive_id": "8486", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8486_c437b7f7", - "metric": 3299.2713, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.506815861512464", - "created_time": "2018-05-12 12:27:06.875070+00:00", - "created_time_dt": "2018-05-12T12:27:06.875070", - "duration": "0:00:12", - "end_time": "2018-05-12 12:27:19.538922+00:00", - "hyperdrive_id": "8413", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8413_a969f346", - "metric": 3299.3974, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.509599014162797", - "created_time": "2018-05-12 12:02:10.749542+00:00", - "created_time_dt": "2018-05-12T12:02:10.749542", - "duration": "0:00:22", - "end_time": "2018-05-12 12:02:32.904491+00:00", - "hyperdrive_id": "8351", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8351_08acc5b3", - "metric": 3299.605, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.511754766725497", - "created_time": "2018-05-12 12:31:33.630006+00:00", - "created_time_dt": "2018-05-12T12:31:33.630006", - "duration": "0:00:13", - "end_time": "2018-05-12 12:31:46.932013+00:00", - "hyperdrive_id": "8421", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8421_d66288a6", - "metric": 3299.7693, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.517357778454532", - "created_time": "2018-05-12 13:32:47.999414+00:00", - "created_time_dt": "2018-05-12T13:32:47.999414", - "duration": "0:00:16", - "end_time": "2018-05-12 13:33:04.221248+00:00", - "hyperdrive_id": "8501", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8501_f6988ef5", - "metric": 3300.2095, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.319331797643165", - "created_time": "2018-05-12 13:23:42.824307+00:00", - "created_time_dt": "2018-05-12T13:23:42.824307", - "duration": "0:00:14", - "end_time": "2018-05-12 13:23:56.961000+00:00", - "hyperdrive_id": "8491", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8491_f97ca369", - "metric": 3300.3225, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.319074585293429", - "created_time": "2018-05-12 13:32:34.003659+00:00", - "created_time_dt": "2018-05-12T13:32:34.003659", - "duration": "0:00:14", - "end_time": "2018-05-12 13:32:48.094689+00:00", - "hyperdrive_id": "8500", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8500_d491060c", - "metric": 3300.3502, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.318218570599629", - "created_time": "2018-05-12 12:05:05.927100+00:00", - "created_time_dt": "2018-05-12T12:05:05.927100", - "duration": "0:00:18", - "end_time": "2018-05-12 12:05:23.961623+00:00", - "hyperdrive_id": "8360", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8360_8d3ad717", - "metric": 3300.4432, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.310459620980281", - "created_time": "2018-05-12 13:01:59.639205+00:00", - "created_time_dt": "2018-05-12T13:01:59.639205", - "duration": "0:00:30", - "end_time": "2018-05-12 13:02:29.644690+00:00", - "hyperdrive_id": "8465", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8465_a642fe78", - "metric": 3301.3332, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.308825721895932", - "created_time": "2018-05-12 12:26:00.849703+00:00", - "created_time_dt": "2018-05-12T12:26:00.849703", - "duration": "0:00:14", - "end_time": "2018-05-12 12:26:14.900534+00:00", - "hyperdrive_id": "8411", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8411_59c695f4", - "metric": 3301.5318, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.306982685343673", - "created_time": "2018-05-12 13:25:29.647713+00:00", - "created_time_dt": "2018-05-12T13:25:29.647713", - "duration": "0:00:12", - "end_time": "2018-05-12 13:25:42.574230+00:00", - "hyperdrive_id": "8494", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8494_5b797969", - "metric": 3301.7606, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.306861470957928", - "created_time": "2018-05-12 12:04:02.669871+00:00", - "created_time_dt": "2018-05-12T12:04:02.669871", - "duration": "0:00:11", - "end_time": "2018-05-12 12:04:14.471005+00:00", - "hyperdrive_id": "8357", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8357_d468e6ae", - "metric": 3301.7758, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.539137316483953", - "created_time": "2018-05-12 13:15:05.900228+00:00", - "created_time_dt": "2018-05-12T13:15:05.900228", - "duration": "0:00:43", - "end_time": "2018-05-12 13:15:49.159519+00:00", - "hyperdrive_id": "8482", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8482_d29d0b57", - "metric": 3302.0981, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.54004647672626", - "created_time": "2018-05-12 12:32:49.211373+00:00", - "created_time_dt": "2018-05-12T12:32:49.211373", - "duration": "0:00:14", - "end_time": "2018-05-12 12:33:03.460382+00:00", - "hyperdrive_id": "8423", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8423_88f12348", - "metric": 3302.1828, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.543570780620328", - "created_time": "2018-05-12 12:41:33.851103+00:00", - "created_time_dt": "2018-05-12T12:41:33.851103", - "duration": "0:00:13", - "end_time": "2018-05-12 12:41:47.611145+00:00", - "hyperdrive_id": "8438", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8438_9402e974", - "metric": 3302.5156, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.289360077382501", - "created_time": "2018-05-12 12:06:44.051674+00:00", - "created_time_dt": "2018-05-12T12:06:44.051674", - "duration": "0:00:30", - "end_time": "2018-05-12 12:07:14.422703+00:00", - "hyperdrive_id": "8365", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8365_1677e84b", - "metric": 3304.2101, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.568847163331273", - "created_time": "2018-05-12 13:29:05.740663+00:00", - "created_time_dt": "2018-05-12T13:29:05.740663", - "duration": "0:00:44", - "end_time": "2018-05-12 13:29:49.857716+00:00", - "hyperdrive_id": "8497", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8497_7c3c2de2", - "metric": 3305.0952, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.283304106660311", - "created_time": "2018-05-12 12:17:26.855111+00:00", - "created_time_dt": "2018-05-12T12:17:26.855111", - "duration": "0:00:13", - "end_time": "2018-05-12 12:17:40.339685+00:00", - "hyperdrive_id": "8394", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8394_7d55e673", - "metric": 3305.1657, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.569536449260573", - "created_time": "2018-05-12 12:02:44.927994+00:00", - "created_time_dt": "2018-05-12T12:02:44.927994", - "duration": "0:00:21", - "end_time": "2018-05-12 12:03:06.734426+00:00", - "hyperdrive_id": "8352", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8352_3e2d86ef", - "metric": 3305.1701, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.571288125093237", - "created_time": "2018-05-12 12:23:04.038356+00:00", - "created_time_dt": "2018-05-12T12:23:04.038356", - "duration": "0:00:13", - "end_time": "2018-05-12 12:23:17.679064+00:00", - "hyperdrive_id": "8405", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8405_39ff6a35", - "metric": 3305.3615, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.571422319269393", - "created_time": "2018-05-12 13:29:04.794872+00:00", - "created_time_dt": "2018-05-12T13:29:04.794872", - "duration": "0:00:14", - "end_time": "2018-05-12 13:29:19.297193+00:00", - "hyperdrive_id": "8498", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8498_d7b81242", - "metric": 3305.3762, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.277607345545865", - "created_time": "2018-05-12 12:01:28.481497+00:00", - "created_time_dt": "2018-05-12T12:01:28.481497", - "duration": "0:00:14", - "end_time": "2018-05-12 12:01:42.740559+00:00", - "hyperdrive_id": "8348", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8348_5aef9466", - "metric": 3306.1203, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.275710729664475", - "created_time": "2018-05-12 12:23:03.837019+00:00", - "created_time_dt": "2018-05-12T12:23:03.837019", - "duration": "0:00:13", - "end_time": "2018-05-12 12:23:17.610482+00:00", - "hyperdrive_id": "8406", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8406_223e6751", - "metric": 3306.4502, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.581090311656388", - "created_time": "2018-05-12 13:00:22.858936+00:00", - "created_time_dt": "2018-05-12T13:00:22.858936", - "duration": "0:00:14", - "end_time": "2018-05-12 13:00:37.036926+00:00", - "hyperdrive_id": "8463", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8463_6eabc2c8", - "metric": 3306.4598, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.584829683488196", - "created_time": "2018-05-12 12:16:37.017705+00:00", - "created_time_dt": "2018-05-12T12:16:37.017705", - "duration": "0:00:12", - "end_time": "2018-05-12 12:16:49.387251+00:00", - "hyperdrive_id": "8392", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8392_a2a09d84", - "metric": 3306.8908, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.586916241458208", - "created_time": "2018-05-12 12:55:57.923024+00:00", - "created_time_dt": "2018-05-12T12:55:57.923024", - "duration": "0:00:13", - "end_time": "2018-05-12 12:56:11.355696+00:00", - "hyperdrive_id": "8457", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8457_a77f0d12", - "metric": 3307.134, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.590137507820594", - "created_time": "2018-05-12 12:04:42.201135+00:00", - "created_time_dt": "2018-05-12T12:04:42.201135", - "duration": "0:00:26", - "end_time": "2018-05-12 12:05:08.306074+00:00", - "hyperdrive_id": "8358", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8358_dbe58158", - "metric": 3307.5135, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.594865526074826", - "created_time": "2018-05-12 12:29:17.694994+00:00", - "created_time_dt": "2018-05-12T12:29:17.694994", - "duration": "0:00:12", - "end_time": "2018-05-12 12:29:30.169420+00:00", - "hyperdrive_id": "8417", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8417_badf4e15", - "metric": 3308.079, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.597001755207444", - "created_time": "2018-05-12 12:32:49.199564+00:00", - "created_time_dt": "2018-05-12T12:32:49.199564", - "duration": "0:00:13", - "end_time": "2018-05-12 12:33:03.126949+00:00", - "hyperdrive_id": "8424", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8424_54ed03ea", - "metric": 3308.3377, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.598431037514433", - "created_time": "2018-05-12 12:37:43.626336+00:00", - "created_time_dt": "2018-05-12T12:37:43.626336", - "duration": "0:00:31", - "end_time": "2018-05-12 12:38:15.527333+00:00", - "hyperdrive_id": "8432", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8432_46629b39", - "metric": 3308.512, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.599236029376656", - "created_time": "2018-05-12 11:57:07.392595+00:00", - "created_time_dt": "2018-05-12T11:57:07.392595", - "duration": "0:00:41", - "end_time": "2018-05-12 11:57:48.659976+00:00", - "hyperdrive_id": "8333", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8333_52ae9b26", - "metric": 3308.6105, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.601084397755814", - "created_time": "2018-05-12 11:57:34.200139+00:00", - "created_time_dt": "2018-05-12T11:57:34.200139", - "duration": "0:01:23", - "end_time": "2018-05-12 11:58:58.143110+00:00", - "hyperdrive_id": "8335", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8335_cce61bd6", - "metric": 3308.8378, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.262097025735337", - "created_time": "2018-05-12 12:19:16.917910+00:00", - "created_time_dt": "2018-05-12T12:19:16.917910", - "duration": "0:00:13", - "end_time": "2018-05-12 12:19:30.324225+00:00", - "hyperdrive_id": "8397", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8397_dd81df0e", - "metric": 3309.0036, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.604705870252792", - "created_time": "2018-05-12 13:48:00.448137+00:00", - "created_time_dt": "2018-05-12T13:48:00.448137", - "duration": "0:00:13", - "end_time": "2018-05-12 13:48:14.174291+00:00", - "hyperdrive_id": "8516", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8516_b74e4c8b", - "metric": 3309.2874, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.260351772485082", - "created_time": "2018-05-12 12:40:16.140757+00:00", - "created_time_dt": "2018-05-12T12:40:16.140757", - "duration": "0:00:29", - "end_time": "2018-05-12 12:40:46.115691+00:00", - "hyperdrive_id": "8435", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8435_f6976bb9", - "metric": 3309.355, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.260086732484324", - "created_time": "2018-05-12 12:23:59.882354+00:00", - "created_time_dt": "2018-05-12T12:23:59.882354", - "duration": "0:00:14", - "end_time": "2018-05-12 12:24:14.855275+00:00", - "hyperdrive_id": "8408", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8408_9c5acb0f", - "metric": 3309.4088, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.258916574615307", - "created_time": "2018-05-12 13:36:21.596115+00:00", - "created_time_dt": "2018-05-12T13:36:21.596115", - "duration": "0:00:50", - "end_time": "2018-05-12 13:37:12.123919+00:00", - "hyperdrive_id": "8504", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8504_0c6a00e8", - "metric": 3309.6482, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.611064223594442", - "created_time": "2018-05-12 12:44:18.250013+00:00", - "created_time_dt": "2018-05-12T12:44:18.250013", - "duration": "0:00:29", - "end_time": "2018-05-12 12:44:47.391810+00:00", - "hyperdrive_id": "8442", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8442_abd96bbf", - "metric": 3310.0902, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.256461605043284", - "created_time": "2018-05-12 12:54:31.251204+00:00", - "created_time_dt": "2018-05-12T12:54:31.251204", - "duration": "0:00:29", - "end_time": "2018-05-12 12:55:00.767057+00:00", - "hyperdrive_id": "8455", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8455_b1c25c7c", - "metric": 3310.1585, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.612949039336068", - "created_time": "2018-05-12 12:41:33.890361+00:00", - "created_time_dt": "2018-05-12T12:41:33.890361", - "duration": "0:00:30", - "end_time": "2018-05-12 12:42:04.062774+00:00", - "hyperdrive_id": "8437", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8437_6c50e94e", - "metric": 3310.3315, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.255526064542372", - "created_time": "2018-05-12 13:21:55.194489+00:00", - "created_time_dt": "2018-05-12T13:21:55.194489", - "duration": "0:00:13", - "end_time": "2018-05-12 13:22:08.712290+00:00", - "hyperdrive_id": "8488", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8488_c295f3e2", - "metric": 3310.356, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.2549933776509", - "created_time": "2018-05-12 13:52:12.028365+00:00", - "created_time_dt": "2018-05-12T13:52:12.028365", - "duration": "0:00:13", - "end_time": "2018-05-12 13:52:25.432736+00:00", - "hyperdrive_id": "8520", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8520_0caa9d1d", - "metric": 3310.4692, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.614709777900403", - "created_time": "2018-05-12 13:18:18.431023+00:00", - "created_time_dt": "2018-05-12T13:18:18.431023", - "duration": "0:00:30", - "end_time": "2018-05-12 13:18:48.651732+00:00", - "hyperdrive_id": "8485", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8485_4590c651", - "metric": 3310.5581, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.253919017785107", - "created_time": "2018-05-12 13:39:56.741734+00:00", - "created_time_dt": "2018-05-12T13:39:56.741734", - "duration": "0:01:03", - "end_time": "2018-05-12 13:41:00.308668+00:00", - "hyperdrive_id": "8510", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8510_49564c20", - "metric": 3310.699, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.616902331561374", - "created_time": "2018-05-12 11:56:01.551240+00:00", - "created_time_dt": "2018-05-12T11:56:01.551240", - "duration": "0:01:12", - "end_time": "2018-05-12 11:57:13.590773+00:00", - "hyperdrive_id": "8330", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8330_f4b61ef0", - "metric": 3310.8422, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.25086514487739", - "created_time": "2018-05-12 13:36:21.728793+00:00", - "created_time_dt": "2018-05-12T13:36:21.728793", - "duration": "0:00:33", - "end_time": "2018-05-12 13:36:54.777053+00:00", - "hyperdrive_id": "8505", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8505_cea12178", - "metric": 3311.3645, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.621860856811298", - "created_time": "2018-05-12 12:33:54.903277+00:00", - "created_time_dt": "2018-05-12T12:33:54.903277", - "duration": "0:00:13", - "end_time": "2018-05-12 12:34:08.188676+00:00", - "hyperdrive_id": "8426", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8426_10eb543c", - "metric": 3311.4917, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.24900598383144", - "created_time": "2018-05-12 12:13:25.069763+00:00", - "created_time_dt": "2018-05-12T12:13:25.069763", - "duration": "0:00:25", - "end_time": "2018-05-12 12:13:50.748571+00:00", - "hyperdrive_id": "8383", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8383_c3046cd8", - "metric": 3311.7784, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.6241675621646", - "created_time": "2018-05-12 12:06:44.216070+00:00", - "created_time_dt": "2018-05-12T12:06:44.216070", - "duration": "0:00:12", - "end_time": "2018-05-12 12:06:56.959070+00:00", - "hyperdrive_id": "8366", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8366_f69aa45d", - "metric": 3311.7972, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.625703892831805", - "created_time": "2018-05-12 12:03:08.955336+00:00", - "created_time_dt": "2018-05-12T12:03:08.955336", - "duration": "0:00:31", - "end_time": "2018-05-12 12:03:40.562848+00:00", - "hyperdrive_id": "8353", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8353_a9ca61ba", - "metric": 3312.0018, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.628276137144992", - "created_time": "2018-05-12 13:10:08.091192+00:00", - "created_time_dt": "2018-05-12T13:10:08.091192", - "duration": "0:00:13", - "end_time": "2018-05-12 13:10:21.613075+00:00", - "hyperdrive_id": "8475", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8475_849afdb5", - "metric": 3312.3465, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.628845460109139", - "created_time": "2018-05-12 12:57:35.276994+00:00", - "created_time_dt": "2018-05-12T12:57:35.276994", - "duration": "0:00:13", - "end_time": "2018-05-12 12:57:48.651279+00:00", - "hyperdrive_id": "8459", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8459_6791263c", - "metric": 3312.4231, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.63976851775956", - "created_time": "2018-05-12 13:11:47.176422+00:00", - "created_time_dt": "2018-05-12T13:11:47.176422", - "duration": "0:00:44", - "end_time": "2018-05-12 13:12:31.806029+00:00", - "hyperdrive_id": "8477", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8477_e415c4e4", - "metric": 3313.9173, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.64333587616801", - "created_time": "2018-05-12 11:58:56.044779+00:00", - "created_time_dt": "2018-05-12T11:58:56.044779", - "duration": "0:01:09", - "end_time": "2018-05-12 12:00:05.332499+00:00", - "hyperdrive_id": "8339", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8339_de3651e2", - "metric": 3314.4149, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.651378196123682", - "created_time": "2018-05-12 12:01:04.756275+00:00", - "created_time_dt": "2018-05-12T12:01:04.756275", - "duration": "0:00:53", - "end_time": "2018-05-12 12:01:58.228294+00:00", - "hyperdrive_id": "8346", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8346_bd6c414b", - "metric": 3315.5536, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.652689173629813", - "created_time": "2018-05-12 12:39:00.282391+00:00", - "created_time_dt": "2018-05-12T12:39:00.282391", - "duration": "0:00:12", - "end_time": "2018-05-12 12:39:13.084499+00:00", - "hyperdrive_id": "8434", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8434_8af5e86e", - "metric": 3315.7414, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.231071484600443", - "created_time": "2018-05-12 11:55:54.528694+00:00", - "created_time_dt": "2018-05-12T11:55:54.528694", - "duration": "0:00:29", - "end_time": "2018-05-12 11:56:23.827901+00:00", - "hyperdrive_id": "8328", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8328_21815c4b", - "metric": 3316.1244, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.227069222503092", - "created_time": "2018-05-12 12:35:12.203475+00:00", - "created_time_dt": "2018-05-12T12:35:12.203475", - "duration": "0:00:13", - "end_time": "2018-05-12 12:35:25.412676+00:00", - "hyperdrive_id": "8428", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8428_4bc7ce29", - "metric": 3317.1849, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.223418940687153", - "created_time": "2018-05-12 12:58:56.432059+00:00", - "created_time_dt": "2018-05-12T12:58:56.432059", - "duration": "0:00:14", - "end_time": "2018-05-12 12:59:10.619204+00:00", - "hyperdrive_id": "8461", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8461_cd6afd47", - "metric": 3318.1821, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.670450207932727", - "created_time": "2018-05-12 11:59:52.831246+00:00", - "created_time_dt": "2018-05-12T11:59:52.831246", - "duration": "0:00:44", - "end_time": "2018-05-12 12:00:37.246166+00:00", - "hyperdrive_id": "8342", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8342_e752fb63", - "metric": 3318.3439, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.222216466573058", - "created_time": "2018-05-12 12:10:27.604728+00:00", - "created_time_dt": "2018-05-12T12:10:27.604728", - "duration": "0:02:02", - "end_time": "2018-05-12 12:12:30.373183+00:00", - "hyperdrive_id": "8377", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8377_75383e3d", - "metric": 3318.517, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.222056103824308", - "created_time": "2018-05-12 12:01:04.816005+00:00", - "created_time_dt": "2018-05-12T12:01:04.816005", - "duration": "0:00:23", - "end_time": "2018-05-12 12:01:28.176392+00:00", - "hyperdrive_id": "8347", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8347_796e4acb", - "metric": 3318.5619, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.672122563818468", - "created_time": "2018-05-12 12:49:55.647218+00:00", - "created_time_dt": "2018-05-12T12:49:55.647218", - "duration": "0:00:13", - "end_time": "2018-05-12 12:50:09.437568+00:00", - "hyperdrive_id": "8450", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8450_4d73ae11", - "metric": 3318.5944, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.674219319793153", - "created_time": "2018-05-12 12:06:19.493627+00:00", - "created_time_dt": "2018-05-12T12:06:19.493627", - "duration": "0:00:14", - "end_time": "2018-05-12 12:06:33.612828+00:00", - "hyperdrive_id": "8364", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8364_616bf29d", - "metric": 3318.9097, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.676816186158726", - "created_time": "2018-05-12 11:57:20.761449+00:00", - "created_time_dt": "2018-05-12T11:57:20.761449", - "duration": "0:00:45", - "end_time": "2018-05-12 11:58:06.670890+00:00", - "hyperdrive_id": "8334", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8334_59867097", - "metric": 3319.3021, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.677040806205791", - "created_time": "2018-05-12 12:42:49.923029+00:00", - "created_time_dt": "2018-05-12T12:42:49.923029", - "duration": "0:00:14", - "end_time": "2018-05-12 12:43:04.705488+00:00", - "hyperdrive_id": "8439", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8439_ef9bc000", - "metric": 3319.3362, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.217998990024581", - "created_time": "2018-05-12 13:07:59.395985+00:00", - "created_time_dt": "2018-05-12T13:07:59.395985", - "duration": "0:00:46", - "end_time": "2018-05-12 13:08:45.534751+00:00", - "hyperdrive_id": "8472", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8472_350a8911", - "metric": 3319.7167, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.6799503791279", - "created_time": "2018-05-12 13:04:49.831744+00:00", - "created_time_dt": "2018-05-12T13:04:49.831744", - "duration": "0:00:30", - "end_time": "2018-05-12 13:05:20.589562+00:00", - "hyperdrive_id": "8469", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8469_8ff01e12", - "metric": 3319.7786, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.685038562031804", - "created_time": "2018-05-12 12:01:57.377138+00:00", - "created_time_dt": "2018-05-12T12:01:57.377138", - "duration": "0:00:18", - "end_time": "2018-05-12 12:02:16.176403+00:00", - "hyperdrive_id": "8349", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8349_9dd0edcd", - "metric": 3320.5588, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.213186744612845", - "created_time": "2018-05-12 11:59:28.796665+00:00", - "created_time_dt": "2018-05-12T11:59:28.796665", - "duration": "0:00:20", - "end_time": "2018-05-12 11:59:48.832949+00:00", - "hyperdrive_id": "8341", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8341_8a47e3c3", - "metric": 3321.1344, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.21256169431142", - "created_time": "2018-05-12 12:14:55.830300+00:00", - "created_time_dt": "2018-05-12T12:14:55.830300", - "duration": "0:00:13", - "end_time": "2018-05-12 12:15:08.838193+00:00", - "hyperdrive_id": "8387", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8387_4de71177", - "metric": 3321.3224, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.691031495877125", - "created_time": "2018-05-12 11:59:14.526241+00:00", - "created_time_dt": "2018-05-12T11:59:14.526241", - "duration": "0:00:17", - "end_time": "2018-05-12 11:59:31.757101+00:00", - "hyperdrive_id": "8340", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8340_f729e8a8", - "metric": 3321.4879, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.211515835622294", - "created_time": "2018-05-12 13:56:22.463994+00:00", - "created_time_dt": "2018-05-12T13:56:22.463994", - "duration": "0:00:14", - "end_time": "2018-05-12 13:56:36.879820+00:00", - "hyperdrive_id": "8526", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8526_fc03d679", - "metric": 3321.639, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.694531075877101", - "created_time": "2018-05-12 13:03:26.709852+00:00", - "created_time_dt": "2018-05-12T13:03:26.709852", - "duration": "0:00:30", - "end_time": "2018-05-12 13:03:57.298099+00:00", - "hyperdrive_id": "8467", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8467_820bf267", - "metric": 3322.0354, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.696647020776985", - "created_time": "2018-05-12 12:17:26.399107+00:00", - "created_time_dt": "2018-05-12T12:17:26.399107", - "duration": "0:00:13", - "end_time": "2018-05-12 12:17:39.855186+00:00", - "hyperdrive_id": "8393", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8393_e269fd60", - "metric": 3322.3682, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.207668270269089", - "created_time": "2018-05-12 12:23:59.802255+00:00", - "created_time_dt": "2018-05-12T12:23:59.802255", - "duration": "0:00:14", - "end_time": "2018-05-12 12:24:13.954962+00:00", - "hyperdrive_id": "8407", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8407_f600791c", - "metric": 3322.8255, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.704450171518138", - "created_time": "2018-05-12 12:51:33.047182+00:00", - "created_time_dt": "2018-05-12T12:51:33.047182", - "duration": "0:00:13", - "end_time": "2018-05-12 12:51:46.189745+00:00", - "hyperdrive_id": "8452", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8452_7a96c125", - "metric": 3323.6069, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.204555124314782", - "created_time": "2018-05-12 11:55:54.722551+00:00", - "created_time_dt": "2018-05-12T11:55:54.722551", - "duration": "0:00:45", - "end_time": "2018-05-12 11:56:40.533180+00:00", - "hyperdrive_id": "8329", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8329_3f426453", - "metric": 3323.811, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.203734687408454", - "created_time": "2018-05-12 12:07:13.094366+00:00", - "created_time_dt": "2018-05-12T12:07:13.094366", - "duration": "0:00:18", - "end_time": "2018-05-12 12:07:31.308677+00:00", - "hyperdrive_id": "8368", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8368_cb6c8945", - "metric": 3324.0745, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.709476658707224", - "created_time": "2018-05-12 12:11:12.061752+00:00", - "created_time_dt": "2018-05-12T12:11:12.061752", - "duration": "0:00:28", - "end_time": "2018-05-12 12:11:40.328129+00:00", - "hyperdrive_id": "8379", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8379_c9ae195c", - "metric": 3324.4139, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.202618610645979", - "created_time": "2018-05-12 12:52:59.522663+00:00", - "created_time_dt": "2018-05-12T12:52:59.522663", - "duration": "0:00:13", - "end_time": "2018-05-12 12:53:12.744129+00:00", - "hyperdrive_id": "8453", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8453_2704afe0", - "metric": 3324.4356, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.710489985561568", - "created_time": "2018-05-12 12:13:25.214412+00:00", - "created_time_dt": "2018-05-12T12:13:25.214412", - "duration": "0:00:13", - "end_time": "2018-05-12 12:13:38.794172+00:00", - "hyperdrive_id": "8384", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8384_29ac75d7", - "metric": 3324.5775, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.201388195391872", - "created_time": "2018-05-12 12:11:57.134173+00:00", - "created_time_dt": "2018-05-12T12:11:57.134173", - "duration": "0:00:12", - "end_time": "2018-05-12 12:12:09.855865+00:00", - "hyperdrive_id": "8380", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8380_0393567a", - "metric": 3324.8372, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.199904360954639", - "created_time": "2018-05-12 12:05:06.281666+00:00", - "created_time_dt": "2018-05-12T12:05:06.281666", - "duration": "0:00:35", - "end_time": "2018-05-12 12:05:41.415671+00:00", - "hyperdrive_id": "8361", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8361_790554e0", - "metric": 3325.3264, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.715946699073426", - "created_time": "2018-05-12 13:50:03.986351+00:00", - "created_time_dt": "2018-05-12T13:50:03.986351", - "duration": "0:00:13", - "end_time": "2018-05-12 13:50:17.671869+00:00", - "hyperdrive_id": "8519", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8519_b45b95fe", - "metric": 3325.4631, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.716295824315661", - "created_time": "2018-05-12 12:22:03.607952+00:00", - "created_time_dt": "2018-05-12T12:22:03.607952", - "duration": "0:00:12", - "end_time": "2018-05-12 12:22:16.329865+00:00", - "hyperdrive_id": "8403", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8403_111315cc", - "metric": 3325.5201, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.721309232403544", - "created_time": "2018-05-12 12:09:47.802542+00:00", - "created_time_dt": "2018-05-12T12:09:47.802542", - "duration": "0:00:12", - "end_time": "2018-05-12 12:10:00.639613+00:00", - "hyperdrive_id": "8375", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8375_083d89cd", - "metric": 3326.3413, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.722171183492785", - "created_time": "2018-05-12 13:56:22.539569+00:00", - "created_time_dt": "2018-05-12T13:56:22.539569", - "duration": "0:00:29", - "end_time": "2018-05-12 13:56:52.506291+00:00", - "hyperdrive_id": "8524", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8524_80f88880", - "metric": 3326.4832, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.726313386025429", - "created_time": "2018-05-12 12:44:18.163495+00:00", - "created_time_dt": "2018-05-12T12:44:18.163495", - "duration": "0:00:13", - "end_time": "2018-05-12 12:44:31.168855+00:00", - "hyperdrive_id": "8441", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8441_020fdf69", - "metric": 3327.1678, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.72930361168177", - "created_time": "2018-05-12 13:25:30.013247+00:00", - "created_time_dt": "2018-05-12T13:25:30.013247", - "duration": "0:00:50", - "end_time": "2018-05-12 13:26:20.789242+00:00", - "hyperdrive_id": "8492", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8492_c360744c", - "metric": 3327.6647, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.735331084674993", - "created_time": "2018-05-12 12:19:17.001645+00:00", - "created_time_dt": "2018-05-12T12:19:17.001645", - "duration": "0:00:12", - "end_time": "2018-05-12 12:19:29.055472+00:00", - "hyperdrive_id": "8398", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8398_6057c4b8", - "metric": 3328.6733, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.741333101612688", - "created_time": "2018-05-12 12:30:24.252672+00:00", - "created_time_dt": "2018-05-12T12:30:24.252672", - "duration": "0:00:16", - "end_time": "2018-05-12 12:30:40.316267+00:00", - "hyperdrive_id": "8420", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8420_6adb8838", - "metric": 3329.6868, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.742368394312335", - "created_time": "2018-05-12 13:48:00.662005+00:00", - "created_time_dt": "2018-05-12T13:48:00.662005", - "duration": "0:00:29", - "end_time": "2018-05-12 13:48:29.733162+00:00", - "hyperdrive_id": "8517", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8517_01c069cd", - "metric": 3329.8625, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.74451533044112", - "created_time": "2018-05-12 12:00:06.297211+00:00", - "created_time_dt": "2018-05-12T12:00:06.297211", - "duration": "0:01:05", - "end_time": "2018-05-12 12:01:11.612251+00:00", - "hyperdrive_id": "8344", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8344_2036cd0a", - "metric": 3330.2276, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.750274984006123", - "created_time": "2018-05-12 12:39:00.160319+00:00", - "created_time_dt": "2018-05-12T12:39:00.160319", - "duration": "0:00:29", - "end_time": "2018-05-12 12:39:29.832125+00:00", - "hyperdrive_id": "8433", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8433_2238faf6", - "metric": 3331.2128, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.757819319976897", - "created_time": "2018-05-12 12:21:08.554079+00:00", - "created_time_dt": "2018-05-12T12:21:08.554079", - "duration": "0:00:13", - "end_time": "2018-05-12 12:21:21.958887+00:00", - "hyperdrive_id": "8402", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8402_b2533d98", - "metric": 3332.5151, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.765019942269395", - "created_time": "2018-05-12 12:31:33.508670+00:00", - "created_time_dt": "2018-05-12T12:31:33.508670", - "duration": "0:00:12", - "end_time": "2018-05-12 12:31:46.245844+00:00", - "hyperdrive_id": "8422", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8422_a004deac", - "metric": 3333.7701, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.772240783940475", - "created_time": "2018-05-12 13:11:46.536678+00:00", - "created_time_dt": "2018-05-12T13:11:46.536678", - "duration": "0:00:13", - "end_time": "2018-05-12 13:12:00.351416+00:00", - "hyperdrive_id": "8478", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8478_f9b60072", - "metric": 3335.0403, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.775376593821348", - "created_time": "2018-05-12 11:57:51.483491+00:00", - "created_time_dt": "2018-05-12T11:57:51.483491", - "duration": "0:00:49", - "end_time": "2018-05-12 11:58:41.345056+00:00", - "hyperdrive_id": "8336", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8336_8d9fcbf2", - "metric": 3335.5954, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.776902840582832", - "created_time": "2018-05-12 13:16:42.209279+00:00", - "created_time_dt": "2018-05-12T13:16:42.209279", - "duration": "0:00:12", - "end_time": "2018-05-12 13:16:54.766193+00:00", - "hyperdrive_id": "8483", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8483_a61bd458", - "metric": 3335.8663, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.787404580220175", - "created_time": "2018-05-12 13:44:16.718411+00:00", - "created_time_dt": "2018-05-12T13:44:16.718411", - "duration": "0:00:41", - "end_time": "2018-05-12 13:44:58.084345+00:00", - "hyperdrive_id": "8513", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8513_9bff58a2", - "metric": 3337.7437, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.789523827771144", - "created_time": "2018-05-12 13:20:06.458660+00:00", - "created_time_dt": "2018-05-12T13:20:06.458660", - "duration": "0:00:14", - "end_time": "2018-05-12 13:20:21.078795+00:00", - "hyperdrive_id": "8487", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8487_ff1fa053", - "metric": 3338.1253, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.802056733580286", - "created_time": "2018-05-12 11:58:06.769725+00:00", - "created_time_dt": "2018-05-12T11:58:06.769725", - "duration": "0:00:17", - "end_time": "2018-05-12 11:58:23.830337+00:00", - "hyperdrive_id": "8337", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8337_27db767d", - "metric": 3340.4001, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.158706098065124", - "created_time": "2018-05-12 13:07:59.714140+00:00", - "created_time_dt": "2018-05-12T13:07:59.714140", - "duration": "0:00:12", - "end_time": "2018-05-12 13:08:12.356448+00:00", - "hyperdrive_id": "8471", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8471_4684fafc", - "metric": 3341.1883, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.81666319772656", - "created_time": "2018-05-12 12:57:35.142880+00:00", - "created_time_dt": "2018-05-12T12:57:35.142880", - "duration": "0:00:29", - "end_time": "2018-05-12 12:58:05.114772+00:00", - "hyperdrive_id": "8460", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8460_a5bfa8fb", - "metric": 3343.0888, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.153939964737971", - "created_time": "2018-05-12 12:26:01.040538+00:00", - "created_time_dt": "2018-05-12T12:26:01.040538", - "duration": "0:00:13", - "end_time": "2018-05-12 12:26:14.946367+00:00", - "hyperdrive_id": "8412", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8412_f38b79e1", - "metric": 3343.3287, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.818247357781626", - "created_time": "2018-05-12 12:51:32.713599+00:00", - "created_time_dt": "2018-05-12T12:51:32.713599", - "duration": "0:00:28", - "end_time": "2018-05-12 12:52:01.253396+00:00", - "hyperdrive_id": "8451", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8451_02f74578", - "metric": 3343.3827, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.819893819434544", - "created_time": "2018-05-12 11:58:31.362582+00:00", - "created_time_dt": "2018-05-12T11:58:31.362582", - "duration": "0:00:43", - "end_time": "2018-05-12 11:59:15.122246+00:00", - "hyperdrive_id": "8338", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8338_1d2f97a7", - "metric": 3343.6887, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.152741652399469", - "created_time": "2018-05-12 12:16:36.776970+00:00", - "created_time_dt": "2018-05-12T12:16:36.776970", - "duration": "0:00:12", - "end_time": "2018-05-12 12:16:49.408701+00:00", - "hyperdrive_id": "8391", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8391_4fee6774", - "metric": 3343.8776, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.821590167168393", - "created_time": "2018-05-12 13:27:06.766331+00:00", - "created_time_dt": "2018-05-12T13:27:06.766331", - "duration": "0:00:13", - "end_time": "2018-05-12 13:27:20.387070+00:00", - "hyperdrive_id": "8495", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8495_d4f07494", - "metric": 3344.0045, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.15225619855891", - "created_time": "2018-05-12 13:39:56.625205+00:00", - "created_time_dt": "2018-05-12T13:39:56.625205", - "duration": "0:00:13", - "end_time": "2018-05-12 13:40:10.343274+00:00", - "hyperdrive_id": "8509", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8509_0ced32a8", - "metric": 3344.1012, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.826290872584932", - "created_time": "2018-05-12 12:48:28.934533+00:00", - "created_time_dt": "2018-05-12T12:48:28.934533", - "duration": "0:00:13", - "end_time": "2018-05-12 12:48:41.996203+00:00", - "hyperdrive_id": "8447", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8447_cc33a2e2", - "metric": 3344.8821, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.150287304842608", - "created_time": "2018-05-12 12:20:11.826010+00:00", - "created_time_dt": "2018-05-12T12:20:11.826010", - "duration": "0:00:14", - "end_time": "2018-05-12 12:20:26.700669+00:00", - "hyperdrive_id": "8400", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8400_fb9de45f", - "metric": 3345.0153, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.827917639441571", - "created_time": "2018-05-12 13:30:45.754478+00:00", - "created_time_dt": "2018-05-12T13:30:45.754478", - "duration": "0:00:17", - "end_time": "2018-05-12 13:31:03.690041+00:00", - "hyperdrive_id": "8499", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8499_5da756fc", - "metric": 3345.1866, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.831400494081907", - "created_time": "2018-05-12 13:25:29.760666+00:00", - "created_time_dt": "2018-05-12T13:25:29.760666", - "duration": "0:00:28", - "end_time": "2018-05-12 13:25:58.618049+00:00", - "hyperdrive_id": "8493", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8493_1067756d", - "metric": 3345.8403, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.143633113372336", - "created_time": "2018-05-12 12:15:41.187737+00:00", - "created_time_dt": "2018-05-12T12:15:41.187737", - "duration": "0:00:13", - "end_time": "2018-05-12 12:15:54.635649+00:00", - "hyperdrive_id": "8390", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8390_6bb4c33e", - "metric": 3348.1929, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.843864112354753", - "created_time": "2018-05-12 13:11:46.478245+00:00", - "created_time_dt": "2018-05-12T13:11:46.478245", - "duration": "0:00:30", - "end_time": "2018-05-12 13:12:16.864318+00:00", - "hyperdrive_id": "8476", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8476_7d515d12", - "metric": 3348.1958, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.844834242372722", - "created_time": "2018-05-12 13:34:34.862819+00:00", - "created_time_dt": "2018-05-12T13:34:34.862819", - "duration": "0:00:18", - "end_time": "2018-05-12 13:34:53.000220+00:00", - "hyperdrive_id": "8503", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8503_22cc2459", - "metric": 3348.3802, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.847189528199022", - "created_time": "2018-05-12 12:05:30.243006+00:00", - "created_time_dt": "2018-05-12T12:05:30.243006", - "duration": "0:00:27", - "end_time": "2018-05-12 12:05:57.958523+00:00", - "hyperdrive_id": "8362", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8362_507ea67e", - "metric": 3348.8285, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.847412052270933", - "created_time": "2018-05-12 13:52:12.711262+00:00", - "created_time_dt": "2018-05-12T13:52:12.711262", - "duration": "0:00:29", - "end_time": "2018-05-12 13:52:41.855615+00:00", - "hyperdrive_id": "8522", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8522_49d2012a", - "metric": 3348.8709, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.849158168297161", - "created_time": "2018-05-12 12:35:11.088836+00:00", - "created_time_dt": "2018-05-12T12:35:11.088836", - "duration": "0:00:29", - "end_time": "2018-05-12 12:35:40.836866+00:00", - "hyperdrive_id": "8427", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8427_c559cbd5", - "metric": 3349.2039, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.858392736114089", - "created_time": "2018-05-12 12:10:27.136482+00:00", - "created_time_dt": "2018-05-12T12:10:27.136482", - "duration": "0:00:13", - "end_time": "2018-05-12 12:10:40.337157+00:00", - "hyperdrive_id": "8376", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8376_eae11b68", - "metric": 3350.9728, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.858806435401327", - "created_time": "2018-05-12 12:18:21.437029+00:00", - "created_time_dt": "2018-05-12T12:18:21.437029", - "duration": "0:00:15", - "end_time": "2018-05-12 12:18:37.238879+00:00", - "hyperdrive_id": "8395", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8395_7ad8e7cc", - "metric": 3351.0523, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.870882618277203", - "created_time": "2018-05-12 12:54:31.035593+00:00", - "created_time_dt": "2018-05-12T12:54:31.035593", - "duration": "0:00:13", - "end_time": "2018-05-12 12:54:44.090425+00:00", - "hyperdrive_id": "8456", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8456_6948cbcc", - "metric": 3353.3854, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.870957972314387", - "created_time": "2018-05-12 12:03:37.974468+00:00", - "created_time_dt": "2018-05-12T12:03:37.974468", - "duration": "0:00:54", - "end_time": "2018-05-12 12:04:32.645363+00:00", - "hyperdrive_id": "8356", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8356_c89bedd1", - "metric": 3353.4, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.874263482882214", - "created_time": "2018-05-12 13:44:12.039777+00:00", - "created_time_dt": "2018-05-12T13:44:12.039777", - "duration": "0:00:28", - "end_time": "2018-05-12 13:44:40.898814+00:00", - "hyperdrive_id": "8512", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8512_c8b83bf0", - "metric": 3354.0423, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.874529541822094", - "created_time": "2018-05-12 13:39:56.277448+00:00", - "created_time_dt": "2018-05-12T13:39:56.277448", - "duration": "0:00:29", - "end_time": "2018-05-12 13:40:25.570608+00:00", - "hyperdrive_id": "8507", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8507_1cd72ece", - "metric": 3354.094, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.875032535947787", - "created_time": "2018-05-12 12:03:09.088430+00:00", - "created_time_dt": "2018-05-12T12:03:09.088430", - "duration": "0:00:14", - "end_time": "2018-05-12 12:03:23.413857+00:00", - "hyperdrive_id": "8354", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8354_ba9b01e8", - "metric": 3354.1919, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.131482857415543", - "created_time": "2018-05-12 12:00:40.831510+00:00", - "created_time_dt": "2018-05-12T12:00:40.831510", - "duration": "0:00:13", - "end_time": "2018-05-12 12:00:54.473484+00:00", - "hyperdrive_id": "8345", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8345_e90e298a", - "metric": 3354.3567, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.876760429991959", - "created_time": "2018-05-12 11:56:29.419120+00:00", - "created_time_dt": "2018-05-12T11:56:29.419120", - "duration": "0:01:00", - "end_time": "2018-05-12 11:57:29.880644+00:00", - "hyperdrive_id": "8331", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8331_23196033", - "metric": 3354.5285, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.879527886321761", - "created_time": "2018-05-12 12:48:29.201551+00:00", - "created_time_dt": "2018-05-12T12:48:29.201551", - "duration": "0:00:28", - "end_time": "2018-05-12 12:48:57.994549+00:00", - "hyperdrive_id": "8448", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8448_0adee24d", - "metric": 3355.0683, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.882185892591819", - "created_time": "2018-05-12 12:36:28.013382+00:00", - "created_time_dt": "2018-05-12T12:36:28.013382", - "duration": "0:00:12", - "end_time": "2018-05-12 12:36:40.470870+00:00", - "hyperdrive_id": "8429", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8429_38aa4de9", - "metric": 3355.5878, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.898540073965212", - "created_time": "2018-05-12 13:52:12.001244+00:00", - "created_time_dt": "2018-05-12T13:52:12.001244", - "duration": "0:01:56", - "end_time": "2018-05-12 13:54:08.239396+00:00", - "hyperdrive_id": "8521", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8521_bdd8810c", - "metric": 3358.8047, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.898790550820804", - "created_time": "2018-05-12 12:45:34.119530+00:00", - "created_time_dt": "2018-05-12T12:45:34.119530", - "duration": "0:00:29", - "end_time": "2018-05-12 12:46:03.683003+00:00", - "hyperdrive_id": "8443", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8443_6ecf5b63", - "metric": 3358.8543, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.123019805934679", - "created_time": "2018-05-12 13:18:18.097594+00:00", - "created_time_dt": "2018-05-12T13:18:18.097594", - "duration": "0:00:48", - "end_time": "2018-05-12 13:19:06.174482+00:00", - "hyperdrive_id": "8484", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8484_90ffa59e", - "metric": 3358.9367, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.909619395012488", - "created_time": "2018-05-12 12:04:37.269556+00:00", - "created_time_dt": "2018-05-12T12:04:37.269556", - "duration": "0:00:13", - "end_time": "2018-05-12 12:04:50.677702+00:00", - "hyperdrive_id": "8359", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8359_bec7b5c7", - "metric": 3361.0033, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.116537281119354", - "created_time": "2018-05-12 12:25:05.224578+00:00", - "created_time_dt": "2018-05-12T12:25:05.224578", - "duration": "0:00:13", - "end_time": "2018-05-12 12:25:19.188493+00:00", - "hyperdrive_id": "8410", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8410_481b4e19", - "metric": 3362.6096, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.922247917060456", - "created_time": "2018-05-12 12:55:58.393210+00:00", - "created_time_dt": "2018-05-12T12:55:58.393210", - "duration": "0:00:28", - "end_time": "2018-05-12 12:56:27.202928+00:00", - "hyperdrive_id": "8458", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8458_118e67f8", - "metric": 3363.527, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.924207993821612", - "created_time": "2018-05-12 13:07:59.698584+00:00", - "created_time_dt": "2018-05-12T13:07:59.698584", - "duration": "0:00:28", - "end_time": "2018-05-12 13:08:28.412662+00:00", - "hyperdrive_id": "8473", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8473_92f27331", - "metric": 3363.9203, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.9281605775003", - "created_time": "2018-05-12 12:33:55.035789+00:00", - "created_time_dt": "2018-05-12T12:33:55.035789", - "duration": "0:00:13", - "end_time": "2018-05-12 12:34:08.214661+00:00", - "hyperdrive_id": "8425", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8425_1500a0dd", - "metric": 3364.7148, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.928925041400716", - "created_time": "2018-05-12 12:03:37.850247+00:00", - "created_time_dt": "2018-05-12T12:03:37.850247", - "duration": "0:00:19", - "end_time": "2018-05-12 12:03:57.704131+00:00", - "hyperdrive_id": "8355", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8355_42f510c9", - "metric": 3364.8687, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.929577236031663", - "created_time": "2018-05-12 13:21:55.037697+00:00", - "created_time_dt": "2018-05-12T13:21:55.037697", - "duration": "0:00:48", - "end_time": "2018-05-12 13:22:43.185540+00:00", - "hyperdrive_id": "8490", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8490_5ea3cd3f", - "metric": 3365, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.112224359908429", - "created_time": "2018-05-12 11:56:42.923129+00:00", - "created_time_dt": "2018-05-12T11:56:42.923129", - "duration": "0:00:14", - "end_time": "2018-05-12 11:56:57.464771+00:00", - "hyperdrive_id": "8332", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8332_5219ec61", - "metric": 3365.1342, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.93757819924753", - "created_time": "2018-05-12 12:28:12.472109+00:00", - "created_time_dt": "2018-05-12T12:28:12.472109", - "duration": "0:00:13", - "end_time": "2018-05-12 12:28:25.911571+00:00", - "hyperdrive_id": "8416", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8416_95953de1", - "metric": 3366.6147, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.940420194928342", - "created_time": "2018-05-12 12:22:03.666129+00:00", - "created_time_dt": "2018-05-12T12:22:03.666129", - "duration": "0:00:12", - "end_time": "2018-05-12 12:22:16.335802+00:00", - "hyperdrive_id": "8404", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8404_d0736441", - "metric": 3367.1899, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.943042536771435", - "created_time": "2018-05-12 13:54:15.260969+00:00", - "created_time_dt": "2018-05-12T13:54:15.260969", - "duration": "0:00:11", - "end_time": "2018-05-12 13:54:26.918336+00:00", - "hyperdrive_id": "8523", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8523_76882d61", - "metric": 3367.7213, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.106668849133971", - "created_time": "2018-05-12 12:09:52.702880+00:00", - "created_time_dt": "2018-05-12T12:09:52.702880", - "duration": "0:00:25", - "end_time": "2018-05-12 12:10:18.241796+00:00", - "hyperdrive_id": "8374", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8374_9e11481e", - "metric": 3368.4832, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.954067716722258", - "created_time": "2018-05-12 12:30:24.308130+00:00", - "created_time_dt": "2018-05-12T12:30:24.308130", - "duration": "0:00:16", - "end_time": "2018-05-12 12:30:40.608925+00:00", - "hyperdrive_id": "8419", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8419_1b2ded51", - "metric": 3369.9633, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.104027755017491", - "created_time": "2018-05-12 12:20:11.870461+00:00", - "created_time_dt": "2018-05-12T12:20:11.870461", - "duration": "0:00:14", - "end_time": "2018-05-12 12:20:26.823381+00:00", - "hyperdrive_id": "8399", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8399_70048e50", - "metric": 3370.114, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.104023113674115", - "created_time": "2018-05-12 12:07:53.084399+00:00", - "created_time_dt": "2018-05-12T12:07:53.084399", - "duration": "0:00:13", - "end_time": "2018-05-12 12:08:06.237712+00:00", - "hyperdrive_id": "8369", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8369_993e0dd7", - "metric": 3370.1169, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.955790693896138", - "created_time": "2018-05-12 12:47:02.252823+00:00", - "created_time_dt": "2018-05-12T12:47:02.252823", - "duration": "0:00:30", - "end_time": "2018-05-12 12:47:32.329335+00:00", - "hyperdrive_id": "8445", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8445_c70f8879", - "metric": 3370.3148, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.957619945976621", - "created_time": "2018-05-12 12:14:10.784220+00:00", - "created_time_dt": "2018-05-12T12:14:10.784220", - "duration": "0:00:13", - "end_time": "2018-05-12 12:14:23.785111+00:00", - "hyperdrive_id": "8385", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8385_8b801e22", - "metric": 3370.6882, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.958613790873744", - "created_time": "2018-05-12 12:21:08.499878+00:00", - "created_time_dt": "2018-05-12T12:21:08.499878", - "duration": "0:00:12", - "end_time": "2018-05-12 12:21:21.109495+00:00", - "hyperdrive_id": "8401", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8401_b84ee061", - "metric": 3370.8913, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0991051795076507", - "created_time": "2018-05-12 13:15:04.980450+00:00", - "created_time_dt": "2018-05-12T13:15:04.980450", - "duration": "0:00:13", - "end_time": "2018-05-12 13:15:18.786874+00:00", - "hyperdrive_id": "8480", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8480_614cf569", - "metric": 3373.221, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.970852980638722", - "created_time": "2018-05-12 12:36:27.820576+00:00", - "created_time_dt": "2018-05-12T12:36:27.820576", - "duration": "0:00:29", - "end_time": "2018-05-12 12:36:57.322649+00:00", - "hyperdrive_id": "8430", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8430_b2673e0c", - "metric": 3373.3991, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.979767975474247", - "created_time": "2018-05-12 13:07:59.532196+00:00", - "created_time_dt": "2018-05-12T13:07:59.532196", - "duration": "0:01:02", - "end_time": "2018-05-12 13:09:02.075600+00:00", - "hyperdrive_id": "8474", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8474_fcd51b10", - "metric": 3375.2343, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.984154480758112", - "created_time": "2018-05-12 12:14:55.708218+00:00", - "created_time_dt": "2018-05-12T12:14:55.708218", - "duration": "0:00:13", - "end_time": "2018-05-12 12:15:09.126182+00:00", - "hyperdrive_id": "8388", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8388_c4f98fe4", - "metric": 3376.1398, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.987309642340916", - "created_time": "2018-05-12 12:02:10.550056+00:00", - "created_time_dt": "2018-05-12T12:02:10.550056", - "duration": "0:00:39", - "end_time": "2018-05-12 12:02:50.233034+00:00", - "hyperdrive_id": "8350", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8350_73634488", - "metric": 3376.7921, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0726051008474307", - "created_time": "2018-05-12 13:36:21.997998+00:00", - "created_time_dt": "2018-05-12T13:36:21.997998", - "duration": "0:00:17", - "end_time": "2018-05-12 13:36:39.458975+00:00", - "hyperdrive_id": "8506", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8506_97095faa", - "metric": 3391.4684, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0704611645652615", - "created_time": "2018-05-12 12:37:43.597084+00:00", - "created_time_dt": "2018-05-12T12:37:43.597084", - "duration": "0:00:13", - "end_time": "2018-05-12 12:37:56.959322+00:00", - "hyperdrive_id": "8431", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8431_c751fb54", - "metric": 3393.0553, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0473324391576943", - "created_time": "2018-05-12 13:40:01.568786+00:00", - "created_time_dt": "2018-05-12T13:40:01.568786", - "duration": "0:00:41", - "end_time": "2018-05-12 13:40:43.404157+00:00", - "hyperdrive_id": "8508", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8508_8b1d3c4f", - "metric": 3411.0568, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0423407988138264", - "created_time": "2018-05-12 12:58:56.644162+00:00", - "created_time_dt": "2018-05-12T12:58:56.644162", - "duration": "0:00:31", - "end_time": "2018-05-12 12:59:28.208493+00:00", - "hyperdrive_id": "8462", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8462_296fe088", - "metric": 3415.083, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0356284101972079", - "created_time": "2018-05-12 13:29:08.960435+00:00", - "created_time_dt": "2018-05-12T13:29:08.960435", - "duration": "0:00:25", - "end_time": "2018-05-12 13:29:34.834119+00:00", - "hyperdrive_id": "8496", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8496_37c0fdc0", - "metric": 3420.4809, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0348149292173761", - "created_time": "2018-05-12 12:47:02.035005+00:00", - "created_time_dt": "2018-05-12T12:47:02.035005", - "duration": "0:00:13", - "end_time": "2018-05-12 12:47:15.727381+00:00", - "hyperdrive_id": "8446", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8446_8bd39a10", - "metric": 3421.1286, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.00351793616431617", - "created_time": "2018-05-12 13:56:22.665906+00:00", - "created_time_dt": "2018-05-12T13:56:22.665906", - "duration": "0:00:44", - "end_time": "2018-05-12 13:57:07.550427+00:00", - "hyperdrive_id": "8525", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8525_e1268c9b", - "metric": 3432.3808, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0127022983869274", - "created_time": "2018-05-12 12:18:21.730539+00:00", - "created_time_dt": "2018-05-12T12:18:21.730539", - "duration": "0:00:13", - "end_time": "2018-05-12 12:18:35.552439+00:00", - "hyperdrive_id": "8396", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8396_836f4190", - "metric": 3435.4146, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0109599437801077", - "created_time": "2018-05-12 12:15:41.253563+00:00", - "created_time_dt": "2018-05-12T12:15:41.253563", - "duration": "0:00:14", - "end_time": "2018-05-12 12:15:55.261054+00:00", - "hyperdrive_id": "8389", - "id": "hyperdrive-sklearn-diabetes_1526126138942_1056_8389_3429880c", - "metric": 3435.7702, - "start_time": "None", - "status": "Completed" - } - ], - { - "categories": [ - "8327", - "8328", - "8329", - "8330", - "8331", - "8332", - "8333", - "8334", - "8335", - "8336", - "8337", - "8338", - "8339", - "8340", - "8341", - "8342", - "8343", - "8344", - "8345", - "8346", - "8347", - "8348", - "8349", - "8350", - "8351", - "8352", - "8353", - "8354", - "8355", - "8356", - "8357", - "8358", - "8359", - "8360", - "8361", - "8362", - "8363", - "8364", - "8365", - "8366", - "8367", - "8368", - "8369", - "8370", - "8371", - "8372", - "8373", - "8374", - "8375", - "8376", - "8377", - "8378", - "8379", - "8380", - "8381", - "8382", - "8383", - "8384", - "8385", - "8386", - "8387", - "8388", - "8389", - "8390", - "8391", - "8392", - "8393", - "8394", - "8395", - "8396", - "8397", - "8398", - "8399", - "8400", - "8401", - "8402", - "8403", - "8404", - "8405", - "8406", - "8407", - "8408", - "8409", - "8410", - "8411", - "8412", - "8413", - "8414", - "8415", - "8416", - "8417", - "8418", - "8419", - "8420", - "8421", - "8422", - "8423", - "8424", - "8425", - "8426", - "8427", - "8428", - "8429", - "8430", - "8431", - "8432", - "8433", - "8434", - "8435", - "8436", - "8437", - "8438", - "8439", - "8440", - "8441", - "8442", - "8443", - "8444", - "8445", - "8446", - "8447", - "8448", - "8449", - "8450", - "8451", - "8452", - "8453", - "8454", - "8455", - "8456", - "8457", - "8458", - "8459", - "8460", - "8461", - "8462", - "8463", - "8464", - "8465", - "8466", - "8467", - "8468", - "8469", - "8470", - "8471", - "8472", - "8473", - "8474", - "8475", - "8476", - "8477", - "8478", - "8479", - "8480", - "8481", - "8482", - "8483", - "8484", - "8485", - "8486", - "8487", - "8488", - "8489", - "8490", - "8491", - "8492", - "8493", - "8494", - "8495", - "8496", - "8497", - "8498", - "8499", - "8500", - "8501", - "8502", - "8503", - "8504", - "8505", - "8506", - "8507", - "8508", - "8509", - "8510", - "8511", - "8512", - "8513", - "8514", - "8515", - "8516", - "8517", - "8518", - "8519", - "8520", - "8521", - "8522", - "8523", - "8524", - "8525", - "8526" - ], - "metricName": "mse", - "series": [ - { - "mode": "markers", - "name": "mse", - "stepped": false, - "type": "scatter", - "uid": "836252", - "x": [ - "8327", - "8328", - "8329", - "8330", - "8331", - "8332", - "8333", - "8334", - "8335", - "8336", - "8337", - "8338", - "8339", - "8340", - "8341", - "8342", - "8343", - "8344", - "8345", - "8346", - "8347", - "8348", - "8349", - "8350", - "8351", - "8352", - "8353", - "8354", - "8355", - "8356", - "8357", - "8358", - "8359", - "8360", - "8361", - "8362", - "8363", - "8364", - "8365", - "8366", - "8367", - "8368", - "8369", - "8370", - "8371", - "8372", - "8373", - "8374", - "8375", - "8376", - "8377", - "8378", - "8379", - "8380", - "8381", - "8382", - "8383", - "8384", - "8385", - "8386", - "8387", - "8388", - "8389", - "8390", - "8391", - "8392", - "8393", - "8394", - "8395", - "8396", - "8397", - "8398", - "8399", - "8400", - "8401", - "8402", - "8403", - "8404", - "8405", - "8406", - "8407", - "8408", - "8409", - "8410", - "8411", - "8412", - "8413", - "8414", - "8415", - "8416", - "8417", - "8418", - "8419", - "8420", - "8421", - "8422", - "8423", - "8424", - "8425", - "8426", - "8427", - "8428", - "8429", - "8430", - "8431", - "8432", - "8433", - "8434", - "8435", - "8436", - "8437", - "8438", - "8439", - "8440", - "8441", - "8442", - "8443", - "8444", - "8445", - "8446", - "8447", - "8448", - "8449", - "8450", - "8451", - "8452", - "8453", - "8454", - "8455", - "8456", - "8457", - "8458", - "8459", - "8460", - "8461", - "8462", - "8463", - "8464", - "8465", - "8466", - "8467", - "8468", - "8469", - "8470", - "8471", - "8472", - "8473", - "8474", - "8475", - "8476", - "8477", - "8478", - "8479", - "8480", - "8481", - "8482", - "8483", - "8484", - "8485", - "8486", - "8487", - "8488", - "8489", - "8490", - "8491", - "8492", - "8493", - "8494", - "8495", - "8496", - "8497", - "8498", - "8499", - "8500", - "8501", - "8502", - "8503", - "8504", - "8505", - "8506", - "8507", - "8508", - "8509", - "8510", - "8511", - "8512", - "8513", - "8514", - "8515", - "8516", - "8517", - "8518", - "8519", - "8520", - "8521", - "8522", - "8523", - "8524", - "8525", - "8526" - ] - }, - { - "line": { - "shape": "hv" - }, - "mode": "lines", - "name": "mse_min", - "stepped": true, - "type": "scatter", - "uid": "aa1605", - "x": [ - "8327", - "8328", - "8329", - "8330", - "8331", - "8332", - "8333", - "8334", - "8335", - "8336", - "8337", - "8338", - "8339", - "8340", - "8341", - "8342", - "8343", - "8344", - "8345", - "8346", - "8347", - "8348", - "8349", - "8350", - "8351", - "8352", - "8353", - "8354", - "8355", - "8356", - "8357", - "8358", - "8359", - "8360", - "8361", - "8362", - "8363", - "8364", - "8365", - "8366", - "8367", - "8368", - "8369", - "8370", - "8371", - "8372", - "8373", - "8374", - "8375", - "8376", - "8377", - "8378", - "8379", - "8380", - "8381", - "8382", - "8383", - "8384", - "8385", - "8386", - "8387", - "8388", - "8389", - "8390", - "8391", - "8392", - "8393", - "8394", - "8395", - "8396", - "8397", - "8398", - "8399", - "8400", - "8401", - "8402", - "8403", - "8404", - "8405", - "8406", - "8407", - "8408", - "8409", - "8410", - "8411", - "8412", - "8413", - "8414", - "8415", - "8416", - "8417", - "8418", - "8419", - "8420", - "8421", - "8422", - "8423", - "8424", - "8425", - "8426", - "8427", - "8428", - "8429", - "8430", - "8431", - "8432", - "8433", - "8434", - "8435", - "8436", - "8437", - "8438", - "8439", - "8440", - "8441", - "8442", - "8443", - "8444", - "8445", - "8446", - "8447", - "8448", - "8449", - "8450", - "8451", - "8452", - "8453", - "8454", - "8455", - "8456", - "8457", - "8458", - "8459", - "8460", - "8461", - "8462", - "8463", - "8464", - "8465", - "8466", - "8467", - "8468", - "8469", - "8470", - "8471", - "8472", - "8473", - "8474", - "8475", - "8476", - "8477", - "8478", - "8479", - "8480", - "8481", - "8482", - "8483", - "8484", - "8485", - "8486", - "8487", - "8488", - "8489", - "8490", - "8491", - "8492", - "8493", - "8494", - "8495", - "8496", - "8497", - "8498", - "8499", - "8500", - "8501", - "8502", - "8503", - "8504", - "8505", - "8506", - "8507", - "8508", - "8509", - "8510", - "8511", - "8512", - "8513", - "8514", - "8515", - "8516", - "8517", - "8518", - "8519", - "8520", - "8521", - "8522", - "8523", - "8524", - "8525", - "8526" - ] - } - ], - "showLegend": false, - "title": "HyperDrive Run Primary Metric : mse" - } - ] - } - }, - "f5ccd42f25e8402bbcccf511b3c6e08f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_train_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowHyperDriveRunsView", - "layout": "IPY_MODEL_83e0767b6c3a41a2833d0f8fcf690c72", - "value": [ - { - "run_id": "hyperdrive-sklearn-diabetes_1526099364301", - "status": "Running", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-e2e-rg%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2euapws/projects/hyperdrive-sklearn-diabetes/run-history/run-details/hyperdrive-sklearn-diabetes_1526099364301?type=HyperDrive" - }, - [ - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.393891676993532", - "created_time": "2018-05-12 04:34:15.248693+00:00", - "created_time_dt": "2018-05-12T04:34:15.248693", - "duration": "0:00:19", - "end_time": "2018-05-12 04:34:34.352899+00:00", - "hyperdrive_id": "8324", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8324_3d18af85", - "metric": 3295.8309, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.375901006177515", - "created_time": "2018-05-12 04:33:51.986890+00:00", - "created_time_dt": "2018-05-12T04:33:51.986890", - "duration": "0:00:25", - "end_time": "2018-05-12 04:34:17.199718+00:00", - "hyperdrive_id": "8323", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8323_ef8a489b", - "metric": 3296.3202, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.358260413565936", - "created_time": "2018-05-12 04:29:36.537978+00:00", - "created_time_dt": "2018-05-12T04:29:36.537978", - "duration": "0:00:30", - "end_time": "2018-05-12 04:30:07.443012+00:00", - "hyperdrive_id": "8307", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8307_6bb93d21", - "metric": 3297.1463, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.505489715550404", - "created_time": "2018-05-12 04:33:25.471155+00:00", - "created_time_dt": "2018-05-12T04:33:25.471155", - "duration": "0:00:33", - "end_time": "2018-05-12 04:33:59.378295+00:00", - "hyperdrive_id": "8322", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8322_5151e960", - "metric": 3299.3001, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.513294267924078", - "created_time": "2018-05-12 04:31:23.890814+00:00", - "created_time_dt": "2018-05-12T04:31:23.890814", - "duration": "0:00:38", - "end_time": "2018-05-12 04:32:02.172094+00:00", - "hyperdrive_id": "8315", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8315_a8d0df53", - "metric": 3299.8883, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.320051010308542", - "created_time": "2018-05-12 04:32:09.433779+00:00", - "created_time_dt": "2018-05-12T04:32:09.433779", - "duration": "0:00:43", - "end_time": "2018-05-12 04:32:53.026804+00:00", - "hyperdrive_id": "8318", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8318_9c385d92", - "metric": 3300.2455, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.658960235847498", - "created_time": "2018-05-12 04:32:47.239418+00:00", - "created_time_dt": "2018-05-12T04:32:47.239418", - "duration": "0:00:55", - "end_time": "2018-05-12 04:33:43.185284+00:00", - "hyperdrive_id": "8320", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8320_2e273b36", - "metric": 3316.6481, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.222378138720275", - "created_time": "2018-05-12 04:31:50.981871+00:00", - "created_time_dt": "2018-05-12T04:31:50.981871", - "duration": "0:00:28", - "end_time": "2018-05-12 04:32:19.478985+00:00", - "hyperdrive_id": "8317", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8317_7551a3d3", - "metric": 3318.4718, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.196888642456712", - "created_time": "2018-05-12 04:31:05.402230+00:00", - "created_time_dt": "2018-05-12T04:31:05.402230", - "duration": "0:00:23", - "end_time": "2018-05-12 04:31:29.205264+00:00", - "hyperdrive_id": "8314", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8314_24c262a7", - "metric": 3326.3371, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.189096447548258", - "created_time": "2018-05-12 04:34:39.460591+00:00", - "created_time_dt": "2018-05-12T04:34:39.460591", - "duration": "0:00:29", - "end_time": "2018-05-12 04:35:08.900171+00:00", - "hyperdrive_id": "8326", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8326_9e14bae2", - "metric": 3329.0536, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.150066832506793", - "created_time": "2018-05-12 04:30:12.926261+00:00", - "created_time_dt": "2018-05-12T04:30:12.926261", - "duration": "0:00:42", - "end_time": "2018-05-12 04:30:55.921563+00:00", - "hyperdrive_id": "8311", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8311_eaaf9dd9", - "metric": 3345.1184, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.853877240746265", - "created_time": "2018-05-12 04:34:15.379264+00:00", - "created_time_dt": "2018-05-12T04:34:15.379264", - "duration": "0:00:36", - "end_time": "2018-05-12 04:34:51.753259+00:00", - "hyperdrive_id": "8325", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8325_76cf6d75", - "metric": 3350.1062, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.864495102907021", - "created_time": "2018-05-12 04:29:36.618937+00:00", - "created_time_dt": "2018-05-12T04:29:36.618937", - "duration": "0:00:47", - "end_time": "2018-05-12 04:30:23.776039+00:00", - "hyperdrive_id": "8309", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8309_950b505d", - "metric": 3352.1487, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.102729222141871", - "created_time": "2018-05-12 04:29:36.417036+00:00", - "created_time_dt": "2018-05-12T04:29:36.417036", - "duration": "0:00:13", - "end_time": "2018-05-12 04:29:50.008716+00:00", - "hyperdrive_id": "8308", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8308_9e19788b", - "metric": 3370.925, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.98813448350046", - "created_time": "2018-05-12 04:29:36.482277+00:00", - "created_time_dt": "2018-05-12T04:29:36.482277", - "duration": "0:01:02", - "end_time": "2018-05-12 04:30:39.202800+00:00", - "hyperdrive_id": "8310", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8310_b7a0d869", - "metric": 3376.9628, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.992686382474524", - "created_time": "2018-05-12 04:32:23.342063+00:00", - "created_time_dt": "2018-05-12T04:32:23.342063", - "duration": "0:00:45", - "end_time": "2018-05-12 04:33:08.616066+00:00", - "hyperdrive_id": "8319", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8319_7d385753", - "metric": 3377.9056, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0720166631869791", - "created_time": "2018-05-12 04:33:00.471785+00:00", - "created_time_dt": "2018-05-12T04:33:00.471785", - "duration": "0:00:24", - "end_time": "2018-05-12 04:33:25.342289+00:00", - "hyperdrive_id": "8321", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8321_93092a4f", - "metric": 3391.9024, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0399458028478119", - "created_time": "2018-05-12 04:31:37.490004+00:00", - "created_time_dt": "2018-05-12T04:31:37.490004", - "duration": "0:00:58", - "end_time": "2018-05-12 04:32:36.227261+00:00", - "hyperdrive_id": "8316", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8316_47adbb4d", - "metric": 3417.0157, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0371855776131041", - "created_time": "2018-05-12 04:30:40.022059+00:00", - "created_time_dt": "2018-05-12T04:30:40.022059", - "duration": "0:00:31", - "end_time": "2018-05-12 04:31:11.265877+00:00", - "hyperdrive_id": "8313", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8313_a2cf1a87", - "metric": 3419.2355, - "start_time": "None", - "status": "Completed" - }, - { - "arguments": "diabetes_sklearn.py --alpha 0.1 --alpha 0.0108521659414031", - "created_time": "2018-05-12 04:30:26.126697+00:00", - "created_time_dt": "2018-05-12T04:30:26.126697", - "duration": "0:01:19", - "end_time": "2018-05-12 04:31:45.385829+00:00", - "hyperdrive_id": "8312", - "id": "hyperdrive-sklearn-diabetes_1526099364301_1055_8312_333b9d43", - "metric": 3435.7832, - "start_time": "None", - "status": "Completed" - } - ], - { - "categories": [ - "8307", - "8308", - "8309", - "8310", - "8311", - "8312", - "8313", - "8314", - "8315", - "8316", - "8317", - "8318", - "8319", - "8320", - "8321", - "8322", - "8323", - "8324", - "8325", - "8326" - ], - "metricName": "mse", - "series": [ - { - "mode": "markers", - "name": "mse", - "stepped": false, - "type": "scatter", - "uid": "0d668b", - "x": [ - "8307", - "8308", - "8309", - "8310", - "8311", - "8312", - "8313", - "8314", - "8315", - "8316", - "8317", - "8318", - "8319", - "8320", - "8321", - "8322", - "8323", - "8324", - "8325", - "8326" - ], - "y": [ - 3297.146322567479, - 3370.9250492845417, - 3352.1487032874497, - 3376.962795304554, - 3345.1183624558485, - 3435.783246565139, - 3419.235515804575, - 3326.3371118238074, - 3299.888294102396, - 3417.015692446415, - 3318.471799408107, - 3300.2455334502383, - 3377.9056290478743, - 3316.6480785229305, - 3391.902383224928, - 3299.300119043289, - 3296.320211066935, - 3295.8308612858723, - 3350.1062329850233, - 3329.0535888350505 - ] - }, - { - "line": { - "shape": "hv" - }, - "mode": "lines", - "name": "mse_min", - "stepped": true, - "type": "scatter", - "uid": "686b96", - "x": [ - "8307", - "8308", - "8309", - "8310", - "8311", - "8312", - "8313", - "8314", - "8315", - "8316", - "8317", - "8318", - "8319", - "8320", - "8321", - "8322", - "8323", - "8324", - "8325", - "8326" - ], - "y": [ - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3297.146322567479, - 3296.320211066935, - 3295.8308612858723, - 3295.8308612858723, - 3295.8308612858723 - ] - } - ], - "showLegend": false, - "title": "HyperDrive Run Primary Metric : mse" - } - ] - } - } - }, - "version_major": 2, - "version_minor": 0 - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/07.hyperdrive-with-sklearn/diabetes_sklearn.py b/01.getting-started/07.hyperdrive-with-sklearn/diabetes_sklearn.py deleted file mode 100644 index 3fb59770b..000000000 --- a/01.getting-started/07.hyperdrive-with-sklearn/diabetes_sklearn.py +++ /dev/null @@ -1,52 +0,0 @@ -from sklearn.datasets import load_diabetes -from sklearn.linear_model import Ridge -from sklearn.metrics import mean_squared_error -from sklearn.model_selection import train_test_split -from sklearn.externals import joblib - -import os -import argparse - -# Import Run from azureml.core, -from azureml.core.run import Run - -parser = argparse.ArgumentParser() -parser.add_argument('--alpha', type=float, dest='alpha', - default=0.5, help='regularization strength') -args = parser.parse_args() - -# Get handle of current run for logging and history purposes -run = Run.get_submitted_run() - -X, y = load_diabetes(return_X_y=True) - -columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6'] - -x_train, x_test, y_train, y_test = train_test_split( - X, y, test_size=0.2, random_state=0) -data = {"train": {"x": x_train, "y": y_train}, - "test": {"x": x_test, "y": y_test}} - -alpha = args.alpha -print('alpha value is:', alpha) - -reg = Ridge(alpha=alpha) -reg.fit(data["train"]["x"], data["train"]["y"]) - -print('Ridget model fitted.') - -preds = reg.predict(data["test"]["x"]) -mse = mean_squared_error(preds, data["test"]["y"]) - -# Log metrics -run.log("alpha", alpha) -run.log("mse", mse) - -os.makedirs('./outputs', exist_ok=True) -model_file_name = "model.pkl" - -# Save model as part of the run history -with open(model_file_name, "wb") as file: - joblib.dump(reg, 'outputs/' + model_file_name) - -print('Mean Squared Error is:', mse) diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/.ipynb_checkpoints/08.hyperdrive-with-TensorFlow-checkpoint.ipynb b/01.getting-started/08.hyperdrive-with-TensorFlow/.ipynb_checkpoints/08.hyperdrive-with-TensorFlow-checkpoint.ipynb deleted file mode 100644 index d749b57d4..000000000 --- a/01.getting-started/08.hyperdrive-with-TensorFlow/.ipynb_checkpoints/08.hyperdrive-with-TensorFlow-checkpoint.ipynb +++ /dev/null @@ -1,3448 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training and Hyperparameter Tuning of a TensorFlow Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this tutorial, we demonstrate how to use the Azure ML Python SDK to train a Convolutional Neural Network (CNN) in TensorFlow to perform handwritten digit recognition on the popular MNIST dataset. We will demonstrate how to perform hyperparameter tuning of the model using AML's HyperDrive service. \n", - "\n", - "We will cover the following concepts:\n", - "* Create a Batch AI GPU cluster\n", - "* (To do): DataStore\n", - "* Train a TensorFlow model on a single node\n", - "* Logging metrics to Run History\n", - "* Set up a hyperparameter sweep with HyperDrive\n", - "* Select the best model for download" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't. In addition, to run through this notebook, you will need to install a few additional packages by running `pip install pillow tensorflow matplotlib pandas tqdm`\n", - "\n", - "### Authorize Hyperdrive Service Principal\n", - "\n", - "Hyperdrive service is in preview so you need to explicitly grant permissions. In Azure portal, add `vienna-test-westus` as a `Contributor` to your resource group. Or, you can also do this from azure-cli:\n", - "```sh\n", - "# find the ARM id of your resource group. Copy into memory.\n", - "$ az group show -n -o json\n", - "\n", - "# check if https://vienna-test-westus-cluster.sp.azureml.net is a Contributor.\n", - "$ az role assignment list --scope -o table\n", - "\n", - "# if not, add it. you will need to be a resource group owner to do this.\n", - "$ az role assignment create --role Contributor --scope --assignee https://vienna-test-westus-cluster.sp.azureml.net\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Set Up a Workspace\n", - "Workspace is the top-level Azure Resource for Azure ML services." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create An Experiment\n", - "**Experiment** is a logical container in an Azure ML Workspace. It hosts run records which can include run metrics and output artifacts from your experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "experiment_name = 'hyperdrive-with-tf'\n", - "experiment = Experiment(workspace = ws, name = experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create a folder to store the training script." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "script_folder = './samples/hyperdrive-with-tf'\n", - "os.makedirs(script_folder, exist_ok = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Provision a New Batch AI Cluster\n", - "Training machine learning models is often a compute-intensive process. Azure's [Batch AI](#https://docs.microsoft.com/en-us/azure/batch-ai/overview) service allows data scientists to leverage the power of compute clusters of CPU or GPU-enabled VMs for training their models. Using the Python SDK, we can easily provision a Batch AI cluster with the specifications we want." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create mlc", - "batchai" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.compute import BatchAiCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "\n", - "# choose a name for your cluster\n", - "batchai_cluster_name = ws.name + \"gpu\"\n", - "\n", - "found = False\n", - "# see if this compute target already exists in the workspace\n", - "for ct in ws.compute_targets():\n", - " print(ct.name, ct.type)\n", - " if ct.name == batchai_cluster_name and type(ct) is BatchAiCompute:\n", - " found = True\n", - " print('found compute target. just use it.')\n", - " compute_target = ct\n", - " break\n", - " \n", - "if not found:\n", - " print('creating a new compute target...')\n", - " provisioning_config = BatchAiCompute.provisioning_configuration(vm_size = \"STANDARD_NC6\", # NC6 is GPU-enabled\n", - " #vm_priority = 'lowpriority', # optional\n", - " autoscale_enabled = True,\n", - " cluster_min_nodes = 1, \n", - " cluster_max_nodes = 4)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, batchai_cluster_name, provisioning_config)\n", - " \n", - " # can poll for a minimum number of nodes and for a specific timeout. \n", - " # if no min node count is provided it will use the scale settings for the cluster\n", - " compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - " # For a more detailed view of current BatchAI cluster status, use the 'status' property \n", - " print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here, we specify the following parameters for the `provisioning_config`:\n", - "* `vm_size`: the family and size of the VM to use. For this tutorial we want to leverage GPU nodes, so we specify the `STANDARD_NC6` VM, which has one NVIDIA K80 GPU\n", - "* `vm_priority`: `'lowpriority'` or `'dedicated'`\n", - "* `autoscale_enabled`: with autoscaling set to `True`, Batch AI will automatically resize the cluster based on the demands of your workload. Default is `False`, will create a cluster with a fixed # of nodes\n", - "* `cluster_min_nodes`: minimum number of VMs for autoscaling\n", - "* `cluster_max_nodes`: maximum number of VMs for autoscaling" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Train TensorFlow MNIST\n", - "Now let's train a CNN on the MNIST dataset for predicting handwritten digits. The training script `tf_mnist_train.py` is adapted from TensorFlow's [MNIST](#https://www.tensorflow.org/versions/r1.4/get_started/mnist/pros) tutorial. The changes to the original on concerned logging some metrics about the training run to the AML run history. See the adapted file here: [tf_mnist_train.py](tf_mnist_train.py) -- search for 'run_logger' to find the added lines of code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from shutil import copyfile\n", - "\n", - "training_script = 'tf_mnist_train.py'\n", - "# copy the mnist_tf.py file to the project folder\n", - "copyfile(training_script, os.path.join(script_folder, training_script))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# take a look at the training script\n", - "!more $training_script" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### a. Run a single-node TensorFlow experiment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To facilitate ML training, the Python SDK provides a high-level abstraction called Estimators that allows users to train CNTK, TensorFlow, or custom scripts in the Azure ML ecosystem. Let's instantiate an AML TensorFlow Estimator (not to be conflated with the [`tf.estimator.Estimator`](#https://www.tensorflow.org/programmers_guide/estimators) class)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.dnn import TensorFlow\n", - "\n", - "script_params = {\n", - " '--minibatch_size': 64,\n", - " '--learning_rate': 0.001,\n", - " '--keep_probability': 0.5,\n", - " '--output_dir': 'outputs',\n", - " '--num_iterations': 1000\n", - "}\n", - "\n", - "tf_estimator = TensorFlow(source_directory = script_folder, \n", - " script_params = script_params, \n", - " compute_target = compute_target, \n", - " entry_script = training_script, \n", - " node_count = 1,\n", - " use_gpu = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We specify the following parameters to the TensorFlow constructor:\n", - "* `script_params`: a dictionary specifying the command-line arguments to your `entry_script`\n", - "* `compute_target`: the compute target object. Can be a local, DSVM, or Batch AI compute target\n", - "* `entry_script`: the relative(?) path to the project directory of the file to be executed during training\n", - "* `node_count`: the number of nodes to use for the training job. Defaults to `1`\n", - "* `use_gpu`: to leverage the GPU for training, set this flag to `True`. Defaults to `False`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Note on `outputs` folder: **\n", - "\n", - "When running an experiment using the Python SDK, you can write files out to a folder named `outputs` that is relative to the root directory. This folder is specially tracked by AML in the sense that any files written to that folder during script execution will be picked up by Run History; these files (known as *artifacts*) will be available as part of the run history record." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "run = experiment.submit(tf_estimator)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### b. Monitoring the training run\n", - "There are several ways with which the user can monitor the details and status of the training run. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Browse to the run history report (use Chrome please, for now)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Print out the current run status" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also use a widget to monitor the progress of your submitted run, which allows you to do so without blocking your notebook execution:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.widgets import RunDetails\n", - "\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![img](../images/hd_tf1.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "# to block and wait for training to complete \n", - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also check on the Batch AI cluster and job status using `az-cli` commands:\n", - "```shell\n", - "# check cluster status. You can see how many nodes are running.\n", - "$ az batchai cluster list\n", - "\n", - "# check job status. You can see how many jobs are running\n", - "$ az batchai job list\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### c. Log metrics to Run History\n", - "\n", - "Another useful feature of the Python SDK is the ability to log metrics for each run. These metrics are persisted in the run history by AML. In addition, they are automatically displayed and visualized by the RunDetails widget. (Logging run metrics is also required in order to use the HyperDrive service, which we will go over in more detail in section 4.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The below code snippet from `tf_mnist_train.py` shows how we can we log the script parameters for a training run, by specifying a key for the metric and the corresponding value:\n", - "```python\n", - "from azureml.core.run import Run\n", - "\n", - "run_logger = Run.get_submitted_run()\n", - "run_logger.log(\"learning_rate\", args.learning_rate)\n", - "run_logger.log(\"minibatch_size\", args.minibatch_size)\n", - "run_logger.log(\"keep_probability\", args.keep_probability)\n", - "run_logger.log(\"num_iterations\", args.num_iterations)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "get metrics" - ] - }, - "outputs": [], - "source": [ - "run.get_metrics()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 4. Hyperparameter Tuning with HyperDrive\n", - "\n", - "Now that we've seen how to do a simple TensorFlow training run using the Python SDK, let's see if we can further improve the accuracy of our model.\n", - "\n", - "Hyperparameter tuning is a key part of machine learning experimentation, in which the data scientist tries different configurations of hyperparameters in order to find a set of values that optimizes a specific target metric, such as the accuracy of the model. To this end, Azure ML provides the ** HyperDrive service ** to faciliate the hyperparameter tuning process. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### a. Start a HyperDrive run\n", - "\n", - "Using HyperDrive, we specify the hyperparameter space to sweep over, the primary metric to optimize, and an early termination policy. HyperDrive will kick off multiple children runs with different hyperparameter configurations, and terminate underperforming runs according to the early termination policy provided." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.hyperdrive import *\n", - "\n", - "param_sampling = RandomParameterSampling( {\n", - " \"learning_rate\": loguniform(-10, -3),\n", - " \"keep_probability\": uniform(0.5, 0.1)\n", - " }\n", - ")\n", - "\n", - "early_termination_policy = BanditPolicy(slack_factor = 0.15, evaluation_interval=2)\n", - "\n", - "hyperdrive_run_config = HyperDriveRunConfig(estimator = tf_estimator, \n", - " hyperparameter_sampling = param_sampling, \n", - " policy = early_termination_policy,\n", - " primary_metric_name = \"Accuracy\",\n", - " primary_metric_goal = PrimaryMetricGoal.MAXIMIZE,\n", - " max_total_runs = 20,\n", - " max_concurrent_runs = 4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the above cell, we first define a sampling space for the hyperparameters we want to sweep over, specifically the `learning_rate` and `keep_probability`. In this case we are using `RandomParameterSampling`, which allows us to specify the parameter values as either a choice among discrete values or as a distribution over a continuous range (here, we are using a uniform distribution for the `keep_probability`). You can run `help(RandomParameterSampling)` for more API details on this class.\n", - "\n", - "Then, we specify the early termination policy to use. If not specified, the policy defaults (?) to `None`, in which case all training runs are run to completion. Here we use the `BanditPolicy`, which will terminate any run that doesn't fall within the slack factor of our primary evaluation metric. Run `help(BanditPolicy)` for more details on this policy.\n", - "\n", - "To do: explain `evaluation_interval` within context of our training script.\n", - "\n", - "We specify the following parameters to the `HyperDriveRunConfig` constructor:\n", - "* explain input_paths?\n", - "* `estimator`: the estimator that will be called with the sampled hyperparameters\n", - "* `hyperparameter_sampling`: the sampling space to use\n", - "* `policy`: the early termination policy\n", - "* `primary_metric_name`: the name of the metric logged to the AML Run that HyperDrive will use to evaluate runs. Here, we are using the test accuracy (logged as 'Accuracy' in our training script)\n", - "* `primary_metric_goal`: the optimization goal of the primary metric (either `PrimaryMetricGoal.MAXIMIZE` or `PrimaryMetricGoal.MINIMIZE`)\n", - "* `max_total_runs`: the maximum number of runs HyperDrive will kick off\n", - "* `max_concurrent_runs`: the maximum number of runs to run concurrently\n", - "* `compute_target`: the compute target. In our case, the Batch AI cluster we provisioned" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Note on logging metrics for HyperDrive: ** \n", - "\n", - "In order to use HyperDrive, we will need to log the metric we want the service to use for evaluating run performance (`primary_metric_name`). In our script, we will use the accuracy of the model evaluated on the MNIST test dataset as our primary metric. For every 100 training iterations, we calculate and log this test accuracy (`'Accuracy'`). We also log an additional utility metric, `'Iterations'`, to inform us of the number of iterations the model was trained on that corresponds to each Accuracy metric logged (see `tf_mnist.py` for more details). This is useful for seeing how many iterations were trained for jobs that were terminated early.\n", - "\n", - "```python\n", - "run_logger.log(\"Accuracy\", float(test_acc))\n", - "run_logger.log(\"Iterations\", i)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "hyperdrive run", - "batchai", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "# start the HyperDrive run\n", - "hyperdrive_run = experiment.submit(hyperdrive_run_config)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### b. Use a widget to visualize details of the HyperDrive runs\n", - "\n", - "Runs will automatically start to show in the following widget once rendered." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.widgets import RunDetails\n", - "\n", - "RunDetails(hyperdrive_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![img](../images/hd_tf2.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check cluster status, pay attention to the # of running nodes\n", - "# !az batchai cluster list -o table" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check the Batch AI job queue. Notice the Job name is the run history ID. \n", - "# Pay attention to the state of the job.\n", - "# !az batchai job list -o table" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### c. Find the best run\n", - "\n", - "Once all of the HyperDrive runs have completed, we can find the run that achieved the highest accuracy and its corresponding hyperparameters." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history", - "get metrics" - ] - }, - "outputs": [], - "source": [ - "table = helpers.ListTable()\n", - "from tqdm import tqdm\n", - "\n", - "run_metrics = {}\n", - "table.append(['Accuracy', 'Run', 'Iterations', 'learning_rate', 'keep_probability'])\n", - "for run in tqdm(hyperdrive_run.get_children()):\n", - " metrics = run.get_metrics()\n", - " if 'Accuracy' in metrics.keys():\n", - " metrics['Accuracy'] = metrics['Accuracy'][-1] # final test accuracy\n", - " metrics['Iterations'] = max(metrics['Iterations']) # number of iterations the run ran for\n", - " \n", - " table.append([metrics['Accuracy'], \n", - " run.id, \n", - " metrics['Iterations'], \n", - " metrics['learning_rate'], \n", - " metrics['keep_probability']])\n", - " run_metrics[run.id] = metrics\n", - "table" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.run import Run\n", - "\n", - "best_run_id = max(run_metrics, key = lambda k: run_metrics[k]['Accuracy'])\n", - "best_run_metrics = run_metrics[best_run_id]\n", - "experiment = Experiment(ws, experiment_name)\n", - "best_run = Run(experiment, best_run_id)\n", - "\n", - "print('Best Run is:\\n Accuracy: {0:.6f} \\n Learning rate: {1:.6f} \\n Keep probability: {2}'.format(\n", - " best_run_metrics['Accuracy'],\n", - " best_run_metrics['learning_rate'],\n", - " best_run_metrics['keep_probability']\n", - " ))\n", - "\n", - "print(helpers.get_run_history_url(best_run))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot the runs [Optional] \n", - "Note you will need to install `matplotlib` for this." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "plot_data = np.array([[run_metrics[i]['keep_probability'], \n", - " run_metrics[i]['learning_rate'], \n", - " run_metrics[i]['Accuracy']] for i in run_metrics.keys()])\n", - "area = np.array([[run_metrics[i]['Iterations']/5] for i in run_metrics.keys()])\n", - "\n", - "plt.figure(figsize = (15,5))\n", - "plt.scatter(plot_data[:,0], plot_data[:,1], s = area, c = plot_data[:,2], alpha = 0.4)\n", - "plt.xlabel(\"keep_probability\")\n", - "plt.ylabel(\"learning_rate\")\n", - "plt.yscale('log')\n", - "plt.ylim(0.00001,0.06)\n", - "plt.colorbar()\n", - "plt.clim(0.95, max(plot_data[:,2]))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### d. Download model from the best run\n", - "Once we've identified the best run from HyperDrive, we can download the model files to our local machine. \n", - "\n", - "The final trained model checkpoint files are located in the `outputs` directory picked up by AML. We can run the below line of code to confirm that those files are present:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "best_run.get_file_names()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we can download the relevant checkpoint files. Note there is currently a bug on uploading files when executing on Batch AI cluster so the below code doesn't work yet." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "download file" - ] - }, - "outputs": [], - "source": [ - "import os\n", - "output_dir = 'outputs'\n", - "target_dir = os.path.join('sample_projects', 'outputs')\n", - "model_files_to_download = ['checkpoint', 'model.ckpt.data-00000-of-00001', 'model.ckpt.index', 'model.ckpt.meta']\n", - "for file in model_files_to_download:\n", - " model_src_path = os.path.join(output_dir, file)\n", - " model_dest_path = os.path.join(target_dir, file)\n", - " print('downloading ' + file)\n", - " best_run.download_file(name = model_src_path, output_file_path = model_dest_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### e. Test the model locally\n", - "Now that we have downloaded the best-performing model, we can use it locally to score images of hand-written digits. For this we have prepared a scoring file [tf_mnist_score.py](tf_mnist_score.py) which we import below. tf_mnist_score.py provides a function `run(input_data)` which accepts a base64-encoded image in a JSON dict format (this format is friendly for the deployment of a webservice, which we will do later). \n", - "\n", - "Note that this scoring code requires tensorflow and PIL (`pip install tensorflow pillow`).\n", - "\n", - "First, we will create a base64-encoded image in a json structure based on one of the test images provided in the folder `mnist_test_images`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os, json, base64\n", - "from PIL import Image \n", - "import tf_mnist_score\n", - "from io import BytesIO\n", - "\n", - "def imgToBase64(img):\n", - " imgio = BytesIO()\n", - " img.save(imgio, 'JPEG')\n", - " img_str = base64.b64encode(imgio.getvalue())\n", - " return img_str.decode('utf-8')\n", - "\n", - "# Generate JSON Base64-encoded image from sample test input\n", - "test_img_path = os.path.join('mnist_test_images', 'img_3.jpg')\n", - "base64Img = imgToBase64(Image.open(test_img_path))\n", - "data = json.dumps({'data': base64Img})\n", - "print(data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we will call `tf_mnist_score.run()` with the json data structure we created above. And we draw the image that we are scoring, so we can compare the label returned by the image with the acutual handwritten digit." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import Image as IPImage\n", - "tf_mnist_score.init()\n", - "result = tf_mnist_score.run(data)\n", - "print(result)\n", - "IPImage(filename=test_img_path, width=200)" - ] - } - ], - "metadata": { - "anaconda-cloud": {}, - "kernelspec": { - "display_name": "Python 3", - "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.6.5" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "state": { - "208cc3b53e2c45fea1440188a863efb8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_contrib_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowHyperDriveRunsView", - "layout": "IPY_MODEL_8a36279a14624bbdb1926c2572748861", - "value": { - "child_runs": [ - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000852395056049516 --keep_probability 0.434530370965995", - "created_time": "2018-06-01 19:41:39.666220+00:00", - "created_time_dt": "2018-06-01T19:41:39.666220", - "duration": "0:00:57", - "end_time": "2018-06-01 19:42:37.511351+00:00", - "hyperdrive_id": "5488", - "metric": 0.9842000007629395, - "paras_keep_probability": "0.434530370965995", - "paras_learning_rate": "0.000852395056049516", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5488_abbecb6c", - "run_number": 16, - "start_time": "2018-06-01 19:41:40.368621+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00179999057463703 --keep_probability 0.296515321882523", - "created_time": "2018-06-01 19:29:46.303636+00:00", - "created_time_dt": "2018-06-01T19:29:46.303636", - "duration": "0:02:03", - "end_time": "2018-06-01 19:31:50.043486+00:00", - "hyperdrive_id": "5469", - "metric": 0.9836999773979187, - "paras_keep_probability": "0.296515321882523", - "paras_learning_rate": "0.00179999057463703", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5469_9f034e69", - "run_number": 10, - "start_time": "2018-06-01 19:29:47.033264+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000676904386677712 --keep_probability 0.4154535083569", - "created_time": "2018-06-01 19:50:31.651044+00:00", - "created_time_dt": "2018-06-01T19:50:31.651044", - "duration": "0:14:30", - "end_time": "2018-06-01 20:05:02.591649+00:00", - "hyperdrive_id": "5498", - "metric": 0.9828000068664551, - "paras_keep_probability": "0.4154535083569", - "paras_learning_rate": "0.000676904386677712", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5498_32e0a249", - "run_number": 20, - "start_time": "2018-06-01 19:50:37.386350+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000586938713321222 --keep_probability 0.432942295536284", - "created_time": "2018-06-01 19:37:36.678691+00:00", - "created_time_dt": "2018-06-01T19:37:36.678691", - "duration": "0:01:46", - "end_time": "2018-06-01 19:39:23.211000+00:00", - "hyperdrive_id": "5479", - "metric": 0.9818000197410583, - "paras_keep_probability": "0.432942295536284", - "paras_learning_rate": "0.000586938713321222", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5479_cb5037ed", - "run_number": 11, - "start_time": "2018-06-01 19:37:43.143211+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321696353537414 --keep_probability 0.446837800410634", - "created_time": "2018-06-01 19:41:39.915872+00:00", - "created_time_dt": "2018-06-01T19:41:39.915872", - "duration": "0:02:58", - "end_time": "2018-06-01 19:44:38.693923+00:00", - "hyperdrive_id": "5490", - "metric": 0.9812999963760376, - "paras_keep_probability": "0.446837800410634", - "paras_learning_rate": "0.000321696353537414", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5490_cfcbcea1", - "run_number": 17, - "start_time": "2018-06-01 19:41:40.688804+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000598930751146987 --keep_probability 0.173175740602207", - "created_time": "2018-06-01 19:41:44.682554+00:00", - "created_time_dt": "2018-06-01T19:41:44.682554", - "duration": "0:01:54", - "end_time": "2018-06-01 19:43:38.690104+00:00", - "hyperdrive_id": "5491", - "metric": 0.9785000085830688, - "paras_keep_probability": "0.173175740602207", - "paras_learning_rate": "0.000598930751146987", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5491_1ab60563", - "run_number": 18, - "start_time": "2018-06-01 19:41:45.356160+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00313856224079023 --keep_probability 0.308708329651949", - "created_time": "2018-06-01 19:29:46.140940+00:00", - "created_time_dt": "2018-06-01T19:29:46.140940", - "duration": "0:02:02", - "end_time": "2018-06-01 19:31:49.127224+00:00", - "hyperdrive_id": "5471", - "metric": 0.9764000177383423, - "paras_keep_probability": "0.308708329651949", - "paras_learning_rate": "0.00313856224079023", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5471_05cdc17b", - "run_number": 8, - "start_time": "2018-06-01 19:29:46.876362+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321079619657115 --keep_probability 0.166071686996525", - "created_time": "2018-06-01 19:26:11.468523+00:00", - "created_time_dt": "2018-06-01T19:26:11.468523", - "duration": "0:01:48", - "end_time": "2018-06-01 19:28:00.170666+00:00", - "hyperdrive_id": "5460", - "metric": 0.9703999757766724, - "paras_keep_probability": "0.166071686996525", - "paras_learning_rate": "0.000321079619657115", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5460_0ff67ff3", - "run_number": 6, - "start_time": "2018-06-01 19:26:12.172473+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00970484525511844 --keep_probability 0.334371206847485", - "created_time": "2018-06-01 19:25:53.815492+00:00", - "created_time_dt": "2018-06-01T19:25:53.815492", - "duration": "0:02:07", - "end_time": "2018-06-01 19:28:01.507944+00:00", - "hyperdrive_id": "5457", - "metric": 0.968500018119812, - "paras_keep_probability": "0.334371206847485", - "paras_learning_rate": "0.00970484525511844", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5457_a4c3a147", - "run_number": 4, - "start_time": "2018-06-01 19:26:08.553859+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00922621594789716 --keep_probability 0.227683838955561", - "created_time": "2018-06-01 19:37:36.835723+00:00", - "created_time_dt": "2018-06-01T19:37:36.835723", - "duration": "0:01:03", - "end_time": "2018-06-01 19:38:40.652773+00:00", - "hyperdrive_id": "5480", - "metric": 0.9663000106811523, - "paras_keep_probability": "0.227683838955561", - "paras_learning_rate": "0.00922621594789716", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5480_f234fb08", - "run_number": 14, - "start_time": "2018-06-01 19:37:38.116439+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0155645426732787 --keep_probability 0.159123698168668", - "created_time": "2018-06-01 19:29:46.277531+00:00", - "created_time_dt": "2018-06-01T19:29:46.277531", - "duration": "0:01:09", - "end_time": "2018-06-01 19:30:55.727701+00:00", - "hyperdrive_id": "5472", - "metric": 0.964900016784668, - "paras_keep_probability": "0.159123698168668", - "paras_learning_rate": "0.0155645426732787", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5472_23122c4b", - "run_number": 9, - "start_time": "2018-06-01 19:29:46.964148+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00838536088211458 --keep_probability 0.102478957268164", - "created_time": "2018-06-01 19:25:53.548553+00:00", - "created_time_dt": "2018-06-01T19:25:53.548553", - "duration": "0:01:05", - "end_time": "2018-06-01 19:26:59.136632+00:00", - "hyperdrive_id": "5459", - "metric": 0.9646999835968018, - "paras_keep_probability": "0.102478957268164", - "paras_learning_rate": "0.00838536088211458", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5459_030491ad", - "run_number": 3, - "start_time": "2018-06-01 19:25:54.739654+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000143958552086584 --keep_probability 0.273084377226789", - "created_time": "2018-06-01 19:29:46.057879+00:00", - "created_time_dt": "2018-06-01T19:29:46.057879", - "duration": "0:01:18", - "end_time": "2018-06-01 19:31:04.843202+00:00", - "hyperdrive_id": "5470", - "metric": 0.963699996471405, - "paras_keep_probability": "0.273084377226789", - "paras_learning_rate": "0.000143958552086584", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5470_a648dbea", - "run_number": 7, - "start_time": "2018-06-01 19:29:46.780201+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.14051833348127E-05 --keep_probability 0.472685817381368", - "created_time": "2018-06-01 19:41:39.648602+00:00", - "created_time_dt": "2018-06-01T19:41:39.648602", - "duration": "0:03:06", - "end_time": "2018-06-01 19:44:45.699811+00:00", - "hyperdrive_id": "5489", - "metric": 0.9613000154495239, - "paras_keep_probability": "0.472685817381368", - "paras_learning_rate": "7.14051833348127E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5489_38907948", - "run_number": 15, - "start_time": "2018-06-01 19:41:40.512369+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00737747352627753 --keep_probability 0.205239625544216", - "created_time": "2018-06-01 19:50:33.596963+00:00", - "created_time_dt": "2018-06-01T19:50:33.596963", - "duration": "0:01:51", - "end_time": "2018-06-01 19:52:25.281499+00:00", - "hyperdrive_id": "5497", - "metric": 0.9581999778747559, - "paras_keep_probability": "0.205239625544216", - "paras_learning_rate": "0.00737747352627753", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5497_8130025b", - "run_number": 22, - "start_time": "2018-06-01 19:50:34.456850+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0211316024512922 --keep_probability 0.456008246140918", - "created_time": "2018-06-01 19:50:31.581841+00:00", - "created_time_dt": "2018-06-01T19:50:31.581841", - "duration": "0:01:03", - "end_time": "2018-06-01 19:51:35.272415+00:00", - "hyperdrive_id": "5499", - "metric": 0.9580000042915344, - "paras_keep_probability": "0.456008246140918", - "paras_learning_rate": "0.0211316024512922", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5499_e0b5a73f", - "run_number": 19, - "start_time": "2018-06-01 19:50:32.786951+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.56451710371043E-05 --keep_probability 0.321364540919092", - "created_time": "2018-06-01 19:50:33.421674+00:00", - "created_time_dt": "2018-06-01T19:50:33.421674", - "duration": "0:06:27", - "end_time": "2018-06-01 19:57:00.982688+00:00", - "hyperdrive_id": "5496", - "metric": 0.9520000219345093, - "paras_keep_probability": "0.321364540919092", - "paras_learning_rate": "7.56451710371043E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5496_46a98c1f", - "run_number": 21, - "start_time": "2018-06-01 19:50:34.379782+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 6.86923046964849E-05 --keep_probability 0.229123758955098", - "created_time": "2018-06-01 19:37:36.816510+00:00", - "created_time_dt": "2018-06-01T19:37:36.816510", - "duration": "0:01:12", - "end_time": "2018-06-01 19:38:49.439465+00:00", - "hyperdrive_id": "5477", - "metric": 0.9483000040054321, - "paras_keep_probability": "0.229123758955098", - "paras_learning_rate": "6.86923046964849E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5477_c428bcf0", - "run_number": 13, - "start_time": "2018-06-01 19:37:42.971387+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.014609502490554 --keep_probability 0.480459935106515", - "created_time": "2018-06-01 19:26:10.258955+00:00", - "created_time_dt": "2018-06-01T19:26:10.258955", - "duration": "0:02:41", - "end_time": "2018-06-01 19:28:52.069673+00:00", - "hyperdrive_id": "5458", - "metric": 0.12110000103712082, - "paras_keep_probability": "0.480459935106515", - "paras_learning_rate": "0.014609502490554", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5458_3f73f0ac", - "run_number": 5, - "start_time": "2018-06-01 19:26:17.107379+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0149932664638274 --keep_probability 0.284424630578217", - "created_time": "2018-06-01 19:37:36.730460+00:00", - "created_time_dt": "2018-06-01T19:37:36.730460", - "duration": "0:01:08", - "end_time": "2018-06-01 19:38:44.881339+00:00", - "hyperdrive_id": "5478", - "metric": 0.11349999904632568, - "paras_keep_probability": "0.284424630578217", - "paras_learning_rate": "0.0149932664638274", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5478_24390740", - "run_number": 12, - "start_time": "2018-06-01 19:37:42.865594+00:00", - "status": "Completed" - } - ], - "children_metrics": { - "allArguments": [ - "keep_probability", - "learning_rate", - "minibatch_size", - "output_dir", - "num_iterations", - "Accuracy" - ], - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "jobHistData": [ - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000852395056049516 --keep_probability 0.434530370965995", - "created_time": "2018-06-01 19:41:39.666220+00:00", - "created_time_dt": "2018-06-01T19:41:39.666220", - "duration": "0:00:57", - "end_time": "2018-06-01 19:42:37.511351+00:00", - "hyperdrive_id": "5488", - "metric": 0.9842000007629395, - "paras_keep_probability": "0.434530370965995", - "paras_learning_rate": "0.000852395056049516", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5488_abbecb6c", - "run_number": 16, - "start_time": "2018-06-01 19:41:40.368621+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00179999057463703 --keep_probability 0.296515321882523", - "created_time": "2018-06-01 19:29:46.303636+00:00", - "created_time_dt": "2018-06-01T19:29:46.303636", - "duration": "0:02:03", - "end_time": "2018-06-01 19:31:50.043486+00:00", - "hyperdrive_id": "5469", - "metric": 0.9836999773979187, - "paras_keep_probability": "0.296515321882523", - "paras_learning_rate": "0.00179999057463703", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5469_9f034e69", - "run_number": 10, - "start_time": "2018-06-01 19:29:47.033264+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000676904386677712 --keep_probability 0.4154535083569", - "created_time": "2018-06-01 19:50:31.651044+00:00", - "created_time_dt": "2018-06-01T19:50:31.651044", - "duration": "0:14:30", - "end_time": "2018-06-01 20:05:02.591649+00:00", - "hyperdrive_id": "5498", - "metric": 0.9828000068664551, - "paras_keep_probability": "0.4154535083569", - "paras_learning_rate": "0.000676904386677712", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5498_32e0a249", - "run_number": 20, - "start_time": "2018-06-01 19:50:37.386350+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000586938713321222 --keep_probability 0.432942295536284", - "created_time": "2018-06-01 19:37:36.678691+00:00", - "created_time_dt": "2018-06-01T19:37:36.678691", - "duration": "0:01:46", - "end_time": "2018-06-01 19:39:23.211000+00:00", - "hyperdrive_id": "5479", - "metric": 0.9818000197410583, - "paras_keep_probability": "0.432942295536284", - "paras_learning_rate": "0.000586938713321222", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5479_cb5037ed", - "run_number": 11, - "start_time": "2018-06-01 19:37:43.143211+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321696353537414 --keep_probability 0.446837800410634", - "created_time": "2018-06-01 19:41:39.915872+00:00", - "created_time_dt": "2018-06-01T19:41:39.915872", - "duration": "0:02:58", - "end_time": "2018-06-01 19:44:38.693923+00:00", - "hyperdrive_id": "5490", - "metric": 0.9812999963760376, - "paras_keep_probability": "0.446837800410634", - "paras_learning_rate": "0.000321696353537414", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5490_cfcbcea1", - "run_number": 17, - "start_time": "2018-06-01 19:41:40.688804+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000598930751146987 --keep_probability 0.173175740602207", - "created_time": "2018-06-01 19:41:44.682554+00:00", - "created_time_dt": "2018-06-01T19:41:44.682554", - "duration": "0:01:54", - "end_time": "2018-06-01 19:43:38.690104+00:00", - "hyperdrive_id": "5491", - "metric": 0.9785000085830688, - "paras_keep_probability": "0.173175740602207", - "paras_learning_rate": "0.000598930751146987", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5491_1ab60563", - "run_number": 18, - "start_time": "2018-06-01 19:41:45.356160+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00313856224079023 --keep_probability 0.308708329651949", - "created_time": "2018-06-01 19:29:46.140940+00:00", - "created_time_dt": "2018-06-01T19:29:46.140940", - "duration": "0:02:02", - "end_time": "2018-06-01 19:31:49.127224+00:00", - "hyperdrive_id": "5471", - "metric": 0.9764000177383423, - "paras_keep_probability": "0.308708329651949", - "paras_learning_rate": "0.00313856224079023", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5471_05cdc17b", - "run_number": 8, - "start_time": "2018-06-01 19:29:46.876362+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321079619657115 --keep_probability 0.166071686996525", - "created_time": "2018-06-01 19:26:11.468523+00:00", - "created_time_dt": "2018-06-01T19:26:11.468523", - "duration": "0:01:48", - "end_time": "2018-06-01 19:28:00.170666+00:00", - "hyperdrive_id": "5460", - "metric": 0.9703999757766724, - "paras_keep_probability": "0.166071686996525", - "paras_learning_rate": "0.000321079619657115", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5460_0ff67ff3", - "run_number": 6, - "start_time": "2018-06-01 19:26:12.172473+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00970484525511844 --keep_probability 0.334371206847485", - "created_time": "2018-06-01 19:25:53.815492+00:00", - "created_time_dt": "2018-06-01T19:25:53.815492", - "duration": "0:02:07", - "end_time": "2018-06-01 19:28:01.507944+00:00", - "hyperdrive_id": "5457", - "metric": 0.968500018119812, - "paras_keep_probability": "0.334371206847485", - "paras_learning_rate": "0.00970484525511844", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5457_a4c3a147", - "run_number": 4, - "start_time": "2018-06-01 19:26:08.553859+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00922621594789716 --keep_probability 0.227683838955561", - "created_time": "2018-06-01 19:37:36.835723+00:00", - "created_time_dt": "2018-06-01T19:37:36.835723", - "duration": "0:01:03", - "end_time": "2018-06-01 19:38:40.652773+00:00", - "hyperdrive_id": "5480", - "metric": 0.9663000106811523, - "paras_keep_probability": "0.227683838955561", - "paras_learning_rate": "0.00922621594789716", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5480_f234fb08", - "run_number": 14, - "start_time": "2018-06-01 19:37:38.116439+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0155645426732787 --keep_probability 0.159123698168668", - "created_time": "2018-06-01 19:29:46.277531+00:00", - "created_time_dt": "2018-06-01T19:29:46.277531", - "duration": "0:01:09", - "end_time": "2018-06-01 19:30:55.727701+00:00", - "hyperdrive_id": "5472", - "metric": 0.964900016784668, - "paras_keep_probability": "0.159123698168668", - "paras_learning_rate": "0.0155645426732787", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5472_23122c4b", - "run_number": 9, - "start_time": "2018-06-01 19:29:46.964148+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00838536088211458 --keep_probability 0.102478957268164", - "created_time": "2018-06-01 19:25:53.548553+00:00", - "created_time_dt": "2018-06-01T19:25:53.548553", - "duration": "0:01:05", - "end_time": "2018-06-01 19:26:59.136632+00:00", - "hyperdrive_id": "5459", - "metric": 0.9646999835968018, - "paras_keep_probability": "0.102478957268164", - "paras_learning_rate": "0.00838536088211458", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5459_030491ad", - "run_number": 3, - "start_time": "2018-06-01 19:25:54.739654+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000143958552086584 --keep_probability 0.273084377226789", - "created_time": "2018-06-01 19:29:46.057879+00:00", - "created_time_dt": "2018-06-01T19:29:46.057879", - "duration": "0:01:18", - "end_time": "2018-06-01 19:31:04.843202+00:00", - "hyperdrive_id": "5470", - "metric": 0.963699996471405, - "paras_keep_probability": "0.273084377226789", - "paras_learning_rate": "0.000143958552086584", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5470_a648dbea", - "run_number": 7, - "start_time": "2018-06-01 19:29:46.780201+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.14051833348127E-05 --keep_probability 0.472685817381368", - "created_time": "2018-06-01 19:41:39.648602+00:00", - "created_time_dt": "2018-06-01T19:41:39.648602", - "duration": "0:03:06", - "end_time": "2018-06-01 19:44:45.699811+00:00", - "hyperdrive_id": "5489", - "metric": 0.9613000154495239, - "paras_keep_probability": "0.472685817381368", - "paras_learning_rate": "7.14051833348127E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5489_38907948", - "run_number": 15, - "start_time": "2018-06-01 19:41:40.512369+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00737747352627753 --keep_probability 0.205239625544216", - "created_time": "2018-06-01 19:50:33.596963+00:00", - "created_time_dt": "2018-06-01T19:50:33.596963", - "duration": "0:01:51", - "end_time": "2018-06-01 19:52:25.281499+00:00", - "hyperdrive_id": "5497", - "metric": 0.9581999778747559, - "paras_keep_probability": "0.205239625544216", - "paras_learning_rate": "0.00737747352627753", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5497_8130025b", - "run_number": 22, - "start_time": "2018-06-01 19:50:34.456850+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0211316024512922 --keep_probability 0.456008246140918", - "created_time": "2018-06-01 19:50:31.581841+00:00", - "created_time_dt": "2018-06-01T19:50:31.581841", - "duration": "0:01:03", - "end_time": "2018-06-01 19:51:35.272415+00:00", - "hyperdrive_id": "5499", - "metric": 0.9580000042915344, - "paras_keep_probability": "0.456008246140918", - "paras_learning_rate": "0.0211316024512922", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5499_e0b5a73f", - "run_number": 19, - "start_time": "2018-06-01 19:50:32.786951+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.56451710371043E-05 --keep_probability 0.321364540919092", - "created_time": "2018-06-01 19:50:33.421674+00:00", - "created_time_dt": "2018-06-01T19:50:33.421674", - "duration": "0:06:27", - "end_time": "2018-06-01 19:57:00.982688+00:00", - "hyperdrive_id": "5496", - "metric": 0.9520000219345093, - "paras_keep_probability": "0.321364540919092", - "paras_learning_rate": "7.56451710371043E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5496_46a98c1f", - "run_number": 21, - "start_time": "2018-06-01 19:50:34.379782+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 6.86923046964849E-05 --keep_probability 0.229123758955098", - "created_time": "2018-06-01 19:37:36.816510+00:00", - "created_time_dt": "2018-06-01T19:37:36.816510", - "duration": "0:01:12", - "end_time": "2018-06-01 19:38:49.439465+00:00", - "hyperdrive_id": "5477", - "metric": 0.9483000040054321, - "paras_keep_probability": "0.229123758955098", - "paras_learning_rate": "6.86923046964849E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5477_c428bcf0", - "run_number": 13, - "start_time": "2018-06-01 19:37:42.971387+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.014609502490554 --keep_probability 0.480459935106515", - "created_time": "2018-06-01 19:26:10.258955+00:00", - "created_time_dt": "2018-06-01T19:26:10.258955", - "duration": "0:02:41", - "end_time": "2018-06-01 19:28:52.069673+00:00", - "hyperdrive_id": "5458", - "metric": 0.12110000103712082, - "paras_keep_probability": "0.480459935106515", - "paras_learning_rate": "0.014609502490554", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5458_3f73f0ac", - "run_number": 5, - "start_time": "2018-06-01 19:26:17.107379+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0149932664638274 --keep_probability 0.284424630578217", - "created_time": "2018-06-01 19:37:36.730460+00:00", - "created_time_dt": "2018-06-01T19:37:36.730460", - "duration": "0:01:08", - "end_time": "2018-06-01 19:38:44.881339+00:00", - "hyperdrive_id": "5478", - "metric": 0.11349999904632568, - "paras_keep_probability": "0.284424630578217", - "paras_learning_rate": "0.0149932664638274", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5478_24390740", - "run_number": 12, - "start_time": "2018-06-01 19:37:42.865594+00:00", - "status": "Completed" - } - ], - "metricName": "Accuracy", - "series": [ - { - "mode": "lines", - "name": 20, - "run_id": 20, - "stepped": false, - "uid": "d9463a", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.052000001072883606, - 0.9318000078201294, - 0.9584000110626221, - 0.9639999866485596, - 0.9710999727249146, - 0.9746999740600586, - 0.9768999814987183, - 0.9822999835014343, - 0.978600025177002, - 0.9801999926567078, - 0.9828000068664551 - ] - }, - { - "mode": "lines", - "name": 7, - "run_id": 7, - "stepped": false, - "uid": "2d6574", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.08749999850988388, - 0.855400025844574, - 0.911300003528595, - 0.9289000034332275, - 0.9394999742507935, - 0.9431999921798706, - 0.9509999752044678, - 0.9553999900817871, - 0.9555000066757202, - 0.963699996471405, - 0.9616000056266785 - ] - }, - { - "mode": "lines", - "name": 16, - "run_id": 16, - "stepped": false, - "uid": "add68c", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.08869999647140503, - 0.9404000043869019, - 0.9574000239372253, - 0.9700999855995178, - 0.9715999960899353, - 0.979200005531311, - 0.9797000288963318, - 0.9812999963760376, - 0.9797999858856201, - 0.9817000031471252, - 0.9842000007629395 - ] - }, - { - "mode": "lines", - "name": 14, - "run_id": 14, - "stepped": false, - "uid": "38792f", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.08950000256299973, - 0.9248999953269958, - 0.9545999765396118, - 0.9581000208854675, - 0.9559999704360962, - 0.9627000093460083, - 0.9642000198364258, - 0.9663000106811523, - 0.9585999846458435, - 0.963100016117096, - 0.9595999717712402 - ] - }, - { - "mode": "lines", - "name": 6, - "run_id": 6, - "stepped": false, - "uid": "10fcf1", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.08980000019073486, - 0.8791999816894531, - 0.9261000156402588, - 0.9426000118255615, - 0.9501000046730042, - 0.9546999931335449, - 0.9573000073432922, - 0.963699996471405, - 0.965499997138977, - 0.9684000015258789, - 0.9703999757766724 - ] - }, - { - "mode": "lines", - "name": 22, - "run_id": 22, - "stepped": false, - "uid": "f09911", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.0949999988079071, - 0.8639000058174133, - 0.9139999747276306, - 0.9171000123023987, - 0.930899977684021, - 0.9441999793052673, - 0.9545999765396118, - 0.9560999870300293, - 0.9581999778747559, - 0.9539999961853027, - 0.9559000134468079 - ] - }, - { - "mode": "lines", - "name": 8, - "run_id": 8, - "stepped": false, - "uid": "e6ae29", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.0949999988079071, - 0.8953999876976013, - 0.942300021648407, - 0.9513999819755554, - 0.9617000222206116, - 0.9564999938011169, - 0.9689000248908997, - 0.9688000082969666, - 0.9704999923706055, - 0.9760000109672546, - 0.9764000177383423 - ] - }, - { - "mode": "lines", - "name": 12, - "run_id": 12, - "stepped": false, - "uid": "84d316", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.09629999846220016, - 0.11349999904632568, - 0.10279999673366547, - 0.10090000182390213, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.10279999673366547, - 0.10279999673366547, - 0.11349999904632568, - 0.11349999904632568 - ] - }, - { - "mode": "lines", - "name": 5, - "run_id": 5, - "stepped": false, - "uid": "05acc0", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.12110000103712082, - 0.0982000008225441, - 0.11349999904632568, - 0.11349999904632568, - 0.10320000350475311, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568 - ] - }, - { - "mode": "lines", - "name": 4, - "run_id": 4, - "stepped": false, - "uid": "9b5194", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.10109999775886536, - 0.8985999822616577, - 0.9424999952316284, - 0.9294999837875366, - 0.9545999765396118, - 0.9581000208854675, - 0.9616000056266785, - 0.9678999781608582, - 0.9661999940872192, - 0.9672999978065491, - 0.968500018119812 - ] - }, - { - "mode": "lines", - "name": 11, - "run_id": 11, - "stepped": false, - "uid": "b7a136", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.10440000146627426, - 0.9383000135421753, - 0.9538999795913696, - 0.9664000272750854, - 0.9717000126838684, - 0.9760000109672546, - 0.9732999801635742, - 0.9779000282287598, - 0.9817000031471252, - 0.9818000197410583, - 0.9799000024795532 - ] - }, - { - "mode": "lines", - "name": 3, - "run_id": 3, - "stepped": false, - "uid": "dab69b", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.11159999668598175, - 0.8949000239372253, - 0.9286999702453613, - 0.9498999714851379, - 0.9539999961853027, - 0.953499972820282, - 0.9606999754905701, - 0.9613000154495239, - 0.9549999833106995, - 0.9646999835968018, - 0.9581999778747559 - ] - }, - { - "mode": "lines", - "name": 15, - "run_id": 15, - "stepped": false, - "uid": "90901a", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.11159999668598175, - 0.8270000219345093, - 0.9024999737739563, - 0.9175999760627747, - 0.9323999881744385, - 0.9368000030517578, - 0.9431999921798706, - 0.9506000280380249, - 0.9526000022888184, - 0.9584000110626221, - 0.9613000154495239 - ] - }, - { - "mode": "lines", - "name": 10, - "run_id": 10, - "stepped": false, - "uid": "bd666d", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.11209999769926071, - 0.9466000199317932, - 0.9639000296592712, - 0.9722999930381775, - 0.9781000018119812, - 0.9800999760627747, - 0.9781000018119812, - 0.9814000129699707, - 0.9833999872207642, - 0.9836999773979187, - 0.9829000234603882 - ] - }, - { - "mode": "lines", - "name": 21, - "run_id": 21, - "stepped": false, - "uid": "3f3472", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.11500000208616257, - 0.789900004863739, - 0.8838000297546387, - 0.9072999954223633, - 0.9203000068664551, - 0.9312000274658203, - 0.9319000244140625, - 0.9434000253677368, - 0.9470999836921692, - 0.9477999806404114, - 0.9520000219345093 - ] - }, - { - "mode": "lines", - "name": 19, - "run_id": 19, - "stepped": false, - "uid": "982581", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.1160999983549118, - 0.9366000294685364, - 0.9473000168800354, - 0.9552000164985657, - 0.95660001039505, - 0.9465000033378601, - 0.9575999975204468, - 0.9580000042915344, - 0.949999988079071, - 0.9520999789237976, - 0.9567999839782715 - ] - }, - { - "mode": "lines", - "name": 18, - "run_id": 18, - "stepped": false, - "uid": "f812c0", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.12210000306367874, - 0.917900025844574, - 0.9437999725341797, - 0.95660001039505, - 0.9646000266075134, - 0.9692000150680542, - 0.9707000255584717, - 0.9735999703407288, - 0.9781000018119812, - 0.9775999784469604, - 0.9785000085830688 - ] - }, - { - "mode": "lines", - "name": 13, - "run_id": 13, - "stepped": false, - "uid": "022e43", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.13899999856948853, - 0.7547000050544739, - 0.8593000173568726, - 0.8981999754905701, - 0.9186999797821045, - 0.9254999756813049, - 0.934499979019165, - 0.9377999901771545, - 0.9431999921798706, - 0.9437999725341797, - 0.9483000040054321 - ] - }, - { - "mode": "lines", - "name": 9, - "run_id": 9, - "stepped": false, - "uid": "ee6d23", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.14800000190734863, - 0.9146999716758728, - 0.9452999830245972, - 0.9506000280380249, - 0.9550999999046326, - 0.9584000110626221, - 0.9599000215530396, - 0.9621000289916992, - 0.964900016784668, - 0.9510999917984009, - 0.9624000191688538 - ] - }, - { - "mode": "lines", - "name": 17, - "run_id": 17, - "stepped": false, - "uid": "4fd9d8", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.16419999301433563, - 0.9247999787330627, - 0.9431999921798706, - 0.9599000215530396, - 0.9674999713897705, - 0.9695000052452087, - 0.9765999913215637, - 0.9763000011444092, - 0.9779999852180481, - 0.9812999963760376, - 0.9789000153541565 - ] - } - ], - "showLegend": true, - "title": "HyperDrive Run Primary Metric : Accuracy" - }, - "run_id": "tensorflow-hyperdrive_1527881081325", - "run_logs": "", - "run_metrics": [], - "run_properties": { - "additional_properties": {}, - "created_utc": "2018-06-01T19:24:41.846775", - "description": null, - "end_time_utc": "2018-06-01T20:05:15.398835", - "experiment_id": "54fc7a8b-21a4-4a10-8931-bd36c717c9b7", - "heartbeat_enabled": false, - "hidden": false, - "name": "tensorflow-hyperdrive", - "parent_run_id": null, - "properties": { - "all_jobs_generated": "true", - "azureml.runsource": "hyperdrive", - "cancellation_requested": "false", - "generator_config": "{\"name\": \"RANDOM\", \"parameter_space\": {\"learning_rate\": [\"loguniform\", [-10, -3]], \"keep_probability\": [\"uniform\", [0.5, 0.1]]}}", - "is_hyperdrive_run": "true", - "max_concurrent_jobs": "4", - "max_duration_minutes": "43200", - "max_total_jobs": "20", - "policy_config": "{\"name\": \"BANDIT\", \"properties\": {\"slack_factor\": 0.15, \"evaluation_interval\": 2, \"delay_evaluation\": 0}}", - "primary_metric_config": "{\"name\": \"Accuracy\", \"goal\": \"maximize\"}", - "runTemplate": "HyperDrive" - }, - "root_run_id": "tensorflow-hyperdrive_1527881081325", - "run_id": "tensorflow-hyperdrive_1527881081325", - "run_number": 2, - "script_name": "tf_mnist_train.py", - "start_time_utc": null, - "status": "Completed", - "tags": {}, - "target": "gpucluster", - "token": null, - "token_expiry_time_utc": null, - "user_id": "fffc1c66-275f-4935-bb04-70a760c82fda" - }, - "status": "Completed", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-notebooks%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2ws3/projects/tensorflow-hyperdrive/run-history/run-details/tensorflow-hyperdrive_1527881081325?type=HyperDrive" - } - } - }, - "49be30037a73481a900026b30fc816eb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "524fd810f76f4ed69236c8e0cf20da11": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_contrib_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowRunDetailsView", - "layout": "IPY_MODEL_cce84fe5e64141a0a69e0029ca3553a5", - "value": { - "child_runs": [], - "children_metrics": {}, - "run_id": "tensorflow-hyperdrive_1527879977658", - "run_logs": "Uploading experiment status to history service.\nAdding run profile attachment azureml-logs/80_driver_log.txt\nUploading experiment status to history service.\nAdding run profile attachment azureml-logs/60_control_log.txt\n\n\rUsing Spark's default log4j profile: org/apache/spark/log4j-defaults.properties\nSetting default log level to \"WARN\".\nTo adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n18/06/01 19:20:28 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n/azureml-envs/azureml_799f97443dc957270fd0268d825cda62/lib/python3.6/importlib/_bootstrap.py:205: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6\n return f(*args, **kwds)\nSuccessfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\nExtracting MNIST_data/train-images-idx3-ubyte.gz\nSuccessfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\nExtracting MNIST_data/train-labels-idx1-ubyte.gz\nSuccessfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\nExtracting MNIST_data/t10k-images-idx3-ubyte.gz\nSuccessfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\nExtracting MNIST_data/t10k-labels-idx1-ubyte.gz\n2018-06-01 19:20:33.459019: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA\n2018-06-01 19:20:33.674933: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: \nname: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235\npciBusID: 813c:00:00.0\ntotalMemory: 11.17GiB freeMemory: 11.09GiB\n2018-06-01 19:20:33.674977: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 813c:00:00.0, compute capability: 3.7)\nstep 0, training accuracy 0.09375, test accuracy, 0.0958\nstep 100, training accuracy 0.953125, test accuracy, 0.9461\nstep 200, training accuracy 0.953125, test accuracy, 0.9594\nstep 300, training accuracy 0.953125, test accuracy, 0.9719\nstep 400, training accuracy 0.984375, test accuracy, 0.9787\nstep 500, training accuracy 0.96875, test accuracy, 0.9778\nstep 600, training accuracy 0.984375, test accuracy, 0.9806\nstep 700, training accuracy 0.96875, test accuracy, 0.9788\nstep 800, training accuracy 0.96875, test accuracy, 0.9819\nstep 900, training accuracy 0.984375, test accuracy, 0.9818\ntest accuracy 0.9836\nThe experiment completed successfully. Starting post-processing steps.\n\n\r", - "run_metrics": [ - { - "categories": [ - 0 - ], - "name": "learning_rate", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.001 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "minibatch_size", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 64 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "keep_probability", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.5 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "num_iterations", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 1000 - ] - } - ] - }, - { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "name": "Accuracy", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "uid": "5c86a1", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.0957999974489212, - 0.9460999965667725, - 0.9593999981880188, - 0.9718999862670898, - 0.9786999821662903, - 0.9778000116348267, - 0.9805999994277954, - 0.9787999987602234, - 0.9818999767303467, - 0.9818000197410583, - 0.9836000204086304 - ] - } - ] - }, - { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "name": "Iterations", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "uid": "8867c0", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0, - 100, - 200, - 300, - 400, - 500, - 600, - 700, - 800, - 900, - 1000 - ] - } - ] - } - ], - "run_properties": { - "additional_properties": {}, - "created_utc": "2018-06-01T19:06:18.159119", - "description": null, - "end_time_utc": "2018-06-01T19:21:08.302609", - "experiment_id": "54fc7a8b-21a4-4a10-8931-bd36c717c9b7", - "heartbeat_enabled": false, - "hidden": false, - "name": null, - "parent_run_id": null, - "properties": { - "Arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000", - "ContentSnapshotId": "67acb36c-e77e-44ae-b820-e6242b9909ab", - "azureml.runsource": "experiment" - }, - "root_run_id": "tensorflow-hyperdrive_1527879977658", - "run_id": "tensorflow-hyperdrive_1527879977658", - "run_number": 1, - "script_name": "tf_mnist_train.py", - "start_time_utc": "2018-06-01T19:19:31.364278", - "status": "Completed", - "tags": {}, - "target": "gpucluster", - "token": null, - "token_expiry_time_utc": null, - "user_id": "fb7d2bbf-2c54-46d7-8775-7e318644dd6b" - }, - "status": "Completed", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-notebooks%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2ws3/projects/tensorflow-hyperdrive/run-history/run-details/tensorflow-hyperdrive_1527879977658?type=user" - } - } - }, - "8a36279a14624bbdb1926c2572748861": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "bc94f0e90ff64d62a1ff1f84bc34803b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "cce84fe5e64141a0a69e0029ca3553a5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "d7a8a4fc54e4453fbc31d11604742430": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_contrib_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowRunDetailsView", - "layout": "IPY_MODEL_49be30037a73481a900026b30fc816eb", - "value": { - "child_runs": [], - "children_metrics": {}, - "run_id": "tensorflow-hyperdrive_1527879977658", - "run_logs": "Uploading experiment status to history service.\nAdding run profile attachment azureml-logs/80_driver_log.txt\nUploading experiment status to history service.\nAdding run profile attachment azureml-logs/60_control_log.txt\n\n\rUsing Spark's default log4j profile: org/apache/spark/log4j-defaults.properties\nSetting default log level to \"WARN\".\nTo adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n18/06/01 19:20:28 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n/azureml-envs/azureml_799f97443dc957270fd0268d825cda62/lib/python3.6/importlib/_bootstrap.py:205: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6\n return f(*args, **kwds)\nSuccessfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\nExtracting MNIST_data/train-images-idx3-ubyte.gz\nSuccessfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\nExtracting MNIST_data/train-labels-idx1-ubyte.gz\nSuccessfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\nExtracting MNIST_data/t10k-images-idx3-ubyte.gz\nSuccessfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\nExtracting MNIST_data/t10k-labels-idx1-ubyte.gz\n2018-06-01 19:20:33.459019: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA\n2018-06-01 19:20:33.674933: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: \nname: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235\npciBusID: 813c:00:00.0\ntotalMemory: 11.17GiB freeMemory: 11.09GiB\n2018-06-01 19:20:33.674977: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 813c:00:00.0, compute capability: 3.7)\nstep 0, training accuracy 0.09375, test accuracy, 0.0958\nstep 100, training accuracy 0.953125, test accuracy, 0.9461\nstep 200, training accuracy 0.953125, test accuracy, 0.9594\nstep 300, training accuracy 0.953125, test accuracy, 0.9719\nstep 400, training accuracy 0.984375, test accuracy, 0.9787\nstep 500, training accuracy 0.96875, test accuracy, 0.9778\nstep 600, training accuracy 0.984375, test accuracy, 0.9806\nstep 700, training accuracy 0.96875, test accuracy, 0.9788\nstep 800, training accuracy 0.96875, test accuracy, 0.9819\nstep 900, training accuracy 0.984375, test accuracy, 0.9818\ntest accuracy 0.9836\nThe experiment completed successfully. Starting post-processing steps.\n\n\r", - "run_metrics": [ - { - "categories": [ - 0 - ], - "name": "learning_rate", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.001 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "minibatch_size", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 64 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "keep_probability", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.5 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "num_iterations", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 1000 - ] - } - ] - }, - { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "name": "Accuracy", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.0957999974489212, - 0.9460999965667725, - 0.9593999981880188, - 0.9718999862670898, - 0.9786999821662903, - 0.9778000116348267, - 0.9805999994277954, - 0.9787999987602234, - 0.9818999767303467, - 0.9818000197410583, - 0.9836000204086304 - ] - } - ] - }, - { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "name": "Iterations", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0, - 100, - 200, - 300, - 400, - 500, - 600, - 700, - 800, - 900, - 1000 - ] - } - ] - } - ], - "run_properties": { - "additional_properties": {}, - "created_utc": "2018-06-01T19:06:18.159119", - "description": null, - "end_time_utc": "2018-06-01T19:21:08.302609", - "experiment_id": "54fc7a8b-21a4-4a10-8931-bd36c717c9b7", - "heartbeat_enabled": false, - "hidden": false, - "name": null, - "parent_run_id": null, - "properties": { - "Arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000", - "ContentSnapshotId": "67acb36c-e77e-44ae-b820-e6242b9909ab", - "azureml.runsource": "experiment" - }, - "root_run_id": "tensorflow-hyperdrive_1527879977658", - "run_id": "tensorflow-hyperdrive_1527879977658", - "run_number": 1, - "script_name": "tf_mnist_train.py", - "start_time_utc": "2018-06-01T19:19:31.364278", - "status": "Completed", - "tags": {}, - "target": "gpucluster", - "token": null, - "token_expiry_time_utc": null, - "user_id": "fb7d2bbf-2c54-46d7-8775-7e318644dd6b" - }, - "status": "Completed", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-notebooks%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2ws3/projects/tensorflow-hyperdrive/run-history/run-details/tensorflow-hyperdrive_1527879977658?type=user" - } - } - }, - "fd3e0717dec9444b881194f135b82853": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_contrib_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowHyperDriveRunsView", - "layout": "IPY_MODEL_bc94f0e90ff64d62a1ff1f84bc34803b", - "value": { - "child_runs": [ - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000852395056049516 --keep_probability 0.434530370965995", - "created_time": "2018-06-01 19:41:39.666220+00:00", - "created_time_dt": "2018-06-01T19:41:39.666220", - "duration": "0:00:57", - "end_time": "2018-06-01 19:42:37.511351+00:00", - "hyperdrive_id": "5488", - "metric": 0.9842000007629395, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5488_abbecb6c", - "run_number": 16, - "start_time": "2018-06-01 19:41:40.368621+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00179999057463703 --keep_probability 0.296515321882523", - "created_time": "2018-06-01 19:29:46.303636+00:00", - "created_time_dt": "2018-06-01T19:29:46.303636", - "duration": "0:02:03", - "end_time": "2018-06-01 19:31:50.043486+00:00", - "hyperdrive_id": "5469", - "metric": 0.9836999773979187, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5469_9f034e69", - "run_number": 10, - "start_time": "2018-06-01 19:29:47.033264+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000676904386677712 --keep_probability 0.4154535083569", - "created_time": "2018-06-01 19:50:31.651044+00:00", - "created_time_dt": "2018-06-01T19:50:31.651044", - "duration": "0:14:30", - "end_time": "2018-06-01 20:05:02.591649+00:00", - "hyperdrive_id": "5498", - "metric": 0.9828000068664551, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5498_32e0a249", - "run_number": 20, - "start_time": "2018-06-01 19:50:37.386350+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000586938713321222 --keep_probability 0.432942295536284", - "created_time": "2018-06-01 19:37:36.678691+00:00", - "created_time_dt": "2018-06-01T19:37:36.678691", - "duration": "0:01:46", - "end_time": "2018-06-01 19:39:23.211000+00:00", - "hyperdrive_id": "5479", - "metric": 0.9818000197410583, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5479_cb5037ed", - "run_number": 11, - "start_time": "2018-06-01 19:37:43.143211+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321696353537414 --keep_probability 0.446837800410634", - "created_time": "2018-06-01 19:41:39.915872+00:00", - "created_time_dt": "2018-06-01T19:41:39.915872", - "duration": "0:02:58", - "end_time": "2018-06-01 19:44:38.693923+00:00", - "hyperdrive_id": "5490", - "metric": 0.9812999963760376, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5490_cfcbcea1", - "run_number": 17, - "start_time": "2018-06-01 19:41:40.688804+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000598930751146987 --keep_probability 0.173175740602207", - "created_time": "2018-06-01 19:41:44.682554+00:00", - "created_time_dt": "2018-06-01T19:41:44.682554", - "duration": "0:01:54", - "end_time": "2018-06-01 19:43:38.690104+00:00", - "hyperdrive_id": "5491", - "metric": 0.9785000085830688, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5491_1ab60563", - "run_number": 18, - "start_time": "2018-06-01 19:41:45.356160+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00313856224079023 --keep_probability 0.308708329651949", - "created_time": "2018-06-01 19:29:46.140940+00:00", - "created_time_dt": "2018-06-01T19:29:46.140940", - "duration": "0:02:02", - "end_time": "2018-06-01 19:31:49.127224+00:00", - "hyperdrive_id": "5471", - "metric": 0.9764000177383423, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5471_05cdc17b", - "run_number": 8, - "start_time": "2018-06-01 19:29:46.876362+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321079619657115 --keep_probability 0.166071686996525", - "created_time": "2018-06-01 19:26:11.468523+00:00", - "created_time_dt": "2018-06-01T19:26:11.468523", - "duration": "0:01:48", - "end_time": "2018-06-01 19:28:00.170666+00:00", - "hyperdrive_id": "5460", - "metric": 0.9703999757766724, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5460_0ff67ff3", - "run_number": 6, - "start_time": "2018-06-01 19:26:12.172473+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00970484525511844 --keep_probability 0.334371206847485", - "created_time": "2018-06-01 19:25:53.815492+00:00", - "created_time_dt": "2018-06-01T19:25:53.815492", - "duration": "0:02:07", - "end_time": "2018-06-01 19:28:01.507944+00:00", - "hyperdrive_id": "5457", - "metric": 0.968500018119812, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5457_a4c3a147", - "run_number": 4, - "start_time": "2018-06-01 19:26:08.553859+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00922621594789716 --keep_probability 0.227683838955561", - "created_time": "2018-06-01 19:37:36.835723+00:00", - "created_time_dt": "2018-06-01T19:37:36.835723", - "duration": "0:01:03", - "end_time": "2018-06-01 19:38:40.652773+00:00", - "hyperdrive_id": "5480", - "metric": 0.9663000106811523, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5480_f234fb08", - "run_number": 14, - "start_time": "2018-06-01 19:37:38.116439+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0155645426732787 --keep_probability 0.159123698168668", - "created_time": "2018-06-01 19:29:46.277531+00:00", - "created_time_dt": "2018-06-01T19:29:46.277531", - "duration": "0:01:09", - "end_time": "2018-06-01 19:30:55.727701+00:00", - "hyperdrive_id": "5472", - "metric": 0.964900016784668, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5472_23122c4b", - "run_number": 9, - "start_time": "2018-06-01 19:29:46.964148+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00838536088211458 --keep_probability 0.102478957268164", - "created_time": "2018-06-01 19:25:53.548553+00:00", - "created_time_dt": "2018-06-01T19:25:53.548553", - "duration": "0:01:05", - "end_time": "2018-06-01 19:26:59.136632+00:00", - "hyperdrive_id": "5459", - "metric": 0.9646999835968018, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5459_030491ad", - "run_number": 3, - "start_time": "2018-06-01 19:25:54.739654+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000143958552086584 --keep_probability 0.273084377226789", - "created_time": "2018-06-01 19:29:46.057879+00:00", - "created_time_dt": "2018-06-01T19:29:46.057879", - "duration": "0:01:18", - "end_time": "2018-06-01 19:31:04.843202+00:00", - "hyperdrive_id": "5470", - "metric": 0.963699996471405, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5470_a648dbea", - "run_number": 7, - "start_time": "2018-06-01 19:29:46.780201+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.14051833348127E-05 --keep_probability 0.472685817381368", - "created_time": "2018-06-01 19:41:39.648602+00:00", - "created_time_dt": "2018-06-01T19:41:39.648602", - "duration": "0:03:06", - "end_time": "2018-06-01 19:44:45.699811+00:00", - "hyperdrive_id": "5489", - "metric": 0.9613000154495239, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5489_38907948", - "run_number": 15, - "start_time": "2018-06-01 19:41:40.512369+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00737747352627753 --keep_probability 0.205239625544216", - "created_time": "2018-06-01 19:50:33.596963+00:00", - "created_time_dt": "2018-06-01T19:50:33.596963", - "duration": "0:01:51", - "end_time": "2018-06-01 19:52:25.281499+00:00", - "hyperdrive_id": "5497", - "metric": 0.9581999778747559, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5497_8130025b", - "run_number": 22, - "start_time": "2018-06-01 19:50:34.456850+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0211316024512922 --keep_probability 0.456008246140918", - "created_time": "2018-06-01 19:50:31.581841+00:00", - "created_time_dt": "2018-06-01T19:50:31.581841", - "duration": "0:01:03", - "end_time": "2018-06-01 19:51:35.272415+00:00", - "hyperdrive_id": "5499", - "metric": 0.9580000042915344, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5499_e0b5a73f", - "run_number": 19, - "start_time": "2018-06-01 19:50:32.786951+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.56451710371043E-05 --keep_probability 0.321364540919092", - "created_time": "2018-06-01 19:50:33.421674+00:00", - "created_time_dt": "2018-06-01T19:50:33.421674", - "duration": "0:06:27", - "end_time": "2018-06-01 19:57:00.982688+00:00", - "hyperdrive_id": "5496", - "metric": 0.9520000219345093, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5496_46a98c1f", - "run_number": 21, - "start_time": "2018-06-01 19:50:34.379782+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 6.86923046964849E-05 --keep_probability 0.229123758955098", - "created_time": "2018-06-01 19:37:36.816510+00:00", - "created_time_dt": "2018-06-01T19:37:36.816510", - "duration": "0:01:12", - "end_time": "2018-06-01 19:38:49.439465+00:00", - "hyperdrive_id": "5477", - "metric": 0.9483000040054321, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5477_c428bcf0", - "run_number": 13, - "start_time": "2018-06-01 19:37:42.971387+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.014609502490554 --keep_probability 0.480459935106515", - "created_time": "2018-06-01 19:26:10.258955+00:00", - "created_time_dt": "2018-06-01T19:26:10.258955", - "duration": "0:02:41", - "end_time": "2018-06-01 19:28:52.069673+00:00", - "hyperdrive_id": "5458", - "metric": 0.12110000103712082, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5458_3f73f0ac", - "run_number": 5, - "start_time": "2018-06-01 19:26:17.107379+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0149932664638274 --keep_probability 0.284424630578217", - "created_time": "2018-06-01 19:37:36.730460+00:00", - "created_time_dt": "2018-06-01T19:37:36.730460", - "duration": "0:01:08", - "end_time": "2018-06-01 19:38:44.881339+00:00", - "hyperdrive_id": "5478", - "metric": 0.11349999904632568, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5478_24390740", - "run_number": 12, - "start_time": "2018-06-01 19:37:42.865594+00:00", - "status": "Completed" - } - ], - "children_metrics": { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "metricName": "Accuracy", - "series": [ - { - "data": [ - 0.11159999668598175, - 0.8949000239372253, - 0.9286999702453613, - 0.9498999714851379, - 0.9539999961853027, - 0.953499972820282, - 0.9606999754905701, - 0.9613000154495239, - 0.9549999833106995, - 0.9646999835968018, - 0.9581999778747559 - ], - "mode": "lines", - "name": 3, - "run_id": 3, - "stepped": false - }, - { - "data": [ - 0.10109999775886536, - 0.8985999822616577, - 0.9424999952316284, - 0.9294999837875366, - 0.9545999765396118, - 0.9581000208854675, - 0.9616000056266785, - 0.9678999781608582, - 0.9661999940872192, - 0.9672999978065491, - 0.968500018119812 - ], - "mode": "lines", - "name": 4, - "run_id": 4, - "stepped": false - }, - { - "data": [ - 0.08980000019073486, - 0.8791999816894531, - 0.9261000156402588, - 0.9426000118255615, - 0.9501000046730042, - 0.9546999931335449, - 0.9573000073432922, - 0.963699996471405, - 0.965499997138977, - 0.9684000015258789, - 0.9703999757766724 - ], - "mode": "lines", - "name": 6, - "run_id": 6, - "stepped": false - }, - { - "data": [ - 0.12110000103712082, - 0.0982000008225441, - 0.11349999904632568, - 0.11349999904632568, - 0.10320000350475311, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568 - ], - "mode": "lines", - "name": 5, - "run_id": 5, - "stepped": false - }, - { - "data": [ - 0.14800000190734863, - 0.9146999716758728, - 0.9452999830245972, - 0.9506000280380249, - 0.9550999999046326, - 0.9584000110626221, - 0.9599000215530396, - 0.9621000289916992, - 0.964900016784668, - 0.9510999917984009, - 0.9624000191688538 - ], - "mode": "lines", - "name": 9, - "run_id": 9, - "stepped": false - }, - { - "data": [ - 0.08749999850988388, - 0.855400025844574, - 0.911300003528595, - 0.9289000034332275, - 0.9394999742507935, - 0.9431999921798706, - 0.9509999752044678, - 0.9553999900817871, - 0.9555000066757202, - 0.963699996471405, - 0.9616000056266785 - ], - "mode": "lines", - "name": 7, - "run_id": 7, - "stepped": false - }, - { - "data": [ - 0.11209999769926071, - 0.9466000199317932, - 0.9639000296592712, - 0.9722999930381775, - 0.9781000018119812, - 0.9800999760627747, - 0.9781000018119812, - 0.9814000129699707, - 0.9833999872207642, - 0.9836999773979187, - 0.9829000234603882 - ], - "mode": "lines", - "name": 10, - "run_id": 10, - "stepped": false - }, - { - "data": [ - 0.0949999988079071, - 0.8953999876976013, - 0.942300021648407, - 0.9513999819755554, - 0.9617000222206116, - 0.9564999938011169, - 0.9689000248908997, - 0.9688000082969666, - 0.9704999923706055, - 0.9760000109672546, - 0.9764000177383423 - ], - "mode": "lines", - "name": 8, - "run_id": 8, - "stepped": false - }, - { - "data": [ - 0.08950000256299973, - 0.9248999953269958, - 0.9545999765396118, - 0.9581000208854675, - 0.9559999704360962, - 0.9627000093460083, - 0.9642000198364258, - 0.9663000106811523, - 0.9585999846458435, - 0.963100016117096, - 0.9595999717712402 - ], - "mode": "lines", - "name": 14, - "run_id": 14, - "stepped": false - }, - { - "data": [ - 0.09629999846220016, - 0.11349999904632568, - 0.10279999673366547, - 0.10090000182390213, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.10279999673366547, - 0.10279999673366547, - 0.11349999904632568, - 0.11349999904632568 - ], - "mode": "lines", - "name": 12, - "run_id": 12, - "stepped": false - }, - { - "data": [ - 0.13899999856948853, - 0.7547000050544739, - 0.8593000173568726, - 0.8981999754905701, - 0.9186999797821045, - 0.9254999756813049, - 0.934499979019165, - 0.9377999901771545, - 0.9431999921798706, - 0.9437999725341797, - 0.9483000040054321 - ], - "mode": "lines", - "name": 13, - "run_id": 13, - "stepped": false - }, - { - "data": [ - 0.10440000146627426, - 0.9383000135421753, - 0.9538999795913696, - 0.9664000272750854, - 0.9717000126838684, - 0.9760000109672546, - 0.9732999801635742, - 0.9779000282287598, - 0.9817000031471252, - 0.9818000197410583, - 0.9799000024795532 - ], - "mode": "lines", - "name": 11, - "run_id": 11, - "stepped": false - }, - { - "data": [ - 0.08869999647140503, - 0.9404000043869019, - 0.9574000239372253, - 0.9700999855995178, - 0.9715999960899353, - 0.979200005531311, - 0.9797000288963318, - 0.9812999963760376, - 0.9797999858856201, - 0.9817000031471252, - 0.9842000007629395 - ], - "mode": "lines", - "name": 16, - "run_id": 16, - "stepped": false - }, - { - "data": [ - 0.12210000306367874, - 0.917900025844574, - 0.9437999725341797, - 0.95660001039505, - 0.9646000266075134, - 0.9692000150680542, - 0.9707000255584717, - 0.9735999703407288, - 0.9781000018119812, - 0.9775999784469604, - 0.9785000085830688 - ], - "mode": "lines", - "name": 18, - "run_id": 18, - "stepped": false - }, - { - "data": [ - 0.11159999668598175, - 0.8270000219345093, - 0.9024999737739563, - 0.9175999760627747, - 0.9323999881744385, - 0.9368000030517578, - 0.9431999921798706, - 0.9506000280380249, - 0.9526000022888184, - 0.9584000110626221, - 0.9613000154495239 - ], - "mode": "lines", - "name": 15, - "run_id": 15, - "stepped": false - }, - { - "data": [ - 0.16419999301433563, - 0.9247999787330627, - 0.9431999921798706, - 0.9599000215530396, - 0.9674999713897705, - 0.9695000052452087, - 0.9765999913215637, - 0.9763000011444092, - 0.9779999852180481, - 0.9812999963760376, - 0.9789000153541565 - ], - "mode": "lines", - "name": 17, - "run_id": 17, - "stepped": false - }, - { - "data": [ - 0.1160999983549118, - 0.9366000294685364, - 0.9473000168800354, - 0.9552000164985657, - 0.95660001039505, - 0.9465000033378601, - 0.9575999975204468, - 0.9580000042915344, - 0.949999988079071, - 0.9520999789237976, - 0.9567999839782715 - ], - "mode": "lines", - "name": 19, - "run_id": 19, - "stepped": false - }, - { - "data": [ - 0.0949999988079071, - 0.8639000058174133, - 0.9139999747276306, - 0.9171000123023987, - 0.930899977684021, - 0.9441999793052673, - 0.9545999765396118, - 0.9560999870300293, - 0.9581999778747559, - 0.9539999961853027, - 0.9559000134468079 - ], - "mode": "lines", - "name": 22, - "run_id": 22, - "stepped": false - }, - { - "data": [ - 0.11500000208616257, - 0.789900004863739, - 0.8838000297546387, - 0.9072999954223633, - 0.9203000068664551, - 0.9312000274658203, - 0.9319000244140625, - 0.9434000253677368, - 0.9470999836921692, - 0.9477999806404114, - 0.9520000219345093 - ], - "mode": "lines", - "name": 21, - "run_id": 21, - "stepped": false - }, - { - "data": [ - 0.052000001072883606, - 0.9318000078201294, - 0.9584000110626221, - 0.9639999866485596, - 0.9710999727249146, - 0.9746999740600586, - 0.9768999814987183, - 0.9822999835014343, - 0.978600025177002, - 0.9801999926567078, - 0.9828000068664551 - ], - "mode": "lines", - "name": 20, - "run_id": 20, - "stepped": false - } - ], - "showLegend": true - }, - "run_id": "tensorflow-hyperdrive_1527881081325", - "run_logs": "", - "run_metrics": [], - "run_properties": { - "additional_properties": {}, - "created_utc": "2018-06-01T19:24:41.846775", - "description": null, - "end_time_utc": "2018-06-01T20:05:15.398835", - "experiment_id": "54fc7a8b-21a4-4a10-8931-bd36c717c9b7", - "heartbeat_enabled": false, - "hidden": false, - "name": "tensorflow-hyperdrive", - "parent_run_id": null, - "properties": { - "all_jobs_generated": "true", - "azureml.runsource": "hyperdrive", - "cancellation_requested": "false", - "generator_config": "{\"name\": \"RANDOM\", \"parameter_space\": {\"learning_rate\": [\"loguniform\", [-10, -3]], \"keep_probability\": [\"uniform\", [0.5, 0.1]]}}", - "is_hyperdrive_run": "true", - "max_concurrent_jobs": "4", - "max_duration_minutes": "43200", - "max_total_jobs": "20", - "policy_config": "{\"name\": \"BANDIT\", \"properties\": {\"slack_factor\": 0.15, \"evaluation_interval\": 2, \"delay_evaluation\": 0}}", - "primary_metric_config": "{\"name\": \"Accuracy\", \"goal\": \"maximize\"}", - "runTemplate": "HyperDrive" - }, - "root_run_id": "tensorflow-hyperdrive_1527881081325", - "run_id": "tensorflow-hyperdrive_1527881081325", - "run_number": 2, - "script_name": "tf_mnist_train.py", - "start_time_utc": null, - "status": "Completed", - "tags": {}, - "target": "gpucluster", - "token": null, - "token_expiry_time_utc": null, - "user_id": "fffc1c66-275f-4935-bb04-70a760c82fda" - }, - "status": "Completed", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-notebooks%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2ws3/projects/tensorflow-hyperdrive/run-history/run-details/tensorflow-hyperdrive_1527881081325?type=HyperDrive" - } - } - } - }, - "version_major": 2, - "version_minor": 0 - } - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/08.hyperdrive-with-TensorFlow.ipynb b/01.getting-started/08.hyperdrive-with-TensorFlow/08.hyperdrive-with-TensorFlow.ipynb deleted file mode 100644 index d749b57d4..000000000 --- a/01.getting-started/08.hyperdrive-with-TensorFlow/08.hyperdrive-with-TensorFlow.ipynb +++ /dev/null @@ -1,3448 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training and Hyperparameter Tuning of a TensorFlow Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this tutorial, we demonstrate how to use the Azure ML Python SDK to train a Convolutional Neural Network (CNN) in TensorFlow to perform handwritten digit recognition on the popular MNIST dataset. We will demonstrate how to perform hyperparameter tuning of the model using AML's HyperDrive service. \n", - "\n", - "We will cover the following concepts:\n", - "* Create a Batch AI GPU cluster\n", - "* (To do): DataStore\n", - "* Train a TensorFlow model on a single node\n", - "* Logging metrics to Run History\n", - "* Set up a hyperparameter sweep with HyperDrive\n", - "* Select the best model for download" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't. In addition, to run through this notebook, you will need to install a few additional packages by running `pip install pillow tensorflow matplotlib pandas tqdm`\n", - "\n", - "### Authorize Hyperdrive Service Principal\n", - "\n", - "Hyperdrive service is in preview so you need to explicitly grant permissions. In Azure portal, add `vienna-test-westus` as a `Contributor` to your resource group. Or, you can also do this from azure-cli:\n", - "```sh\n", - "# find the ARM id of your resource group. Copy into memory.\n", - "$ az group show -n -o json\n", - "\n", - "# check if https://vienna-test-westus-cluster.sp.azureml.net is a Contributor.\n", - "$ az role assignment list --scope -o table\n", - "\n", - "# if not, add it. you will need to be a resource group owner to do this.\n", - "$ az role assignment create --role Contributor --scope --assignee https://vienna-test-westus-cluster.sp.azureml.net\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Set Up a Workspace\n", - "Workspace is the top-level Azure Resource for Azure ML services." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create An Experiment\n", - "**Experiment** is a logical container in an Azure ML Workspace. It hosts run records which can include run metrics and output artifacts from your experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "experiment_name = 'hyperdrive-with-tf'\n", - "experiment = Experiment(workspace = ws, name = experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create a folder to store the training script." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "script_folder = './samples/hyperdrive-with-tf'\n", - "os.makedirs(script_folder, exist_ok = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Provision a New Batch AI Cluster\n", - "Training machine learning models is often a compute-intensive process. Azure's [Batch AI](#https://docs.microsoft.com/en-us/azure/batch-ai/overview) service allows data scientists to leverage the power of compute clusters of CPU or GPU-enabled VMs for training their models. Using the Python SDK, we can easily provision a Batch AI cluster with the specifications we want." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create mlc", - "batchai" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.compute import BatchAiCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "\n", - "# choose a name for your cluster\n", - "batchai_cluster_name = ws.name + \"gpu\"\n", - "\n", - "found = False\n", - "# see if this compute target already exists in the workspace\n", - "for ct in ws.compute_targets():\n", - " print(ct.name, ct.type)\n", - " if ct.name == batchai_cluster_name and type(ct) is BatchAiCompute:\n", - " found = True\n", - " print('found compute target. just use it.')\n", - " compute_target = ct\n", - " break\n", - " \n", - "if not found:\n", - " print('creating a new compute target...')\n", - " provisioning_config = BatchAiCompute.provisioning_configuration(vm_size = \"STANDARD_NC6\", # NC6 is GPU-enabled\n", - " #vm_priority = 'lowpriority', # optional\n", - " autoscale_enabled = True,\n", - " cluster_min_nodes = 1, \n", - " cluster_max_nodes = 4)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, batchai_cluster_name, provisioning_config)\n", - " \n", - " # can poll for a minimum number of nodes and for a specific timeout. \n", - " # if no min node count is provided it will use the scale settings for the cluster\n", - " compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - " # For a more detailed view of current BatchAI cluster status, use the 'status' property \n", - " print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here, we specify the following parameters for the `provisioning_config`:\n", - "* `vm_size`: the family and size of the VM to use. For this tutorial we want to leverage GPU nodes, so we specify the `STANDARD_NC6` VM, which has one NVIDIA K80 GPU\n", - "* `vm_priority`: `'lowpriority'` or `'dedicated'`\n", - "* `autoscale_enabled`: with autoscaling set to `True`, Batch AI will automatically resize the cluster based on the demands of your workload. Default is `False`, will create a cluster with a fixed # of nodes\n", - "* `cluster_min_nodes`: minimum number of VMs for autoscaling\n", - "* `cluster_max_nodes`: maximum number of VMs for autoscaling" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Train TensorFlow MNIST\n", - "Now let's train a CNN on the MNIST dataset for predicting handwritten digits. The training script `tf_mnist_train.py` is adapted from TensorFlow's [MNIST](#https://www.tensorflow.org/versions/r1.4/get_started/mnist/pros) tutorial. The changes to the original on concerned logging some metrics about the training run to the AML run history. See the adapted file here: [tf_mnist_train.py](tf_mnist_train.py) -- search for 'run_logger' to find the added lines of code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from shutil import copyfile\n", - "\n", - "training_script = 'tf_mnist_train.py'\n", - "# copy the mnist_tf.py file to the project folder\n", - "copyfile(training_script, os.path.join(script_folder, training_script))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# take a look at the training script\n", - "!more $training_script" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### a. Run a single-node TensorFlow experiment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To facilitate ML training, the Python SDK provides a high-level abstraction called Estimators that allows users to train CNTK, TensorFlow, or custom scripts in the Azure ML ecosystem. Let's instantiate an AML TensorFlow Estimator (not to be conflated with the [`tf.estimator.Estimator`](#https://www.tensorflow.org/programmers_guide/estimators) class)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.dnn import TensorFlow\n", - "\n", - "script_params = {\n", - " '--minibatch_size': 64,\n", - " '--learning_rate': 0.001,\n", - " '--keep_probability': 0.5,\n", - " '--output_dir': 'outputs',\n", - " '--num_iterations': 1000\n", - "}\n", - "\n", - "tf_estimator = TensorFlow(source_directory = script_folder, \n", - " script_params = script_params, \n", - " compute_target = compute_target, \n", - " entry_script = training_script, \n", - " node_count = 1,\n", - " use_gpu = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We specify the following parameters to the TensorFlow constructor:\n", - "* `script_params`: a dictionary specifying the command-line arguments to your `entry_script`\n", - "* `compute_target`: the compute target object. Can be a local, DSVM, or Batch AI compute target\n", - "* `entry_script`: the relative(?) path to the project directory of the file to be executed during training\n", - "* `node_count`: the number of nodes to use for the training job. Defaults to `1`\n", - "* `use_gpu`: to leverage the GPU for training, set this flag to `True`. Defaults to `False`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Note on `outputs` folder: **\n", - "\n", - "When running an experiment using the Python SDK, you can write files out to a folder named `outputs` that is relative to the root directory. This folder is specially tracked by AML in the sense that any files written to that folder during script execution will be picked up by Run History; these files (known as *artifacts*) will be available as part of the run history record." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "run = experiment.submit(tf_estimator)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### b. Monitoring the training run\n", - "There are several ways with which the user can monitor the details and status of the training run. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Browse to the run history report (use Chrome please, for now)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Print out the current run status" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also use a widget to monitor the progress of your submitted run, which allows you to do so without blocking your notebook execution:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.widgets import RunDetails\n", - "\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![img](../images/hd_tf1.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "# to block and wait for training to complete \n", - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also check on the Batch AI cluster and job status using `az-cli` commands:\n", - "```shell\n", - "# check cluster status. You can see how many nodes are running.\n", - "$ az batchai cluster list\n", - "\n", - "# check job status. You can see how many jobs are running\n", - "$ az batchai job list\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### c. Log metrics to Run History\n", - "\n", - "Another useful feature of the Python SDK is the ability to log metrics for each run. These metrics are persisted in the run history by AML. In addition, they are automatically displayed and visualized by the RunDetails widget. (Logging run metrics is also required in order to use the HyperDrive service, which we will go over in more detail in section 4.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The below code snippet from `tf_mnist_train.py` shows how we can we log the script parameters for a training run, by specifying a key for the metric and the corresponding value:\n", - "```python\n", - "from azureml.core.run import Run\n", - "\n", - "run_logger = Run.get_submitted_run()\n", - "run_logger.log(\"learning_rate\", args.learning_rate)\n", - "run_logger.log(\"minibatch_size\", args.minibatch_size)\n", - "run_logger.log(\"keep_probability\", args.keep_probability)\n", - "run_logger.log(\"num_iterations\", args.num_iterations)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "get metrics" - ] - }, - "outputs": [], - "source": [ - "run.get_metrics()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 4. Hyperparameter Tuning with HyperDrive\n", - "\n", - "Now that we've seen how to do a simple TensorFlow training run using the Python SDK, let's see if we can further improve the accuracy of our model.\n", - "\n", - "Hyperparameter tuning is a key part of machine learning experimentation, in which the data scientist tries different configurations of hyperparameters in order to find a set of values that optimizes a specific target metric, such as the accuracy of the model. To this end, Azure ML provides the ** HyperDrive service ** to faciliate the hyperparameter tuning process. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### a. Start a HyperDrive run\n", - "\n", - "Using HyperDrive, we specify the hyperparameter space to sweep over, the primary metric to optimize, and an early termination policy. HyperDrive will kick off multiple children runs with different hyperparameter configurations, and terminate underperforming runs according to the early termination policy provided." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.hyperdrive import *\n", - "\n", - "param_sampling = RandomParameterSampling( {\n", - " \"learning_rate\": loguniform(-10, -3),\n", - " \"keep_probability\": uniform(0.5, 0.1)\n", - " }\n", - ")\n", - "\n", - "early_termination_policy = BanditPolicy(slack_factor = 0.15, evaluation_interval=2)\n", - "\n", - "hyperdrive_run_config = HyperDriveRunConfig(estimator = tf_estimator, \n", - " hyperparameter_sampling = param_sampling, \n", - " policy = early_termination_policy,\n", - " primary_metric_name = \"Accuracy\",\n", - " primary_metric_goal = PrimaryMetricGoal.MAXIMIZE,\n", - " max_total_runs = 20,\n", - " max_concurrent_runs = 4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the above cell, we first define a sampling space for the hyperparameters we want to sweep over, specifically the `learning_rate` and `keep_probability`. In this case we are using `RandomParameterSampling`, which allows us to specify the parameter values as either a choice among discrete values or as a distribution over a continuous range (here, we are using a uniform distribution for the `keep_probability`). You can run `help(RandomParameterSampling)` for more API details on this class.\n", - "\n", - "Then, we specify the early termination policy to use. If not specified, the policy defaults (?) to `None`, in which case all training runs are run to completion. Here we use the `BanditPolicy`, which will terminate any run that doesn't fall within the slack factor of our primary evaluation metric. Run `help(BanditPolicy)` for more details on this policy.\n", - "\n", - "To do: explain `evaluation_interval` within context of our training script.\n", - "\n", - "We specify the following parameters to the `HyperDriveRunConfig` constructor:\n", - "* explain input_paths?\n", - "* `estimator`: the estimator that will be called with the sampled hyperparameters\n", - "* `hyperparameter_sampling`: the sampling space to use\n", - "* `policy`: the early termination policy\n", - "* `primary_metric_name`: the name of the metric logged to the AML Run that HyperDrive will use to evaluate runs. Here, we are using the test accuracy (logged as 'Accuracy' in our training script)\n", - "* `primary_metric_goal`: the optimization goal of the primary metric (either `PrimaryMetricGoal.MAXIMIZE` or `PrimaryMetricGoal.MINIMIZE`)\n", - "* `max_total_runs`: the maximum number of runs HyperDrive will kick off\n", - "* `max_concurrent_runs`: the maximum number of runs to run concurrently\n", - "* `compute_target`: the compute target. In our case, the Batch AI cluster we provisioned" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Note on logging metrics for HyperDrive: ** \n", - "\n", - "In order to use HyperDrive, we will need to log the metric we want the service to use for evaluating run performance (`primary_metric_name`). In our script, we will use the accuracy of the model evaluated on the MNIST test dataset as our primary metric. For every 100 training iterations, we calculate and log this test accuracy (`'Accuracy'`). We also log an additional utility metric, `'Iterations'`, to inform us of the number of iterations the model was trained on that corresponds to each Accuracy metric logged (see `tf_mnist.py` for more details). This is useful for seeing how many iterations were trained for jobs that were terminated early.\n", - "\n", - "```python\n", - "run_logger.log(\"Accuracy\", float(test_acc))\n", - "run_logger.log(\"Iterations\", i)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "hyperdrive run", - "batchai", - "tensorflow" - ] - }, - "outputs": [], - "source": [ - "# start the HyperDrive run\n", - "hyperdrive_run = experiment.submit(hyperdrive_run_config)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### b. Use a widget to visualize details of the HyperDrive runs\n", - "\n", - "Runs will automatically start to show in the following widget once rendered." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.widgets import RunDetails\n", - "\n", - "RunDetails(hyperdrive_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![img](../images/hd_tf2.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check cluster status, pay attention to the # of running nodes\n", - "# !az batchai cluster list -o table" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check the Batch AI job queue. Notice the Job name is the run history ID. \n", - "# Pay attention to the state of the job.\n", - "# !az batchai job list -o table" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### c. Find the best run\n", - "\n", - "Once all of the HyperDrive runs have completed, we can find the run that achieved the highest accuracy and its corresponding hyperparameters." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history", - "get metrics" - ] - }, - "outputs": [], - "source": [ - "table = helpers.ListTable()\n", - "from tqdm import tqdm\n", - "\n", - "run_metrics = {}\n", - "table.append(['Accuracy', 'Run', 'Iterations', 'learning_rate', 'keep_probability'])\n", - "for run in tqdm(hyperdrive_run.get_children()):\n", - " metrics = run.get_metrics()\n", - " if 'Accuracy' in metrics.keys():\n", - " metrics['Accuracy'] = metrics['Accuracy'][-1] # final test accuracy\n", - " metrics['Iterations'] = max(metrics['Iterations']) # number of iterations the run ran for\n", - " \n", - " table.append([metrics['Accuracy'], \n", - " run.id, \n", - " metrics['Iterations'], \n", - " metrics['learning_rate'], \n", - " metrics['keep_probability']])\n", - " run_metrics[run.id] = metrics\n", - "table" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.run import Run\n", - "\n", - "best_run_id = max(run_metrics, key = lambda k: run_metrics[k]['Accuracy'])\n", - "best_run_metrics = run_metrics[best_run_id]\n", - "experiment = Experiment(ws, experiment_name)\n", - "best_run = Run(experiment, best_run_id)\n", - "\n", - "print('Best Run is:\\n Accuracy: {0:.6f} \\n Learning rate: {1:.6f} \\n Keep probability: {2}'.format(\n", - " best_run_metrics['Accuracy'],\n", - " best_run_metrics['learning_rate'],\n", - " best_run_metrics['keep_probability']\n", - " ))\n", - "\n", - "print(helpers.get_run_history_url(best_run))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot the runs [Optional] \n", - "Note you will need to install `matplotlib` for this." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "plot_data = np.array([[run_metrics[i]['keep_probability'], \n", - " run_metrics[i]['learning_rate'], \n", - " run_metrics[i]['Accuracy']] for i in run_metrics.keys()])\n", - "area = np.array([[run_metrics[i]['Iterations']/5] for i in run_metrics.keys()])\n", - "\n", - "plt.figure(figsize = (15,5))\n", - "plt.scatter(plot_data[:,0], plot_data[:,1], s = area, c = plot_data[:,2], alpha = 0.4)\n", - "plt.xlabel(\"keep_probability\")\n", - "plt.ylabel(\"learning_rate\")\n", - "plt.yscale('log')\n", - "plt.ylim(0.00001,0.06)\n", - "plt.colorbar()\n", - "plt.clim(0.95, max(plot_data[:,2]))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### d. Download model from the best run\n", - "Once we've identified the best run from HyperDrive, we can download the model files to our local machine. \n", - "\n", - "The final trained model checkpoint files are located in the `outputs` directory picked up by AML. We can run the below line of code to confirm that those files are present:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "best_run.get_file_names()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we can download the relevant checkpoint files. Note there is currently a bug on uploading files when executing on Batch AI cluster so the below code doesn't work yet." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "download file" - ] - }, - "outputs": [], - "source": [ - "import os\n", - "output_dir = 'outputs'\n", - "target_dir = os.path.join('sample_projects', 'outputs')\n", - "model_files_to_download = ['checkpoint', 'model.ckpt.data-00000-of-00001', 'model.ckpt.index', 'model.ckpt.meta']\n", - "for file in model_files_to_download:\n", - " model_src_path = os.path.join(output_dir, file)\n", - " model_dest_path = os.path.join(target_dir, file)\n", - " print('downloading ' + file)\n", - " best_run.download_file(name = model_src_path, output_file_path = model_dest_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### e. Test the model locally\n", - "Now that we have downloaded the best-performing model, we can use it locally to score images of hand-written digits. For this we have prepared a scoring file [tf_mnist_score.py](tf_mnist_score.py) which we import below. tf_mnist_score.py provides a function `run(input_data)` which accepts a base64-encoded image in a JSON dict format (this format is friendly for the deployment of a webservice, which we will do later). \n", - "\n", - "Note that this scoring code requires tensorflow and PIL (`pip install tensorflow pillow`).\n", - "\n", - "First, we will create a base64-encoded image in a json structure based on one of the test images provided in the folder `mnist_test_images`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os, json, base64\n", - "from PIL import Image \n", - "import tf_mnist_score\n", - "from io import BytesIO\n", - "\n", - "def imgToBase64(img):\n", - " imgio = BytesIO()\n", - " img.save(imgio, 'JPEG')\n", - " img_str = base64.b64encode(imgio.getvalue())\n", - " return img_str.decode('utf-8')\n", - "\n", - "# Generate JSON Base64-encoded image from sample test input\n", - "test_img_path = os.path.join('mnist_test_images', 'img_3.jpg')\n", - "base64Img = imgToBase64(Image.open(test_img_path))\n", - "data = json.dumps({'data': base64Img})\n", - "print(data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we will call `tf_mnist_score.run()` with the json data structure we created above. And we draw the image that we are scoring, so we can compare the label returned by the image with the acutual handwritten digit." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import Image as IPImage\n", - "tf_mnist_score.init()\n", - "result = tf_mnist_score.run(data)\n", - "print(result)\n", - "IPImage(filename=test_img_path, width=200)" - ] - } - ], - "metadata": { - "anaconda-cloud": {}, - "kernelspec": { - "display_name": "Python 3", - "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.6.5" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "state": { - "208cc3b53e2c45fea1440188a863efb8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_contrib_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowHyperDriveRunsView", - "layout": "IPY_MODEL_8a36279a14624bbdb1926c2572748861", - "value": { - "child_runs": [ - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000852395056049516 --keep_probability 0.434530370965995", - "created_time": "2018-06-01 19:41:39.666220+00:00", - "created_time_dt": "2018-06-01T19:41:39.666220", - "duration": "0:00:57", - "end_time": "2018-06-01 19:42:37.511351+00:00", - "hyperdrive_id": "5488", - "metric": 0.9842000007629395, - "paras_keep_probability": "0.434530370965995", - "paras_learning_rate": "0.000852395056049516", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5488_abbecb6c", - "run_number": 16, - "start_time": "2018-06-01 19:41:40.368621+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00179999057463703 --keep_probability 0.296515321882523", - "created_time": "2018-06-01 19:29:46.303636+00:00", - "created_time_dt": "2018-06-01T19:29:46.303636", - "duration": "0:02:03", - "end_time": "2018-06-01 19:31:50.043486+00:00", - "hyperdrive_id": "5469", - "metric": 0.9836999773979187, - "paras_keep_probability": "0.296515321882523", - "paras_learning_rate": "0.00179999057463703", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5469_9f034e69", - "run_number": 10, - "start_time": "2018-06-01 19:29:47.033264+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000676904386677712 --keep_probability 0.4154535083569", - "created_time": "2018-06-01 19:50:31.651044+00:00", - "created_time_dt": "2018-06-01T19:50:31.651044", - "duration": "0:14:30", - "end_time": "2018-06-01 20:05:02.591649+00:00", - "hyperdrive_id": "5498", - "metric": 0.9828000068664551, - "paras_keep_probability": "0.4154535083569", - "paras_learning_rate": "0.000676904386677712", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5498_32e0a249", - "run_number": 20, - "start_time": "2018-06-01 19:50:37.386350+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000586938713321222 --keep_probability 0.432942295536284", - "created_time": "2018-06-01 19:37:36.678691+00:00", - "created_time_dt": "2018-06-01T19:37:36.678691", - "duration": "0:01:46", - "end_time": "2018-06-01 19:39:23.211000+00:00", - "hyperdrive_id": "5479", - "metric": 0.9818000197410583, - "paras_keep_probability": "0.432942295536284", - "paras_learning_rate": "0.000586938713321222", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5479_cb5037ed", - "run_number": 11, - "start_time": "2018-06-01 19:37:43.143211+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321696353537414 --keep_probability 0.446837800410634", - "created_time": "2018-06-01 19:41:39.915872+00:00", - "created_time_dt": "2018-06-01T19:41:39.915872", - "duration": "0:02:58", - "end_time": "2018-06-01 19:44:38.693923+00:00", - "hyperdrive_id": "5490", - "metric": 0.9812999963760376, - "paras_keep_probability": "0.446837800410634", - "paras_learning_rate": "0.000321696353537414", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5490_cfcbcea1", - "run_number": 17, - "start_time": "2018-06-01 19:41:40.688804+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000598930751146987 --keep_probability 0.173175740602207", - "created_time": "2018-06-01 19:41:44.682554+00:00", - "created_time_dt": "2018-06-01T19:41:44.682554", - "duration": "0:01:54", - "end_time": "2018-06-01 19:43:38.690104+00:00", - "hyperdrive_id": "5491", - "metric": 0.9785000085830688, - "paras_keep_probability": "0.173175740602207", - "paras_learning_rate": "0.000598930751146987", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5491_1ab60563", - "run_number": 18, - "start_time": "2018-06-01 19:41:45.356160+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00313856224079023 --keep_probability 0.308708329651949", - "created_time": "2018-06-01 19:29:46.140940+00:00", - "created_time_dt": "2018-06-01T19:29:46.140940", - "duration": "0:02:02", - "end_time": "2018-06-01 19:31:49.127224+00:00", - "hyperdrive_id": "5471", - "metric": 0.9764000177383423, - "paras_keep_probability": "0.308708329651949", - "paras_learning_rate": "0.00313856224079023", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5471_05cdc17b", - "run_number": 8, - "start_time": "2018-06-01 19:29:46.876362+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321079619657115 --keep_probability 0.166071686996525", - "created_time": "2018-06-01 19:26:11.468523+00:00", - "created_time_dt": "2018-06-01T19:26:11.468523", - "duration": "0:01:48", - "end_time": "2018-06-01 19:28:00.170666+00:00", - "hyperdrive_id": "5460", - "metric": 0.9703999757766724, - "paras_keep_probability": "0.166071686996525", - "paras_learning_rate": "0.000321079619657115", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5460_0ff67ff3", - "run_number": 6, - "start_time": "2018-06-01 19:26:12.172473+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00970484525511844 --keep_probability 0.334371206847485", - "created_time": "2018-06-01 19:25:53.815492+00:00", - "created_time_dt": "2018-06-01T19:25:53.815492", - "duration": "0:02:07", - "end_time": "2018-06-01 19:28:01.507944+00:00", - "hyperdrive_id": "5457", - "metric": 0.968500018119812, - "paras_keep_probability": "0.334371206847485", - "paras_learning_rate": "0.00970484525511844", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5457_a4c3a147", - "run_number": 4, - "start_time": "2018-06-01 19:26:08.553859+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00922621594789716 --keep_probability 0.227683838955561", - "created_time": "2018-06-01 19:37:36.835723+00:00", - "created_time_dt": "2018-06-01T19:37:36.835723", - "duration": "0:01:03", - "end_time": "2018-06-01 19:38:40.652773+00:00", - "hyperdrive_id": "5480", - "metric": 0.9663000106811523, - "paras_keep_probability": "0.227683838955561", - "paras_learning_rate": "0.00922621594789716", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5480_f234fb08", - "run_number": 14, - "start_time": "2018-06-01 19:37:38.116439+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0155645426732787 --keep_probability 0.159123698168668", - "created_time": "2018-06-01 19:29:46.277531+00:00", - "created_time_dt": "2018-06-01T19:29:46.277531", - "duration": "0:01:09", - "end_time": "2018-06-01 19:30:55.727701+00:00", - "hyperdrive_id": "5472", - "metric": 0.964900016784668, - "paras_keep_probability": "0.159123698168668", - "paras_learning_rate": "0.0155645426732787", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5472_23122c4b", - "run_number": 9, - "start_time": "2018-06-01 19:29:46.964148+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00838536088211458 --keep_probability 0.102478957268164", - "created_time": "2018-06-01 19:25:53.548553+00:00", - "created_time_dt": "2018-06-01T19:25:53.548553", - "duration": "0:01:05", - "end_time": "2018-06-01 19:26:59.136632+00:00", - "hyperdrive_id": "5459", - "metric": 0.9646999835968018, - "paras_keep_probability": "0.102478957268164", - "paras_learning_rate": "0.00838536088211458", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5459_030491ad", - "run_number": 3, - "start_time": "2018-06-01 19:25:54.739654+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000143958552086584 --keep_probability 0.273084377226789", - "created_time": "2018-06-01 19:29:46.057879+00:00", - "created_time_dt": "2018-06-01T19:29:46.057879", - "duration": "0:01:18", - "end_time": "2018-06-01 19:31:04.843202+00:00", - "hyperdrive_id": "5470", - "metric": 0.963699996471405, - "paras_keep_probability": "0.273084377226789", - "paras_learning_rate": "0.000143958552086584", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5470_a648dbea", - "run_number": 7, - "start_time": "2018-06-01 19:29:46.780201+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.14051833348127E-05 --keep_probability 0.472685817381368", - "created_time": "2018-06-01 19:41:39.648602+00:00", - "created_time_dt": "2018-06-01T19:41:39.648602", - "duration": "0:03:06", - "end_time": "2018-06-01 19:44:45.699811+00:00", - "hyperdrive_id": "5489", - "metric": 0.9613000154495239, - "paras_keep_probability": "0.472685817381368", - "paras_learning_rate": "7.14051833348127E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5489_38907948", - "run_number": 15, - "start_time": "2018-06-01 19:41:40.512369+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00737747352627753 --keep_probability 0.205239625544216", - "created_time": "2018-06-01 19:50:33.596963+00:00", - "created_time_dt": "2018-06-01T19:50:33.596963", - "duration": "0:01:51", - "end_time": "2018-06-01 19:52:25.281499+00:00", - "hyperdrive_id": "5497", - "metric": 0.9581999778747559, - "paras_keep_probability": "0.205239625544216", - "paras_learning_rate": "0.00737747352627753", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5497_8130025b", - "run_number": 22, - "start_time": "2018-06-01 19:50:34.456850+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0211316024512922 --keep_probability 0.456008246140918", - "created_time": "2018-06-01 19:50:31.581841+00:00", - "created_time_dt": "2018-06-01T19:50:31.581841", - "duration": "0:01:03", - "end_time": "2018-06-01 19:51:35.272415+00:00", - "hyperdrive_id": "5499", - "metric": 0.9580000042915344, - "paras_keep_probability": "0.456008246140918", - "paras_learning_rate": "0.0211316024512922", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5499_e0b5a73f", - "run_number": 19, - "start_time": "2018-06-01 19:50:32.786951+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.56451710371043E-05 --keep_probability 0.321364540919092", - "created_time": "2018-06-01 19:50:33.421674+00:00", - "created_time_dt": "2018-06-01T19:50:33.421674", - "duration": "0:06:27", - "end_time": "2018-06-01 19:57:00.982688+00:00", - "hyperdrive_id": "5496", - "metric": 0.9520000219345093, - "paras_keep_probability": "0.321364540919092", - "paras_learning_rate": "7.56451710371043E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5496_46a98c1f", - "run_number": 21, - "start_time": "2018-06-01 19:50:34.379782+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 6.86923046964849E-05 --keep_probability 0.229123758955098", - "created_time": "2018-06-01 19:37:36.816510+00:00", - "created_time_dt": "2018-06-01T19:37:36.816510", - "duration": "0:01:12", - "end_time": "2018-06-01 19:38:49.439465+00:00", - "hyperdrive_id": "5477", - "metric": 0.9483000040054321, - "paras_keep_probability": "0.229123758955098", - "paras_learning_rate": "6.86923046964849E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5477_c428bcf0", - "run_number": 13, - "start_time": "2018-06-01 19:37:42.971387+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.014609502490554 --keep_probability 0.480459935106515", - "created_time": "2018-06-01 19:26:10.258955+00:00", - "created_time_dt": "2018-06-01T19:26:10.258955", - "duration": "0:02:41", - "end_time": "2018-06-01 19:28:52.069673+00:00", - "hyperdrive_id": "5458", - "metric": 0.12110000103712082, - "paras_keep_probability": "0.480459935106515", - "paras_learning_rate": "0.014609502490554", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5458_3f73f0ac", - "run_number": 5, - "start_time": "2018-06-01 19:26:17.107379+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0149932664638274 --keep_probability 0.284424630578217", - "created_time": "2018-06-01 19:37:36.730460+00:00", - "created_time_dt": "2018-06-01T19:37:36.730460", - "duration": "0:01:08", - "end_time": "2018-06-01 19:38:44.881339+00:00", - "hyperdrive_id": "5478", - "metric": 0.11349999904632568, - "paras_keep_probability": "0.284424630578217", - "paras_learning_rate": "0.0149932664638274", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5478_24390740", - "run_number": 12, - "start_time": "2018-06-01 19:37:42.865594+00:00", - "status": "Completed" - } - ], - "children_metrics": { - "allArguments": [ - "keep_probability", - "learning_rate", - "minibatch_size", - "output_dir", - "num_iterations", - "Accuracy" - ], - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "jobHistData": [ - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000852395056049516 --keep_probability 0.434530370965995", - "created_time": "2018-06-01 19:41:39.666220+00:00", - "created_time_dt": "2018-06-01T19:41:39.666220", - "duration": "0:00:57", - "end_time": "2018-06-01 19:42:37.511351+00:00", - "hyperdrive_id": "5488", - "metric": 0.9842000007629395, - "paras_keep_probability": "0.434530370965995", - "paras_learning_rate": "0.000852395056049516", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5488_abbecb6c", - "run_number": 16, - "start_time": "2018-06-01 19:41:40.368621+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00179999057463703 --keep_probability 0.296515321882523", - "created_time": "2018-06-01 19:29:46.303636+00:00", - "created_time_dt": "2018-06-01T19:29:46.303636", - "duration": "0:02:03", - "end_time": "2018-06-01 19:31:50.043486+00:00", - "hyperdrive_id": "5469", - "metric": 0.9836999773979187, - "paras_keep_probability": "0.296515321882523", - "paras_learning_rate": "0.00179999057463703", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5469_9f034e69", - "run_number": 10, - "start_time": "2018-06-01 19:29:47.033264+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000676904386677712 --keep_probability 0.4154535083569", - "created_time": "2018-06-01 19:50:31.651044+00:00", - "created_time_dt": "2018-06-01T19:50:31.651044", - "duration": "0:14:30", - "end_time": "2018-06-01 20:05:02.591649+00:00", - "hyperdrive_id": "5498", - "metric": 0.9828000068664551, - "paras_keep_probability": "0.4154535083569", - "paras_learning_rate": "0.000676904386677712", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5498_32e0a249", - "run_number": 20, - "start_time": "2018-06-01 19:50:37.386350+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000586938713321222 --keep_probability 0.432942295536284", - "created_time": "2018-06-01 19:37:36.678691+00:00", - "created_time_dt": "2018-06-01T19:37:36.678691", - "duration": "0:01:46", - "end_time": "2018-06-01 19:39:23.211000+00:00", - "hyperdrive_id": "5479", - "metric": 0.9818000197410583, - "paras_keep_probability": "0.432942295536284", - "paras_learning_rate": "0.000586938713321222", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5479_cb5037ed", - "run_number": 11, - "start_time": "2018-06-01 19:37:43.143211+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321696353537414 --keep_probability 0.446837800410634", - "created_time": "2018-06-01 19:41:39.915872+00:00", - "created_time_dt": "2018-06-01T19:41:39.915872", - "duration": "0:02:58", - "end_time": "2018-06-01 19:44:38.693923+00:00", - "hyperdrive_id": "5490", - "metric": 0.9812999963760376, - "paras_keep_probability": "0.446837800410634", - "paras_learning_rate": "0.000321696353537414", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5490_cfcbcea1", - "run_number": 17, - "start_time": "2018-06-01 19:41:40.688804+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000598930751146987 --keep_probability 0.173175740602207", - "created_time": "2018-06-01 19:41:44.682554+00:00", - "created_time_dt": "2018-06-01T19:41:44.682554", - "duration": "0:01:54", - "end_time": "2018-06-01 19:43:38.690104+00:00", - "hyperdrive_id": "5491", - "metric": 0.9785000085830688, - "paras_keep_probability": "0.173175740602207", - "paras_learning_rate": "0.000598930751146987", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5491_1ab60563", - "run_number": 18, - "start_time": "2018-06-01 19:41:45.356160+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00313856224079023 --keep_probability 0.308708329651949", - "created_time": "2018-06-01 19:29:46.140940+00:00", - "created_time_dt": "2018-06-01T19:29:46.140940", - "duration": "0:02:02", - "end_time": "2018-06-01 19:31:49.127224+00:00", - "hyperdrive_id": "5471", - "metric": 0.9764000177383423, - "paras_keep_probability": "0.308708329651949", - "paras_learning_rate": "0.00313856224079023", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5471_05cdc17b", - "run_number": 8, - "start_time": "2018-06-01 19:29:46.876362+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321079619657115 --keep_probability 0.166071686996525", - "created_time": "2018-06-01 19:26:11.468523+00:00", - "created_time_dt": "2018-06-01T19:26:11.468523", - "duration": "0:01:48", - "end_time": "2018-06-01 19:28:00.170666+00:00", - "hyperdrive_id": "5460", - "metric": 0.9703999757766724, - "paras_keep_probability": "0.166071686996525", - "paras_learning_rate": "0.000321079619657115", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5460_0ff67ff3", - "run_number": 6, - "start_time": "2018-06-01 19:26:12.172473+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00970484525511844 --keep_probability 0.334371206847485", - "created_time": "2018-06-01 19:25:53.815492+00:00", - "created_time_dt": "2018-06-01T19:25:53.815492", - "duration": "0:02:07", - "end_time": "2018-06-01 19:28:01.507944+00:00", - "hyperdrive_id": "5457", - "metric": 0.968500018119812, - "paras_keep_probability": "0.334371206847485", - "paras_learning_rate": "0.00970484525511844", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5457_a4c3a147", - "run_number": 4, - "start_time": "2018-06-01 19:26:08.553859+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00922621594789716 --keep_probability 0.227683838955561", - "created_time": "2018-06-01 19:37:36.835723+00:00", - "created_time_dt": "2018-06-01T19:37:36.835723", - "duration": "0:01:03", - "end_time": "2018-06-01 19:38:40.652773+00:00", - "hyperdrive_id": "5480", - "metric": 0.9663000106811523, - "paras_keep_probability": "0.227683838955561", - "paras_learning_rate": "0.00922621594789716", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5480_f234fb08", - "run_number": 14, - "start_time": "2018-06-01 19:37:38.116439+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0155645426732787 --keep_probability 0.159123698168668", - "created_time": "2018-06-01 19:29:46.277531+00:00", - "created_time_dt": "2018-06-01T19:29:46.277531", - "duration": "0:01:09", - "end_time": "2018-06-01 19:30:55.727701+00:00", - "hyperdrive_id": "5472", - "metric": 0.964900016784668, - "paras_keep_probability": "0.159123698168668", - "paras_learning_rate": "0.0155645426732787", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5472_23122c4b", - "run_number": 9, - "start_time": "2018-06-01 19:29:46.964148+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00838536088211458 --keep_probability 0.102478957268164", - "created_time": "2018-06-01 19:25:53.548553+00:00", - "created_time_dt": "2018-06-01T19:25:53.548553", - "duration": "0:01:05", - "end_time": "2018-06-01 19:26:59.136632+00:00", - "hyperdrive_id": "5459", - "metric": 0.9646999835968018, - "paras_keep_probability": "0.102478957268164", - "paras_learning_rate": "0.00838536088211458", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5459_030491ad", - "run_number": 3, - "start_time": "2018-06-01 19:25:54.739654+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000143958552086584 --keep_probability 0.273084377226789", - "created_time": "2018-06-01 19:29:46.057879+00:00", - "created_time_dt": "2018-06-01T19:29:46.057879", - "duration": "0:01:18", - "end_time": "2018-06-01 19:31:04.843202+00:00", - "hyperdrive_id": "5470", - "metric": 0.963699996471405, - "paras_keep_probability": "0.273084377226789", - "paras_learning_rate": "0.000143958552086584", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5470_a648dbea", - "run_number": 7, - "start_time": "2018-06-01 19:29:46.780201+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.14051833348127E-05 --keep_probability 0.472685817381368", - "created_time": "2018-06-01 19:41:39.648602+00:00", - "created_time_dt": "2018-06-01T19:41:39.648602", - "duration": "0:03:06", - "end_time": "2018-06-01 19:44:45.699811+00:00", - "hyperdrive_id": "5489", - "metric": 0.9613000154495239, - "paras_keep_probability": "0.472685817381368", - "paras_learning_rate": "7.14051833348127E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5489_38907948", - "run_number": 15, - "start_time": "2018-06-01 19:41:40.512369+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00737747352627753 --keep_probability 0.205239625544216", - "created_time": "2018-06-01 19:50:33.596963+00:00", - "created_time_dt": "2018-06-01T19:50:33.596963", - "duration": "0:01:51", - "end_time": "2018-06-01 19:52:25.281499+00:00", - "hyperdrive_id": "5497", - "metric": 0.9581999778747559, - "paras_keep_probability": "0.205239625544216", - "paras_learning_rate": "0.00737747352627753", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5497_8130025b", - "run_number": 22, - "start_time": "2018-06-01 19:50:34.456850+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0211316024512922 --keep_probability 0.456008246140918", - "created_time": "2018-06-01 19:50:31.581841+00:00", - "created_time_dt": "2018-06-01T19:50:31.581841", - "duration": "0:01:03", - "end_time": "2018-06-01 19:51:35.272415+00:00", - "hyperdrive_id": "5499", - "metric": 0.9580000042915344, - "paras_keep_probability": "0.456008246140918", - "paras_learning_rate": "0.0211316024512922", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5499_e0b5a73f", - "run_number": 19, - "start_time": "2018-06-01 19:50:32.786951+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.56451710371043E-05 --keep_probability 0.321364540919092", - "created_time": "2018-06-01 19:50:33.421674+00:00", - "created_time_dt": "2018-06-01T19:50:33.421674", - "duration": "0:06:27", - "end_time": "2018-06-01 19:57:00.982688+00:00", - "hyperdrive_id": "5496", - "metric": 0.9520000219345093, - "paras_keep_probability": "0.321364540919092", - "paras_learning_rate": "7.56451710371043E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5496_46a98c1f", - "run_number": 21, - "start_time": "2018-06-01 19:50:34.379782+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 6.86923046964849E-05 --keep_probability 0.229123758955098", - "created_time": "2018-06-01 19:37:36.816510+00:00", - "created_time_dt": "2018-06-01T19:37:36.816510", - "duration": "0:01:12", - "end_time": "2018-06-01 19:38:49.439465+00:00", - "hyperdrive_id": "5477", - "metric": 0.9483000040054321, - "paras_keep_probability": "0.229123758955098", - "paras_learning_rate": "6.86923046964849E-05", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5477_c428bcf0", - "run_number": 13, - "start_time": "2018-06-01 19:37:42.971387+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.014609502490554 --keep_probability 0.480459935106515", - "created_time": "2018-06-01 19:26:10.258955+00:00", - "created_time_dt": "2018-06-01T19:26:10.258955", - "duration": "0:02:41", - "end_time": "2018-06-01 19:28:52.069673+00:00", - "hyperdrive_id": "5458", - "metric": 0.12110000103712082, - "paras_keep_probability": "0.480459935106515", - "paras_learning_rate": "0.014609502490554", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5458_3f73f0ac", - "run_number": 5, - "start_time": "2018-06-01 19:26:17.107379+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0149932664638274 --keep_probability 0.284424630578217", - "created_time": "2018-06-01 19:37:36.730460+00:00", - "created_time_dt": "2018-06-01T19:37:36.730460", - "duration": "0:01:08", - "end_time": "2018-06-01 19:38:44.881339+00:00", - "hyperdrive_id": "5478", - "metric": 0.11349999904632568, - "paras_keep_probability": "0.284424630578217", - "paras_learning_rate": "0.0149932664638274", - "paras_minibatch_size": "64", - "paras_num_iterations": "1000", - "paras_output_dir": "outputs", - "run_id": "tensorflow-hyperdrive_1527881081325_446_5478_24390740", - "run_number": 12, - "start_time": "2018-06-01 19:37:42.865594+00:00", - "status": "Completed" - } - ], - "metricName": "Accuracy", - "series": [ - { - "mode": "lines", - "name": 20, - "run_id": 20, - "stepped": false, - "uid": "d9463a", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.052000001072883606, - 0.9318000078201294, - 0.9584000110626221, - 0.9639999866485596, - 0.9710999727249146, - 0.9746999740600586, - 0.9768999814987183, - 0.9822999835014343, - 0.978600025177002, - 0.9801999926567078, - 0.9828000068664551 - ] - }, - { - "mode": "lines", - "name": 7, - "run_id": 7, - "stepped": false, - "uid": "2d6574", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.08749999850988388, - 0.855400025844574, - 0.911300003528595, - 0.9289000034332275, - 0.9394999742507935, - 0.9431999921798706, - 0.9509999752044678, - 0.9553999900817871, - 0.9555000066757202, - 0.963699996471405, - 0.9616000056266785 - ] - }, - { - "mode": "lines", - "name": 16, - "run_id": 16, - "stepped": false, - "uid": "add68c", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.08869999647140503, - 0.9404000043869019, - 0.9574000239372253, - 0.9700999855995178, - 0.9715999960899353, - 0.979200005531311, - 0.9797000288963318, - 0.9812999963760376, - 0.9797999858856201, - 0.9817000031471252, - 0.9842000007629395 - ] - }, - { - "mode": "lines", - "name": 14, - "run_id": 14, - "stepped": false, - "uid": "38792f", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.08950000256299973, - 0.9248999953269958, - 0.9545999765396118, - 0.9581000208854675, - 0.9559999704360962, - 0.9627000093460083, - 0.9642000198364258, - 0.9663000106811523, - 0.9585999846458435, - 0.963100016117096, - 0.9595999717712402 - ] - }, - { - "mode": "lines", - "name": 6, - "run_id": 6, - "stepped": false, - "uid": "10fcf1", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.08980000019073486, - 0.8791999816894531, - 0.9261000156402588, - 0.9426000118255615, - 0.9501000046730042, - 0.9546999931335449, - 0.9573000073432922, - 0.963699996471405, - 0.965499997138977, - 0.9684000015258789, - 0.9703999757766724 - ] - }, - { - "mode": "lines", - "name": 22, - "run_id": 22, - "stepped": false, - "uid": "f09911", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.0949999988079071, - 0.8639000058174133, - 0.9139999747276306, - 0.9171000123023987, - 0.930899977684021, - 0.9441999793052673, - 0.9545999765396118, - 0.9560999870300293, - 0.9581999778747559, - 0.9539999961853027, - 0.9559000134468079 - ] - }, - { - "mode": "lines", - "name": 8, - "run_id": 8, - "stepped": false, - "uid": "e6ae29", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.0949999988079071, - 0.8953999876976013, - 0.942300021648407, - 0.9513999819755554, - 0.9617000222206116, - 0.9564999938011169, - 0.9689000248908997, - 0.9688000082969666, - 0.9704999923706055, - 0.9760000109672546, - 0.9764000177383423 - ] - }, - { - "mode": "lines", - "name": 12, - "run_id": 12, - "stepped": false, - "uid": "84d316", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.09629999846220016, - 0.11349999904632568, - 0.10279999673366547, - 0.10090000182390213, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.10279999673366547, - 0.10279999673366547, - 0.11349999904632568, - 0.11349999904632568 - ] - }, - { - "mode": "lines", - "name": 5, - "run_id": 5, - "stepped": false, - "uid": "05acc0", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.12110000103712082, - 0.0982000008225441, - 0.11349999904632568, - 0.11349999904632568, - 0.10320000350475311, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568 - ] - }, - { - "mode": "lines", - "name": 4, - "run_id": 4, - "stepped": false, - "uid": "9b5194", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.10109999775886536, - 0.8985999822616577, - 0.9424999952316284, - 0.9294999837875366, - 0.9545999765396118, - 0.9581000208854675, - 0.9616000056266785, - 0.9678999781608582, - 0.9661999940872192, - 0.9672999978065491, - 0.968500018119812 - ] - }, - { - "mode": "lines", - "name": 11, - "run_id": 11, - "stepped": false, - "uid": "b7a136", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.10440000146627426, - 0.9383000135421753, - 0.9538999795913696, - 0.9664000272750854, - 0.9717000126838684, - 0.9760000109672546, - 0.9732999801635742, - 0.9779000282287598, - 0.9817000031471252, - 0.9818000197410583, - 0.9799000024795532 - ] - }, - { - "mode": "lines", - "name": 3, - "run_id": 3, - "stepped": false, - "uid": "dab69b", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.11159999668598175, - 0.8949000239372253, - 0.9286999702453613, - 0.9498999714851379, - 0.9539999961853027, - 0.953499972820282, - 0.9606999754905701, - 0.9613000154495239, - 0.9549999833106995, - 0.9646999835968018, - 0.9581999778747559 - ] - }, - { - "mode": "lines", - "name": 15, - "run_id": 15, - "stepped": false, - "uid": "90901a", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.11159999668598175, - 0.8270000219345093, - 0.9024999737739563, - 0.9175999760627747, - 0.9323999881744385, - 0.9368000030517578, - 0.9431999921798706, - 0.9506000280380249, - 0.9526000022888184, - 0.9584000110626221, - 0.9613000154495239 - ] - }, - { - "mode": "lines", - "name": 10, - "run_id": 10, - "stepped": false, - "uid": "bd666d", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.11209999769926071, - 0.9466000199317932, - 0.9639000296592712, - 0.9722999930381775, - 0.9781000018119812, - 0.9800999760627747, - 0.9781000018119812, - 0.9814000129699707, - 0.9833999872207642, - 0.9836999773979187, - 0.9829000234603882 - ] - }, - { - "mode": "lines", - "name": 21, - "run_id": 21, - "stepped": false, - "uid": "3f3472", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.11500000208616257, - 0.789900004863739, - 0.8838000297546387, - 0.9072999954223633, - 0.9203000068664551, - 0.9312000274658203, - 0.9319000244140625, - 0.9434000253677368, - 0.9470999836921692, - 0.9477999806404114, - 0.9520000219345093 - ] - }, - { - "mode": "lines", - "name": 19, - "run_id": 19, - "stepped": false, - "uid": "982581", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.1160999983549118, - 0.9366000294685364, - 0.9473000168800354, - 0.9552000164985657, - 0.95660001039505, - 0.9465000033378601, - 0.9575999975204468, - 0.9580000042915344, - 0.949999988079071, - 0.9520999789237976, - 0.9567999839782715 - ] - }, - { - "mode": "lines", - "name": 18, - "run_id": 18, - "stepped": false, - "uid": "f812c0", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.12210000306367874, - 0.917900025844574, - 0.9437999725341797, - 0.95660001039505, - 0.9646000266075134, - 0.9692000150680542, - 0.9707000255584717, - 0.9735999703407288, - 0.9781000018119812, - 0.9775999784469604, - 0.9785000085830688 - ] - }, - { - "mode": "lines", - "name": 13, - "run_id": 13, - "stepped": false, - "uid": "022e43", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.13899999856948853, - 0.7547000050544739, - 0.8593000173568726, - 0.8981999754905701, - 0.9186999797821045, - 0.9254999756813049, - 0.934499979019165, - 0.9377999901771545, - 0.9431999921798706, - 0.9437999725341797, - 0.9483000040054321 - ] - }, - { - "mode": "lines", - "name": 9, - "run_id": 9, - "stepped": false, - "uid": "ee6d23", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.14800000190734863, - 0.9146999716758728, - 0.9452999830245972, - 0.9506000280380249, - 0.9550999999046326, - 0.9584000110626221, - 0.9599000215530396, - 0.9621000289916992, - 0.964900016784668, - 0.9510999917984009, - 0.9624000191688538 - ] - }, - { - "mode": "lines", - "name": 17, - "run_id": 17, - "stepped": false, - "uid": "4fd9d8", - "visible": "legendonly", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.16419999301433563, - 0.9247999787330627, - 0.9431999921798706, - 0.9599000215530396, - 0.9674999713897705, - 0.9695000052452087, - 0.9765999913215637, - 0.9763000011444092, - 0.9779999852180481, - 0.9812999963760376, - 0.9789000153541565 - ] - } - ], - "showLegend": true, - "title": "HyperDrive Run Primary Metric : Accuracy" - }, - "run_id": "tensorflow-hyperdrive_1527881081325", - "run_logs": "", - "run_metrics": [], - "run_properties": { - "additional_properties": {}, - "created_utc": "2018-06-01T19:24:41.846775", - "description": null, - "end_time_utc": "2018-06-01T20:05:15.398835", - "experiment_id": "54fc7a8b-21a4-4a10-8931-bd36c717c9b7", - "heartbeat_enabled": false, - "hidden": false, - "name": "tensorflow-hyperdrive", - "parent_run_id": null, - "properties": { - "all_jobs_generated": "true", - "azureml.runsource": "hyperdrive", - "cancellation_requested": "false", - "generator_config": "{\"name\": \"RANDOM\", \"parameter_space\": {\"learning_rate\": [\"loguniform\", [-10, -3]], \"keep_probability\": [\"uniform\", [0.5, 0.1]]}}", - "is_hyperdrive_run": "true", - "max_concurrent_jobs": "4", - "max_duration_minutes": "43200", - "max_total_jobs": "20", - "policy_config": "{\"name\": \"BANDIT\", \"properties\": {\"slack_factor\": 0.15, \"evaluation_interval\": 2, \"delay_evaluation\": 0}}", - "primary_metric_config": "{\"name\": \"Accuracy\", \"goal\": \"maximize\"}", - "runTemplate": "HyperDrive" - }, - "root_run_id": "tensorflow-hyperdrive_1527881081325", - "run_id": "tensorflow-hyperdrive_1527881081325", - "run_number": 2, - "script_name": "tf_mnist_train.py", - "start_time_utc": null, - "status": "Completed", - "tags": {}, - "target": "gpucluster", - "token": null, - "token_expiry_time_utc": null, - "user_id": "fffc1c66-275f-4935-bb04-70a760c82fda" - }, - "status": "Completed", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-notebooks%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2ws3/projects/tensorflow-hyperdrive/run-history/run-details/tensorflow-hyperdrive_1527881081325?type=HyperDrive" - } - } - }, - "49be30037a73481a900026b30fc816eb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "524fd810f76f4ed69236c8e0cf20da11": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_contrib_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowRunDetailsView", - "layout": "IPY_MODEL_cce84fe5e64141a0a69e0029ca3553a5", - "value": { - "child_runs": [], - "children_metrics": {}, - "run_id": "tensorflow-hyperdrive_1527879977658", - "run_logs": "Uploading experiment status to history service.\nAdding run profile attachment azureml-logs/80_driver_log.txt\nUploading experiment status to history service.\nAdding run profile attachment azureml-logs/60_control_log.txt\n\n\rUsing Spark's default log4j profile: org/apache/spark/log4j-defaults.properties\nSetting default log level to \"WARN\".\nTo adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n18/06/01 19:20:28 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n/azureml-envs/azureml_799f97443dc957270fd0268d825cda62/lib/python3.6/importlib/_bootstrap.py:205: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6\n return f(*args, **kwds)\nSuccessfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\nExtracting MNIST_data/train-images-idx3-ubyte.gz\nSuccessfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\nExtracting MNIST_data/train-labels-idx1-ubyte.gz\nSuccessfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\nExtracting MNIST_data/t10k-images-idx3-ubyte.gz\nSuccessfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\nExtracting MNIST_data/t10k-labels-idx1-ubyte.gz\n2018-06-01 19:20:33.459019: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA\n2018-06-01 19:20:33.674933: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: \nname: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235\npciBusID: 813c:00:00.0\ntotalMemory: 11.17GiB freeMemory: 11.09GiB\n2018-06-01 19:20:33.674977: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 813c:00:00.0, compute capability: 3.7)\nstep 0, training accuracy 0.09375, test accuracy, 0.0958\nstep 100, training accuracy 0.953125, test accuracy, 0.9461\nstep 200, training accuracy 0.953125, test accuracy, 0.9594\nstep 300, training accuracy 0.953125, test accuracy, 0.9719\nstep 400, training accuracy 0.984375, test accuracy, 0.9787\nstep 500, training accuracy 0.96875, test accuracy, 0.9778\nstep 600, training accuracy 0.984375, test accuracy, 0.9806\nstep 700, training accuracy 0.96875, test accuracy, 0.9788\nstep 800, training accuracy 0.96875, test accuracy, 0.9819\nstep 900, training accuracy 0.984375, test accuracy, 0.9818\ntest accuracy 0.9836\nThe experiment completed successfully. Starting post-processing steps.\n\n\r", - "run_metrics": [ - { - "categories": [ - 0 - ], - "name": "learning_rate", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.001 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "minibatch_size", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 64 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "keep_probability", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.5 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "num_iterations", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 1000 - ] - } - ] - }, - { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "name": "Accuracy", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "uid": "5c86a1", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0.0957999974489212, - 0.9460999965667725, - 0.9593999981880188, - 0.9718999862670898, - 0.9786999821662903, - 0.9778000116348267, - 0.9805999994277954, - 0.9787999987602234, - 0.9818999767303467, - 0.9818000197410583, - 0.9836000204086304 - ] - } - ] - }, - { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "name": "Iterations", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "uid": "8867c0", - "x": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "y": [ - 0, - 100, - 200, - 300, - 400, - 500, - 600, - 700, - 800, - 900, - 1000 - ] - } - ] - } - ], - "run_properties": { - "additional_properties": {}, - "created_utc": "2018-06-01T19:06:18.159119", - "description": null, - "end_time_utc": "2018-06-01T19:21:08.302609", - "experiment_id": "54fc7a8b-21a4-4a10-8931-bd36c717c9b7", - "heartbeat_enabled": false, - "hidden": false, - "name": null, - "parent_run_id": null, - "properties": { - "Arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000", - "ContentSnapshotId": "67acb36c-e77e-44ae-b820-e6242b9909ab", - "azureml.runsource": "experiment" - }, - "root_run_id": "tensorflow-hyperdrive_1527879977658", - "run_id": "tensorflow-hyperdrive_1527879977658", - "run_number": 1, - "script_name": "tf_mnist_train.py", - "start_time_utc": "2018-06-01T19:19:31.364278", - "status": "Completed", - "tags": {}, - "target": "gpucluster", - "token": null, - "token_expiry_time_utc": null, - "user_id": "fb7d2bbf-2c54-46d7-8775-7e318644dd6b" - }, - "status": "Completed", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-notebooks%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2ws3/projects/tensorflow-hyperdrive/run-history/run-details/tensorflow-hyperdrive_1527879977658?type=user" - } - } - }, - "8a36279a14624bbdb1926c2572748861": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "bc94f0e90ff64d62a1ff1f84bc34803b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "cce84fe5e64141a0a69e0029ca3553a5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "LayoutModel", - "state": {} - }, - "d7a8a4fc54e4453fbc31d11604742430": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_contrib_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowRunDetailsView", - "layout": "IPY_MODEL_49be30037a73481a900026b30fc816eb", - "value": { - "child_runs": [], - "children_metrics": {}, - "run_id": "tensorflow-hyperdrive_1527879977658", - "run_logs": "Uploading experiment status to history service.\nAdding run profile attachment azureml-logs/80_driver_log.txt\nUploading experiment status to history service.\nAdding run profile attachment azureml-logs/60_control_log.txt\n\n\rUsing Spark's default log4j profile: org/apache/spark/log4j-defaults.properties\nSetting default log level to \"WARN\".\nTo adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n18/06/01 19:20:28 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n/azureml-envs/azureml_799f97443dc957270fd0268d825cda62/lib/python3.6/importlib/_bootstrap.py:205: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6\n return f(*args, **kwds)\nSuccessfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\nExtracting MNIST_data/train-images-idx3-ubyte.gz\nSuccessfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\nExtracting MNIST_data/train-labels-idx1-ubyte.gz\nSuccessfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\nExtracting MNIST_data/t10k-images-idx3-ubyte.gz\nSuccessfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\nExtracting MNIST_data/t10k-labels-idx1-ubyte.gz\n2018-06-01 19:20:33.459019: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA\n2018-06-01 19:20:33.674933: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: \nname: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235\npciBusID: 813c:00:00.0\ntotalMemory: 11.17GiB freeMemory: 11.09GiB\n2018-06-01 19:20:33.674977: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 813c:00:00.0, compute capability: 3.7)\nstep 0, training accuracy 0.09375, test accuracy, 0.0958\nstep 100, training accuracy 0.953125, test accuracy, 0.9461\nstep 200, training accuracy 0.953125, test accuracy, 0.9594\nstep 300, training accuracy 0.953125, test accuracy, 0.9719\nstep 400, training accuracy 0.984375, test accuracy, 0.9787\nstep 500, training accuracy 0.96875, test accuracy, 0.9778\nstep 600, training accuracy 0.984375, test accuracy, 0.9806\nstep 700, training accuracy 0.96875, test accuracy, 0.9788\nstep 800, training accuracy 0.96875, test accuracy, 0.9819\nstep 900, training accuracy 0.984375, test accuracy, 0.9818\ntest accuracy 0.9836\nThe experiment completed successfully. Starting post-processing steps.\n\n\r", - "run_metrics": [ - { - "categories": [ - 0 - ], - "name": "learning_rate", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.001 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "minibatch_size", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 64 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "keep_probability", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.5 - ] - } - ] - }, - { - "categories": [ - 0 - ], - "name": "num_iterations", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 1000 - ] - } - ] - }, - { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "name": "Accuracy", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0.0957999974489212, - 0.9460999965667725, - 0.9593999981880188, - 0.9718999862670898, - 0.9786999821662903, - 0.9778000116348267, - 0.9805999994277954, - 0.9787999987602234, - 0.9818999767303467, - 0.9818000197410583, - 0.9836000204086304 - ] - } - ] - }, - { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "name": "Iterations", - "run_id": "tensorflow-hyperdrive_1527879977658", - "series": [ - { - "data": [ - 0, - 100, - 200, - 300, - 400, - 500, - 600, - 700, - 800, - 900, - 1000 - ] - } - ] - } - ], - "run_properties": { - "additional_properties": {}, - "created_utc": "2018-06-01T19:06:18.159119", - "description": null, - "end_time_utc": "2018-06-01T19:21:08.302609", - "experiment_id": "54fc7a8b-21a4-4a10-8931-bd36c717c9b7", - "heartbeat_enabled": false, - "hidden": false, - "name": null, - "parent_run_id": null, - "properties": { - "Arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000", - "ContentSnapshotId": "67acb36c-e77e-44ae-b820-e6242b9909ab", - "azureml.runsource": "experiment" - }, - "root_run_id": "tensorflow-hyperdrive_1527879977658", - "run_id": "tensorflow-hyperdrive_1527879977658", - "run_number": 1, - "script_name": "tf_mnist_train.py", - "start_time_utc": "2018-06-01T19:19:31.364278", - "status": "Completed", - "tags": {}, - "target": "gpucluster", - "token": null, - "token_expiry_time_utc": null, - "user_id": "fb7d2bbf-2c54-46d7-8775-7e318644dd6b" - }, - "status": "Completed", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-notebooks%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2ws3/projects/tensorflow-hyperdrive/run-history/run-details/tensorflow-hyperdrive_1527879977658?type=user" - } - } - }, - "fd3e0717dec9444b881194f135b82853": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.0.0", - "model_name": "DOMWidgetModel", - "state": { - "_model_name": "DOMWidgetModel", - "_view_module": "azureml_contrib_widgets", - "_view_module_version": "^0.1.0", - "_view_name": "ShowHyperDriveRunsView", - "layout": "IPY_MODEL_bc94f0e90ff64d62a1ff1f84bc34803b", - "value": { - "child_runs": [ - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000852395056049516 --keep_probability 0.434530370965995", - "created_time": "2018-06-01 19:41:39.666220+00:00", - "created_time_dt": "2018-06-01T19:41:39.666220", - "duration": "0:00:57", - "end_time": "2018-06-01 19:42:37.511351+00:00", - "hyperdrive_id": "5488", - "metric": 0.9842000007629395, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5488_abbecb6c", - "run_number": 16, - "start_time": "2018-06-01 19:41:40.368621+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00179999057463703 --keep_probability 0.296515321882523", - "created_time": "2018-06-01 19:29:46.303636+00:00", - "created_time_dt": "2018-06-01T19:29:46.303636", - "duration": "0:02:03", - "end_time": "2018-06-01 19:31:50.043486+00:00", - "hyperdrive_id": "5469", - "metric": 0.9836999773979187, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5469_9f034e69", - "run_number": 10, - "start_time": "2018-06-01 19:29:47.033264+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000676904386677712 --keep_probability 0.4154535083569", - "created_time": "2018-06-01 19:50:31.651044+00:00", - "created_time_dt": "2018-06-01T19:50:31.651044", - "duration": "0:14:30", - "end_time": "2018-06-01 20:05:02.591649+00:00", - "hyperdrive_id": "5498", - "metric": 0.9828000068664551, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5498_32e0a249", - "run_number": 20, - "start_time": "2018-06-01 19:50:37.386350+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000586938713321222 --keep_probability 0.432942295536284", - "created_time": "2018-06-01 19:37:36.678691+00:00", - "created_time_dt": "2018-06-01T19:37:36.678691", - "duration": "0:01:46", - "end_time": "2018-06-01 19:39:23.211000+00:00", - "hyperdrive_id": "5479", - "metric": 0.9818000197410583, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5479_cb5037ed", - "run_number": 11, - "start_time": "2018-06-01 19:37:43.143211+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321696353537414 --keep_probability 0.446837800410634", - "created_time": "2018-06-01 19:41:39.915872+00:00", - "created_time_dt": "2018-06-01T19:41:39.915872", - "duration": "0:02:58", - "end_time": "2018-06-01 19:44:38.693923+00:00", - "hyperdrive_id": "5490", - "metric": 0.9812999963760376, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5490_cfcbcea1", - "run_number": 17, - "start_time": "2018-06-01 19:41:40.688804+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000598930751146987 --keep_probability 0.173175740602207", - "created_time": "2018-06-01 19:41:44.682554+00:00", - "created_time_dt": "2018-06-01T19:41:44.682554", - "duration": "0:01:54", - "end_time": "2018-06-01 19:43:38.690104+00:00", - "hyperdrive_id": "5491", - "metric": 0.9785000085830688, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5491_1ab60563", - "run_number": 18, - "start_time": "2018-06-01 19:41:45.356160+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00313856224079023 --keep_probability 0.308708329651949", - "created_time": "2018-06-01 19:29:46.140940+00:00", - "created_time_dt": "2018-06-01T19:29:46.140940", - "duration": "0:02:02", - "end_time": "2018-06-01 19:31:49.127224+00:00", - "hyperdrive_id": "5471", - "metric": 0.9764000177383423, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5471_05cdc17b", - "run_number": 8, - "start_time": "2018-06-01 19:29:46.876362+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000321079619657115 --keep_probability 0.166071686996525", - "created_time": "2018-06-01 19:26:11.468523+00:00", - "created_time_dt": "2018-06-01T19:26:11.468523", - "duration": "0:01:48", - "end_time": "2018-06-01 19:28:00.170666+00:00", - "hyperdrive_id": "5460", - "metric": 0.9703999757766724, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5460_0ff67ff3", - "run_number": 6, - "start_time": "2018-06-01 19:26:12.172473+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00970484525511844 --keep_probability 0.334371206847485", - "created_time": "2018-06-01 19:25:53.815492+00:00", - "created_time_dt": "2018-06-01T19:25:53.815492", - "duration": "0:02:07", - "end_time": "2018-06-01 19:28:01.507944+00:00", - "hyperdrive_id": "5457", - "metric": 0.968500018119812, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5457_a4c3a147", - "run_number": 4, - "start_time": "2018-06-01 19:26:08.553859+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00922621594789716 --keep_probability 0.227683838955561", - "created_time": "2018-06-01 19:37:36.835723+00:00", - "created_time_dt": "2018-06-01T19:37:36.835723", - "duration": "0:01:03", - "end_time": "2018-06-01 19:38:40.652773+00:00", - "hyperdrive_id": "5480", - "metric": 0.9663000106811523, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5480_f234fb08", - "run_number": 14, - "start_time": "2018-06-01 19:37:38.116439+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0155645426732787 --keep_probability 0.159123698168668", - "created_time": "2018-06-01 19:29:46.277531+00:00", - "created_time_dt": "2018-06-01T19:29:46.277531", - "duration": "0:01:09", - "end_time": "2018-06-01 19:30:55.727701+00:00", - "hyperdrive_id": "5472", - "metric": 0.964900016784668, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5472_23122c4b", - "run_number": 9, - "start_time": "2018-06-01 19:29:46.964148+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00838536088211458 --keep_probability 0.102478957268164", - "created_time": "2018-06-01 19:25:53.548553+00:00", - "created_time_dt": "2018-06-01T19:25:53.548553", - "duration": "0:01:05", - "end_time": "2018-06-01 19:26:59.136632+00:00", - "hyperdrive_id": "5459", - "metric": 0.9646999835968018, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5459_030491ad", - "run_number": 3, - "start_time": "2018-06-01 19:25:54.739654+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.000143958552086584 --keep_probability 0.273084377226789", - "created_time": "2018-06-01 19:29:46.057879+00:00", - "created_time_dt": "2018-06-01T19:29:46.057879", - "duration": "0:01:18", - "end_time": "2018-06-01 19:31:04.843202+00:00", - "hyperdrive_id": "5470", - "metric": 0.963699996471405, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5470_a648dbea", - "run_number": 7, - "start_time": "2018-06-01 19:29:46.780201+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.14051833348127E-05 --keep_probability 0.472685817381368", - "created_time": "2018-06-01 19:41:39.648602+00:00", - "created_time_dt": "2018-06-01T19:41:39.648602", - "duration": "0:03:06", - "end_time": "2018-06-01 19:44:45.699811+00:00", - "hyperdrive_id": "5489", - "metric": 0.9613000154495239, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5489_38907948", - "run_number": 15, - "start_time": "2018-06-01 19:41:40.512369+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.00737747352627753 --keep_probability 0.205239625544216", - "created_time": "2018-06-01 19:50:33.596963+00:00", - "created_time_dt": "2018-06-01T19:50:33.596963", - "duration": "0:01:51", - "end_time": "2018-06-01 19:52:25.281499+00:00", - "hyperdrive_id": "5497", - "metric": 0.9581999778747559, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5497_8130025b", - "run_number": 22, - "start_time": "2018-06-01 19:50:34.456850+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0211316024512922 --keep_probability 0.456008246140918", - "created_time": "2018-06-01 19:50:31.581841+00:00", - "created_time_dt": "2018-06-01T19:50:31.581841", - "duration": "0:01:03", - "end_time": "2018-06-01 19:51:35.272415+00:00", - "hyperdrive_id": "5499", - "metric": 0.9580000042915344, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5499_e0b5a73f", - "run_number": 19, - "start_time": "2018-06-01 19:50:32.786951+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 7.56451710371043E-05 --keep_probability 0.321364540919092", - "created_time": "2018-06-01 19:50:33.421674+00:00", - "created_time_dt": "2018-06-01T19:50:33.421674", - "duration": "0:06:27", - "end_time": "2018-06-01 19:57:00.982688+00:00", - "hyperdrive_id": "5496", - "metric": 0.9520000219345093, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5496_46a98c1f", - "run_number": 21, - "start_time": "2018-06-01 19:50:34.379782+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 6.86923046964849E-05 --keep_probability 0.229123758955098", - "created_time": "2018-06-01 19:37:36.816510+00:00", - "created_time_dt": "2018-06-01T19:37:36.816510", - "duration": "0:01:12", - "end_time": "2018-06-01 19:38:49.439465+00:00", - "hyperdrive_id": "5477", - "metric": 0.9483000040054321, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5477_c428bcf0", - "run_number": 13, - "start_time": "2018-06-01 19:37:42.971387+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.014609502490554 --keep_probability 0.480459935106515", - "created_time": "2018-06-01 19:26:10.258955+00:00", - "created_time_dt": "2018-06-01T19:26:10.258955", - "duration": "0:02:41", - "end_time": "2018-06-01 19:28:52.069673+00:00", - "hyperdrive_id": "5458", - "metric": 0.12110000103712082, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5458_3f73f0ac", - "run_number": 5, - "start_time": "2018-06-01 19:26:17.107379+00:00", - "status": "Completed" - }, - { - "arguments": "azureml-setup/context_manager_injector.py -i OutputCollection:context_managers.RunHistory -i DaskOnBatch:context_managers.DaskOnBatch tf_mnist_train.py --minibatch_size 64 --learning_rate 0.001 --keep_probability 0.5 --output_dir outputs --num_iterations 1000 --learning_rate 0.0149932664638274 --keep_probability 0.284424630578217", - "created_time": "2018-06-01 19:37:36.730460+00:00", - "created_time_dt": "2018-06-01T19:37:36.730460", - "duration": "0:01:08", - "end_time": "2018-06-01 19:38:44.881339+00:00", - "hyperdrive_id": "5478", - "metric": 0.11349999904632568, - "run_id": "tensorflow-hyperdrive_1527881081325_446_5478_24390740", - "run_number": 12, - "start_time": "2018-06-01 19:37:42.865594+00:00", - "status": "Completed" - } - ], - "children_metrics": { - "categories": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "metricName": "Accuracy", - "series": [ - { - "data": [ - 0.11159999668598175, - 0.8949000239372253, - 0.9286999702453613, - 0.9498999714851379, - 0.9539999961853027, - 0.953499972820282, - 0.9606999754905701, - 0.9613000154495239, - 0.9549999833106995, - 0.9646999835968018, - 0.9581999778747559 - ], - "mode": "lines", - "name": 3, - "run_id": 3, - "stepped": false - }, - { - "data": [ - 0.10109999775886536, - 0.8985999822616577, - 0.9424999952316284, - 0.9294999837875366, - 0.9545999765396118, - 0.9581000208854675, - 0.9616000056266785, - 0.9678999781608582, - 0.9661999940872192, - 0.9672999978065491, - 0.968500018119812 - ], - "mode": "lines", - "name": 4, - "run_id": 4, - "stepped": false - }, - { - "data": [ - 0.08980000019073486, - 0.8791999816894531, - 0.9261000156402588, - 0.9426000118255615, - 0.9501000046730042, - 0.9546999931335449, - 0.9573000073432922, - 0.963699996471405, - 0.965499997138977, - 0.9684000015258789, - 0.9703999757766724 - ], - "mode": "lines", - "name": 6, - "run_id": 6, - "stepped": false - }, - { - "data": [ - 0.12110000103712082, - 0.0982000008225441, - 0.11349999904632568, - 0.11349999904632568, - 0.10320000350475311, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568 - ], - "mode": "lines", - "name": 5, - "run_id": 5, - "stepped": false - }, - { - "data": [ - 0.14800000190734863, - 0.9146999716758728, - 0.9452999830245972, - 0.9506000280380249, - 0.9550999999046326, - 0.9584000110626221, - 0.9599000215530396, - 0.9621000289916992, - 0.964900016784668, - 0.9510999917984009, - 0.9624000191688538 - ], - "mode": "lines", - "name": 9, - "run_id": 9, - "stepped": false - }, - { - "data": [ - 0.08749999850988388, - 0.855400025844574, - 0.911300003528595, - 0.9289000034332275, - 0.9394999742507935, - 0.9431999921798706, - 0.9509999752044678, - 0.9553999900817871, - 0.9555000066757202, - 0.963699996471405, - 0.9616000056266785 - ], - "mode": "lines", - "name": 7, - "run_id": 7, - "stepped": false - }, - { - "data": [ - 0.11209999769926071, - 0.9466000199317932, - 0.9639000296592712, - 0.9722999930381775, - 0.9781000018119812, - 0.9800999760627747, - 0.9781000018119812, - 0.9814000129699707, - 0.9833999872207642, - 0.9836999773979187, - 0.9829000234603882 - ], - "mode": "lines", - "name": 10, - "run_id": 10, - "stepped": false - }, - { - "data": [ - 0.0949999988079071, - 0.8953999876976013, - 0.942300021648407, - 0.9513999819755554, - 0.9617000222206116, - 0.9564999938011169, - 0.9689000248908997, - 0.9688000082969666, - 0.9704999923706055, - 0.9760000109672546, - 0.9764000177383423 - ], - "mode": "lines", - "name": 8, - "run_id": 8, - "stepped": false - }, - { - "data": [ - 0.08950000256299973, - 0.9248999953269958, - 0.9545999765396118, - 0.9581000208854675, - 0.9559999704360962, - 0.9627000093460083, - 0.9642000198364258, - 0.9663000106811523, - 0.9585999846458435, - 0.963100016117096, - 0.9595999717712402 - ], - "mode": "lines", - "name": 14, - "run_id": 14, - "stepped": false - }, - { - "data": [ - 0.09629999846220016, - 0.11349999904632568, - 0.10279999673366547, - 0.10090000182390213, - 0.11349999904632568, - 0.11349999904632568, - 0.11349999904632568, - 0.10279999673366547, - 0.10279999673366547, - 0.11349999904632568, - 0.11349999904632568 - ], - "mode": "lines", - "name": 12, - "run_id": 12, - "stepped": false - }, - { - "data": [ - 0.13899999856948853, - 0.7547000050544739, - 0.8593000173568726, - 0.8981999754905701, - 0.9186999797821045, - 0.9254999756813049, - 0.934499979019165, - 0.9377999901771545, - 0.9431999921798706, - 0.9437999725341797, - 0.9483000040054321 - ], - "mode": "lines", - "name": 13, - "run_id": 13, - "stepped": false - }, - { - "data": [ - 0.10440000146627426, - 0.9383000135421753, - 0.9538999795913696, - 0.9664000272750854, - 0.9717000126838684, - 0.9760000109672546, - 0.9732999801635742, - 0.9779000282287598, - 0.9817000031471252, - 0.9818000197410583, - 0.9799000024795532 - ], - "mode": "lines", - "name": 11, - "run_id": 11, - "stepped": false - }, - { - "data": [ - 0.08869999647140503, - 0.9404000043869019, - 0.9574000239372253, - 0.9700999855995178, - 0.9715999960899353, - 0.979200005531311, - 0.9797000288963318, - 0.9812999963760376, - 0.9797999858856201, - 0.9817000031471252, - 0.9842000007629395 - ], - "mode": "lines", - "name": 16, - "run_id": 16, - "stepped": false - }, - { - "data": [ - 0.12210000306367874, - 0.917900025844574, - 0.9437999725341797, - 0.95660001039505, - 0.9646000266075134, - 0.9692000150680542, - 0.9707000255584717, - 0.9735999703407288, - 0.9781000018119812, - 0.9775999784469604, - 0.9785000085830688 - ], - "mode": "lines", - "name": 18, - "run_id": 18, - "stepped": false - }, - { - "data": [ - 0.11159999668598175, - 0.8270000219345093, - 0.9024999737739563, - 0.9175999760627747, - 0.9323999881744385, - 0.9368000030517578, - 0.9431999921798706, - 0.9506000280380249, - 0.9526000022888184, - 0.9584000110626221, - 0.9613000154495239 - ], - "mode": "lines", - "name": 15, - "run_id": 15, - "stepped": false - }, - { - "data": [ - 0.16419999301433563, - 0.9247999787330627, - 0.9431999921798706, - 0.9599000215530396, - 0.9674999713897705, - 0.9695000052452087, - 0.9765999913215637, - 0.9763000011444092, - 0.9779999852180481, - 0.9812999963760376, - 0.9789000153541565 - ], - "mode": "lines", - "name": 17, - "run_id": 17, - "stepped": false - }, - { - "data": [ - 0.1160999983549118, - 0.9366000294685364, - 0.9473000168800354, - 0.9552000164985657, - 0.95660001039505, - 0.9465000033378601, - 0.9575999975204468, - 0.9580000042915344, - 0.949999988079071, - 0.9520999789237976, - 0.9567999839782715 - ], - "mode": "lines", - "name": 19, - "run_id": 19, - "stepped": false - }, - { - "data": [ - 0.0949999988079071, - 0.8639000058174133, - 0.9139999747276306, - 0.9171000123023987, - 0.930899977684021, - 0.9441999793052673, - 0.9545999765396118, - 0.9560999870300293, - 0.9581999778747559, - 0.9539999961853027, - 0.9559000134468079 - ], - "mode": "lines", - "name": 22, - "run_id": 22, - "stepped": false - }, - { - "data": [ - 0.11500000208616257, - 0.789900004863739, - 0.8838000297546387, - 0.9072999954223633, - 0.9203000068664551, - 0.9312000274658203, - 0.9319000244140625, - 0.9434000253677368, - 0.9470999836921692, - 0.9477999806404114, - 0.9520000219345093 - ], - "mode": "lines", - "name": 21, - "run_id": 21, - "stepped": false - }, - { - "data": [ - 0.052000001072883606, - 0.9318000078201294, - 0.9584000110626221, - 0.9639999866485596, - 0.9710999727249146, - 0.9746999740600586, - 0.9768999814987183, - 0.9822999835014343, - 0.978600025177002, - 0.9801999926567078, - 0.9828000068664551 - ], - "mode": "lines", - "name": 20, - "run_id": 20, - "stepped": false - } - ], - "showLegend": true - }, - "run_id": "tensorflow-hyperdrive_1527881081325", - "run_logs": "", - "run_metrics": [], - "run_properties": { - "additional_properties": {}, - "created_utc": "2018-06-01T19:24:41.846775", - "description": null, - "end_time_utc": "2018-06-01T20:05:15.398835", - "experiment_id": "54fc7a8b-21a4-4a10-8931-bd36c717c9b7", - "heartbeat_enabled": false, - "hidden": false, - "name": "tensorflow-hyperdrive", - "parent_run_id": null, - "properties": { - "all_jobs_generated": "true", - "azureml.runsource": "hyperdrive", - "cancellation_requested": "false", - "generator_config": "{\"name\": \"RANDOM\", \"parameter_space\": {\"learning_rate\": [\"loguniform\", [-10, -3]], \"keep_probability\": [\"uniform\", [0.5, 0.1]]}}", - "is_hyperdrive_run": "true", - "max_concurrent_jobs": "4", - "max_duration_minutes": "43200", - "max_total_jobs": "20", - "policy_config": "{\"name\": \"BANDIT\", \"properties\": {\"slack_factor\": 0.15, \"evaluation_interval\": 2, \"delay_evaluation\": 0}}", - "primary_metric_config": "{\"name\": \"Accuracy\", \"goal\": \"maximize\"}", - "runTemplate": "HyperDrive" - }, - "root_run_id": "tensorflow-hyperdrive_1527881081325", - "run_id": "tensorflow-hyperdrive_1527881081325", - "run_number": 2, - "script_name": "tf_mnist_train.py", - "start_time_utc": null, - "status": "Completed", - "tags": {}, - "target": "gpucluster", - "token": null, - "token_expiry_time_utc": null, - "user_id": "fffc1c66-275f-4935-bb04-70a760c82fda" - }, - "status": "Completed", - "workbench_run_details_uri": "https://mlworkbench.azureml-test.net/home/%2Fsubscriptions%2Ffac34303-435d-4486-8c3f-7094d82a0b60%2FresourceGroups%2Faml-notebooks%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2Fhaieastus2ws3/projects/tensorflow-hyperdrive/run-history/run-details/tensorflow-hyperdrive_1527881081325?type=HyperDrive" - } - } - } - }, - "version_major": 2, - "version_minor": 0 - } - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_1.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_1.jpg deleted file mode 100644 index b709a206b..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_1.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_10.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_10.jpg deleted file mode 100644 index 40a9004c3..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_10.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_2.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_2.jpg deleted file mode 100644 index 4fbc86a06..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_2.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_3.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_3.jpg deleted file mode 100644 index 29e336c7c..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_3.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_4.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_4.jpg deleted file mode 100644 index 49773f93a..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_4.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_5.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_5.jpg deleted file mode 100644 index 168772f87..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_5.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_6.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_6.jpg deleted file mode 100644 index b53650d3f..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_6.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_7.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_7.jpg deleted file mode 100644 index 0eba1bd22..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_7.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_8.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_8.jpg deleted file mode 100644 index 952318928..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_8.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_9.jpg b/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_9.jpg deleted file mode 100644 index 9fcfdc1d5..000000000 Binary files a/01.getting-started/08.hyperdrive-with-TensorFlow/mnist_test_images/img_9.jpg and /dev/null differ diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/tf_mnist_score.py b/01.getting-started/08.hyperdrive-with-TensorFlow/tf_mnist_score.py deleted file mode 100644 index ba80bd364..000000000 --- a/01.getting-started/08.hyperdrive-with-TensorFlow/tf_mnist_score.py +++ /dev/null @@ -1,103 +0,0 @@ -from __future__ import print_function -import tensorflow as tf -import numpy as np -import os -import json -import base64 -from io import BytesIO -from PIL import Image - -############################################## -# helper functions -############################################## - - -def build_model(x, y_, keep_prob): - def weight_variable(shape): - initial = tf.truncated_normal(shape, stddev=0.1) - return tf.Variable(initial) - - def bias_variable(shape): - initial = tf.constant(0.1, shape=shape) - return tf.Variable(initial) - - def conv2d(x, W): - return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') - - def max_pool_2x2(x): - return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') - - W_conv1 = weight_variable([5, 5, 1, 32]) - b_conv1 = bias_variable([32]) - - x_image = tf.reshape(x, [-1, 28, 28, 1]) - - h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) - h_pool1 = max_pool_2x2(h_conv1) - - W_conv2 = weight_variable([5, 5, 32, 64]) - b_conv2 = bias_variable([64]) - - h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) - h_pool2 = max_pool_2x2(h_conv2) - - W_fc1 = weight_variable([7 * 7 * 64, 1024]) - b_fc1 = bias_variable([1024]) - - h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64]) - h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) - - h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) - - W_fc2 = weight_variable([1024, 10]) - b_fc2 = bias_variable([10]) - - y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 - - return y_conv - - -def base64ToImg(base64ImgString): - if base64ImgString.startswith('b\''): - base64ImgString = base64ImgString[2:-1] - base64Img = base64ImgString.encode('utf-8') - decoded_img = base64.b64decode(base64Img) - img_buffer = BytesIO(decoded_img) - img = Image.open(img_buffer) - return img - -############################################## -# API init() and run() methods -############################################## - - -def init(): - global x, keep_prob, y_conv, sess - g = tf.Graph() - with g.as_default(): - x = tf.placeholder(tf.float32, shape=[None, 784]) - y_ = tf.placeholder(tf.float32, shape=[None, 10]) - keep_prob = tf.placeholder(tf.float32) - y_conv = build_model(x, y_, keep_prob) - - saver = tf.train.Saver() - init_op = tf.global_variables_initializer() - - model_dir = os.path.join('sample_projects', 'outputs') - saved_model_path = os.path.join(model_dir, 'model.ckpt') - - sess = tf.Session(graph=g) - sess.run(init_op) - saver.restore(sess, saved_model_path) - - -def run(input_data): - img = base64ToImg(json.loads(input_data)['data']) - img_data = np.array(img, dtype=np.float32).flatten() - img_data.resize((1, 784)) - - y_pred = sess.run(y_conv, feed_dict={x: img_data, keep_prob: 1.0}) - predicted_label = np.argmax(y_pred[0]) - - outJsonString = json.dumps({"label": str(predicted_label)}) - return str(outJsonString) diff --git a/01.getting-started/08.hyperdrive-with-TensorFlow/tf_mnist_train.py b/01.getting-started/08.hyperdrive-with-TensorFlow/tf_mnist_train.py deleted file mode 100644 index f8a6c8919..000000000 --- a/01.getting-started/08.hyperdrive-with-TensorFlow/tf_mnist_train.py +++ /dev/null @@ -1,151 +0,0 @@ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import tensorflow as tf -# Load MNIST Data -from tensorflow.examples.tutorials.mnist import input_data -import os -import argparse - -from azureml.core.run import Run - -# the following 10 lines can be removed once BUG# 241943 is fixed - - -def get_logger(): - try: - return Run.get_submitted_run() - except Exception: - return LocalLogger() - - -class LocalLogger: - def log(self, key, value): - print("AML-Log:", key, value) - - -def build_model(x, y_, keep_prob): - def weight_variable(shape): - initial = tf.truncated_normal(shape, stddev=0.1) - return tf.Variable(initial) - - def bias_variable(shape): - initial = tf.constant(0.1, shape=shape) - return tf.Variable(initial) - - def conv2d(x, W): - return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') - - def max_pool_2x2(x): - return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') - - W_conv1 = weight_variable([5, 5, 1, 32]) - b_conv1 = bias_variable([32]) - - x_image = tf.reshape(x, [-1, 28, 28, 1]) - - h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) - h_pool1 = max_pool_2x2(h_conv1) - - W_conv2 = weight_variable([5, 5, 32, 64]) - b_conv2 = bias_variable([64]) - - h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) - h_pool2 = max_pool_2x2(h_conv2) - - W_fc1 = weight_variable([7 * 7 * 64, 1024]) - b_fc1 = bias_variable([1024]) - - h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64]) - h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) - - h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) - - W_fc2 = weight_variable([1024, 10]) - b_fc2 = bias_variable([10]) - - y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 - - return y_conv - - -def main(): - # Get command-line arguments - parser = argparse.ArgumentParser() - parser.add_argument('--learning_rate', type=float, - default=0.0001, help='learning rate') - parser.add_argument('--minibatch_size', type=int, - default=50, help='minibatch size') - parser.add_argument('--keep_probability', type=float, - default=0.5, help='keep probability for dropout layer') - parser.add_argument('--num_iterations', type=int, - default=1000, help='number of iterations') - parser.add_argument('--output_dir', type=str, default='./outputs', - help='output directory to write checkpoints to') - - args = parser.parse_args() - - # log parameters - run_logger = get_logger() - run_logger.log("learning_rate", args.learning_rate) - run_logger.log("minibatch_size", args.minibatch_size) - run_logger.log("keep_probability", args.keep_probability) - run_logger.log("num_iterations", args.num_iterations) - - # Load MNIST data - mnist = input_data.read_data_sets('MNIST_data', one_hot=True) - - sess = tf.InteractiveSession() - - x = tf.placeholder(tf.float32, shape=[None, 784]) - y_ = tf.placeholder(tf.float32, shape=[None, 10]) - keep_prob = tf.placeholder(tf.float32) - - y_conv = build_model(x, y_, keep_prob) - - cross_entropy = tf.reduce_mean( - tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv)) - - train_step = tf.train.AdamOptimizer( - args.learning_rate).minimize(cross_entropy) - correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1)) - - accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) - sess.run(tf.global_variables_initializer()) - - for i in range(args.num_iterations): - batch = mnist.train.next_batch(args.minibatch_size) - if i % 100 == 0: - test_acc = accuracy.eval( - feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}) - train_accuracy = accuracy.eval( - feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0}) - print("step %d, training accuracy %g, test accuracy, %g" % - (i, train_accuracy, test_acc)) - - # log test accuracy to AML - run_logger.log("Accuracy", float(test_acc)) - run_logger.log("Iterations", i) - - sess.run(train_step, feed_dict={ - x: batch[0], y_: batch[1], keep_prob: args.keep_probability}) - - # Save the trained model - model_dir = args.output_dir - model_file = 'model.ckpt' - - os.makedirs(model_dir, exist_ok=True) - - saver = tf.train.Saver() - saver.save(sess, os.path.join(model_dir, model_file)) - - final_test_acc = sess.run(accuracy, feed_dict={ - x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}) - run_logger.log("Accuracy", float(final_test_acc)) - run_logger.log("Iterations", args.num_iterations) - print("test accuracy %g" % final_test_acc) - - -if __name__ == "__main__": - main() diff --git a/01.getting-started/10.register-model-create-image-deploy-service/10.register-model-create-image-deploy-service.ipynb b/01.getting-started/10.register-model-create-image-deploy-service/10.register-model-create-image-deploy-service.ipynb index c6fd8468c..7b86ca09f 100644 --- a/01.getting-started/10.register-model-create-image-deploy-service/10.register-model-create-image-deploy-service.ipynb +++ b/01.getting-started/10.register-model-create-image-deploy-service/10.register-model-create-image-deploy-service.ipynb @@ -130,8 +130,8 @@ "outputs": [], "source": [ "regression_models = ws.models(tags=['area'])\n", - "for m in regression_models:\n", - " print(\"Name:\", m.name,\"\\tVersion:\", m.version, \"\\tDescription:\", m.description, m.tags)" + "for name, m in regression_models.items():\n", + " print(\"Name:\", name,\"\\tVersion:\", m.version, \"\\tDescription:\", m.description, m.tags)" ] }, { diff --git a/01.getting-started/12.enable-data-collection-for-models-in-aks/12.enable-data-collection-for-models-in-aks.ipynb b/01.getting-started/12.enable-data-collection-for-models-in-aks/12.enable-data-collection-for-models-in-aks.ipynb index 507a6a042..8baa8db50 100644 --- a/01.getting-started/12.enable-data-collection-for-models-in-aks/12.enable-data-collection-for-models-in-aks.ipynb +++ b/01.getting-started/12.enable-data-collection-for-models-in-aks/12.enable-data-collection-for-models-in-aks.ipynb @@ -1,14 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -90,8 +81,8 @@ "source": [ "#Register the model\n", "from azureml.core.model import Model\n", - "model = Model.register(model_path = 'sklearn_regression_model.pkl', # this points to a local file\n", - " model_name = \"best_model\", # this is the name the model is registered as\n", + "model = Model.register(model_path = \"sklearn_regression_model.pkl\", # this points to a local file\n", + " model_name = \"sklearn_regression_model.pkl\", # this is the name the model is registered as\n", " tags = {'area': \"diabetes\", 'type': \"regression\"},\n", " description = \"Ridge regression model to predict diabetes\",\n", " workspace = ws)\n", @@ -103,22 +94,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 4. Update your scoring file with Data Collection\n", + "## 4. *Update your scoring file with Data Collection*\n", "The file below, compared to the file used in notebook 11, has the following changes:\n", "### a. Import the module\n", - " from azureml.monitoring import ModelDataCollector \n", + "```python \n", + "from azureml.monitoring import ModelDataCollector```\n", "### b. In your init function add:\n", - " global inputs_dc, prediction_d\n", - " inputs_dc = ModelDataCollector(\"best_model\", identifier=\"inputs\", feature_names=[\"feat1\", \"feat2\", \"feat3\". \"feat4\", \"feat5\", \"Feat6\"])\n", - " prediction_dc = ModelDataCollector(\"best_model\", identifier=\"predictions\", feature_names=[\"prediction1\", \"prediction2\"])\n", + "```python \n", + "global inputs_dc, prediction_d\n", + "inputs_dc = ModelDataCollector(\"best_model\", identifier=\"inputs\", feature_names=[\"feat1\", \"feat2\", \"feat3\". \"feat4\", \"feat5\", \"Feat6\"])\n", + "prediction_dc = ModelDataCollector(\"best_model\", identifier=\"predictions\", feature_names=[\"prediction1\", \"prediction2\"])```\n", " \n", "* Identifier: Identifier is later used for building the folder structure in your Blob, it can be used to divide “raw” data versus “processed”.\n", "* CorrelationId: is an optional parameter, you do not need to set it up if your model doesn’t require it. Having a correlationId in place does help you for easier mapping with other data. (Examples include: LoanNumber, CustomerId, etc.)\n", "* Feature Names: These need to be set up in the order of your features in order for them to have column names when the .csv is created.\n", "\n", "### c. In your run function add:\n", - " inputs_dc.collect(data)\n", - " prediction_dc.collect(result) " + "```python\n", + "inputs_dc.collect(data)\n", + "prediction_dc.collect(result)```" ] }, { @@ -130,7 +124,7 @@ "%%writefile score.py\n", "import pickle\n", "import json\n", - "import numpy as np\n", + "import numpy \n", "from sklearn.externals import joblib\n", "from sklearn.linear_model import Ridge\n", "from azureml.core.model import Model\n", @@ -139,31 +133,33 @@ "\n", "def init():\n", " global model\n", - " #print (\"model initialized\" + time.strftime(\"%H:%M:%S\"))\n", - " # note here \"best_model\" is the name of the model registered under the workspace\n", + " print (\"model initialized\" + time.strftime(\"%H:%M:%S\"))\n", + " # note here \"sklearn_regression_model.pkl\" is the name of the model registered under the workspace\n", " # this call should return the path to the model.pkl file on the local disk.\n", - " model_path = Model.get_model_path(model_name = 'best_model')\n", + " model_path = Model.get_model_path(model_name = 'sklearn_regression_model.pkl')\n", " # deserialize the model file back into a sklearn model\n", " model = joblib.load(model_path)\n", " global inputs_dc, prediction_dc\n", " # this setup will help us save our inputs under the \"inputs\" path in our Azure Blob\n", - " inputs_dc = ModelDataCollector(model_name=\"best_model\", identifier=\"inputs\", feature_names=[\"feat1\", \"feat2\", \"feat3\",\"feat4\", \"feat5\",\"feat6\"]) \n", + " inputs_dc = ModelDataCollector(model_name=\"sklearn_regression_model\", identifier=\"inputs\", feature_names=[\"feat1\", \"feat2\"]) \n", " # this setup will help us save our ipredictions under the \"predictions\" path in our Azure Blob\n", - " prediction_dc = ModelDataCollector(\"best_model\", identifier=\"predictions\", feature_names=[\"prediction1\", \"prediction2\"]) \n", + " prediction_dc = ModelDataCollector(\"sklearn_regression_model\", identifier=\"predictions\", feature_names=[\"prediction1\", \"prediction2\"]) \n", " \n", "# note you can pass in multiple rows for scoring\n", "def run(raw_data):\n", " global inputs_dc, prediction_dc\n", " try:\n", " data = json.loads(raw_data)['data']\n", - " data = np.array(data)\n", + " data = numpy.array(data)\n", " result = model.predict(data)\n", + " print (\"saving input data\" + time.strftime(\"%H:%M:%S\"))\n", " inputs_dc.collect(data) #this call is saving our input data into our blob\n", " prediction_dc.collect(result)#this call is saving our prediction data into our blob\n", + " print (\"saving prediction data\" + time.strftime(\"%H:%M:%S\"))\n", " return json.dumps({\"result\": result.tolist()})\n", " except Exception as e:\n", " result = str(e)\n", - " #print (result + time.strftime(\"%H:%M:%S\"))\n", + " print (result + time.strftime(\"%H:%M:%S\"))\n", " return json.dumps({\"error\": result})" ] }, @@ -171,7 +167,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 5. Update your myenv.yml file with the required module" + "## 5. *Update your myenv.yml file with the required module*" ] }, { @@ -180,18 +176,13 @@ "metadata": {}, "outputs": [], "source": [ - "%%writefile myenv.yml\n", - "name: myenv\n", - "channels:\n", - " - defaults\n", - "dependencies:\n", - " - pip:\n", - " - numpy\n", - " - scikit-learn\n", - " # Required packages for AzureML execution, history, and data preparation.\n", - " - --extra-index-url https://azuremlsdktestpypi.azureedge.net/sdk-release/Preview/E7501C02541B433786111FE8E140CAA1\n", - " - azureml-core\n", - " - azureml-monitoring" + "from azureml.core.conda_dependencies import CondaDependencies \n", + "\n", + "myenv = CondaDependencies.create(conda_packages=['numpy','scikit-learn'])\n", + "myenv.add_pip_package(\"azureml-monitoring\")\n", + "\n", + "with open(\"myenv.yml\",\"w\") as f:\n", + " f.write(myenv.serialize_to_string())" ] }, { @@ -238,9 +229,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 7. Deploy to AKS service\n", - "For this step you would need to have an AKS cluster setup (Notebook 11).\n", - "In this case we are attaching to a previously created service" + "## 7. Deploy to AKS service" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create AKS compute if you haven't done so (Notebook 11)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Use the default configuration (can also provide parameters to customize)\n", + "prov_config = AksCompute.provisioning_configuration()\n", + "\n", + "aks_name = 'my-aks-test1' \n", + "# Create the cluster\n", + "aks_target = ComputeTarget.create(workspace = ws, \n", + " name = aks_name, \n", + " provisioning_configuration = prov_config)" ] }, { @@ -250,20 +262,40 @@ "outputs": [], "source": [ "%%time\n", - "resource_id = '/subscriptions/92c76a2f-0e1c-4216-b65e-abf7a3f34c1e/resourcegroups/marthateresource_groupjw/providers/Microsoft.ContainerService/managedClusters/my-aks-colfb348092fd3a760'\n", - "create_name= 'my-existing-aks'\n", - "aks_target = AksCompute.attach(workspace = ws, \n", - " name = create_name, \n", - " resource_id=resource_id)\n", - "# Wait for the operation to complete\n", - "aks_target.wait_for_completion(True)" + "aks_target.wait_for_completion(show_output = True)\n", + "print(aks_target.provisioning_state)\n", + "print(aks_target.provisioning_errors)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you already have a cluster you can attach the service to it:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "scrolled": true + }, + "source": [ + "```python \n", + " %%time\n", + " resource_id = '/subscriptions//resourcegroups//providers/Microsoft.ContainerService/managedClusters/'\n", + " create_name= 'myaks4'\n", + " aks_target = AksCompute.attach(workspace = ws, \n", + " name = create_name, \n", + " #esource_id=resource_id)\n", + " ## Wait for the operation to complete\n", + " aks_target.wait_for_provisioning(True)```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### a. Activate Data Collection and App Insights\n", + "### a. *Activate Data Collection and App Insights through updating AKS Webservice configuration*\n", "In order to enable Data Collection and App Insights in your service you will need to update your AKS configuration file:" ] }, @@ -273,7 +305,7 @@ "metadata": {}, "outputs": [], "source": [ - "#Set the web service configuration (using default here)\n", + "#Set the web service configuration\n", "aks_config = AksWebservice.deploy_configuration(collect_model_data=True, enable_app_insights=True)" ] }, @@ -291,7 +323,7 @@ "outputs": [], "source": [ "%%time\n", - "aks_service_name ='aks-w-collv5'\n", + "aks_service_name ='aks-w-dc2'\n", "\n", "aks_service = Webservice.deploy_from_image(workspace = ws, \n", " name = aks_service_name,\n", @@ -300,7 +332,7 @@ " deployment_target = aks_target\n", " )\n", "aks_service.wait_for_deployment(show_output = True)\n", - "print(aks_service.state)\n" + "print(aks_service.state)" ] }, { @@ -333,28 +365,12 @@ "print(prediction)" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "test_sample = json.dumps({'data': [\n", - " [1,22,3,4,5,68,7,98,95,310], \n", - " [10,92,8,7,6,53,84,23,323,1]\n", - "]})\n", - "test_sample = bytes(test_sample,encoding = 'utf8')\n", - "\n", - "prediction = aks_service.run(input_data = test_sample)\n", - "print(prediction)" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 9. Validate you data and analyze it\n", - "You can look into your data following this path format in your Azure Blob:\n", + "You can look into your data following this path format in your Azure Blob (it takes up to 15 minutes for the data to appear):\n", "\n", "/modeldata/**subscriptionid>**/**resourcegroupname>**/**workspacename>**/**webservicename>**/**modelname>**/**modelversion>>**/**identifier>**/*year/month/day*/data.csv \n", "\n", @@ -365,13 +381,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### a. Create DataBricks cluster and connect it to your blob\n", + "### a. Create DataBricks cluter and connect it to your blob\n", "https://docs.microsoft.com/en-us/azure/azure-databricks/quickstart-create-databricks-workspace-portal or in your databricks workspace you can look for the template \"Azure Blob Storage Import Example Notebook\".\n", "\n", "\n", "Here is an example for setting up the file location to extract the relevant data:\n", "\n", - " file_location = \"wasbs://mycontainer@testmartstoragendbblgwy.blob.core.windows.net/unknown/unknown/unknown-bigdataset-unknown/my_iterate_parking_inputs/2018/°/°/data.csv\" \n", + " file_location = \"wasbs://mycontainer@storageaccountname.blob.core.windows.net/unknown/unknown/unknown-bigdataset-unknown/my_iterate_parking_inputs/2018/°/°/data.csv\" \n", "file_type = \"csv\"\n" ] }, @@ -405,20 +421,13 @@ "source": [ "aks_service.update(collect_model_data=False)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python [conda env:myenv3]", "language": "python", - "name": "python3" + "name": "conda-env-myenv3-py" }, "language_info": { "codemirror_mode": { @@ -430,7 +439,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.6.6" } }, "nbformat": 4, diff --git a/automl/00.configuration.ipynb b/automl/00.configuration.ipynb index a499ddb15..9a847daed 100644 --- a/automl/00.configuration.ipynb +++ b/automl/00.configuration.ipynb @@ -118,8 +118,7 @@ "* A name for your workspace. You can choose one.\n", "* Your subscription id. Use *id* value from *az account show* output above. \n", "* The resource group name. Resource group organizes Azure resources and provides default region for the resources in the group. You can either specify a new one, in which case it gets created for your Workspace, or use an existing one or create a new one from [Azure portal](https://portal.azure.com)\n", - "\n", - "Please these values below. For workspace region, we prefer you use `eastus2` or `eastus2euap` (only if you have access to EUAP) for most scenarios. Other supported regions include `westcentralus`, `southeastasia`, `westeurope`, `australiaeast`, although their support might lag behind `eastus2` and `eastus2euap`." + "* Supported regions include `eastus2`, `eastus`,`westcentralus`, `southeastasia`, `westeurope`, `australiaeast`, `westus2`, `southcentralus`." ] }, { @@ -131,7 +130,7 @@ "subscription_id = \"\"\n", "resource_group = \"myrg\"\n", "workspace_name = \"myws\"\n", - "workspace_region = \"eastus2\" # or eastus2euap" + "workspace_region = \"eastus2\"" ] }, { diff --git a/automl/01.auto-ml-classification.ipynb b/automl/01.auto-ml-classification.ipynb index 3984534a4..79cbd4616 100644 --- a/automl/01.auto-ml-classification.ipynb +++ b/automl/01.auto-ml-classification.ipynb @@ -15,7 +15,7 @@ "source": [ "# AutoML 01: Classification with local compute\n", "\n", - "In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use the AutoML Classifier for a simple classification problem.\n", + "In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use AutoML for a simple classification problem.\n", "\n", "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", "\n", @@ -143,8 +143,8 @@ "|-|-|\n", "|**task**|classification or regression|\n", "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML trains the data with a specific pipeline|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data |\n", "|**n_cross_validations**|Number of cross validation splits|\n", "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers. |\n", @@ -160,7 +160,7 @@ "automl_config = AutoMLConfig(task = 'classification',\n", " debug_log = 'automl_errors.log',\n", " primary_metric = 'AUC_weighted',\n", - " max_time_sec = 12000,\n", + " max_time_sec = 3600,\n", " iterations = 50,\n", " n_cross_validations = 3,\n", " verbosity = logging.INFO,\n", @@ -314,7 +314,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Best Model based on any iteration\n", + "#### Model from a specific iteration\n", "Give me the run and the model from the 3rd iteration:" ] }, @@ -325,9 +325,9 @@ "outputs": [], "source": [ "iteration = 3\n", - "best_run, fitted_model = local_run.get_output(iteration = iteration)\n", - "print(best_run)\n", - "print(fitted_model)" + "third_run, third_model = local_run.get_output(iteration = iteration)\n", + "print(third_run)\n", + "print(third_model)" ] }, { diff --git a/automl/02.auto-ml-regression.ipynb b/automl/02.auto-ml-regression.ipynb index 92b86c5fc..c5e1ef05e 100644 --- a/automl/02.auto-ml-regression.ipynb +++ b/automl/02.auto-ml-regression.ipynb @@ -15,7 +15,7 @@ "source": [ "# AutoML 02: Regression with local compute\n", "\n", - "In this example we use the scikit learn's [diabetes dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) to showcase how you can use the AutoML for a simple regression problem.\n", + "In this example we use the scikit learn's [diabetes dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) to showcase how you can use AutoML for a simple regression problem.\n", "\n", "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", "\n", @@ -128,7 +128,7 @@ "\n", "columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']\n", "\n", - "x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)" + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)" ] }, { @@ -143,8 +143,8 @@ "|-|-|\n", "|**task**|classification or regression|\n", "|**primary_metric**|This is the metric that you want to optimize.
Regression supports the following primary metrics
spearman_correlation
normalized_root_mean_squared_error
r2_score
normalized_mean_absolute_error
normalized_root_mean_squared_log_error|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML Classifier trains the data with a specific pipeline|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data|\n", "|**n_cross_validations**|Number of cross validation splits|\n", "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers. |\n", @@ -164,7 +164,7 @@ " n_cross_validations = 5,\n", " debug_log = 'automl.log',\n", " verbosity = logging.INFO,\n", - " X = x_train, \n", + " X = X_train, \n", " y = y_train,\n", " path=project_folder)" ] @@ -295,7 +295,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Best Model based on any iteration\n", + "#### Model from a specific iteration\n", + "\n", "Simply show the run and model from the 3rd iteration:" ] }, @@ -311,25 +312,6 @@ "print(third_model)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Register fitted model for deployment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "description = 'AutoML Model'\n", - "tags = None\n", - "local_run.register_model(description = description, tags = tags)\n", - "print(local_run.model_id) # Use this id to deploy the model as a web service in Azure" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -350,10 +332,10 @@ "metadata": {}, "outputs": [], "source": [ - "y_pred_train = fitted_model.predict(x_train)\n", + "y_pred_train = fitted_model.predict(X_train)\n", "y_residual_train = y_train - y_pred_train\n", "\n", - "y_pred_test = fitted_model.predict(x_test)\n", + "y_pred_test = fitted_model.predict(X_test)\n", "y_residual_test = y_test - y_pred_test" ] }, @@ -380,7 +362,7 @@ "a0.plot(y_residual_train, 'bo', alpha = 0.5)\n", "a0.plot([-10,360],[0,0], 'r-', lw = 3)\n", "a0.text(16,170,'RMSE = {0:.2f}'.format(np.sqrt(mean_squared_error(y_train, y_pred_train))), fontsize = 12)\n", - "a0.text(16,140,'Variance = {0:.2f}'.format(r2_score(y_train, y_pred_train)), fontsize = 12)\n", + "a0.text(16,140,'R2 score = {0:.2f}'.format(r2_score(y_train, y_pred_train)), fontsize = 12)\n", "a0.set_xlabel('Training samples', fontsize = 12)\n", "a0.set_ylabel('Residual Values', fontsize = 12)\n", "# plot histogram\n", @@ -392,7 +374,7 @@ "a1.plot(y_residual_test, 'bo', alpha = 0.5)\n", "a1.plot([-10,360],[0,0], 'r-', lw = 3)\n", "a1.text(5,170,'RMSE = {0:.2f}'.format(np.sqrt(mean_squared_error(y_test, y_pred_test))), fontsize = 12)\n", - "a1.text(5,140,'Variance = {0:.2f}'.format(r2_score(y_test, y_pred_test)), fontsize = 12)\n", + "a1.text(5,140,'R2 score = {0:.2f}'.format(r2_score(y_test, y_pred_test)), fontsize = 12)\n", "a1.set_xlabel('Test samples', fontsize = 12)\n", "a1.set_yticklabels([])\n", "# plot histogram\n", diff --git a/automl/03.auto-ml-remote-execution.ipynb b/automl/03.auto-ml-remote-execution.ipynb index 2130b049b..863469354 100644 --- a/automl/03.auto-ml-remote-execution.ipynb +++ b/automl/03.auto-ml-remote-execution.ipynb @@ -15,7 +15,7 @@ "source": [ "# AutoML 03: Remote Execution using DSVM (Ubuntu)\n", "\n", - "In this example we use the scikit learn's [diabetes dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) to showcase how you can use the AutoML Classifier for a simple classification problem.\n", + "In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use AutoML for a simple classification problem.\n", "\n", "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", "\n", @@ -194,8 +194,8 @@ "|Property|Description|\n", "|-|-|\n", "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML Classifier trains the data with a specific pipeline|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data|\n", "|**n_cross_validations**|Number of cross validation splits|\n", "|**concurrent_iterations**|Max number of iterations that would be executed in parallel. This should be less than the number of cores on the DSVM." ] @@ -220,7 +220,7 @@ " debug_log = 'automl_errors.log',\n", " path=project_folder, \n", " compute_target = dsvm_compute,\n", - " data_script = project_folder + \"./get_data.py\",\n", + " data_script = project_folder + \"/get_data.py\",\n", " **automl_settings\n", " )\n" ] @@ -383,7 +383,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Best Model based on any iteration\n", + "#### Model from a specific iteration\n", "Show the run and model from the 3rd iteration." ] }, @@ -399,25 +399,6 @@ "print(third_model)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Register fitted model for deployment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "description = 'AutoML Model'\n", - "tags = None\n", - "remote_run.register_model(description=description, tags=tags)\n", - "remote_run.model_id # Use this id to deploy the model as a web service in Azure" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -464,13 +445,6 @@ " plt.imshow(images[index], cmap=plt.cm.gray_r, interpolation='nearest')\n", " plt.show()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/automl/03b.auto-ml-remote-batchai.ipynb b/automl/03b.auto-ml-remote-batchai.ipynb index 8fc93fca9..567125cd7 100644 --- a/automl/03b.auto-ml-remote-batchai.ipynb +++ b/automl/03b.auto-ml-remote-batchai.ipynb @@ -15,7 +15,7 @@ "source": [ "# AutoML 03: Remote Execution using Batch AI\n", "\n", - "In this example we use the scikit learn's [diabetes dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) to showcase how you can use the AutoML Classifier for a simple classification problem.\n", + "In this example we use the scikit learn's [diabetes dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) to showcase how you can use AutoML for a simple classification problem.\n", "\n", "Make sure you have executed the [setup](setup.ipynb) before running this notebook.\n", "\n", @@ -217,8 +217,8 @@ "|Property|Description|\n", "|-|-|\n", "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML Classifier trains the data with a specific pipeline|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data|\n", "|**n_cross_validations**|Number of cross validation splits|\n", "|**concurrent_iterations**|Max number of iterations that would be executed in parallel. This should be less than the number of cores on the DSVM." ] @@ -243,7 +243,7 @@ " debug_log = 'automl_errors.log',\n", " path=project_folder,\n", " compute_target = compute_target,\n", - " data_script = project_folder + \"./get_data.py\",\n", + " data_script = project_folder + \"/get_data.py\",\n", " **automl_settings\n", " )\n" ] @@ -408,7 +408,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Best Model based on any iteration\n", + "#### Model from a specific iteration\n", "Show the run and model from the 3rd iteration." ] }, diff --git a/automl/04.auto-ml-remote-execution-text-data-blob-store.ipynb b/automl/04.auto-ml-remote-execution-text-data-blob-store.ipynb index 17f5f236e..10d90e89b 100644 --- a/automl/04.auto-ml-remote-execution-text-data-blob-store.ipynb +++ b/automl/04.auto-ml-remote-execution-text-data-blob-store.ipynb @@ -15,7 +15,7 @@ "source": [ "# Auto ML : Remote Execution with Text data from Blobstorage\n", "\n", - "In this example we use the [Burning Man 2016 dataset](https://innovate.burningman.org/datasets-page/) to showcase how you can use the AutoML Classifier to handle text data from a Azure blobstorage.\n", + "In this example we use the [Burning Man 2016 dataset](https://innovate.burningman.org/datasets-page/) to showcase how you can use AutoML to handle text data from a Azure blobstorage.\n", "\n", "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", "\n", @@ -227,11 +227,11 @@ "|Property|Description|\n", "|-|-|\n", "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML Classifier trains the data with a specific pipeline|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data|\n", "|**n_cross_validations**|Number of cross validation splits|\n", "|**concurrent_iterations**|Max number of iterations that would be executed in parallel. This should be less than the number of cores on the DSVM\n", - "|**preprocess**| *True/False*
Setting this to *True* enables Auto ML Classifier to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*|\n", + "|**preprocess**| *True/False*
Setting this to *True* enables AutoML to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*|\n", "|**max_cores_per_iteration**| Indicates how many cores on the compute target would be used to train a single pipeline.
Default is *1*, you can set it to *-1* to use all cores|" ] }, @@ -242,7 +242,7 @@ "outputs": [], "source": [ "automl_settings = {\n", - " \"max_time_sec\": 12000,\n", + " \"max_time_sec\": 3600,\n", " \"iterations\": 10,\n", " \"n_cross_validations\": 5,\n", " \"primary_metric\": 'AUC_weighted',\n", @@ -253,7 +253,7 @@ "automl_config = AutoMLConfig(task = 'classification',\n", " path=project_folder,\n", " compute_target = dsvm_compute,\n", - " data_script = project_folder + \"./get_data.py\",\n", + " data_script = project_folder + \"/get_data.py\",\n", " **automl_settings\n", " )\n" ] @@ -264,17 +264,7 @@ "source": [ "## Training the Model \n", "\n", - "You can call the *fit* method on the AutoML instance and pass the dsvm runconfig name. For remote runs the execution is asynchronous, so you will see the iterations get populated as they complete. You can interact with the widgets/models even when the experiment is running to retreive the best model up to that point. Once you are satisfied with the model you can cancel a particular iteration or the whole run.\n", - "\n", - "\n", - "*fit* method on Auto ML Classifier triggers the training of the model. It can be called with the following parameters\n", - "\n", - "**Note**: You cannot pass Numpy arrays directly to the fit method in case of remote executions.\n", - "\n", - "|**Parameter**|**Description**|\n", - "|-|-|\n", - "|**compute_target**|Indicates the compute used for training. local indicates train on the same compute which hosts the jupyter notebook.
For DSVM and Batch AI please refer to the relevant notebooks.|\n", - "|**show_output**| True/False to turn on/off console output|" + "For remote runs the execution is asynchronous, so you will see the iterations get populated as they complete. You can interact with the widgets/models even when the experiment is running to retreive the best model up to that point. Once you are satisfied with the model you can cancel a particular iteration or the whole run." ] }, { @@ -398,7 +388,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Best Model based on any iteration" + "#### Model from a specific iteration" ] }, { @@ -408,7 +398,7 @@ "outputs": [], "source": [ "iteration = 0\n", - "best_run, fitted_model = remote_run.get_output(iteration=iteration)" + "zero_run, zero_model = remote_run.get_output(iteration=iteration)" ] }, { diff --git a/automl/05.auto-ml-missing-data-Blacklist-Early-Termination.ipynb b/automl/05.auto-ml-missing-data-Blacklist-Early-Termination.ipynb index 417e7bd28..5345a67c4 100644 --- a/automl/05.auto-ml-missing-data-Blacklist-Early-Termination.ipynb +++ b/automl/05.auto-ml-missing-data-Blacklist-Early-Termination.ipynb @@ -15,7 +15,7 @@ "source": [ "# AutoML 05 : Blacklisting models, Early termination and handling missing data\n", "\n", - "In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use the AutoML Classifier for handling missing values in data. We also provide a stopping metrics indicating a target for the primary metrics so that AutoML can terminate the run without necessarly going through all the iterations. Finally, If you want to avoid a certain pipeline, we allow you to specify a black list of algos that AutoML will ignore for this run.\n", + "In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use AutoML for handling missing values in data. We also provide a stopping metric indicating a target for the primary metric so that AutoML can terminate the run without necessarly going through all the iterations. Finally, if you want to avoid a certain pipeline, we allow you to specify a black list of algos that AutoML will ignore for this run.\n", "\n", "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", "\n", @@ -158,16 +158,16 @@ "## Instantiate Auto ML Config\n", "\n", "\n", - "Instantiate a AutoML Object This creates an Experiment in Azure ML. You can reuse this objects to trigger multiple runs. Each run will be part of the same experiment.\n", + "This defines the settings and data used to run the experiment.\n", "\n", "|Property|Description|\n", "|-|-|\n", "|**task**|classification or regression|\n", "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML Classifier trains the data with a specific pipeline|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains the data with a specific pipeline|\n", "|**n_cross_validations**|Number of cross validation splits|\n", - "|**preprocess**| *True/False*
Setting this to *True* enables Auto ML Classifier to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*|\n", + "|**preprocess**| *True/False*
Setting this to *True* enables Auto ML to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*|\n", "|**exit_score**|*double* value indicating the target for *primary_metric*.
Once the target is surpassed the run terminates|\n", "|**blacklist_algos**|*Array* of *strings* indicating pipelines to ignore for Auto ML.

Allowed values for **Classification**
LogisticRegression
SGDClassifierWrapper
NBWrapper
BernoulliNB
SVCWrapper
LinearSVMWrapper
KNeighborsClassifier
DecisionTreeClassifier
RandomForestClassifier
ExtraTreesClassifier
LightGBMClassifier

Allowed values for **Regression**
ElasticNet
GradientBoostingRegressor
DecisionTreeRegressor
KNeighborsRegressor
LassoLars
SGDRegressor
RandomForestRegressor
ExtraTreesRegressor|\n", "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", @@ -184,7 +184,7 @@ "automl_config = AutoMLConfig(task = 'classification',\n", " debug_log = 'automl_errors.log',\n", " primary_metric = 'AUC_weighted',\n", - " max_time_sec = 12000,\n", + " max_time_sec = 3600,\n", " iterations = 20,\n", " n_cross_validations = 5,\n", " preprocess = True,\n", @@ -308,7 +308,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Best Model based on any iteration" + "#### Model from a specific iteration" ] }, { diff --git a/automl/06.auto-ml-sparse-data-custom-cv-split.ipynb b/automl/06.auto-ml-sparse-data-custom-cv-split.ipynb index 2e1733c1a..eb9c1b3c8 100644 --- a/automl/06.auto-ml-sparse-data-custom-cv-split.ipynb +++ b/automl/06.auto-ml-sparse-data-custom-cv-split.ipynb @@ -15,7 +15,7 @@ "source": [ "# AutoML 06: Custom CV splits, handling sparse data\n", "\n", - "In this example we use the scikit learn's [20newsgroup](In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use the AutoML Classifier for handling sparse data and specify custom cross validations splits.\n", + "In this example we use the scikit learn's [20newsgroup](In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use AutoML for handling sparse data and specify custom cross validation splits.\n", "\n", "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", "\n", @@ -157,16 +157,15 @@ "source": [ "## Instantiate Auto ML Config\n", "\n", - "\n", - "Instantiate a AutoML Object This creates an Experiment in Azure ML. You can reuse this objects to trigger multiple runs. Each run will be part of the same experiment.\n", + "This defines the settings and data used to run the experiment.\n", "\n", "|Property|Description|\n", "|-|-|\n", "|**task**|classification or regression|\n", "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML Classifier trains the data with a specific pipeline|\n", - "|**preprocess**| *True/False*
Setting this to *True* enables Auto ML Classifier to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*
*Note: If input data is Sparse you cannot use preprocess=True*|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data|\n", + "|**preprocess**| *True/False*
Setting this to *True* enables Auto ML to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*
*Note: If input data is Sparse you cannot use preprocess=True*|\n", "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers. |\n", "|**X_valid**|(sparse) array-like, shape = [n_samples, n_features] for the custom Validation set|\n", @@ -183,7 +182,7 @@ "automl_config = AutoMLConfig(task = 'classification',\n", " debug_log='automl_errors.log',\n", " primary_metric='AUC_weighted',\n", - " max_time_sec=12000,\n", + " max_time_sec=3600,\n", " iterations=5,\n", " preprocess=False,\n", " verbosity=logging.INFO,\n", @@ -313,7 +312,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Best Model based on any iteration" + "#### Model from a specific iteration" ] }, { diff --git a/automl/07.auto-ml-exploring-previous-runs.ipynb b/automl/07.auto-ml-exploring-previous-runs.ipynb index 52758166b..2717ae907 100644 --- a/automl/07.auto-ml-exploring-previous-runs.ipynb +++ b/automl/07.auto-ml-exploring-previous-runs.ipynb @@ -21,9 +21,9 @@ "\n", "In this notebook you would see\n", "1. List all Experiments for the workspace\n", - "2. List all AutoML Runs for a given project\n", + "2. List AutoML runs for an Experiment\n", "3. Get details for a AutoML Run. (Automl settings, run widget & all metrics)\n", - "4. Downlaod fitted pipeline for any iteration\n" + "4. Download fitted pipeline for any iteration\n" ] }, { @@ -105,7 +105,7 @@ "metadata": {}, "source": [ "# List AutoML runs for an Experiment\n", - "You can set Experiment name with any experiment name from the result of the previous cell to load the AutoML runs." + "You can set Experiment name with any experiment name from the result of the Experiment.list cell to load the AutoML runs." ] }, { @@ -154,7 +154,7 @@ "metadata": {}, "outputs": [], "source": [ - "run_id = 'AutoML_b7c4076b-181d-4ef4-ab9f-36bb44c1e36c'#<> # Replace with a Auto ML Run ID like 'AutoML_a5a90841-8915-4fba-91a4-bbbfc07dd132'\n", + "run_id = 'AutoML_b7c4076b-181d-4ef4-ab9f-36bb44c1e36c'\n", "\n", "from azureml.train.widgets import RunDetails\n", "\n", @@ -237,7 +237,7 @@ "metadata": {}, "outputs": [], "source": [ - "iteration = 4 # Replace with a interation number\n", + "iteration = 4 # Replace with an interation number\n", "best_run, fitted_model = ml_run.get_output(iteration=iteration)\n", "fitted_model" ] @@ -294,7 +294,7 @@ "metadata": {}, "outputs": [], "source": [ - "iteration = 4 # Replace with a interation number\n", + "iteration = 4 # Replace with an interation number\n", "description = 'AutoML Model'\n", "tags = None\n", "ml_run.register_model(description=description, tags=tags, iteration=iteration)\n", diff --git a/automl/08.auto-ml-remote-execution-with-text-file-on-DSVM.ipynb b/automl/08.auto-ml-remote-execution-with-text-file-on-DSVM.ipynb index 1d447e071..65f5e4759 100644 --- a/automl/08.auto-ml-remote-execution-with-text-file-on-DSVM.ipynb +++ b/automl/08.auto-ml-remote-execution-with-text-file-on-DSVM.ipynb @@ -215,11 +215,11 @@ "|Property|Description|\n", "|-|-|\n", "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML Classifier trains the data with a specific pipeline|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data|\n", "|**n_cross_validations**|Number of cross validation splits|\n", "|**concurrent_iterations**|Max number of iterations that would be executed in parallel. This should be less than the number of cores on the DSVM\n", - "|**preprocess**| *True/False*
Setting this to *True* enables Auto ML Classifier to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*|\n", + "|**preprocess**| *True/False*
Setting this to *True* enables Auto ML to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*|\n", "|**max_cores_per_iteration**| Indicates how many cores on the compute target would be used to train a single pipeline.
Default is *1*, you can set it to *-1* to use all cores|" ] }, @@ -230,7 +230,7 @@ "outputs": [], "source": [ "automl_settings = {\n", - " \"max_time_sec\": 12000,\n", + " \"max_time_sec\": 3600,\n", " \"iterations\": 10,\n", " \"n_cross_validations\": 5,\n", " \"primary_metric\": 'AUC_weighted',\n", @@ -242,7 +242,7 @@ " debug_log = 'automl_errors.log',\n", " path=project_folder,\n", " compute_target = dsvm_compute,\n", - " data_script = project_folder + \"./get_data.py\",\n", + " data_script = project_folder + \"/get_data.py\",\n", " **automl_settings\n", " )" ] @@ -253,17 +253,7 @@ "source": [ "## Training the Model \n", "\n", - "You can call the *fit* method on the AutoML instance and pass the dsvm runconfig name. For remote runs the execution is asynchronous, so you will see the iterations get populated as they complete. You can interact with the widgets/models even when the experiment is running to retreive the best model up to that point. Once you are satisfied with the model you can cancel a particular iteration or the whole run.\n", - "\n", - "\n", - "*fit* method on Auto ML Classifier triggers the training of the model. It can be called with the following parameters\n", - "\n", - "**Note**: You cannot pass Numpy arrays directly to the fit method in case of remote executions.\n", - "\n", - "|**Parameter**|**Description**|\n", - "|-|-|\n", - "|**compute_target**|Indicates the compute used for training. local indicates train on the same compute which hosts the jupyter notebook.
For DSVM and Batch AI please refer to the relevant notebooks.|\n", - "|**show_output**| True/False to turn on/off console output|" + "For remote runs the execution is asynchronous, so you will see the iterations get populated as they complete. You can interact with the widgets/models even when the experiment is running to retreive the best model up to that point. Once you are satisfied with the model you can cancel a particular iteration or the whole run." ] }, { @@ -385,7 +375,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Best Model based on any iteration" + "#### Model from a specific iteration" ] }, { diff --git a/automl/09.auto-ml-classification-with-deployment.ipynb b/automl/09.auto-ml-classification-with-deployment.ipynb index 9de5cca7c..3ea273161 100644 --- a/automl/09.auto-ml-classification-with-deployment.ipynb +++ b/automl/09.auto-ml-classification-with-deployment.ipynb @@ -15,7 +15,7 @@ "source": [ "# AutoML 09: Classification with deployment\n", "\n", - "In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use the AutoML Classifier for a simple classification problem.\n", + "In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use AutoML for a simple classification problem.\n", "\n", "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", "\n", @@ -120,8 +120,8 @@ "|-|-|\n", "|**task**|classification or regression|\n", "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in seconds for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML trains the data with a specific pipeline|\n", + "|**max_time_sec**|Time limit in seconds for each iteration|\n", + "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data|\n", "|**n_cross_validations**|Number of cross validation splits|\n", "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers. |\n", diff --git a/automl/11.auto-ml-sample-weight.ipynb b/automl/11.auto-ml-sample-weight.ipynb index 53fad5b37..ac48493ad 100644 --- a/automl/11.auto-ml-sample-weight.ipynb +++ b/automl/11.auto-ml-sample-weight.ipynb @@ -133,7 +133,7 @@ "automl_classifier = AutoMLConfig(task = 'classification',\n", " debug_log = 'automl_errors.log',\n", " primary_metric = 'AUC_weighted',\n", - " max_time_sec = 12000,\n", + " max_time_sec = 3600,\n", " iterations = 10,\n", " n_cross_validations = 2,\n", " verbosity = logging.INFO,\n", @@ -144,7 +144,7 @@ "automl_sample_weight = AutoMLConfig(task = 'classification',\n", " debug_log = 'automl_errors.log',\n", " primary_metric = 'AUC_weighted',\n", - " max_time_sec = 12000,\n", + " max_time_sec = 3600,\n", " iterations = 10,\n", " n_cross_validations = 2,\n", " verbosity = logging.INFO,\n", @@ -160,18 +160,8 @@ "source": [ "## Training the Models\n", "\n", - "You can call the fit method on the AutoML instance and pass the run configuration. For Local runs the execution is synchronous. Depending on the data and number of iterations this can run for while.\n", - "You will see the currently running iterations printing to the console.\n", - "\n", - "*fit* method on Auto ML Classifier triggers the training of the model. It can be called with the following parameters\n", - "\n", - "|**Parameter**|**Description**|\n", - "|-|-|\n", - "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers. |\n", - "|**sample_weight**|(sparse) array-like, shape must be the same as **y**.
A weight value for each label. Higher values indicate that the sample is more important.|\n", - "|**compute_target**|Indicates the compute used for training. local indicates train on the same compute which hosts the jupyter notebook.
For DSVM and Batch AI please refer to the relevant notebooks.|\n", - "|**show_output**| True/False to turn on/off console output|" + "Call the submit method on the experiment and pass the configuration. For Local runs the execution is synchronous. Depending on the data and number of iterations this can run for while.\n", + "You will see the currently running iterations printing to the console." ] }, { @@ -213,7 +203,7 @@ "metadata": {}, "source": [ "#### Compare the pipelines\n", - "The prediction from the sample weight model correctly predicts all 4's including one that the model without sample weights does not. However, it also predicts 4 for two images that are not labelled as 4." + "The prediction from the sample weight model is more likely to correctly predict 4's. However, it is also more likely to predict 4 for some images that are not labelled as 4." ] }, { @@ -253,7 +243,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.6" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/automl/README.md b/automl/README.md index e8e93f8c7..cf327f3e9 100644 --- a/automl/README.md +++ b/automl/README.md @@ -7,21 +7,21 @@ 6. [Troubleshooting](#troubleshooting) # Auto ML Introduction -AutoML builds high quality Machine Learning model for you by automating model selection and hyper parameter selection for you. Bring a labelled dataset that you want to build a model for, AutoML will give you a high quality machine learning model that you can use for predictions. +AutoML builds high quality Machine Learning models for you by automating model and hyperparameter selection. Bring a labelled dataset that you want to build a model for, AutoML will give you a high quality machine learning model that you can use for predictions. -If you are new to Data Science, AutoML will help you get jumpstarted by simplifying machine learning model building. It abstracts you from needing to perform model selection, hyper parameter selection and in one step creates a high quality trained model for you to use. +If you are new to Data Science, AutoML will help you get jumpstarted by simplifying machine learning model building. It abstracts you from needing to perform model selection, hyperparameter selection and in one step creates a high quality trained model for you to use. -If you are an experienced data scientist, AutoML will help increase your productivity by intelligently performing the model selection, hyper parameter selection for your training and generates high quality models much quicker than manually specifying several combinations of the parameters and running training jobs. AutoML provides visibility and access to all the training jobs and the performance characteristics of the models and help you further tune the pipeline if you desire. +If you are an experienced data scientist, AutoML will help increase your productivity by intelligently performing the model and hyperparameter selection for your training and generates high quality models much quicker than manually specifying several combinations of the parameters and running training jobs. AutoML provides visibility and access to all the training jobs and the performance characteristics of the models to help you further tune the pipeline if you desire. # Running samples in a Local Conda environment It is best if you create a new conda environment locally to try this SDK, so it doesn't mess up with your existing Python environment. ### 1. Install mini-conda from [here](https://conda.io/miniconda.html), choose Python 3.7 or higher. -- **Note**: if you already have conda installed, you can keep using it but it must be version 5.2 or later. If you have an previous version installed, you can update it using the command: conda update conda. +- **Note**: if you already have conda installed, you can keep using it but it should be version 4.4.10 or later (as shown by: conda -V). If you have a previous version installed, you can update it using the command: conda update conda. There's no need to install mini-conda specifically. -### 2. Dowloading the sample notebooks +### 2. Downloading the sample notebooks - Download the sample notebooks from [GitHub](https://github.com/Azure/MachineLearningNotebooks) as zip and extract the contents to a local directory. The AutoML sample notebooks are in the "automl" folder. ### 3. Setup a new conda environment @@ -127,6 +127,12 @@ cd to the "automl" folder where the sample notebooks were extracted and then run - [13.auto-ml-dataprep.ipynb](13.auto-ml-dataprep.ipynb) - Using DataPrep for reading data +- [14a.auto-ml-classification-ensemble.ipynb](14a.auto-ml-classification-ensemble.ipynb) + - Classification with ensembling + +- [14b.auto-ml-regression-ensemble.ipynb](14b.auto-ml-regression-ensemble.ipynb) + - Regression with ensembling + # Documentation ## Table of Contents 1. [Auto ML Settings ](#automlsettings) @@ -137,12 +143,12 @@ cd to the "automl" folder where the sample notebooks were extracted and then run |Property|Description|Default| |-|-|-| |**primary_metric**|This is the metric that you want to optimize.

Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted

Regression supports the following primary metrics
spearman_correlation
normalized_root_mean_squared_error
r2_score
normalized_mean_absolute_error
normalized_root_mean_squared_log_error| Classification: accuracy

Regression: spearman_correlation -|**max_time_sec**|Time limit in seconds for each iterations|None| -|**iterations**|Number of iterations. In each iteration trains the data with a specific pipeline. To get the best result, use at least 100. |25| +|**max_time_sec**|Time limit in seconds for each iteration|None| +|**iterations**|Number of iterations. In each iteration trains the data with a specific pipeline. To get the best result, use at least 100. |100| |**n_cross_validations**|Number of cross validation splits|None| |**validation_size**|Size of validation set as percentage of all training samples|None| |**concurrent_iterations**|Max number of iterations that would be executed in parallel|1| -|**preprocess**|*True/False*
Setting this to *True* enables preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*
*Note: If input data is Sparse you cannot use preprocess=True*|False| +|**preprocess**|*True/False*
Setting this to *True* enables preprocessing
on the input to handle missing data, and perform some common feature extraction
*Note: If input data is Sparse you cannot use preprocess=True*|False| |**max_cores_per_iteration**| Indicates how many cores on the compute target would be used to train a single pipeline.
You can set it to *-1* to use all cores|1| |**exit_score**|*double* value indicating the target for *primary_metric*.
Once the target is surpassed the run terminates|None| |**blacklist_algos**|*Array* of *strings* indicating pipelines to ignore for Auto ML.

Allowed values for **Classification**
LogisticRegression
SGDClassifierWrapper
NBWrapper
BernoulliNB
SVCWrapper
LinearSVMWrapper
KNeighborsClassifier
DecisionTreeClassifier
RandomForestClassifier
ExtraTreesClassifier
gradient boosting
LightGBMClassifier

Allowed values for **Regression**
ElasticNet
GradientBoostingRegressor
DecisionTreeRegressor
KNeighborsRegressor
LassoLars
SGDRegressor
RandomForestRegressor
ExtraTreesRegressor|None| @@ -166,8 +172,8 @@ The *get_data()* function can be used to return a dictionary with these values: |y|Pandas Dataframe or Numpy Array|X|label|Label data to train with. For classification, this should be an array of integers. | |X_valid|Pandas Dataframe or Numpy Array|X, y, y_valid|data_train, label|*Optional* All features to validate with. If this is not specified, X is split between train and validate| |y_valid|Pandas Dataframe or Numpy Array|X, y, X_valid|data_train, label|*Optional* The label data to validate with. If this is not specified, y is split between train and validate| -|sample_weight|Pandas Dataframe or Numpy Array|y|data_train, label, columns|*Optional*A weight value for each label. Higher values indicate that the sample is more important.| -|sample_weight_valid|Pandas Dataframe or Numpy Array|y_valid|data_train, label, columns|*Optional*A weight value for each validation label. Higher values indicate that the sample is more important. If this is not specified, sample_weight is split between train and validate| +|sample_weight|Pandas Dataframe or Numpy Array|y|data_train, label, columns|*Optional* A weight value for each label. Higher values indicate that the sample is more important.| +|sample_weight_valid|Pandas Dataframe or Numpy Array|y_valid|data_train, label, columns|*Optional* A weight value for each validation label. Higher values indicate that the sample is more important. If this is not specified, sample_weight is split between train and validate| |data_train|Pandas Dataframe|label|X, y, X_valid, y_valid|All data (features+label) to train with| |label|string|data_train|X, y, X_valid, y_valid|Which column in data_train represents the label| |columns|Array of strings|data_train||*Optional* Whitelist of columns to use for features| @@ -193,5 +199,3 @@ To resolve this issue, allocate a DSVM with more memory or reduce the value spec This can be caused by too many concurrent iterations for a remote DSVM. Each concurrent iteration usually takes 100% of a core when it is running. Some iterations can use multiple cores. So, the concurrent_iterations setting should always be less than the number of cores of the DSVM. To resolve this issue, try reducing the value specified for the concurrent_iterations setting. -## Workspace.create gives the error "The resource type could not be found in the namespace 'Microsoft.MachineLearningServices' for api version '2018-03-01-preview'." -This can indicate that the Azure Subscription has not been whitelisted for AutoML. diff --git a/databricks/01.Installation_and_Configuration.ipynb b/databricks/01.Installation_and_Configuration.ipynb new file mode 100644 index 000000000..166661b14 --- /dev/null +++ b/databricks/01.Installation_and_Configuration.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run this notebook before proceeding."],"metadata":{}},{"cell_type":"markdown","source":["Now we support installing AML SDK as library from GUI. When attaching a library follow this https://docs.databricks.com/user-guide/libraries.html and add the below string as your PyPi package (during private preview). You can select the option to attach the library to all clusters or just one cluster.\n\nProvide this full string to install the SDK:\n\nazureml-sdk[databricks]"],"metadata":{}},{"cell_type":"code","source":["import azureml.core\n\n# Check core SDK version number - based on build number of preview/master.\nprint(\"SDK version:\", azureml.core.VERSION)"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["subscription_id = \"\"\nresource_group = \"\"\nworkspace_name = \"\"\nworkspace_region = \"\""],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["# import the Workspace class and check the azureml SDK version\n# exist_ok checks if workspace exists or not.\n\nfrom azureml.core import Workspace\n\nws = Workspace.create(name = workspace_name,\n subscription_id = subscription_id,\n resource_group = resource_group, \n location = workspace_region,\n exist_ok=True)\n\nws.get_details()"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["ws = Workspace(workspace_name = workspace_name,\n subscription_id = subscription_id,\n resource_group = resource_group)\n\n# persist the subscription id, resource group name, and workspace name in aml_config/config.json.\nws.write_config()"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"code","source":["%sh\ncat /databricks/driver/aml_config/config.json"],"metadata":{},"outputs":[],"execution_count":8},{"cell_type":"code","source":["# import the Workspace class and check the azureml SDK version\nfrom azureml.core import Workspace\n\nws = Workspace.from_config()\nprint('Workspace name: ' + ws.name, \n 'Azure region: ' + ws.location, \n 'Subscription id: ' + ws.subscription_id, \n 'Resource group: ' + ws.resource_group, sep = '\\n')"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["dbutils.notebook.exit(\"success\")"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":[""],"metadata":{},"outputs":[],"execution_count":11}],"metadata":{"name":"01.Installation_and_Configuration","notebookId":3874566296719377},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/02.Ingest_data.ipynb b/databricks/02.Ingest_data.ipynb new file mode 100644 index 000000000..b8075a4c5 --- /dev/null +++ b/databricks/02.Ingest_data.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this."],"metadata":{}},{"cell_type":"markdown","source":["#Data Ingestion"],"metadata":{}},{"cell_type":"code","source":["import os\nimport urllib"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["# Download AdultCensusIncome.csv from Azure CDN. This file has 32,561 rows.\nbasedataurl = \"https://amldockerdatasets.azureedge.net\"\ndatafile = \"AdultCensusIncome.csv\"\ndatafile_dbfs = os.path.join(\"/dbfs\", datafile)\n\nif os.path.isfile(datafile_dbfs):\n print(\"found {} at {}\".format(datafile, datafile_dbfs))\nelse:\n print(\"downloading {} to {}\".format(datafile, datafile_dbfs))\n urllib.request.urlretrieve(os.path.join(basedataurl, datafile), datafile_dbfs)"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["# Create a Spark dataframe out of the csv file.\ndata_all = sqlContext.read.format('csv').options(header='true', inferSchema='true', ignoreLeadingWhiteSpace='true', ignoreTrailingWhiteSpace='true').load(datafile)\nprint(\"({}, {})\".format(data_all.count(), len(data_all.columns)))\ndata_all.printSchema()"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["#renaming columns\ncolumns_new = [col.replace(\"-\", \"_\") for col in data_all.columns]\ndata_all = data_all.toDF(*columns_new)\ndata_all.printSchema()"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"code","source":["display(data_all.limit(5))"],"metadata":{},"outputs":[],"execution_count":8},{"cell_type":"markdown","source":["#Data Preparation"],"metadata":{}},{"cell_type":"code","source":["# Choose feature columns and the label column.\nlabel = \"income\"\nxvals_all = set(data_all.columns) - {label}\n\n#dbutils.widgets.remove(\"xvars_multiselect\")\ndbutils.widgets.removeAll()\n\ndbutils.widgets.multiselect('xvars_multiselect', 'hours_per_week', xvals_all)\nxvars_multiselect = dbutils.widgets.get(\"xvars_multiselect\")\nxvars = xvars_multiselect.split(\",\")\n\nprint(\"label = {}\".format(label))\nprint(\"features = {}\".format(xvars))\n\ndata = data_all.select([*xvars, label])\n\n# Split data into train and test.\ntrain, test = data.randomSplit([0.75, 0.25], seed=123)\n\nprint(\"train ({}, {})\".format(train.count(), len(train.columns)))\nprint(\"test ({}, {})\".format(test.count(), len(test.columns)))"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"markdown","source":["#Data Persistence"],"metadata":{}},{"cell_type":"code","source":["# Write the train and test data sets to intermediate storage\ntrain_data_path = \"AdultCensusIncomeTrain\"\ntest_data_path = \"AdultCensusIncomeTest\"\n\ntrain_data_path_dbfs = os.path.join(\"/dbfs\", \"AdultCensusIncomeTrain\")\ntest_data_path_dbfs = os.path.join(\"/dbfs\", \"AdultCensusIncomeTest\")\n\ntrain.write.mode('overwrite').parquet(train_data_path)\ntest.write.mode('overwrite').parquet(test_data_path)\nprint(\"train and test datasets saved to {} and {}\".format(train_data_path_dbfs, test_data_path_dbfs))"],"metadata":{},"outputs":[],"execution_count":12},{"cell_type":"code","source":["dbutils.notebook.exit(\"success\")"],"metadata":{},"outputs":[],"execution_count":13},{"cell_type":"code","source":[""],"metadata":{},"outputs":[],"execution_count":14}],"metadata":{"name":"02.Ingest_data","notebookId":3874566296719393},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/03a.Build_model.ipynb b/databricks/03a.Build_model.ipynb new file mode 100644 index 000000000..15da2ac91 --- /dev/null +++ b/databricks/03a.Build_model.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this."],"metadata":{}},{"cell_type":"markdown","source":["#Model Building"],"metadata":{}},{"cell_type":"code","source":["import os\nimport pprint\nimport numpy as np\n\nfrom pyspark.ml import Pipeline, PipelineModel\nfrom pyspark.ml.feature import OneHotEncoder, StringIndexer, VectorAssembler\nfrom pyspark.ml.classification import LogisticRegression\nfrom pyspark.ml.evaluation import BinaryClassificationEvaluator\nfrom pyspark.ml.tuning import CrossValidator, ParamGridBuilder"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["#get the train and test datasets\ntrain_data_path = \"AdultCensusIncomeTrain\"\ntest_data_path = \"AdultCensusIncomeTest\"\n\ntrain = spark.read.parquet(train_data_path)\ntest = spark.read.parquet(test_data_path)\n\nprint(\"train: ({}, {})\".format(train.count(), len(train.columns)))\nprint(\"test: ({}, {})\".format(test.count(), len(test.columns)))\n\ntrain.printSchema()"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"markdown","source":["#Define ML Pipeline"],"metadata":{}},{"cell_type":"code","source":["label = \"income\"\n\nreg = 0.1\nprint(\"Regularization Rate is {}.\".format(reg))\n\n# create a new Logistic Regression model.\nlr = LogisticRegression(regParam=reg)\n\ndtypes = dict(train.dtypes)\ndtypes.pop(label)\n\nsi_xvars = []\nohe_xvars = []\nfeatureCols = []\nfor idx,key in enumerate(dtypes):\n if dtypes[key] == \"string\":\n featureCol = \"-\".join([key, \"encoded\"])\n featureCols.append(featureCol)\n \n tmpCol = \"-\".join([key, \"tmp\"])\n # string-index and one-hot encode the string column\n #https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/ml/feature/StringIndexer.html\n #handleInvalid: Param for how to handle invalid data (unseen labels or NULL values). \n #Options are 'skip' (filter out rows with invalid data), 'error' (throw an error), \n #or 'keep' (put invalid data in a special additional bucket, at index numLabels). Default: \"error\"\n si_xvars.append(StringIndexer(inputCol=key, outputCol=tmpCol, handleInvalid=\"skip\")) #, handleInvalid=\"keep\"\n ohe_xvars.append(OneHotEncoder(inputCol=tmpCol, outputCol=featureCol))\n else:\n featureCols.append(key)\n\n# string-index the label column into a column named \"label\"\nsi_label = StringIndexer(inputCol=label, outputCol='label')\n\n# assemble the encoded feature columns in to a column named \"features\"\nassembler = VectorAssembler(inputCols=featureCols, outputCol=\"features\")\n\n# put together the pipeline\npipe = Pipeline(stages=[*si_xvars, *ohe_xvars, si_label, assembler, lr])\n\n# train the model\nmodel = pipe.fit(train)\nprint(model)"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"markdown","source":["#Tune ML Pipeline"],"metadata":{}},{"cell_type":"code","source":["regs = np.arange(0.0, 1.0, 0.2)\n\nparamGrid = ParamGridBuilder().addGrid(lr.regParam, regs).build()\ncv = CrossValidator(estimator=pipe, evaluator=BinaryClassificationEvaluator(), estimatorParamMaps=paramGrid)"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["cvModel = cv.fit(train)"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":["model = cvModel.bestModel"],"metadata":{},"outputs":[],"execution_count":11},{"cell_type":"markdown","source":["#Model Evaluation"],"metadata":{}},{"cell_type":"code","source":["# make prediction\npred = model.transform(test)\noutput = pred[['hours_per_week','age','workclass','marital_status','income','prediction']]\ndisplay(output.limit(5))"],"metadata":{},"outputs":[],"execution_count":13},{"cell_type":"code","source":["# evaluate. note only 2 metrics are supported out of the box by Spark ML.\nbce = BinaryClassificationEvaluator(rawPredictionCol='rawPrediction')\nau_roc = bce.setMetricName('areaUnderROC').evaluate(pred)\nau_prc = bce.setMetricName('areaUnderPR').evaluate(pred)\n\nprint(\"Area under ROC: {}\".format(au_roc))\nprint(\"Area Under PR: {}\".format(au_prc))"],"metadata":{},"outputs":[],"execution_count":14},{"cell_type":"markdown","source":["#Model Persistence"],"metadata":{}},{"cell_type":"code","source":["##NOTE: by default the model is saved to and loaded from /dbfs/ instead of cwd!\nmodel_name = \"AdultCensus.mml\"\nmodel_dbfs = os.path.join(\"/dbfs\", model_name)\n\nmodel.write().overwrite().save(model_name)\nprint(\"saved model to {}\".format(model_dbfs))"],"metadata":{},"outputs":[],"execution_count":16},{"cell_type":"code","source":["%sh\n\nls -la /dbfs/AdultCensus.mml/*"],"metadata":{},"outputs":[],"execution_count":17},{"cell_type":"code","source":["dbutils.notebook.exit(\"success\")"],"metadata":{},"outputs":[],"execution_count":18}],"metadata":{"name":"03a.Build_model","notebookId":3874566296719409},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/03b.Build_model_runHistory.ipynb b/databricks/03b.Build_model_runHistory.ipynb new file mode 100644 index 000000000..6bf308e76 --- /dev/null +++ b/databricks/03b.Build_model_runHistory.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this."],"metadata":{}},{"cell_type":"markdown","source":["#Model Building"],"metadata":{}},{"cell_type":"code","source":["import os\nimport pprint\nimport numpy as np\n\nfrom pyspark.ml import Pipeline, PipelineModel\nfrom pyspark.ml.feature import OneHotEncoder, StringIndexer, VectorAssembler\nfrom pyspark.ml.classification import LogisticRegression\nfrom pyspark.ml.evaluation import BinaryClassificationEvaluator\nfrom pyspark.ml.tuning import CrossValidator, ParamGridBuilder"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["import azureml.core\n\n# Check core SDK version number\nprint(\"SDK version:\", azureml.core.VERSION)"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["# import the Workspace class and check the azureml SDK version\nfrom azureml.core import Workspace\n\nws = Workspace.from_config()\nprint('Workspace name: ' + ws.name, \n 'Azure region: ' + ws.location, \n 'Subscription id: ' + ws.subscription_id, \n 'Resource group: ' + ws.resource_group, sep = '\\n')"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["#get the train and test datasets\ntrain_data_path = \"AdultCensusIncomeTrain\"\ntest_data_path = \"AdultCensusIncomeTest\"\n\ntrain = spark.read.parquet(train_data_path)\ntest = spark.read.parquet(test_data_path)\n\nprint(\"train: ({}, {})\".format(train.count(), len(train.columns)))\nprint(\"test: ({}, {})\".format(test.count(), len(test.columns)))\n\ntrain.printSchema()"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"markdown","source":["#Define ML Pipeline"],"metadata":{}},{"cell_type":"code","source":["label = \"income\"\ndtypes = dict(train.dtypes)\ndtypes.pop(label)\n\nsi_xvars = []\nohe_xvars = []\nfeatureCols = []\nfor idx,key in enumerate(dtypes):\n if dtypes[key] == \"string\":\n featureCol = \"-\".join([key, \"encoded\"])\n featureCols.append(featureCol)\n \n tmpCol = \"-\".join([key, \"tmp\"])\n # string-index and one-hot encode the string column\n #https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/ml/feature/StringIndexer.html\n #handleInvalid: Param for how to handle invalid data (unseen labels or NULL values). \n #Options are 'skip' (filter out rows with invalid data), 'error' (throw an error), \n #or 'keep' (put invalid data in a special additional bucket, at index numLabels). Default: \"error\"\n si_xvars.append(StringIndexer(inputCol=key, outputCol=tmpCol, handleInvalid=\"skip\"))\n ohe_xvars.append(OneHotEncoder(inputCol=tmpCol, outputCol=featureCol))\n else:\n featureCols.append(key)\n\n# string-index the label column into a column named \"label\"\nsi_label = StringIndexer(inputCol=label, outputCol='label')\n\n# assemble the encoded feature columns in to a column named \"features\"\nassembler = VectorAssembler(inputCols=featureCols, outputCol=\"features\")"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["from azureml.core.run import Run\nfrom azureml.core.experiment import Experiment\nimport numpy as np\nimport os\nimport shutil\n\nmodel_name = \"AdultCensus_runHistory.mml\"\nmodel_dbfs = os.path.join(\"/dbfs\", model_name)\nrun_history_name = 'spark-ml-notebook'\n\n# start a training run by defining an experiment\nmyexperiment = Experiment(ws, \"Azure_Databricks_Experiment\")\nroot_run = myexperiment.start_logging()\n\n# Regularization Rates\nregs = np.arange(0.0, 1.0, 0.2)\n\n# try a bunch of alpha values in a Linear Regression (Ridge) model\nfor reg in regs:\n print(\"Regularization rate: {}\".format(reg))\n # create a bunch of child runs\n with root_run.child_run(\"reg-\" + str(reg)) as run:\n # create a new Logistic Regression model.\n lr = LogisticRegression(regParam=reg)\n \n # put together the pipeline\n pipe = Pipeline(stages=[*si_xvars, *ohe_xvars, si_label, assembler, lr])\n\n # train the model\n model_pipeline = pipe.fit(train)\n \n # make prediction\n pred = model_pipeline.transform(test)\n \n # evaluate. note only 2 metrics are supported out of the box by Spark ML.\n bce = BinaryClassificationEvaluator(rawPredictionCol='rawPrediction')\n au_roc = bce.setMetricName('areaUnderROC').evaluate(pred)\n au_prc = bce.setMetricName('areaUnderPR').evaluate(pred)\n\n print(\"Area under ROC: {}\".format(au_roc))\n print(\"Area Under PR: {}\".format(au_prc))\n \n # log reg, au_roc, au_prc and feature names in run history\n run.log(\"reg\", reg)\n run.log(\"au_roc\", au_roc)\n run.log(\"au_prc\", au_prc)\n run.log_list(\"columns\", train.columns)\n\n # save model\n model_pipeline.write().overwrite().save(model_name)\n \n # upload the serialized model into run history record\n mdl, ext = model_name.split(\".\")\n model_zip = mdl + \".zip\"\n shutil.make_archive(mdl, 'zip', model_dbfs)\n run.upload_file(\"outputs/\" + model_name, model_zip) \n #run.upload_file(\"outputs/\" + model_name, path_or_stream = model_dbfs) #cannot deal with folders\n\n # now delete the serialized model from local folder since it is already uploaded to run history \n shutil.rmtree(model_dbfs)\n os.remove(model_zip)\n \n# Declare run completed\nroot_run.complete()\nroot_run_id = root_run.id\nprint (\"run id:\", root_run.id)"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":["#Load all run metrics from run history into a dictionary object.\nchild_runs = {}\nchild_run_metrics = {}\n\nfor r in root_run.get_children():\n child_runs[r.id] = r\n child_run_metrics[r.id] = r.get_metrics()"],"metadata":{},"outputs":[],"execution_count":11},{"cell_type":"code","source":["best_run_id = max(child_run_metrics, key = lambda k: child_run_metrics[k]['au_roc'])\nbest_run = child_runs[best_run_id]\nprint('Best run is:', best_run_id)\nprint('Metrics:', child_run_metrics[best_run_id])"],"metadata":{},"outputs":[],"execution_count":12},{"cell_type":"code","source":["best_reg = child_run_metrics[best_run_id]['reg']\nmax_auc = child_run_metrics[best_run_id]['au_roc']\n\nreg_auc = np.array([(child_run_metrics[k]['reg'], child_run_metrics[k]['au_roc']) for k in child_run_metrics.keys()])\nreg_auc_sorted = reg_auc[reg_auc[:,0].argsort()]\n\nimport pandas as pd\ndf = pd.DataFrame(reg_auc_sorted)\nspdf = spark.createDataFrame(df)\ndisplay(spdf)"],"metadata":{},"outputs":[],"execution_count":13},{"cell_type":"code","source":["#Download the model from the best run to a local folder\nbest_model_file_name = \"best_model.zip\"\nbest_run.download_file(name = 'outputs/' + model_name, output_file_path = best_model_file_name)"],"metadata":{},"outputs":[],"execution_count":14},{"cell_type":"markdown","source":["#Model Evaluation"],"metadata":{}},{"cell_type":"code","source":["##unzip the model to dbfs (as load() seems to require that) and load it.\nif os.path.isfile(model_dbfs) or os.path.isdir(model_dbfs):\n shutil.rmtree(model_dbfs)\nshutil.unpack_archive(best_model_file_name, model_dbfs)\n\nmodel_pipeline_best = PipelineModel.load(model_name)"],"metadata":{},"outputs":[],"execution_count":16},{"cell_type":"code","source":["# make prediction\npred = model_pipeline_best.transform(test)\noutput = pred[['hours_per_week','age','workclass','marital_status','income','prediction']]\ndisplay(output.limit(5))"],"metadata":{},"outputs":[],"execution_count":17},{"cell_type":"code","source":["# evaluate. note only 2 metrics are supported out of the box by Spark ML.\nbce = BinaryClassificationEvaluator(rawPredictionCol='rawPrediction')\nau_roc = bce.setMetricName('areaUnderROC').evaluate(pred)\nau_prc = bce.setMetricName('areaUnderPR').evaluate(pred)\n\nprint(\"Area under ROC: {}\".format(au_roc))\nprint(\"Area Under PR: {}\".format(au_prc))"],"metadata":{},"outputs":[],"execution_count":18},{"cell_type":"markdown","source":["#Model Persistence"],"metadata":{}},{"cell_type":"code","source":["##NOTE: by default the model is saved to and loaded from /dbfs/ instead of cwd!\nmodel_pipeline_best.write().overwrite().save(model_name)\nprint(\"saved model to {}\".format(model_dbfs))"],"metadata":{},"outputs":[],"execution_count":20},{"cell_type":"code","source":["%sh\n\nls -la /dbfs/AdultCensus_runHistory.mml/*"],"metadata":{},"outputs":[],"execution_count":21},{"cell_type":"code","source":["dbutils.notebook.exit(\"success\")"],"metadata":{},"outputs":[],"execution_count":22}],"metadata":{"name":"03b.Build_model_runHistory","notebookId":3874566296719353},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/04.Deploy_to_ACI.ipynb b/databricks/04.Deploy_to_ACI.ipynb new file mode 100644 index 000000000..a2c04a192 --- /dev/null +++ b/databricks/04.Deploy_to_ACI.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this."],"metadata":{}},{"cell_type":"markdown","source":["Please Register Azure Container Instance(ACI) using Azure Portal: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-supported-services#portal in your subscription before using the SDK to deploy your ML model to ACI."],"metadata":{}},{"cell_type":"code","source":["from azureml.core import Workspace\nimport azureml.core\n\n# Check core SDK version number\nprint(\"SDK version:\", azureml.core.VERSION)\n\n#'''\nws = Workspace.from_config()\nprint('Workspace name: ' + ws.name, \n 'Azure region: ' + ws.location, \n 'Subscription id: ' + ws.subscription_id, \n 'Resource group: ' + ws.resource_group, sep = '\\n')\n#'''"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["##NOTE: service deployment always gets the model from the current working dir.\nimport os\n\nmodel_name = \"AdultCensus.mml\" # OR AdultCensus_runHistory.mml\nmodel_name_dbfs = os.path.join(\"/dbfs\", model_name)\n\nprint(\"copy model from dbfs to local\")\nmodel_local = \"file:\" + os.getcwd() + \"/\" + model_name\ndbutils.fs.cp(model_name, model_local, True)"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["#Register the model\nfrom azureml.core.model import Model\nmymodel = Model.register(model_path = model_name, # this points to a local file\n model_name = model_name, # this is the name the model is registered as, am using same name for both path and name. \n description = \"ADB trained model by Parashar\",\n workspace = ws)\n\nprint(mymodel.name, mymodel.description, mymodel.version)"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["#%%writefile score_sparkml.py\nscore_sparkml = \"\"\"\n\nimport json\n\ndef init():\n try:\n # One-time initialization of PySpark and predictive model\n import pyspark\n from azureml.core.model import Model\n from pyspark.ml import PipelineModel\n \n global trainedModel\n global spark\n \n spark = pyspark.sql.SparkSession.builder.appName(\"ADB and AML notebook by Parashar\").getOrCreate()\n model_name = \"{model_name}\" #interpolated\n model_path = Model.get_model_path(model_name)\n trainedModel = PipelineModel.load(model_path)\n except Exception as e:\n trainedModel = e\n \ndef run(input_json):\n if isinstance(trainedModel, Exception):\n return json.dumps({{\"trainedModel\":str(trainedModel)}})\n \n try:\n sc = spark.sparkContext\n input_list = json.loads(input_json)\n input_rdd = sc.parallelize(input_list)\n input_df = spark.read.json(input_rdd)\n \n # Compute prediction\n prediction = trainedModel.transform(input_df)\n #result = prediction.first().prediction\n predictions = prediction.collect()\n\n #Get each scored result\n preds = [str(x['prediction']) for x in predictions]\n result = \",\".join(preds)\n except Exception as e:\n result = str(e)\n return json.dumps({{\"result\":result}})\n \n\"\"\".format(model_name=model_name)\n\nexec(score_sparkml)\n\nwith open(\"score_sparkml.py\", \"w\") as file:\n file.write(score_sparkml)"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"code","source":["from azureml.core.conda_dependencies import CondaDependencies \n\nmyacienv = CondaDependencies.create(conda_packages=['scikit-learn','numpy','pandas'])\n\nwith open(\"mydeployenv.yml\",\"w\") as f:\n f.write(myacienv.serialize_to_string())"],"metadata":{},"outputs":[],"execution_count":8},{"cell_type":"code","source":["#deploy to ACI\nfrom azureml.core.webservice import AciWebservice, Webservice\n\nmyaci_config = AciWebservice.deploy_configuration(\n cpu_cores = 1, \n memory_gb = 1, \n tags = {'name':'Databricks Azure ML ACI'}, \n description = 'This is for ADB and AML example. Azure Databricks & Azure ML SDK demo with ACI by Parashar.')"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["# this will take 10-15 minutes to finish\n\nservice_name = \"aciws\"\nruntime = \"spark-py\" \ndriver_file = \"score_sparkml.py\"\nmy_conda_file = \"mydeployenv.yml\"\n\n# image creation\nfrom azureml.core.image import ContainerImage\nmyimage_config = ContainerImage.image_configuration(execution_script = driver_file, \n runtime = runtime, \n conda_file = my_conda_file)\n\n# Webservice creation\nmyservice = Webservice.deploy_from_model(\n workspace=ws, \n name=service_name,\n deployment_config = myaci_config,\n models = [mymodel],\n image_config = myimage_config\n )\n\nmyservice.wait_for_deployment(show_output=True)"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":["help(ContainerImage)"],"metadata":{},"outputs":[],"execution_count":11},{"cell_type":"code","source":["# List images by ws\n\nfor i in ContainerImage.list(workspace = ws):\n print('{}(v.{} [{}]) stored at {} with build log {}'.format(i.name, i.version, i.creation_state, i.image_location, i.image_build_log_uri))"],"metadata":{},"outputs":[],"execution_count":12},{"cell_type":"code","source":["#for using the Web HTTP API \nprint(myservice.scoring_uri)"],"metadata":{},"outputs":[],"execution_count":13},{"cell_type":"code","source":["import json\n\n#get the some sample data\ntest_data_path = \"AdultCensusIncomeTest\"\ntest = spark.read.parquet(test_data_path).limit(5)\n\ntest_json = json.dumps(test.toJSON().collect())\n\nprint(test_json)"],"metadata":{},"outputs":[],"execution_count":14},{"cell_type":"code","source":["#using data defined above predict if income is >50K (1) or <=50K (0)\nmyservice.run(input_data=test_json)"],"metadata":{},"outputs":[],"execution_count":15},{"cell_type":"code","source":["#comment to not delete the web service\nmyservice.delete()"],"metadata":{},"outputs":[],"execution_count":16},{"cell_type":"code","source":[""],"metadata":{},"outputs":[],"execution_count":17}],"metadata":{"name":"04.DeploytoACI","notebookId":3874566296719333},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/05.Deploy_to_AKS_existingImage.ipynb b/databricks/05.Deploy_to_AKS_existingImage.ipynb new file mode 100644 index 000000000..e6a08783a --- /dev/null +++ b/databricks/05.Deploy_to_AKS_existingImage.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this. This notebook uses image from ACI notebook for deploying to AKS."],"metadata":{}},{"cell_type":"code","source":["from azureml.core import Workspace\nimport azureml.core\n\n# Check core SDK version number\nprint(\"SDK version:\", azureml.core.VERSION)\n\n#'''\nws = Workspace.from_config()\nprint('Workspace name: ' + ws.name, \n 'Azure region: ' + ws.location, \n 'Subscription id: ' + ws.subscription_id, \n 'Resource group: ' + ws.resource_group, sep = '\\n')\n#'''"],"metadata":{},"outputs":[],"execution_count":3},{"cell_type":"code","source":["# List images by ws\n\nfrom azureml.core.image import ContainerImage\nfor i in ContainerImage.list(workspace = ws):\n print('{}(v.{} [{}]) stored at {} with build log {}'.format(i.name, i.version, i.creation_state, i.image_location, i.image_build_log_uri))"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["from azureml.core.image import Image\nmyimage = Image(workspace=ws, id=\"aciws:25\")"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["#create AKS compute\n#it may take 20-25 minutes to create a new cluster\n\nfrom azureml.core.compute import AksCompute, ComputeTarget\n\n# Use the default configuration (can also provide parameters to customize)\nprov_config = AksCompute.provisioning_configuration()\n\naks_name = 'ps-aks-clus2' \n\n# Create the cluster\naks_target = ComputeTarget.create(workspace = ws, \n name = aks_name, \n provisioning_configuration = prov_config)\n\naks_target.wait_for_completion(show_output = True)\n\nprint(aks_target.provisioning_state)\nprint(aks_target.provisioning_errors)"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["from azureml.core.webservice import Webservice\nhelp( Webservice.deploy_from_image)"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"code","source":["from azureml.core.webservice import Webservice, AksWebservice\nfrom azureml.core.image import ContainerImage\n\n#Set the web service configuration (using default here)\naks_config = AksWebservice.deploy_configuration()\n\n#unique service name\nservice_name ='ps-aks-service'\n\n# Webservice creation using single command, there is a variant to use image directly as well.\naks_service = Webservice.deploy_from_image(\n workspace=ws, \n name=service_name,\n deployment_config = aks_config,\n image = myimage,\n deployment_target = aks_target\n )\n\naks_service.wait_for_deployment(show_output=True)"],"metadata":{},"outputs":[],"execution_count":8},{"cell_type":"code","source":["#for using the Web HTTP API \nprint(aks_service.scoring_uri)\nprint(aks_service.get_keys())"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["import json\n\n#get the some sample data\ntest_data_path = \"AdultCensusIncomeTest\"\ntest = spark.read.parquet(test_data_path).limit(5)\n\ntest_json = json.dumps(test.toJSON().collect())\n\nprint(test_json)"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":["#using data defined above predict if income is >50K (1) or <=50K (0)\naks_service.run(input_data=test_json)"],"metadata":{},"outputs":[],"execution_count":11},{"cell_type":"code","source":["#comment to not delete the web service\naks_service.delete()\n#image.delete()\n#model.delete()\n#aks_target.delete()"],"metadata":{},"outputs":[],"execution_count":12},{"cell_type":"code","source":[""],"metadata":{},"outputs":[],"execution_count":13}],"metadata":{"name":"04.DeploytoACI","notebookId":3874566296719318},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/Databricks_AMLSDK_github.dbc b/databricks/Databricks_AMLSDK_github.dbc new file mode 100644 index 000000000..fdbad0493 Binary files /dev/null and b/databricks/Databricks_AMLSDK_github.dbc differ diff --git a/databricks/readme.md b/databricks/readme.md new file mode 100644 index 000000000..005a0b417 --- /dev/null +++ b/databricks/readme.md @@ -0,0 +1,26 @@ +# Azure Databricks - Azure ML SDK Sample Notebooks + +**NOTE**: With the latest version of our AML SDK, there are some API changes due to which previous version of notebooks will not work. +Kindly use this v4 notebooks (updated Sep 18)– if you had installed the AML SDK in your Databricks cluster please update to latest SDK version by installing azureml-sdk[databricks] as a library from GUI. + +**NOTE**: Please create your Azure Databricks cluster as v4.x (high concurrency preferred) with **Python 3** (dropdown). We are extending it to more runtimes asap. + +**NOTE**: Some packages like psutil upgrade libs that can cause a conflict, please install such packages by freezing lib version. Eg. "pstuil **cryptography==1.5 pyopenssl==16.0.0 ipython=2.2.0**" to avoid install error. This issue is related to Databricks and not related to AML SDK. + +**NOTE**: You should at least have contributor access to your Azure subcription to run some of the notebooks. + +The iPython Notebooks have to be run sequentially after making changes based on your subscription. The corresponding DBC archive contains all the notebooks and can be imported into your Databricks workspace. You can the run notebooks after importing .dbc instead of downloading individually. + +This set of notebooks are related to Income prediction experiment based on this [dataset](https://archive.ics.uci.edu/ml/datasets/adult) and demonstrate how to data prep, train and operationalize a Spark ML model with Azure ML Python SDK from within Azure Databricks. For details on SDK concepts, please refer to [Private preview notebooks](https://github.com/Azure/ViennaDocs/tree/master/PrivatePreview/notebooks) + +(Recommended) [Azure Databricks AML SDK notebooks](Databricks_AMLSDK_github.dbc) A single DBC package to import all notebooks in your Databricks workspace. + +01. [Installation and Configuration](01.Installation_and_Configuration.ipynb): Install the Azure ML Python SDK and Initialize an Azure ML Workspace and save the Workspace configuration file. +02. [Ingest data](02.Ingest_data.ipynb): Download the Adult Census Income dataset and split it into train and test sets. +03. [Build model](03a.Build_model.ipynb): Train a binary classification model in Azure Databricks with a Spark ML Pipeline. +04. [Build model with Run History](03b.Build_model_runHistory.ipynb): Train model and also capture run history (tracking) with Azure ML Python SDK. +05. [Deploy to ACI](04.Deploy_to_ACI.ipynb): Deploy model to Azure Container Instance (ACI) with Azure ML Python SDK. +06. [Deploy to AKS](04.Deploy_to_AKS_existingImage.ipynb): Deploy model to Azure Kubernetis Service (AKS) with Azure ML Python SDK from an existing Image with model, conda and score file. + +Copyright (c) Microsoft Corporation. All rights reserved. +All notebooks in this folder are licensed under the MIT License. diff --git a/onnx/release.json b/onnx/release.json new file mode 100644 index 000000000..b9e97250b --- /dev/null +++ b/onnx/release.json @@ -0,0 +1,30 @@ +{ + "channels": { + "master": [ + "sample-01", + "sample-02" + ], + "candidate": [ + "sample-01", + "sample-02" + ], + "preview": [ + "sample-01", + "sample-02" + ] + }, + "notebooks": { + "sample-01": { + "name": "onnx-inference-mnist.ipynb", + "widgets": [ "azureml.train.widgets" ], + "dependencies": [], + "requirements": [ "matplotlib", "numpy", "onnx"] + }, + "sample-02": { + "name": "onnx-inference-emotion-recognition.ipynb", + "widgets": ["azureml.train.widgets"], + "dependencies": [], + "requirements": [ "matplotlib", "numpy", "onnx"] + } + } +} \ No newline at end of file diff --git a/pipeline/00.pipeline-setup.ipynb b/pipeline/00.pipeline-setup.ipynb new file mode 100644 index 000000000..2f54e4e49 --- /dev/null +++ b/pipeline/00.pipeline-setup.ipynb @@ -0,0 +1,76 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Copyright (c) Microsoft Corporation. All rights reserved.\n", + "\n", + "Licensed under the MIT License." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install pandas\n", + "!pip install requests" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Widgets\n", + "Install the following widgets to see the status of each run" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!jupyter nbextension install --py --user azureml.train.widgets\n", + "!jupyter nbextension enable --py --user azureml.train.widgets" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pipeline/pipeline-batch-scoring.ipynb b/pipeline/pipeline-batch-scoring.ipynb index d2b334350..9362d7202 100644 --- a/pipeline/pipeline-batch-scoring.ipynb +++ b/pipeline/pipeline-batch-scoring.ipynb @@ -314,6 +314,23 @@ "# Steps to run" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A subset of the parameters to the python script can be given as input when we re-run a `PublishedPipeline`. In the current example, we define `batch_size` taken by the script as such parameter." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.pipeline.core.graph import PipelineParameter\n", + "batch_size_param = PipelineParameter(name=\"param_batch_size\", default_value=20)" + ] + }, { "cell_type": "code", "execution_count": null, @@ -323,7 +340,10 @@ "step = PythonScriptStep(\n", " name=\"batch ai scoring\",\n", " script_name=\"batchai_score.py\",\n", - " arguments=[\"--dataset_path\", input_images, \"--model_dir\", model_dir, \"--output_dir\", output_dir, \"--batch_size\", 20],\n", + " arguments=[\"--dataset_path\", input_images, \n", + " \"--model_dir\", model_dir, \n", + " \"--output_dir\", output_dir, \n", + " \"--batch_size\", batch_size_param],\n", " target=cluster,\n", " inputs=[input_images, model_dir],\n", " outputs=[output_dir],\n", @@ -340,7 +360,7 @@ "outputs": [], "source": [ "pipeline = Pipeline(workspace=ws, steps=[step])\n", - "pipeline_run = Experiment(ws, 'batch_scoring').submit(pipeline)" + "pipeline_run = Experiment(ws, 'batch_scoring').submit(pipeline, pipeline_params={\"param_batch_size\": 20})" ] }, { @@ -475,8 +495,8 @@ "from azureml.pipeline.core import PublishedPipeline\n", "\n", "rest_endpoint = PublishedPipeline.get_endpoint(published_id, ws)\n", - "#response = requests.post(rest_endpoint, headers=aad_token, json={})\n", - "#run_id = response.json()[\"Id\"]" + "response = requests.post(rest_endpoint, headers=aad_token, json={\"param_batch_size\": 50})\n", + "run_id = response.json()[\"Id\"]" ] }, { @@ -492,10 +512,10 @@ "metadata": {}, "outputs": [], "source": [ - "#from azureml.pipeline.core.run import PipelineRun\n", - "#published_pipeline_run = PipelineRun(ws.experiments()[\"batch_scoring\"], run_id)\n", + "from azureml.pipeline.core.run import PipelineRun\n", + "published_pipeline_run = PipelineRun(ws.experiments()[\"batch_scoring\"], run_id)\n", "\n", - "#RunDetails(published_pipeline_run).show()" + "RunDetails(published_pipeline_run).show()" ] }, { @@ -522,7 +542,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.6" } }, "nbformat": 4, diff --git a/release.json b/release.json new file mode 100644 index 000000000..884afb085 --- /dev/null +++ b/release.json @@ -0,0 +1,92 @@ +{ + "help": { + "notebooks": { + "id": "define every notebook under the ID in a case to be added into a test suite", + "path": "path to the notebooks", + "name": "name of the notebook in the same folder", + "dependencies": "notebook dependencies needed for execution, these will be uploaded into Git repo with the notebook", + "widget": "list widgets to be installed for notebook execution", + "requirements": "additional packages to pip install for the execution" + }, + "uploads": "TODO: list files that are not notebooks or notebook dependencies to be updated in the Git repo", + "include": "Nested release.json files id: nested folder. Same logic applied" + }, + + "include": { + "intro": "01.getting-started", + "automl-intro": "00.AutoML.Getting Started", + "onnx": "onnx", + "pipeline": "pipeline", + "training": "training", + "fr": "functionalreadiness" + }, + + "channels": { + "master": [ + "sample-00", + "tutorial-01", + "tutorial-02", + "tutorial-03" + ], + "candidate": [ + "sample-00", + "tutorial-01", + "tutorial-02", + "tutorial-03" + ], + "preview": [ + "sample-00", + "tutorial-01", + "tutorial-02", + "tutorial-03" + ], + "automl-test": [ + "tutorial-03" + ] + }, + + "notebooks": { + "sample-00": { + "name": "00.configuration.ipynb" + }, + "tutorial-01": { + "path": "tutorials", + "name": "01.train-models.ipynb", + "widgets": [ "azureml.train.widgets" ], + "dependencies": [ "utils.py" ], + "conda": [ "matplotlib", "scikit-learn" ], + "requirements": ["azureml-train-widgets"] + }, + "tutorial-02": { + "path": "tutorials", + "name": "02.deploy-models.ipynb", + "widgets": [], + "dependencies": [ "utils.py", "sklearn_mnist_model.pkl" ], + "conda": [ "matplotlib", "scikit-learn" ] + }, + "tutorial-03": { + "path": "tutorials", + "name": "03.auto-train-models.ipynb", + "widgets": [ "azureml.train.widgets" ], + "dependencies": [ ], + "requirements": [ "matplotlib", "numpy", "scipy", "scikit-learn", "pandas", "azureml-train-automl", "azureml-train-widgets" ] + }, + "azurenotebook-01": { + "path": "azurenotebooks", + "name": "01.run-experiment.ipynb", + "widgets": [], + "dependencies": [], + "requirements": [] + }, + "azurenotebook-02": { + "path": "azurenotebooks", + "name": "02.deploy-web-service.ipynb", + "widgets": [], + "dependencies": [], + "requirements": [] + } + }, + "uploads": [ + "README.md" + ] +} \ No newline at end of file diff --git a/training/01.train-tune-deploy-pytorch/01.train-tune-deploy-pytorch.ipynb b/training/01.train-hyperparameter-tune-deploy-with-pytorch/01.train-hyperparameter-tune-deploy-with-pytorch.ipynb similarity index 79% rename from training/01.train-tune-deploy-pytorch/01.train-tune-deploy-pytorch.ipynb rename to training/01.train-hyperparameter-tune-deploy-with-pytorch/01.train-hyperparameter-tune-deploy-with-pytorch.ipynb index 1e6a6e16c..5bc540404 100644 --- a/training/01.train-tune-deploy-pytorch/01.train-tune-deploy-pytorch.ipynb +++ b/training/01.train-hyperparameter-tune-deploy-with-pytorch/01.train-hyperparameter-tune-deploy-with-pytorch.ipynb @@ -13,7 +13,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# 01. Train and deploy with PyTorch\n", + "# 01. Train, hyperparameter tune, and deploy with PyTorch\n", "\n", "In this tutorial, you will train, hyperparameter tune, and deploy a PyTorch model using the Azure Machine Learning (AML) Python SDK.\n", "\n", @@ -119,13 +119,8 @@ "metadata": {}, "source": [ "## Upload training data\n", - "The dataset we will use consists of about 120 training images each for ants and bees, with 75 validation images for each class." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "The dataset we will use consists of about 120 training images each for ants and bees, with 75 validation images for each class.\n", + "\n", "First, download the dataset (located [here](https://download.pytorch.org/tutorial/hymenoptera_data.zip) as a zip file) locally to your current directory and extract the files. This will create a folder called `hymenoptera_data` with two subfolders `train` and `val` that contain the training and validation images, respectively. [Hymenoptera](https://en.wikipedia.org/wiki/Hymenoptera) is the order of insects that includes ants and bees." ] }, @@ -244,14 +239,28 @@ "### Prepare training script\n", "Now you will need to create your training script. In this tutorial, the training script is already provided for you at `pytorch_train.py`. In practice, you should be able to take any custom training script as is and run it with AML without having to modify your code.\n", "\n", - "However, if you would like to use AML's [tracking and metrics](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#metrics) capabilities, you will have to add a small amount of AML code inside your training script. " + "However, if you would like to use AML's [tracking and metrics](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#metrics) capabilities, you will have to add a small amount of AML code inside your training script. \n", + "\n", + "In `pytorch_train.py`, we will log some metrics to our AML run. To do so, we will access the AML run object within the script:\n", + "```Python\n", + "from azureml.core.run import Run\n", + "run = Run.get_submitted_run()\n", + "```\n", + "Further within `pytorch_train.py`, we log the learning rate and momentum parameters, and the best validation accuracy the model achieves:\n", + "```Python\n", + "run.log('lr', np.float(learning_rate))\n", + "run.log('momentum', np.float(momentum))\n", + "\n", + "run.log('best_val_acc', np.float(best_acc))\n", + "```\n", + "These run metrics will become particularly important when we begin hyperparameter tuning our model in the \"Tune model hyperparameters\" section." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Copy the training script `pytorch_train.py` into your project directory." + "Once your script is ready, copy the training script `pytorch_train.py` into your project directory." ] }, { @@ -364,8 +373,119 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Register the trained model\n", - "Finally, register the trained model from your run to your workspace. The `model_path` parameter takes in the relative path on the remote VM to the model in your `outputs` directory. In the next section, we will deploy this registered model as a web service." + "## Tune model hyperparameters\n", + "Now that we've seen how to do a simple PyTorch training run using the SDK, let's see if we can further improve the accuracy of our model. We can optimize our model's hyperparameters using Azure Machine Learning's hyperparameter tuning capabilities." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Start a hyperparameter sweep\n", + "First, we will define the hyperparameter space to sweep over. Since our training script uses a learning rate schedule to decay the learning rate every several epochs, let's tune the initial learning rate and the momentum parameters. In this example we will use random sampling to try different configuration sets of hyperparameters to maximize our primary metric, the best validation accuracy (`best_val_acc`).\n", + "\n", + "Then, we specify the early termination policy to use to early terminate poorly performing runs. Here we use the `BanditPolicy`, which will terminate any run that doesn't fall within the slack factor of our primary evaluation metric. In this tutorial, we will apply this policy every epoch (since we report our `best_val_acc` metric every epoch and `evaluation_interval=1`). Notice we will delay the first policy evaluation until after the first `10` epochs (`delay_evaluation=10`).\n", + "Refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-tune-hyperparameters#specify-an-early-termination-policy) for more information on the BanditPolicy and other policies available." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.train.hyperdrive import *\n", + "\n", + "param_sampling = RandomParameterSampling( {\n", + " 'learning_rate': uniform(0.0005, 0.005),\n", + " 'momentum': uniform(0.9, 0.99)\n", + " }\n", + ")\n", + "\n", + "early_termination_policy = BanditPolicy(slack_factor=0.15, evaluation_interval=1, delay_evaluation=10)\n", + "\n", + "hyperdrive_run_config = HyperDriveRunConfig(estimator=estimator,\n", + " hyperparameter_sampling=param_sampling, \n", + " policy=early_termination_policy,\n", + " primary_metric_name='best_val_acc',\n", + " primary_metric_goal=PrimaryMetricGoal.MAXIMIZE,\n", + " max_total_runs=20,\n", + " max_concurrent_runs=4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, lauch the hyperparameter tuning job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# start the HyperDrive run\n", + "hyperdrive_run = experiment.submit(hyperdrive_run_config)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Monitor HyperDrive runs\n", + "You can monitor the progress of the runs with the following Jupyter widget. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.train.widgets import RunDetails\n", + "\n", + "RunDetails(hyperdrive_run).show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Find and register the best model\n", + "Once all the runs complete, we can find the run that produced the model with the highest accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_run = hyperdrive_run.get_best_run_by_primary_metric()\n", + "best_run_metrics = best_run.get_metrics()\n", + "print(best_run)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('Best Run is:\\n Validation accuracy: {0:.5f} \\n Learning rate: {1:.5f} \\n Momentum: {2:.5f}'.format(\n", + " best_run_metrics['best_val_acc'][-1],\n", + " best_run_metrics['lr'],\n", + " best_run_metrics['momentum'])\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, register the model from your best-performing run to your workspace. The `model_path` parameter takes in the relative path on the remote VM to the model file in your `outputs` directory. In the next section, we will deploy this registered model as a web service." ] }, { @@ -374,7 +494,7 @@ "metadata": {}, "outputs": [], "source": [ - "model = run.register_model(model_name = 'pytorch-hymenoptera', model_path = 'outputs/model.pt')\n", + "model = best_run.register_model(model_name = 'pytorch-hymenoptera', model_path = 'outputs/model.pt')\n", "print(model.name, model.id, model.version, sep = '\\t')" ] }, @@ -422,8 +542,6 @@ " - torch\n", " - torchvision\n", " - pillow\n", - " # Required packages for AzureML execution, history, and data preparation.\n", - " - --extra-index-url https://azuremlsdktestpypi.azureedge.net/sdk-release/Preview/E7501C02541B433786111FE8E140CAA1\n", " - azureml-core" ] }, @@ -528,7 +646,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To get the logs from the deployment process, run the following command:" + "**Tip: If something goes wrong with the deployment, the first thing to look at is the logs from the service by running the following command:**" ] }, { diff --git a/training/01.train-tune-deploy-pytorch/pytorch_score.py b/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_score.py similarity index 98% rename from training/01.train-tune-deploy-pytorch/pytorch_score.py rename to training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_score.py index 7bed01a8a..29846ac4e 100644 --- a/training/01.train-tune-deploy-pytorch/pytorch_score.py +++ b/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_score.py @@ -3,9 +3,7 @@ import torch import torch.nn as nn -import torchvision from torchvision import transforms -import os import json import base64 from io import BytesIO diff --git a/training/01.train-tune-deploy-pytorch/pytorch_train.py b/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_train.py similarity index 87% rename from training/01.train-tune-deploy-pytorch/pytorch_train.py rename to training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_train.py index 364732320..19719c64b 100644 --- a/training/01.train-tune-deploy-pytorch/pytorch_train.py +++ b/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_train.py @@ -1,15 +1,13 @@ # Copyright (c) 2017, PyTorch contributors +# Modifications copyright (C) Microsoft Corporation # Licensed under the BSD license - # Adapted from https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html from __future__ import print_function, division - import torch import torch.nn as nn import torch.optim as optim from torch.optim import lr_scheduler -import torchvision from torchvision import datasets, models, transforms import numpy as np import time @@ -17,6 +15,10 @@ import copy import argparse +from azureml.core.run import Run +# get the Azure ML run object +run = Run.get_submitted_run() + def load_data(data_dir): """Load the train/val data.""" @@ -112,6 +114,9 @@ def train_model(model, criterion, optimizer, scheduler, num_epochs, data_dir): best_acc = epoch_acc best_model_wts = copy.deepcopy(model.state_dict()) + # log the best val accuracy to AML run + run.log('best_val_acc', np.float(best_acc)) + print() time_elapsed = time.time() - since @@ -124,9 +129,13 @@ def train_model(model, criterion, optimizer, scheduler, num_epochs, data_dir): return model -def fine_tune_model(num_epochs, data_dir): +def fine_tune_model(num_epochs, data_dir, learning_rate, momentum): """Load a pretrained model and reset the final fully connected layer.""" + # log the hyperparameter metrics to the AML run + run.log('lr', np.float(learning_rate)) + run.log('momentum', np.float(momentum)) + model_ft = models.resnet18(pretrained=True) num_ftrs = model_ft.fc.in_features model_ft.fc = nn.Linear(num_ftrs, 2) # only 2 classes to predict @@ -137,7 +146,7 @@ def fine_tune_model(num_epochs, data_dir): criterion = nn.CrossEntropyLoss() # Observe that all parameters are being optimized - optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9) + optimizer_ft = optim.SGD(model_ft.parameters(), lr=learning_rate, momentum=momentum) # Decay LR by a factor of 0.1 every 7 epochs exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1) @@ -148,19 +157,17 @@ def fine_tune_model(num_epochs, data_dir): def main(): - for root, dirs, files in os.walk("."): - print(root) - print(dirs) - # get command-line arguments parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, help='directory of training data') parser.add_argument('--num_epochs', type=int, default=25, help='number of epochs to train') parser.add_argument('--output_dir', type=str, help='output directory') + parser.add_argument('--learning_rate', type=float, help='learning rate') + parser.add_argument('--momentum', type=float, help='momentum') args = parser.parse_args() print("data directory is: " + args.data_dir) - model = fine_tune_model(args.num_epochs, args.data_dir) + model = fine_tune_model(args.num_epochs, args.data_dir, args.learning_rate, args.momentum) os.makedirs(args.output_dir, exist_ok=True) torch.save(model, os.path.join(args.output_dir, 'model.pt')) diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/03.train-hyperparameter-tune-deploy-with-tensorflow.ipynb b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/03.train-hyperparameter-tune-deploy-with-tensorflow.ipynb new file mode 100644 index 000000000..76684cfba --- /dev/null +++ b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/03.train-hyperparameter-tune-deploy-with-tensorflow.ipynb @@ -0,0 +1,1624 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Copyright (c) Microsoft Corporation. All rights reserved.\n", + "\n", + "Licensed under the MIT License." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nbpresent": { + "id": "bf74d2e9-2708-49b1-934b-e0ede342f475" + } + }, + "source": [ + "# 03. Training MNIST dataset with hyperparameter tuning & deploy to ACI\n", + "\n", + "## Introduction\n", + "This tutorial shows how to train a simple deep neural network using the MNIST dataset and TensorFlow on Azure Machine Learning. MNIST is a popular dataset consisting of 70,000 grayscale images. Each image is a handwritten digit of `28x28` pixels, representing number from 0 to 9. The goal is to create a multi-class classifier to identify the digit each image represents, and deploy it as a web service in Azure.\n", + "\n", + "For more information about the MNIST dataset, please visit [Yan LeCun's website](http://yann.lecun.com/exdb/mnist/).\n", + "\n", + "## Prerequisite:\n", + "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning\n", + "* Go through the [00.configuration.ipynb](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) notebook to:\n", + " * install the AML SDK\n", + " * create a workspace and its configuration file (`config.json`)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's get started. First let's import some Python libraries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "nbpresent": { + "id": "c377ea0c-0cd9-4345-9be2-e20fb29c94c3" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "import os\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "nbpresent": { + "id": "edaa7f2f-2439-4148-b57a-8c794c0945ec" + } + }, + "outputs": [], + "source": [ + "import azureml\n", + "from azureml.core import Workspace, Run\n", + "\n", + "# check core SDK version number\n", + "print(\"Azure ML SDK Version: \", azureml.core.VERSION)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialize workspace\n", + "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.core.workspace import Workspace\n", + "\n", + "ws = Workspace.from_config()\n", + "print('Workspace name: ' + ws.name, \n", + " 'Azure region: ' + ws.location, \n", + " 'Subscription id: ' + ws.subscription_id, \n", + " 'Resource group: ' + ws.resource_group, sep = '\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nbpresent": { + "id": "59f52294-4a25-4c92-bab8-3b07f0f44d15" + } + }, + "source": [ + "## Create an Azure ML experiment\n", + "Let's create an experiment named \"tf-mnist\" and a folder to hold the training scripts. The script runs will be recorded under the experiment in Azure." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "nbpresent": { + "id": "bc70f780-c240-4779-96f3-bc5ef9a37d59" + } + }, + "outputs": [], + "source": [ + "from azureml.core import Experiment\n", + "\n", + "script_folder = './tf-mnist'\n", + "os.makedirs(script_folder, exist_ok=True)\n", + "\n", + "exp = Experiment(workspace=ws, name='tf-mnist')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nbpresent": { + "id": "defe921f-8097-44c3-8336-8af6700804a7" + } + }, + "source": [ + "## Download MNIST dataset\n", + "In order to train on the MNIST dataset we will first need to download it from Yan LeCun's web site directly and save them in a `data` folder locally." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "\n", + "os.makedirs('./data/mnist', exist_ok=True)\n", + "\n", + "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz', filename = './data/mnist/train-images.gz')\n", + "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz', filename = './data/mnist/train-labels.gz')\n", + "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz', filename = './data/mnist/test-images.gz')\n", + "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz', filename = './data/mnist/test-labels.gz')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nbpresent": { + "id": "c3f2f57c-7454-4d3e-b38d-b0946cf066ea" + } + }, + "source": [ + "## Show some sample images\n", + "Let's load the downloaded compressed file into numpy arrays using some utility functions included in the `utils.py` library file from the current folder. Then we use `matplotlib` to plot 30 random images from the dataset along with their labels." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "nbpresent": { + "id": "396d478b-34aa-4afa-9898-cdce8222a516" + } + }, + "outputs": [], + "source": [ + "from utils import load_data\n", + "\n", + "# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the neural network converge faster.\n", + "X_train = load_data('./data/mnist/train-images.gz', False) / 255.0\n", + "y_train = load_data('./data/mnist/train-labels.gz', True).reshape(-1)\n", + "\n", + "X_test = load_data('./data/mnist/test-images.gz', False) / 255.0\n", + "y_test = load_data('./data/mnist/test-labels.gz', True).reshape(-1)\n", + "\n", + "count = 0\n", + "sample_size = 30\n", + "plt.figure(figsize = (16, 6))\n", + "for i in np.random.permutation(X_train.shape[0])[:sample_size]:\n", + " count = count + 1\n", + " plt.subplot(1, sample_size, count)\n", + " plt.axhline('')\n", + " plt.axvline('')\n", + " plt.text(x = 10, y = -10, s = y_train[i], fontsize = 18)\n", + " plt.imshow(X_train[i].reshape(28, 28), cmap = plt.cm.Greys)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Upload MNIST dataset to default datastore \n", + "A [datastore](https://docs.microsoft.com/azure/machine-learning/service/how-to-access-data) is a place where data can be stored that is then made accessible to a Run either by means of mounting or copying the data to the compute target. A datastore can either be backed by an Azure Blob Storage or and Azure File Share (ADLS will be supported in the future). For simple data handling, each workspace provides a default datastore that can be used, in case the data is not already in Blob Storage or File Share.\n", + "\n", + "In this next step, we will upload the training and test set into the workspace's default datastore, which we will then later be mount on a Batch AI cluster for training.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ds = ws.get_default_datastore()\n", + "ds.upload(src_dir='./data/mnist', target_path='mnist', overwrite=True, show_progress=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create Batch AI cluster as compute target\n", + "[Batch AI](https://docs.microsoft.com/en-us/azure/batch-ai/overview) is a service for provisioning and managing clusters of Azure virtual machines for running machine learning workloads. Let's create a new Batch AI cluster in the current workspace, if it doesn't already exist. We will then run the training script on this compute target." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we could not find the cluster with the given name in the previous cell, then we will create a new cluster here. We will create a Batch AI Cluster of `STANDARD_D2_V2` CPU VMs. This process is broken down into 3 steps:\n", + "1. create the configuration (this step is local and only takes a second)\n", + "2. create the Batch AI cluster (this step will take about **20 seconds**)\n", + "3. provision the VMs to bring the cluster to the initial size (of 1 in this case). This step will take about **3-5 minutes** and is providing only sparse output in the process. Please make sure to wait until the call returns before moving to the next cell" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.core.compute import ComputeTarget, BatchAiCompute\n", + "from azureml.core.compute_target import ComputeTargetException\n", + "\n", + "# choose a name for your cluster\n", + "batchai_cluster_name = \"gpucluster\"\n", + "\n", + "try:\n", + " # look for the existing cluster by name\n", + " compute_target = ComputeTarget(workspace=ws, name=batchai_cluster_name)\n", + " if compute_target is BatchAiCompute:\n", + " print('found compute target {}, just use it.'.format(batchai_cluster_name))\n", + " else:\n", + " print('{} exists but it is not a Batch AI cluster. Please choose a different name.'.format(batchai_cluster_name))\n", + "except ComputeTargetException:\n", + " print('creating a new compute target...')\n", + " compute_config = BatchAiCompute.provisioning_configuration(vm_size=\"STANDARD_NC6\", # GPU-based VM\n", + " #vm_priority='lowpriority', # optional\n", + " autoscale_enabled=True,\n", + " cluster_min_nodes=0, \n", + " cluster_max_nodes=4)\n", + "\n", + " # create the cluster\n", + " compute_target = ComputeTarget.create(ws, batchai_cluster_name, compute_config)\n", + " \n", + " # can poll for a minimum number of nodes and for a specific timeout. \n", + " # if no min node count is provided it uses the scale settings for the cluster\n", + " compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", + " \n", + " # Use the 'status' property to get a detailed status for the current cluster. \n", + " print(compute_target.status.serialize())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that you have created the compute target, let's see what the workspace's `compute_targets()` function returns. You should now see one entry named 'cpucluster' of type BatchAI." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for ct in ws.compute_targets():\n", + " print(ct.name, ct.type, ct.provisioning_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Copy the training files into the script folder\n", + "The TensorFlow training script is already created for you. You can simply copy it into the script folder, together with the utility library used to load compressed data file into numpy array." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "# the training logic is in the tf_mnist.py file.\n", + "shutil.copy('./tf_mnist.py', script_folder)\n", + "\n", + "# the utils.py just helps loading data from the downloaded MNIST dataset into numpy arrays.\n", + "shutil.copy('./utils.py', script_folder)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nbpresent": { + "id": "2039d2d5-aca6-4f25-a12f-df9ae6529cae" + } + }, + "source": [ + "## Construct neural network in TensorFlow\n", + "In the training script `tf_mnist.py`, it creates a very simple DNN (deep neural network), with just 2 hidden layers. The input layer has 28 * 28 = 784 neurons, each representing a pixel in an image. The first hidden layer has 300 neurons, and the second hidden layer has 100 neurons. The output layer has 10 neurons, each representing a targeted label from 0 to 9.\n", + "\n", + "![DNN](nn.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Azure ML concepts \n", + "Please note the following three things in the code below:\n", + "1. The script accepts arguments using the argparse package. In this case there is one argument `--data_folder` which specifies the file system folder in which the script can find the MNIST data\n", + "```\n", + " parser = argparse.ArgumentParser()\n", + " parser.add_argument('--data_folder')\n", + "```\n", + "2. The script is accessing the Azure ML `Run` object by executing `run = Run.get_submitted_run()`. Further down the script is using the `run` to report the training accuracy and the validation accuracy as training progresses.\n", + "```\n", + " run.log('training_acc', np.float(acc_train))\n", + " run.log('validation_acc', np.float(acc_val))\n", + "```\n", + "3. When running the script on Azure ML, you can write files out to a folder `./outputs` that is relative to the root directory. This folder is specially tracked by Azure ML in the sense that any files written to that folder during script execution on the remote target will be picked up by Run History; these files (known as artifacts) will be available as part of the run history record." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next cell will print out the training code for you to inspect it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open(os.path.join(script_folder, './tf_mnist.py'), 'r') as f:\n", + " print(f.read())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create TensorFlow estimator\n", + "Next, we construct an `azureml.train.dnn.TensorFlow` estimator object, use the Batch AI cluster as compute target, and pass the mount-point of the datastore to the training code as a parameter.\n", + "The TensorFlow estimator is providing a simple way of launching a TensorFlow training job on a compute target. It will automatically provide a docker image that has TensorFlow installed -- if additional pip or conda packages are required, their names can be passed in via the `pip_packages` and `conda_packages` arguments and they will be included in the resulting docker." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.train.dnn import TensorFlow\n", + "\n", + "script_params = {\n", + " '--data-folder': ws.get_default_datastore().as_mount(),\n", + " '--batch-size': 50,\n", + " '--first-layer-neurons': 300,\n", + " '--second-layer-neurons': 100,\n", + " '--learning-rate': 0.01\n", + "}\n", + "\n", + "est = TensorFlow(source_directory=script_folder,\n", + " script_params=script_params,\n", + " compute_target=compute_target,\n", + " entry_script='tf_mnist.py', \n", + " use_gpu=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submit job to run\n", + "Calling the `fit` function on the estimator submits the job to Azure ML for execution. Submitting the job should only take a few seconds." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "run = exp.submit(config=est)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Monitor the Run\n", + "As the Run is executed, it will go through the following stages:\n", + "1. Preparing: A docker image is created matching the Python environment specified by the TensorFlow estimator and it will be uploaded to the workspace's Azure Container Registry. This step will only happen once for each Python environment -- the container will then be cached for subsequent runs. Creating and uploading the image takes about **5 minutes**. While the job is preparing, logs are streamed to the run history and can be viewed to monitor the progress of the image creation.\n", + "\n", + "2. Scaling: If the compute needs to be scaled up (i.e. the Batch AI cluster requires more nodes to execute the run than currently available), the Batch AI cluster will attempt to scale up in order to make the required amount of nodes available. Scaling typically takes about **5 minutes**.\n", + "\n", + "3. Running: All scripts in the script folder are uploaded to the compute target, data stores are mounted/copied and the `entry_script` is executed. While the job is running, stdout and the `./logs` folder are streamed to the run history and can be viewed to monitor the progress of the run.\n", + "\n", + "4. Post-Processing: The `./outputs` folder of the run is copied over to the run history\n", + "\n", + "There are multiple ways to check the progress of a running job. We can use a Jupyter notebook widget. \n", + "\n", + "**Note: The widget will automatically update ever 10-15 seconds, always showing you the most up-to-date information about the run**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.train.widgets import RunDetails\n", + "RunDetails(run).show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also periodically check the status of the run object, and navigate to Azure portal to monitor the run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "run" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Run object\n", + "The Run object provides the interface to the run history -- both to the job and to the control plane (this notebook), and both while the job is running and after it has completed. It provides a number of interesting features for instance:\n", + "* `run.get_details()`: Provides a rich set of properties of the run\n", + "* `run.get_metrics()`: Provides a dictionary with all the metrics that were reported for the Run\n", + "* `run.get_file_names()`: List all the files that were uploaded to the run history for this Run. This will include the `outputs` and `logs` folder, azureml-logs and other logs, as well as files that were explicitly uploaded to the run using `run.upload_file()`\n", + "\n", + "Below are some examples -- please run through them and inspect their output. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "run.get_details()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "run.get_metrics()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "run.get_file_names()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot accuracy over epochs\n", + "Since we can retrieve the metrics from the run, we can easily make plots using `matplotlib` in the notebook. Then we can add the plotted image to the run using `run.log_image()`, so all information about the run is kept together." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "os.makedirs('./imgs', exist_ok = True)\n", + "metrics = run.get_metrics()\n", + "\n", + "plt.figure(figsize = (13,5))\n", + "plt.plot(metrics['validation_acc'], 'r-', lw = 4, alpha = .6)\n", + "plt.plot(metrics['training_acc'], 'b--', alpha = 0.5)\n", + "plt.legend(['Full evaluation set', 'Training set mini-batch'])\n", + "plt.xlabel('epochs', fontsize = 14)\n", + "plt.ylabel('accuracy', fontsize = 14)\n", + "plt.title('Accuracy over Epochs', fontsize = 16)\n", + "run.log_image(name = 'acc_over_epochs.png', plot = plt)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Download the saved model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the training script, a TensorFlow `saver` object is used to persist the model in a local folder (local to the compute target). The model was saved to the `./outputs` folder on the disk of the Batch AI cluster node where the job is run. Azure ML automatically uploaded anything written in the `./outputs` folder into run history file store. Subsequently, we can use the `Run` object to download the model files the `saver` object saved. They are under the the `outputs/model` folder in the run history file store, and are downloaded into a local folder named `model`. Note the TensorFlow model consists of four files in binary format and they are not human-readable." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# create a model folder in the current directory\n", + "os.makedirs('./model', exist_ok = True)\n", + "\n", + "for f in run.get_file_names():\n", + " if f.startswith('outputs/model'):\n", + " output_file_path = os.path.join('./model', f.split('/')[-1])\n", + " print('Downloading from {} to {} ...'.format(f, output_file_path))\n", + " run.download_file(name = f, output_file_path = output_file_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Predict on the test set\n", + "Now load the saved TensorFlow graph, and list all operations under the `network` scope. This way we can discover the input tensor `network/X:0` and the output tensor `network/output/MatMul:0`, and use them in the scoring script in the next step.\n", + "\n", + "Note: if your local TensorFlow version is different than the version running in the cluster where the model is trained, you might see a \"compiletime version mismatch\" warning. You can ignore it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "tf.reset_default_graph()\n", + "\n", + "saver = tf.train.import_meta_graph(\"./model/mnist-tf.model.meta\")\n", + "graph = tf.get_default_graph()\n", + "\n", + "for op in graph.get_operations():\n", + " if op.name.startswith('network'):\n", + " print(op.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Feed test dataset to the persisted model to get predictions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# input tensor. this is an array of 784 elements, each representing the intensity of a pixel in the digit image.\n", + "X = tf.get_default_graph().get_tensor_by_name(\"network/X:0\")\n", + "# output tensor. this is an array of 10 elements, each representing the probability of predicted value of the digit.\n", + "output = tf.get_default_graph().get_tensor_by_name(\"network/output/MatMul:0\")\n", + "\n", + "with tf.Session() as sess:\n", + " saver.restore(sess, './model/mnist-tf.model')\n", + " k = output.eval(feed_dict = {X : X_test})\n", + "# get the prediction, which is the index of the element that has the largest probability value.\n", + "y_hat = np.argmax(k, axis = 1)\n", + "\n", + "# print the first 30 labels and predictions\n", + "print('labels: \\t', y_test[:30])\n", + "print('predictions:\\t', y_hat[:30])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculate the overall accuracy by comparing the predicted value against the test set." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Accuracy on the test set:\", np.average(y_hat == y_test))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Intelligent hyperparameter tuning\n", + "We have trained the model with one set of hyperparameters, now let's how we can do hyperparameter tuning by launching multiple runs on the cluster. First let's define the parameter space using random sampling." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.train.hyperdrive import *\n", + "\n", + "ps = RandomParameterSampling(\n", + " {\n", + " '--batch-size': choice(25, 50, 100),\n", + " '--first-layer-neurons': choice(10, 50, 200, 300, 500),\n", + " '--second-layer-neurons': choice(10, 50, 200, 500),\n", + " '--learning-rate': loguniform(-6, -1)\n", + " }\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will create a new estimator without the above parameters since they will be passed in later. Note we still need to keep the `data-folder` parameter since that's not a hyperparamter we will sweep." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "est = TensorFlow(source_directory=script_folder,\n", + " script_params={'--data-folder': ws.get_default_datastore().as_mount()},\n", + " compute_target=compute_target,\n", + " entry_script='tf_mnist.py', \n", + " use_gpu=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we will define an early termnination policy. The `BanditPolicy` basically states to check the job every 2 iterations. If the primary metric (defined later) falls outside of the top 10% range, Azure ML terminate the job. This saves us from continuing to explore hyperparameters that don't show promise of helping reach our target metric." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "policy = BanditPolicy(evaluation_interval=2, slack_factor=0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are ready to configure a run configuration object, and specify the primary metric `validation_acc` that's recorded in your training runs. If you go back to visit the training script, you will notice that this value is being logged after every epoch (a full batch set). We also want to tell the service that we are looking to maximizing this value. We also set the number of samples to 20, and maximal concurrent job to 4, which is the same as the number of nodes in our computer cluster." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "htc = HyperDriveRunConfig(estimator=est, \n", + " hyperparameter_sampling=ps, \n", + " primary_metric_name='validation_acc', \n", + " primary_metric_goal=PrimaryMetricGoal.MAXIMIZE, \n", + " max_total_runs=20,\n", + " max_concurrent_runs=4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, let's launch the hyperparameter tuning job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "htr = exp.submit(config=htc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use a run history widget to show the progress. Be patient as this might take a while to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "RunDetails(htr).show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Find and register best model\n", + "When all the jobs finish, we can find out the one that has the highest accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_run = htr.get_best_run_by_primary_metric()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's list the model files uploaded during the run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(best_run.get_file_names()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then register the folder (and all files in it) as a model named `tf-dnn-mnist` under the workspace for deployment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model = best_run.register_model(model_name='tf-dnn-mnist', model_path='outputs/model')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Deploy the model in ACI\n", + "Now we are ready to deploy the model as a web service running in Azure Container Instance [ACI](https://azure.microsoft.com/en-us/services/container-instances/). Azure Machine Learning accomplishes this by constructing a Docker image with the scoring logic and model baked in.\n", + "### Create score.py\n", + "First, we will create a scoring script that will be invoked by the web service call. \n", + "\n", + "* Note that the scoring script must have two required functions, `init()` and `run(input_data)`. \n", + " * In `init()` function, you typically load the model into a global object. This function is executed only once when the Docker container is started. \n", + " * In `run(input_data)` function, the model is used to predict a value based on the input data. The input and output to `run` typically use JSON as serialization and de-serialization format but you are not limited to that." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%writefile score.py\n", + "import json\n", + "import numpy as np\n", + "import os\n", + "import tensorflow as tf\n", + "\n", + "from azureml.core.model import Model\n", + "\n", + "def init():\n", + " global X, output, sess\n", + " tf.reset_default_graph()\n", + " model_root = Model.get_model_path('tf-dnn-mnist')\n", + " saver = tf.train.import_meta_graph(os.path.join(model_root, 'mnist-tf.model.meta'))\n", + " X = tf.get_default_graph().get_tensor_by_name(\"network/X:0\")\n", + " output = tf.get_default_graph().get_tensor_by_name(\"network/output/MatMul:0\")\n", + " \n", + " sess = tf.Session()\n", + " saver.restore(sess, os.path.join(model_root, 'mnist-tf.model'))\n", + "\n", + "def run(raw_data):\n", + " data = np.array(json.loads(raw_data)['data'])\n", + " # make prediction\n", + " out = output.eval(session = sess, feed_dict = {X: data})\n", + " y_hat = np.argmax(out, axis = 1)\n", + " return json.dumps(y_hat.tolist())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create myenv.yml\n", + "We also need to create an environment file so that Azure Machine Learning can install the necessary packages in the Docker image which are required by your scoring script. In this case, we need to specify packages `numpy`, `tensorflow`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.core.runconfig import CondaDependencies\n", + "cd = CondaDependencies.create()\n", + "cd.add_conda_package('numpy')\n", + "cd.add_tensorflow_conda_package()\n", + "cd.save_to_file(base_directory='./', conda_file_path='myenv.yml')\n", + "\n", + "print(cd.serialize_to_string())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Deploy to ACI\n", + "We are almost ready to deploy. Create a deployment configuration and specify the number of CPUs and gigbyte of RAM needed for your ACI container. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.core.webservice import AciWebservice\n", + "\n", + "aciconfig = AciWebservice.deploy_configuration(cpu_cores=1, \n", + " memory_gb=1, \n", + " tags={'name':'mnist', 'framework': 'TensorFlow DNN'},\n", + " description='Tensorflow DNN on MNIST')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Deployment Process\n", + "Now we can deploy. **This cell will run for about 7-8 minutes**. Behind the scene, it will do the following:\n", + "1. **Register model** \n", + "Take the local `model` folder (which contains our previously downloaded trained model files) and register it (and the files inside that folder) as a model named `model` under the workspace. Azure ML will register the model directory or model file(s) we specify to the `model_paths` parameter of the `Webservice.deploy` call.\n", + "2. **Build Docker image** \n", + "Build a Docker image using the scoring file (`score.py`), the environment file (`myenv.yml`), and the `model` folder containing the TensorFlow model files. \n", + "3. **Register image** \n", + "Register that image under the workspace. \n", + "4. **Ship to ACI** \n", + "And finally ship the image to the ACI infrastructure, start up a container in ACI using that image, and expose an HTTP endpoint to accept REST client calls." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.core.image import ContainerImage\n", + "imgconfig = ContainerImage.image_configuration(execution_script=\"score.py\", \n", + " runtime=\"python\", \n", + " conda_file=\"myenv.yml\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "from azureml.core.webservice import Webservice\n", + "\n", + "service = Webservice.deploy_from_model(workspace=ws,\n", + " name='tf-mnist-svc',\n", + " deployment_config=aciconfig,\n", + " models=[model],\n", + " image_config=imgconfig)\n", + "\n", + "service.wait_for_deployment(show_output=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Tip: If something goes wrong with the deployment, the first thing to look at is the logs from the service by running the following command:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(service.get_logs())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the scoring web service endpoint:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(service.scoring_uri)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Test the deployed model\n", + "Let's test the deployed model. Pick 30 random samples from the test set, and send it to the web service hosted in ACI. Note here we are using the `run` API in the SDK to invoke the service. You can also make raw HTTP calls using any HTTP tool such as curl.\n", + "\n", + "After the invocation, we print the returned predictions and plot them along with the input images. Use red font color and inversed image (white on black) to highlight the misclassified samples. Note since the model accuracy is pretty high, you might have to run the below cell a few times before you can see a misclassified sample." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "\n", + "# find 30 random samples from test set\n", + "n = 30\n", + "sample_indices = np.random.permutation(X_test.shape[0])[0:n]\n", + "\n", + "test_samples = json.dumps({\"data\": X_test[sample_indices].tolist()})\n", + "test_samples = bytes(test_samples, encoding = 'utf8')\n", + "\n", + "# predict using the deployed model\n", + "result = json.loads(service.run(input_data = test_samples))\n", + "\n", + "# compare actual value vs. the predicted values:\n", + "i = 0\n", + "plt.figure(figsize = (20, 1))\n", + "\n", + "for s in sample_indices:\n", + " plt.subplot(1, n, i + 1)\n", + " plt.axhline('')\n", + " plt.axvline('')\n", + " \n", + " # use different color for misclassified sample\n", + " font_color = 'red' if y_test[s] != result[i] else 'black'\n", + " clr_map = plt.cm.gray if y_test[s] != result[i] else plt.cm.Greys\n", + " \n", + " plt.text(x = 10, y = -10, s = y_hat[s], fontsize = 18, color = font_color)\n", + " plt.imshow(X_test[s].reshape(28, 28), cmap = clr_map)\n", + " \n", + " i = i + 1\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also send raw HTTP request to the service." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import json\n", + "\n", + "# send a random row from the test set to score\n", + "random_index = np.random.randint(0, len(X_test)-1)\n", + "input_data = \"{\\\"data\\\": [\" + str(list(X_test[random_index])) + \"]}\"\n", + "\n", + "headers = {'Content-Type':'application/json'}\n", + "\n", + "resp = requests.post(service.scoring_uri, input_data, headers=headers)\n", + "\n", + "print(\"POST to url\", service.scoring_uri)\n", + "#print(\"input data:\", input_data)\n", + "print(\"label:\", y_test[random_index])\n", + "print(\"prediction:\", resp.text)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at the workspace after the web service was deployed. You should see \n", + "* a registered model named 'model' and with the id 'model:1'\n", + "* an image called 'tf-mnist' and with a docker image location pointing to your workspace's Azure Container Registry (ACR) \n", + "* a webservice called 'tf-mnist' with some scoring URL" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for model in ws.models():\n", + " print(\"Model:\", model.name, model.id)\n", + "\n", + "for image in ws.images():\n", + " print(\"Image:\", image.name, image.image_location)\n", + "\n", + "for webservice in ws.webservices():\n", + " print(\"Webservice:\", webservice.name, webservice.scoring_uri)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clean up\n", + "You can delete the ACI deployment with a simple delete API call." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "service.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also delete the computer cluster. But remember if you set the `cluster_min_nodes` value to 0 when you created the cluster, once the jobs are finished, all nodes are deleted automatically. So you don't have to delete the cluster itself since it won't incur any cost. Next time you submit jobs to it, the cluster will then automatically \"grow\" up to the `cluster_min_nodes` which is set to 4." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# delete the cluster if you need to.\n", + "compute_target.delete()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [default]", + "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.6.6" + }, + "nbpresent": { + "slides": { + "05bb34ad-74b0-42b3-9654-8357d1ba9c99": { + "id": "05bb34ad-74b0-42b3-9654-8357d1ba9c99", + "prev": "851089af-9725-40c9-8f0b-9bf892b2b1fe", + "regions": { + "23fb396d-50f9-4770-adb3-0d6abcb40767": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "2039d2d5-aca6-4f25-a12f-df9ae6529cae", + "part": "whole" + }, + "id": "23fb396d-50f9-4770-adb3-0d6abcb40767" + } + } + }, + "11bebe14-d1dc-476d-a31a-5828b9c3adf0": { + "id": "11bebe14-d1dc-476d-a31a-5828b9c3adf0", + "prev": "502648cb-26fe-496b-899f-84c8fe1dcbc0", + "regions": { + "a42499db-623e-4414-bea2-ff3617fd8fc5": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "4788c040-27a2-4dc1-8ed0-378a99b3a255", + "part": "whole" + }, + "id": "a42499db-623e-4414-bea2-ff3617fd8fc5" + } + } + }, + "134f92d0-6389-4226-af51-1134ae8e8278": { + "id": "134f92d0-6389-4226-af51-1134ae8e8278", + "prev": "36b8728c-32ad-4941-be03-5cef51cdc430", + "regions": { + "b6d82a77-2d58-4b9e-a375-3103214b826c": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "7ab0e6d0-1f1c-451b-8ac5-687da44a8287", + "part": "whole" + }, + "id": "b6d82a77-2d58-4b9e-a375-3103214b826c" + } + } + }, + "282a2421-697b-4fd0-9485-755abf5a0c18": { + "id": "282a2421-697b-4fd0-9485-755abf5a0c18", + "prev": "a8b9ceb9-b38f-4489-84df-b644c6fe28f2", + "regions": { + "522fec96-abe7-4a34-bd34-633733afecc8": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "d58e7785-c2ee-4a45-8e3d-4c538bf8075a", + "part": "whole" + }, + "id": "522fec96-abe7-4a34-bd34-633733afecc8" + } + } + }, + "2dfec088-8a70-411a-9199-904ef3fa2383": { + "id": "2dfec088-8a70-411a-9199-904ef3fa2383", + "prev": "282a2421-697b-4fd0-9485-755abf5a0c18", + "regions": { + "0535fcb6-3a2b-4b46-98a7-3ebb1a38c47e": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "c377ea0c-0cd9-4345-9be2-e20fb29c94c3", + "part": "whole" + }, + "id": "0535fcb6-3a2b-4b46-98a7-3ebb1a38c47e" + } + } + }, + "36a814c9-c540-4a6d-92d9-c03553d3d2c2": { + "id": "36a814c9-c540-4a6d-92d9-c03553d3d2c2", + "prev": "b52e4d09-5186-44e5-84db-3371c087acde", + "regions": { + "8bfba503-9907-43f0-b1a6-46a0b4311793": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "d5e4a56c-dfac-4346-be83-1c15b503deac", + "part": "whole" + }, + "id": "8bfba503-9907-43f0-b1a6-46a0b4311793" + } + } + }, + "36b8728c-32ad-4941-be03-5cef51cdc430": { + "id": "36b8728c-32ad-4941-be03-5cef51cdc430", + "prev": "05bb34ad-74b0-42b3-9654-8357d1ba9c99", + "regions": { + "a36a5bdf-7f62-49b0-8634-e155a98851dc": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "e33dfc47-e7df-4623-a7a6-ab6bcf944629", + "part": "whole" + }, + "id": "a36a5bdf-7f62-49b0-8634-e155a98851dc" + } + } + }, + "3f136f2a-f14c-4a4b-afea-13380556a79c": { + "id": "3f136f2a-f14c-4a4b-afea-13380556a79c", + "prev": "54cb8dfd-a89c-4922-867b-3c87d8b67cd3", + "regions": { + "80ecf237-d1b0-401e-83d2-6d04b7fcebd3": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "7debeb2b-ecea-414f-9b50-49657abb3e6a", + "part": "whole" + }, + "id": "80ecf237-d1b0-401e-83d2-6d04b7fcebd3" + } + } + }, + "502648cb-26fe-496b-899f-84c8fe1dcbc0": { + "id": "502648cb-26fe-496b-899f-84c8fe1dcbc0", + "prev": "3f136f2a-f14c-4a4b-afea-13380556a79c", + "regions": { + "4c83bb4d-2a52-41ba-a77f-0c6efebd83a6": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "dbd22f6b-6d49-4005-b8fe-422ef8ef1d42", + "part": "whole" + }, + "id": "4c83bb4d-2a52-41ba-a77f-0c6efebd83a6" + } + } + }, + "54cb8dfd-a89c-4922-867b-3c87d8b67cd3": { + "id": "54cb8dfd-a89c-4922-867b-3c87d8b67cd3", + "prev": "aa224267-f885-4c0c-95af-7bacfcc186d9", + "regions": { + "0848f0a7-032d-46c7-b35c-bfb69c83f961": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "3c32c557-d0e8-4bb3-a61a-aa51a767cd4e", + "part": "whole" + }, + "id": "0848f0a7-032d-46c7-b35c-bfb69c83f961" + } + } + }, + "636b563c-faee-4c9e-a6a3-f46a905bfa82": { + "id": "636b563c-faee-4c9e-a6a3-f46a905bfa82", + "prev": "c5f59b98-a227-4344-9d6d-03abdd01c6aa", + "regions": { + "9c64f662-05dc-4b14-9cdc-d450b96f4368": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "70640ac0-7041-47a8-9a7f-e871defd74b2", + "part": "whole" + }, + "id": "9c64f662-05dc-4b14-9cdc-d450b96f4368" + } + } + }, + "793cec2f-8413-484d-aa1e-388fd2b53a45": { + "id": "793cec2f-8413-484d-aa1e-388fd2b53a45", + "prev": "c66f3dfd-2d27-482b-be78-10ba733e826b", + "regions": { + "d08f9cfa-3b8d-4fb4-91ba-82d9858ea93e": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "dd56113e-e3db-41ae-91b7-2472ed194308", + "part": "whole" + }, + "id": "d08f9cfa-3b8d-4fb4-91ba-82d9858ea93e" + } + } + }, + "83e912ff-260a-4391-8a12-331aba098506": { + "id": "83e912ff-260a-4391-8a12-331aba098506", + "prev": "fe5a0732-69f5-462a-8af6-851f84a9fdec", + "regions": { + "2fefcf5f-ea20-4604-a528-5e6c91bcb100": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "c3f2f57c-7454-4d3e-b38d-b0946cf066ea", + "part": "whole" + }, + "id": "2fefcf5f-ea20-4604-a528-5e6c91bcb100" + } + } + }, + "851089af-9725-40c9-8f0b-9bf892b2b1fe": { + "id": "851089af-9725-40c9-8f0b-9bf892b2b1fe", + "prev": "636b563c-faee-4c9e-a6a3-f46a905bfa82", + "regions": { + "31c9dda5-fdf4-45e2-bcb7-12aa0f30e1d8": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "8408b90e-6cdd-44d1-86d3-648c23f877ac", + "part": "whole" + }, + "id": "31c9dda5-fdf4-45e2-bcb7-12aa0f30e1d8" + } + } + }, + "87ab653d-e804-470f-bde9-c67caaa0f354": { + "id": "87ab653d-e804-470f-bde9-c67caaa0f354", + "prev": "a8c2d446-caee-42c8-886a-ed98f4935d78", + "regions": { + "bc3aeb56-c465-4868-a1ea-2de82584de98": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "59f52294-4a25-4c92-bab8-3b07f0f44d15", + "part": "whole" + }, + "id": "bc3aeb56-c465-4868-a1ea-2de82584de98" + } + } + }, + "8b887c97-83bc-4395-83ac-f6703cbe243d": { + "id": "8b887c97-83bc-4395-83ac-f6703cbe243d", + "prev": "36a814c9-c540-4a6d-92d9-c03553d3d2c2", + "regions": { + "9d0bc72a-cb13-483f-a572-2bf60d0d145f": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "75499c85-d0a1-43db-8244-25778b9b2736", + "part": "whole" + }, + "id": "9d0bc72a-cb13-483f-a572-2bf60d0d145f" + } + } + }, + "a8b9ceb9-b38f-4489-84df-b644c6fe28f2": { + "id": "a8b9ceb9-b38f-4489-84df-b644c6fe28f2", + "prev": null, + "regions": { + "f741ed94-3f24-4427-b615-3ab8753e5814": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "bf74d2e9-2708-49b1-934b-e0ede342f475", + "part": "whole" + }, + "id": "f741ed94-3f24-4427-b615-3ab8753e5814" + } + } + }, + "a8c2d446-caee-42c8-886a-ed98f4935d78": { + "id": "a8c2d446-caee-42c8-886a-ed98f4935d78", + "prev": "2dfec088-8a70-411a-9199-904ef3fa2383", + "regions": { + "f03457d8-b2a7-4e14-9a73-cab80c5b815d": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "edaa7f2f-2439-4148-b57a-8c794c0945ec", + "part": "whole" + }, + "id": "f03457d8-b2a7-4e14-9a73-cab80c5b815d" + } + } + }, + "aa224267-f885-4c0c-95af-7bacfcc186d9": { + "id": "aa224267-f885-4c0c-95af-7bacfcc186d9", + "prev": "793cec2f-8413-484d-aa1e-388fd2b53a45", + "regions": { + "0d7ac442-5e1d-49a5-91b3-1432d72449d8": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "4d6826fe-2cb8-4468-85ed-a242a1ce7155", + "part": "whole" + }, + "id": "0d7ac442-5e1d-49a5-91b3-1432d72449d8" + } + } + }, + "b52e4d09-5186-44e5-84db-3371c087acde": { + "id": "b52e4d09-5186-44e5-84db-3371c087acde", + "prev": "134f92d0-6389-4226-af51-1134ae8e8278", + "regions": { + "7af7d997-80b2-497d-bced-ef8341763439": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "376882ec-d469-4fad-9462-18e4bbea64ca", + "part": "whole" + }, + "id": "7af7d997-80b2-497d-bced-ef8341763439" + } + } + }, + "c5f59b98-a227-4344-9d6d-03abdd01c6aa": { + "id": "c5f59b98-a227-4344-9d6d-03abdd01c6aa", + "prev": "83e912ff-260a-4391-8a12-331aba098506", + "regions": { + "7268abff-0540-4c06-aefc-c386410c0953": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "396d478b-34aa-4afa-9898-cdce8222a516", + "part": "whole" + }, + "id": "7268abff-0540-4c06-aefc-c386410c0953" + } + } + }, + "c66f3dfd-2d27-482b-be78-10ba733e826b": { + "id": "c66f3dfd-2d27-482b-be78-10ba733e826b", + "prev": "8b887c97-83bc-4395-83ac-f6703cbe243d", + "regions": { + "6cbe8e0e-8645-41a1-8a38-e44acb81be4b": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "7594c7c7-b808-48f7-9500-d7830a07968a", + "part": "whole" + }, + "id": "6cbe8e0e-8645-41a1-8a38-e44acb81be4b" + } + } + }, + "d22045e5-7e3e-452e-bc7b-c6c4a893da8e": { + "id": "d22045e5-7e3e-452e-bc7b-c6c4a893da8e", + "prev": "ec41f96a-63a3-4825-9295-f4657a440ddb", + "regions": { + "24e2a3a9-bf65-4dab-927f-0bf6ffbe581d": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "defe921f-8097-44c3-8336-8af6700804a7", + "part": "whole" + }, + "id": "24e2a3a9-bf65-4dab-927f-0bf6ffbe581d" + } + } + }, + "d24c958c-e419-4e4d-aa9c-d228a8ca55e4": { + "id": "d24c958c-e419-4e4d-aa9c-d228a8ca55e4", + "prev": "11bebe14-d1dc-476d-a31a-5828b9c3adf0", + "regions": { + "25312144-9faa-4680-bb8e-6307ea71370f": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "bed09a92-9a7a-473b-9464-90e479883a3e", + "part": "whole" + }, + "id": "25312144-9faa-4680-bb8e-6307ea71370f" + } + } + }, + "ec41f96a-63a3-4825-9295-f4657a440ddb": { + "id": "ec41f96a-63a3-4825-9295-f4657a440ddb", + "prev": "87ab653d-e804-470f-bde9-c67caaa0f354", + "regions": { + "22e8be98-c254-4d04-b0e4-b9b5ae46eefe": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "bc70f780-c240-4779-96f3-bc5ef9a37d59", + "part": "whole" + }, + "id": "22e8be98-c254-4d04-b0e4-b9b5ae46eefe" + } + } + }, + "fe5a0732-69f5-462a-8af6-851f84a9fdec": { + "id": "fe5a0732-69f5-462a-8af6-851f84a9fdec", + "prev": "d22045e5-7e3e-452e-bc7b-c6c4a893da8e", + "regions": { + "671b89f5-fa9c-4bc1-bdeb-6e0a4ce8939b": { + "attrs": { + "height": 0.8, + "width": 0.8, + "x": 0.1, + "y": 0.1 + }, + "content": { + "cell": "fd46e2ab-4ab6-4001-b536-1f323525d7d3", + "part": "whole" + }, + "id": "671b89f5-fa9c-4bc1-bdeb-6e0a4ce8939b" + } + } + } + }, + "themes": {} + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/nn.png b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/nn.png new file mode 100644 index 000000000..8910281ea Binary files /dev/null and b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/nn.png differ diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/tf_mnist.py b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/tf_mnist.py new file mode 100644 index 000000000..b26cde2b8 --- /dev/null +++ b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/tf_mnist.py @@ -0,0 +1,106 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import numpy as np +import argparse +import os +import tensorflow as tf + +from azureml.core import Run +from utils import load_data + +print("TensorFlow version:", tf.VERSION) + +parser = argparse.ArgumentParser() +parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point') +parser.add_argument('--batch-size', type=int, dest='batch_size', default=50, help='mini batch size for training') +parser.add_argument('--first-layer-neurons', type=int, dest='n_hidden_1', default=100, + help='# of neurons in the first layer') +parser.add_argument('--second-layer-neurons', type=int, dest='n_hidden_2', default=100, + help='# of neurons in the second layer') +parser.add_argument('--learning-rate', type=float, dest='learning_rate', default=0.01, help='learning rate') +args = parser.parse_args() + +data_folder = os.path.join(args.data_folder, 'mnist') + +print('training dataset is stored here:', data_folder) + +X_train = load_data(os.path.join(data_folder, 'train-images.gz'), False) / 255.0 +X_test = load_data(os.path.join(data_folder, 'test-images.gz'), False) / 255.0 + +y_train = load_data(os.path.join(data_folder, 'train-labels.gz'), True).reshape(-1) +y_test = load_data(os.path.join(data_folder, 'test-labels.gz'), True).reshape(-1) + +print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep='\n') +training_set_size = X_train.shape[0] + +n_inputs = 28 * 28 +n_h1 = args.n_hidden_1 +n_h2 = args.n_hidden_2 +n_outputs = 10 +learning_rate = args.learning_rate +n_epochs = 50 +batch_size = args.batch_size + +with tf.name_scope('network'): + # construct the DNN + X = tf.placeholder(tf.float32, shape=(None, n_inputs), name='X') + y = tf.placeholder(tf.int64, shape=(None), name='y') + h1 = tf.layers.dense(X, n_h1, activation=tf.nn.relu, name='h1') + h2 = tf.layers.dense(h1, n_h2, activation=tf.nn.relu, name='h2') + output = tf.layers.dense(h2, n_outputs, name='output') + +with tf.name_scope('train'): + cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=output) + loss = tf.reduce_mean(cross_entropy, name='loss') + optimizer = tf.train.GradientDescentOptimizer(learning_rate) + train_op = optimizer.minimize(loss) + +with tf.name_scope('eval'): + correct = tf.nn.in_top_k(output, y, 1) + acc_op = tf.reduce_mean(tf.cast(correct, tf.float32)) + +init = tf.global_variables_initializer() +saver = tf.train.Saver() + +# start an Azure ML run +run = Run.get_submitted_run() + +with tf.Session() as sess: + init.run() + for epoch in range(n_epochs): + + # randomly shuffle training set + indices = np.random.permutation(training_set_size) + X_train = X_train[indices] + y_train = y_train[indices] + + # batch index + b_start = 0 + b_end = b_start + batch_size + for _ in range(training_set_size // batch_size): + # get a batch + X_batch, y_batch = X_train[b_start: b_end], y_train[b_start: b_end] + + # update batch index for the next batch + b_start = b_start + batch_size + b_end = min(b_start + batch_size, training_set_size) + + # train + sess.run(train_op, feed_dict={X: X_batch, y: y_batch}) + # evaluate training set + acc_train = acc_op.eval(feed_dict={X: X_batch, y: y_batch}) + # evaluate validation set + acc_val = acc_op.eval(feed_dict={X: X_test, y: y_test}) + + # log accuracies + run.log('training_acc', np.float(acc_train)) + run.log('validation_acc', np.float(acc_val)) + print(epoch, '-- Training accuracy:', acc_train, '\b Validation accuracy:', acc_val) + y_hat = np.argmax(output.eval(feed_dict={X: X_test}), axis=1) + + run.log('final_acc', np.float(acc_val)) + + os.makedirs('./outputs/model', exist_ok=True) + # files saved in the "./outputs" folder are automatically uploaded into run history + saver.save(sess, './outputs/model/mnist-tf.model') diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/utils.py b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/utils.py new file mode 100644 index 000000000..98170adae --- /dev/null +++ b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/utils.py @@ -0,0 +1,27 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import gzip +import numpy as np +import struct + + +# load compressed MNIST gz files and return numpy arrays +def load_data(filename, label=False): + with gzip.open(filename) as gz: + struct.unpack('I', gz.read(4)) + n_items = struct.unpack('>I', gz.read(4)) + if not label: + n_rows = struct.unpack('>I', gz.read(4))[0] + n_cols = struct.unpack('>I', gz.read(4))[0] + res = np.frombuffer(gz.read(n_items[0] * n_rows * n_cols), dtype=np.uint8) + res = res.reshape(n_items[0], n_rows * n_cols) + else: + res = np.frombuffer(gz.read(n_items[0]), dtype=np.uint8) + res = res.reshape(n_items[0], 1) + return res + + +# one-hot encode a 1-D array +def one_hot_encode(array, num_of_classes): + return np.eye(num_of_classes)[array.reshape(-1)] diff --git a/training/06.distributed-cntk-with-custom-docker/06.distributed-cntk-with-custom-docker.ipynb b/training/06.distributed-cntk-with-custom-docker/06.distributed-cntk-with-custom-docker.ipynb index de9a0d409..c24c1c919 100644 --- a/training/06.distributed-cntk-with-custom-docker/06.distributed-cntk-with-custom-docker.ipynb +++ b/training/06.distributed-cntk-with-custom-docker/06.distributed-cntk-with-custom-docker.ipynb @@ -22,11 +22,10 @@ "metadata": {}, "source": [ "## Prerequisites\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning services\n", + "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning\n", "* Go through the [00.configuration.ipynb]() notebook to:\n", " * install the AML SDK\n", - " * create a workspace and its configuration file (`config.json`)\n", - "* Review the [tutorial]() on single-node PyTorch training using the SDK" + " * create a workspace and its configuration file (`config.json`)" ] }, { @@ -106,6 +105,80 @@ " print(compute_target.status.serialize())" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Upload training data\n", + "For this tutorial, we will be using the MNIST dataset.\n", + "\n", + "First, let's download the dataset. We've included the `install_mnist.py` script to download the data and convert it to a CNTK-supported format. Our data files will get written to a directory named `'mnist'`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import install_mnist\n", + "\n", + "install_mnist.main('mnist')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To make the data accessible for remote training, you will need to upload the data from your local machine to the cloud. AML provides a convenient way to do so via a [Datastore](https://docs.microsoft.com/azure/machine-learning/service/how-to-access-data). The datastore provides a mechanism for you to upload/download data, and interact with it from your remote compute targets. \n", + "\n", + "Each workspace is associated with a default datastore. In this tutorial, we will upload the training data to this default datastore, which we will then mount on the remote compute for training in the next section." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ds = ws.get_default_datastore()\n", + "print(ds.datastore_type, ds.account_name, ds.container_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following code will upload the training data to the path `./mnist` on the default datastore." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ds.upload(src_dir='./mnist', target_path='./mnist')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's get a reference to the path on the datastore with the training data. We can do so using the `path` method. In the next section, we can then pass this reference to our training script's `--data_dir` argument. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "path_on_datastore = 'mnist'\n", + "ds_data = ds.path(path_on_datastore)\n", + "print(ds_data)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -138,7 +211,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Copy the training script `tf_mnist_replica.py` into this project directory." + "Copy the training script `cntk_distr_mnist.py` into this project directory." ] }, { @@ -148,7 +221,7 @@ "outputs": [], "source": [ "import shutil\n", - "shutil.copy('cntk_mnist.py', project_folder)" + "shutil.copy('cntk_distr_mnist.py', project_folder)" ] }, { @@ -187,21 +260,29 @@ "source": [ "from azureml.train.estimator import *\n", "\n", + "script_params = {\n", + " '--num_epochs': 50,\n", + " '--data_dir': ds_data.as_mount(),\n", + " '--output_dir': './outputs'\n", + "}\n", + "\n", "estimator = Estimator(source_directory=project_folder,\n", " compute_target=compute_target,\n", - " entry_script='cntk_mnist.py',\n", + " entry_script='cntk_distr_mnist.py',\n", + " script_params=script_params,\n", " node_count=2,\n", " process_count_per_node=1,\n", " distributed_backend='mpi', \n", - " pip_packages=['cntk==2.5.1'],\n", - " custom_docker_base_image='microsoft/mmlspark:0.12')" + " pip_packages=['cntk-gpu==2.6'],\n", + " custom_docker_base_image='microsoft/mmlspark:gpu-0.12',\n", + " use_gpu=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We would like to train our model using a [pre-built Docker container](https://hub.docker.com/r/microsoft/mmlspark/). To do so, we specify the name of the docker image to the argument `custom_docker_base_image`. You can only provide images available in public docker repositories such as Docker Hub using this argument. To use an image from a private docker repository, use the constructor's `environment_definition` parameter instead. Finally, we provide the `cntk` package to `pip_packages` to install CNTK 2.5.1 on our custom image.\n", + "We would like to train our model using a [pre-built Docker container](https://hub.docker.com/r/microsoft/mmlspark/). To do so, specify the name of the docker image to the argument `custom_docker_base_image`. You can only provide images available in public docker repositories such as Docker Hub using this argument. To use an image from a private docker repository, use the constructor's `environment_definition` parameter instead. Finally, we provide the `cntk` package to `pip_packages` to install CNTK 2.6 on our custom image.\n", "\n", "The above code specifies that we will run our training script on `2` nodes, with one worker per node. In order to run distributed CNTK, which uses MPI, you must provide the argument `distributed_backend='mpi'`." ] diff --git a/training/06.distributed-cntk-with-custom-docker/cntk_distr_mnist.py b/training/06.distributed-cntk-with-custom-docker/cntk_distr_mnist.py new file mode 100644 index 000000000..9d263e072 --- /dev/null +++ b/training/06.distributed-cntk-with-custom-docker/cntk_distr_mnist.py @@ -0,0 +1,117 @@ +# Copyright (c) Microsoft. All rights reserved. +# Licensed under the MIT license. +# Adapted from: +# https://github.com/Microsoft/CNTK/blob/master/Examples/Image/Classification/ConvNet/Python/ConvNet_MNIST.py +# ==================================================================== +"""Train a CNN model on the MNIST dataset via distributed training.""" + +from __future__ import print_function +import numpy as np +import os +import cntk as C +import argparse +from cntk.train.training_session import CheckpointConfig, TestConfig + + +def create_reader(path, is_training, input_dim, label_dim, total_number_of_samples): + """Define the reader for both training and evaluation action.""" + return C.io.MinibatchSource(C.io.CTFDeserializer(path, C.io.StreamDefs( + features=C.io.StreamDef(field='features', shape=input_dim), + labels=C.io.StreamDef(field='labels', shape=label_dim) + )), randomize=is_training, max_samples=total_number_of_samples) + + +def convnet_mnist(max_epochs, output_dir, data_dir, debug_output=False, epoch_size=60000, minibatch_size=64): + """Creates and trains a feedforward classification model for MNIST images.""" + image_height = 28 + image_width = 28 + num_channels = 1 + input_dim = image_height * image_width * num_channels + num_output_classes = 10 + + # Input variables denoting the features and label data + input_var = C.ops.input_variable((num_channels, image_height, image_width), np.float32) + label_var = C.ops.input_variable(num_output_classes, np.float32) + + # Instantiate the feedforward classification model + scaled_input = C.ops.element_times(C.ops.constant(0.00390625), input_var) + + with C.layers.default_options(activation=C.ops.relu, pad=False): + conv1 = C.layers.Convolution2D((5, 5), 32, pad=True)(scaled_input) + pool1 = C.layers.MaxPooling((3, 3), (2, 2))(conv1) + conv2 = C.layers.Convolution2D((3, 3), 48)(pool1) + pool2 = C.layers.MaxPooling((3, 3), (2, 2))(conv2) + conv3 = C.layers.Convolution2D((3, 3), 64)(pool2) + f4 = C.layers.Dense(96)(conv3) + drop4 = C.layers.Dropout(0.5)(f4) + z = C.layers.Dense(num_output_classes, activation=None)(drop4) + + ce = C.losses.cross_entropy_with_softmax(z, label_var) + pe = C.metrics.classification_error(z, label_var) + + # Load train data + reader_train = create_reader(os.path.join(data_dir, 'Train-28x28_cntk_text.txt'), True, + input_dim, num_output_classes, max_epochs * epoch_size) + # Load test data + reader_test = create_reader(os.path.join(data_dir, 'Test-28x28_cntk_text.txt'), False, + input_dim, num_output_classes, C.io.FULL_DATA_SWEEP) + + # Set learning parameters + lr_per_sample = [0.001] * 10 + [0.0005] * 10 + [0.0001] + lr_schedule = C.learning_parameter_schedule_per_sample(lr_per_sample, epoch_size=epoch_size) + mms = [0] * 5 + [0.9990239141819757] + mm_schedule = C.learners.momentum_schedule_per_sample(mms, epoch_size=epoch_size) + + # Instantiate the trainer object to drive the model training + local_learner = C.learners.momentum_sgd(z.parameters, lr_schedule, mm_schedule) + progress_printer = C.logging.ProgressPrinter( + tag='Training', + rank=C.train.distributed.Communicator.rank(), + num_epochs=max_epochs, + ) + + learner = C.train.distributed.data_parallel_distributed_learner(local_learner) + trainer = C.Trainer(z, (ce, pe), learner, progress_printer) + + # define mapping from reader streams to network inputs + input_map_train = { + input_var: reader_train.streams.features, + label_var: reader_train.streams.labels + } + + input_map_test = { + input_var: reader_test.streams.features, + label_var: reader_test.streams.labels + } + + C.logging.log_number_of_parameters(z) + print() + + C.train.training_session( + trainer=trainer, + mb_source=reader_train, + model_inputs_to_streams=input_map_train, + mb_size=minibatch_size, + progress_frequency=epoch_size, + checkpoint_config=CheckpointConfig(frequency=epoch_size, + filename=os.path.join(output_dir, "ConvNet_MNIST")), + test_config=TestConfig(reader_test, minibatch_size=minibatch_size, + model_inputs_to_streams=input_map_test) + ).train() + + return + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--num_epochs', help='Total number of epochs to train', type=int, default='40') + parser.add_argument('--output_dir', help='Output directory', required=False, default='outputs') + parser.add_argument('--data_dir', help='Directory with training data') + args = parser.parse_args() + + os.makedirs(args.output_dir, exist_ok=True) + + convnet_mnist(args.num_epochs, args.output_dir, args.data_dir) + + # Must call MPI finalize when process exit without exceptions + C.train.distributed.Communicator.finalize() diff --git a/training/06.distributed-cntk-with-custom-docker/install_mnist.py b/training/06.distributed-cntk-with-custom-docker/install_mnist.py new file mode 100644 index 000000000..f0fe108f6 --- /dev/null +++ b/training/06.distributed-cntk-with-custom-docker/install_mnist.py @@ -0,0 +1,96 @@ +# Copyright (c) Microsoft. All rights reserved. +# Licensed under the MIT license. +# Script from: +# https://github.com/Microsoft/CNTK/blob/master/Examples/Image/DataSets/MNIST/install_mnist.py + +from __future__ import print_function +try: + from urllib.request import urlretrieve +except ImportError: + from urllib import urlretrieve +import gzip +import os +import struct +import numpy as np + + +def loadData(src, cimg): + print('Downloading ' + src) + gzfname, h = urlretrieve(src, './delete.me') + print('Done.') + try: + with gzip.open(gzfname) as gz: + n = struct.unpack('I', gz.read(4)) + # Read magic number. + if n[0] != 0x3080000: + raise Exception('Invalid file: unexpected magic number.') + # Read number of entries. + n = struct.unpack('>I', gz.read(4))[0] + if n != cimg: + raise Exception('Invalid file: expected {0} entries.'.format(cimg)) + crow = struct.unpack('>I', gz.read(4))[0] + ccol = struct.unpack('>I', gz.read(4))[0] + if crow != 28 or ccol != 28: + raise Exception('Invalid file: expected 28 rows/cols per image.') + # Read data. + res = np.fromstring(gz.read(cimg * crow * ccol), dtype=np.uint8) + finally: + os.remove(gzfname) + return res.reshape((cimg, crow * ccol)) + + +def loadLabels(src, cimg): + print('Downloading ' + src) + gzfname, h = urlretrieve(src, './delete.me') + print('Done.') + try: + with gzip.open(gzfname) as gz: + n = struct.unpack('I', gz.read(4)) + # Read magic number. + if n[0] != 0x1080000: + raise Exception('Invalid file: unexpected magic number.') + # Read number of entries. + n = struct.unpack('>I', gz.read(4)) + if n[0] != cimg: + raise Exception('Invalid file: expected {0} rows.'.format(cimg)) + # Read labels. + res = np.fromstring(gz.read(cimg), dtype=np.uint8) + finally: + os.remove(gzfname) + return res.reshape((cimg, 1)) + + +def load(dataSrc, labelsSrc, cimg): + data = loadData(dataSrc, cimg) + labels = loadLabels(labelsSrc, cimg) + return np.hstack((data, labels)) + + +def savetxt(filename, ndarray): + with open(filename, 'w') as f: + labels = list(map(' '.join, np.eye(10, dtype=np.uint).astype(str))) + for row in ndarray: + row_str = row.astype(str) + label_str = labels[row[-1]] + feature_str = ' '.join(row_str[:-1]) + f.write('|labels {} |features {}\n'.format(label_str, feature_str)) + + +def main(data_dir): + os.makedirs(data_dir, exist_ok=True) + train = load('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz', + 'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz', 60000) + print('Writing train text file...') + train_txt = os.path.join(data_dir, 'Train-28x28_cntk_text.txt') + savetxt(train_txt, train) + print('Done.') + test = load('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz', + 'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz', 10000) + print('Writing test text file...') + test_txt = os.path.join(data_dir, 'Test-28x28_cntk_text.txt') + savetxt(test_txt, test) + print('Done.') + + +if __name__ == "__main__": + main('mnist') diff --git a/training/07.tensorboard/07.tensorboard.ipynb b/training/07.tensorboard/07.tensorboard.ipynb index f34b5e652..ec0f9b654 100644 --- a/training/07.tensorboard/07.tensorboard.ipynb +++ b/training/07.tensorboard/07.tensorboard.ipynb @@ -351,7 +351,9 @@ "\n", "try:\n", " # If you already have a cluster named this, we don't need to make a new one.\n", - " compute_target = [ct for ct in ws.compute_targets() if ct.name == clust_name and ct.type == 'BatchAI'][0]\n", + " cts = ws.compute_targets() \n", + " compute_target = cts[clust_name]\n", + " assert compute_target.type == 'BatchAI'\n", "except:\n", " # Let's make a new one here.\n", " provisioning_config = BatchAiCompute.provisioning_configuration(cluster_max_nodes=2, \n", diff --git a/tutorials/01.train-models.ipynb b/tutorials/01.train-models.ipynb index 916145955..2d1d9c4e1 100644 --- a/tutorials/01.train-models.ipynb +++ b/tutorials/01.train-models.ipynb @@ -664,7 +664,7 @@ "\n", "You are ready to deploy this registered model using the instructions in the next part of the tutorial series:\n", "\n", - "> [Tutorial 2 - Deploy models](deploy-models.ipynb)" + "> [Tutorial 2 - Deploy models](02.deploy-models.ipynb)" ] } ], diff --git a/tutorials/03.auto-train-models.ipynb b/tutorials/03.auto-train-models.ipynb index e6a66337d..2a9c4815f 100644 --- a/tutorials/03.auto-train-models.ipynb +++ b/tutorials/03.auto-train-models.ipynb @@ -15,11 +15,11 @@ "source": [ "# Tutorial: Automatically train a classification model with Azure Automated Machine Learning\n", "\n", - "In this tutorial, you'll learn how to automatically generate a machine learning model. This model can then be deployed following the workflow in the [Deploy a model](tutorial-deploy-models-with-aml.md) tutorial.\n", + "In this tutorial, you'll learn how to automatically generate a machine learning model. This model can then be deployed following the workflow in the [Deploy a model](02.deploy-models.ipynb) tutorial.\n", "\n", - "[flow diagram](imgs/nn.png)\n", + "[flow diagram](./imgs/flow2.png)\n", "\n", - "Similar to the [train models tutorial](tutorial-train-models-with-aml.md), this tutorial classifies handwritten images of digits (0-9) from the [MNIST](http://yann.lecun.com/exdb/mnist/) dataset.\n", + "Similar to the [train models tutorial](01.train-models.ipynb), this tutorial classifies handwritten images of digits (0-9) from the [MNIST](http://yann.lecun.com/exdb/mnist/) dataset.\n", "\n", "You'll learn how to:\n", "\n",