diff --git a/project/.ipynb_checkpoints/starter (1)-checkpoint.ipynb b/project/.ipynb_checkpoints/starter (1)-checkpoint.ipynb
new file mode 100644
index 000000000..ddc9ea667
--- /dev/null
+++ b/project/.ipynb_checkpoints/starter (1)-checkpoint.ipynb
@@ -0,0 +1,3164 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Deploy and monitor a machine learning workflow for Image Classification"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Setting up this notebook\n",
+ "\n",
+ "Notes about the instance size and kernel setup: this notebook has been tested on\n",
+ "\n",
+ "1. The `Python 3 (Data Science)` kernel\n",
+ "2. The `ml.t3.medium` Sagemaker notebook instance\n",
+ "\n",
+ "## Data Staging\n",
+ "\n",
+ "We'll use a sample dataset called CIFAR to simulate the challenges Scones Unlimited are facing in Image Classification. In order to start working with CIFAR we'll need to:\n",
+ "\n",
+ "1. Extract the data from a hosting service\n",
+ "2. Transform it into a usable shape and format\n",
+ "3. Load it into a production system\n",
+ "\n",
+ "In other words, we're going to do some simple ETL!\n",
+ "\n",
+ "### 1. Extract the data from the hosting service\n",
+ "\n",
+ "In the cell below, define a function `extract_cifar_data` that extracts python version of the CIFAR-100 dataset. The CIFAR dataaset is open source and generously hosted by the University of Toronto at: https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import requests\n",
+ "\n",
+ "def extract_cifar_data(url, filename=\"cifar.tar.gz\"):\n",
+ " \"\"\"A function for extracting the CIFAR-100 dataset and storing it as a gzipped file\n",
+ " \n",
+ " Arguments:\n",
+ " url -- the URL where the dataset is hosted\n",
+ " filename -- the full path where the dataset will be written\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " # Todo: request the data from the data url\n",
+ " # Hint: use `requests.get` method\n",
+ " r = requests.get(url)\n",
+ " with open(filename, \"wb\") as file_context:\n",
+ " file_context.write(r.content)\n",
+ " return"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's test it out! Run the following cell and check whether a new file `cifar.tar.gz` is created in the file explorer."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "extract_cifar_data(\"https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz\") "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2. Transform the data into a usable shape and format\n",
+ "\n",
+ "Clearly, distributing the data as a gzipped archive makes sense for the hosting service! It saves on bandwidth, storage, and it's a widely-used archive format. In fact, it's so widely used that the Python community ships a utility for working with them, `tarfile`, as part of its Standard Library. Execute the following cell to decompress your extracted dataset:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import tarfile\n",
+ "\n",
+ "with tarfile.open(\"cifar.tar.gz\", \"r:gz\") as tar:\n",
+ " tar.extractall()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A new folder `cifar-100-python` should be created, containing `meta`, `test`, and `train` files. These files are `pickles` and the [CIFAR homepage](https://www.cs.toronto.edu/~kriz/cifar.html) provides a simple script that can be used to load them. We've adapted the script below for you to run:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import pickle\n",
+ "\n",
+ "with open(\"./cifar-100-python/meta\", \"rb\") as f:\n",
+ " dataset_meta = pickle.load(f, encoding='bytes')\n",
+ "\n",
+ "with open(\"./cifar-100-python/test\", \"rb\") as f:\n",
+ " dataset_test = pickle.load(f, encoding='bytes')\n",
+ "\n",
+ "with open(\"./cifar-100-python/train\", \"rb\") as f:\n",
+ " dataset_train = pickle.load(f, encoding='bytes')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dict_keys([b'filenames', b'batch_label', b'fine_labels', b'coarse_labels', b'data'])"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Feel free to explore the datasets\n",
+ "\n",
+ "dataset_train.keys()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "As documented on the homepage, `b'data'` contains rows of 3073 unsigned integers, representing three channels (red, green, and blue) for one 32x32 pixel image per row."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3072"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "32*32*3"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For a simple gut-check, let's transform one of our images. Each 1024 items in a row is a channel (red, green, then blue). Each 32 items in the channel are a row in the 32x32 image. Using python, we can stack these channels into a 32x32x3 array, and save it as a PNG file:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "# Each 1024 in a row is a channel (red, green, then blue)\n",
+ "row = dataset_train[b'data'][0]\n",
+ "red, green, blue = row[0:1024], row[1024:2048], row[2048:]\n",
+ "\n",
+ "# Each 32 items in the channel are a row in the 32x32 image\n",
+ "red = red.reshape(32,32)\n",
+ "green = green.reshape(32,32)\n",
+ "blue = blue.reshape(32,32)\n",
+ "\n",
+ "# Combine the channels into a 32x32x3 image!\n",
+ "combined = np.dstack((red,green,blue))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For a more concise version, consider the following:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# All in one:\n",
+ "test_image = np.dstack((\n",
+ " row[0:1024].reshape(32,32),\n",
+ " row[1024:2048].reshape(32,32),\n",
+ " row[2048:].reshape(32,32)\n",
+ "))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "plt.imshow(test_image);"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Looks like a cow! Let's check the label. `dataset_meta` contains label names in order, and `dataset_train` has a list of labels for each row."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "19"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train[b'fine_labels'][0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Our image has a label of `19`, so let's see what the 19th item is in the list of label names."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b'cattle'\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(dataset_meta[b'fine_label_names'][19])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ok! 'cattle' sounds about right. By the way, using the previous two lines we can do:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b'cattle'\n"
+ ]
+ }
+ ],
+ "source": [
+ "n = 0\n",
+ "print(dataset_meta[b'fine_label_names'][dataset_train[b'fine_labels'][n]])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we know how to check labels, is there a way that we can also check file names? `dataset_train` also contains a `b'filenames'` key. Let's see what we have here:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b'bos_taurus_s_000507.png'\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(dataset_train[b'filenames'][0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\"Taurus\" is the name of a subspecies of cattle, so this looks like a pretty reasonable filename. To save an image we can also do:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "plt.imsave(\"file.png\", test_image)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Your new PNG file should now appear in the file explorer -- go ahead and pop it open to see!\n",
+ "\n",
+ "Now that you know how to reshape the images, save them as files, and capture their filenames and labels, let's just capture all the bicycles and motorcycles and save them. Scones Unlimited can use a model that tells these apart to route delivery drivers automatically.\n",
+ "\n",
+ "In the following cell, identify the label numbers for Bicycles and Motorcycles:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "b'motorcycle'"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_meta[b'fine_label_names'][48]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "b'bicycle'"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_meta[b'fine_label_names'][8]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dict_keys([b'filenames', b'batch_label', b'fine_labels', b'coarse_labels', b'data'])"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train.keys()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "False"
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train[b'fine_labels'] == 8 "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dict_keys([b'fine_label_names', b'coarse_label_names'])"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_meta.keys()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Motorcycle Label 48: b'motorcycle'\n",
+ "Bicycle Label 8: b'bicycle'\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "# Todo: Filter the dataset_train and dataset_meta objects to find the label numbers for Bicycle and Motorcycles\n",
+ "motor_label = dataset_meta[b'fine_label_names'][48]\n",
+ "bicycle_label = dataset_meta[b'fine_label_names'][8]\n",
+ "print('Motorcycle Label 48:', dataset_meta[b'fine_label_names'][48])\n",
+ "print('Bicycle Label 8:', dataset_meta[b'fine_label_names'][8])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Good job! We only need objects with label 8 and 48 -- this drastically simplifies our handling of the data! Below we construct a dataframe for you, and you can safely drop the rows that don't contain observations about bicycles and motorcycles. Fill in the missing lines below to drop all other rows:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#Construct the dataframe\n",
+ "df_train = pd.DataFrame({\n",
+ " \"filenames\": dataset_train[b'filenames'],\n",
+ " \"labels\": dataset_train[b'fine_labels'],\n",
+ " \"row\": range(len(dataset_train[b'filenames']))\n",
+ "})\n",
+ "\n",
+ "# Drop all rows from df_train where label is not 8 or 48\n",
+ "mask_train = (df_train['labels'] == 8) | (df_train['labels'] == 48)\n",
+ "df_train = df_train[mask_train]\n",
+ "\n",
+ "# Decode df_train.filenames so they are regular strings\n",
+ "df_train[\"filenames\"] = df_train[\"filenames\"].apply(\n",
+ " lambda x: x.decode(\"utf-8\")\n",
+ ")\n",
+ "\n",
+ "\n",
+ "df_test = pd.DataFrame({\n",
+ " \"filenames\": dataset_test[b'filenames'],\n",
+ " \"labels\": dataset_test[b'fine_labels'],\n",
+ " \"row\": range(len(dataset_test[b'filenames']))\n",
+ "})\n",
+ "\n",
+ "# Drop all rows from df_test where label is not 8 or 48\n",
+ "mask_test = (df_test['labels'] == 8) | (df_test['labels'] == 48)\n",
+ "df_test = df_test[mask_test]\n",
+ "\n",
+ "# Decode df_test.filenames so they are regular strings\n",
+ "df_test[\"filenames\"] = df_test[\"filenames\"].apply(\n",
+ " lambda x: x.decode(\"utf-8\")\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now that the data is filtered for just our classes, we can save all our images."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "!mkdir ./train\n",
+ "!mkdir ./test"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In the previous sections we introduced you to several key snippets of code:\n",
+ "\n",
+ "1. Grabbing the image data:\n",
+ "\n",
+ "```python\n",
+ "dataset_train[b'data'][0]\n",
+ "```\n",
+ "\n",
+ "2. A simple idiom for stacking the image data into the right shape\n",
+ "\n",
+ "```python\n",
+ "import numpy as np\n",
+ "np.dstack((\n",
+ " row[0:1024].reshape(32,32),\n",
+ " row[1024:2048].reshape(32,32),\n",
+ " row[2048:].reshape(32,32)\n",
+ "))\n",
+ "```\n",
+ "\n",
+ "3. A simple `matplotlib` utility for saving images\n",
+ "\n",
+ "```python\n",
+ "plt.imsave(path+row['filenames'], target)\n",
+ "```\n",
+ "\n",
+ "Compose these together into a function that saves all the images into the `./test` and `./train` directories. Use the comments in the body of the `save_images` function below to guide your construction of the function:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "filenames\n",
+ "labels\n",
+ "row\n"
+ ]
+ }
+ ],
+ "source": [
+ "for index, row in df_train.iterrows():\n",
+ " name = row[b'filenames']\n",
+ " path = 'train/'\n",
+ " data = dataset_train[b'data'][row['row']]\n",
+ " save_images(data, path, names)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "8"
+ ]
+ },
+ "execution_count": 74,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train[b'fine_labels'][16]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 75,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "b'bike_s_000682.png'"
+ ]
+ },
+ "execution_count": 75,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train[b'filenames'][16]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
filenames
\n",
+ "
labels
\n",
+ "
row
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
16
\n",
+ "
bike_s_000682.png
\n",
+ "
8
\n",
+ "
16
\n",
+ "
\n",
+ "
\n",
+ "
30
\n",
+ "
bike_s_000127.png
\n",
+ "
8
\n",
+ "
30
\n",
+ "
\n",
+ "
\n",
+ "
130
\n",
+ "
cycle_s_002598.png
\n",
+ "
8
\n",
+ "
130
\n",
+ "
\n",
+ "
\n",
+ "
152
\n",
+ "
minibike_s_000824.png
\n",
+ "
48
\n",
+ "
152
\n",
+ "
\n",
+ "
\n",
+ "
195
\n",
+ "
motorcycle_s_001856.png
\n",
+ "
48
\n",
+ "
195
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
49578
\n",
+ "
velocipede_s_000010.png
\n",
+ "
8
\n",
+ "
49578
\n",
+ "
\n",
+ "
\n",
+ "
49588
\n",
+ "
motorcycle_s_001247.png
\n",
+ "
48
\n",
+ "
49588
\n",
+ "
\n",
+ "
\n",
+ "
49882
\n",
+ "
motorcycle_s_000724.png
\n",
+ "
48
\n",
+ "
49882
\n",
+ "
\n",
+ "
\n",
+ "
49962
\n",
+ "
velocipede_s_001637.png
\n",
+ "
8
\n",
+ "
49962
\n",
+ "
\n",
+ "
\n",
+ "
49985
\n",
+ "
motorcycle_s_000291.png
\n",
+ "
48
\n",
+ "
49985
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1000 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " filenames labels row\n",
+ "16 bike_s_000682.png 8 16\n",
+ "30 bike_s_000127.png 8 30\n",
+ "130 cycle_s_002598.png 8 130\n",
+ "152 minibike_s_000824.png 48 152\n",
+ "195 motorcycle_s_001856.png 48 195\n",
+ "... ... ... ...\n",
+ "49578 velocipede_s_000010.png 8 49578\n",
+ "49588 motorcycle_s_001247.png 48 49588\n",
+ "49882 motorcycle_s_000724.png 48 49882\n",
+ "49962 velocipede_s_001637.png 8 49962\n",
+ "49985 motorcycle_s_000291.png 48 49985\n",
+ "\n",
+ "[1000 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 68,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_train"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "def save_images(data, path, filename):\n",
+ " #Grab the image data in row-major form\n",
+ " img = data\n",
+ " \n",
+ " # Consolidated stacking/reshaping from earlier\n",
+ " target = np.dstack((img[0:1024].reshape(32,32),\n",
+ " img[1024:2048].reshape(32,32),\n",
+ " img[2048:].reshape(32,32)\n",
+ " ))\n",
+ " \n",
+ " \n",
+ " # Save the image\n",
+ " plt.imsave(path+filename, target)\n",
+ " \n",
+ " # Return any signal data you want for debugging\n",
+ " return True\n",
+ "\n",
+ "## TODO: save ALL images using the save_images function\n",
+ "for index, row in df_train.iterrows():\n",
+ " name = row['filenames']\n",
+ " path = 'train/'\n",
+ " data = dataset_train[b'data'][row['row']]\n",
+ " save_images(data, path, name)\n",
+ " \n",
+ "for index, row in df_test.iterrows():\n",
+ " name = row['filenames']\n",
+ " path = 'test/'\n",
+ " data = dataset_train[b'data'][row['row']]\n",
+ " save_images(data, path, name)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 3. Load the data\n",
+ "\n",
+ "Now we can load the data into S3.\n",
+ "\n",
+ "Using the sagemaker SDK grab the current region, execution role, and bucket."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 111,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Default Bucket: udacity-ml-workflow\n",
+ "AWS Region: us-east-1\n",
+ "RoleArn: arn:aws:iam::683237399578:role/service-role/AmazonSageMaker-ExecutionRole-20230119T145763\n"
+ ]
+ }
+ ],
+ "source": [
+ "import sagemaker\n",
+ "from sagemaker import get_execution_role\n",
+ "\n",
+ "bucket= \"udacity-ml-workflow\"\n",
+ "print(\"Default Bucket: {}\".format(bucket))\n",
+ "\n",
+ "region = \"us-east-1\"\n",
+ "print(\"AWS Region: {}\".format(region))\n",
+ "\n",
+ "role = get_execution_role()\n",
+ "print(\"RoleArn: {}\".format(role))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "With this data we can easily sync your data up into S3!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 112,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "upload: train/bicycle_s_000017.png to s3://udacity-ml-workflow/train/bicycle_s_000017.png\n",
+ "upload: train/bicycle_s_000124.png to s3://udacity-ml-workflow/train/bicycle_s_000124.png\n",
+ "upload: train/bicycle_s_000021.png to s3://udacity-ml-workflow/train/bicycle_s_000021.png\n",
+ "upload: train/bicycle_s_000039.png to s3://udacity-ml-workflow/train/bicycle_s_000039.png\n",
+ "upload: train/bicycle_s_000043.png to s3://udacity-ml-workflow/train/bicycle_s_000043.png\n",
+ "upload: train/bicycle_s_000137.png to s3://udacity-ml-workflow/train/bicycle_s_000137.png\n",
+ "upload: train/bicycle_s_000149.png to s3://udacity-ml-workflow/train/bicycle_s_000149.png\n",
+ "upload: train/bicycle_s_000038.png to s3://udacity-ml-workflow/train/bicycle_s_000038.png\n",
+ "upload: train/bicycle_s_000071.png to s3://udacity-ml-workflow/train/bicycle_s_000071.png\n",
+ "upload: train/bicycle_s_000156.png to s3://udacity-ml-workflow/train/bicycle_s_000156.png\n",
+ "upload: train/bicycle_s_000147.png to s3://udacity-ml-workflow/train/bicycle_s_000147.png\n",
+ "upload: train/bicycle_s_000051.png to s3://udacity-ml-workflow/train/bicycle_s_000051.png\n",
+ "upload: train/bicycle_s_000282.png to s3://udacity-ml-workflow/train/bicycle_s_000282.png\n",
+ "upload: train/bicycle_s_000180.png to s3://udacity-ml-workflow/train/bicycle_s_000180.png\n",
+ "upload: train/bicycle_s_000035.png to s3://udacity-ml-workflow/train/bicycle_s_000035.png\n",
+ "upload: train/bicycle_s_000243.png to s3://udacity-ml-workflow/train/bicycle_s_000243.png\n",
+ "upload: train/bicycle_s_000235.png to s3://udacity-ml-workflow/train/bicycle_s_000235.png\n",
+ "upload: train/bicycle_s_000231.png to s3://udacity-ml-workflow/train/bicycle_s_000231.png\n",
+ "upload: train/bicycle_s_000099.png to s3://udacity-ml-workflow/train/bicycle_s_000099.png\n",
+ "upload: train/bicycle_s_000437.png to s3://udacity-ml-workflow/train/bicycle_s_000437.png\n",
+ "upload: train/bicycle_s_000371.png to s3://udacity-ml-workflow/train/bicycle_s_000371.png\n",
+ "upload: train/bicycle_s_000392.png to s3://udacity-ml-workflow/train/bicycle_s_000392.png\n",
+ "upload: train/bicycle_s_000314.png to s3://udacity-ml-workflow/train/bicycle_s_000314.png\n",
+ "upload: train/bicycle_s_000066.png to s3://udacity-ml-workflow/train/bicycle_s_000066.png\n",
+ "upload: train/bicycle_s_000467.png to s3://udacity-ml-workflow/train/bicycle_s_000467.png\n",
+ "upload: train/bicycle_s_000159.png to s3://udacity-ml-workflow/train/bicycle_s_000159.png\n",
+ "upload: train/bicycle_s_000279.png to s3://udacity-ml-workflow/train/bicycle_s_000279.png\n",
+ "upload: train/bicycle_s_000399.png to s3://udacity-ml-workflow/train/bicycle_s_000399.png\n",
+ "upload: train/bicycle_s_000491.png to s3://udacity-ml-workflow/train/bicycle_s_000491.png\n",
+ "upload: train/bicycle_s_000536.png to s3://udacity-ml-workflow/train/bicycle_s_000536.png\n",
+ "upload: train/bicycle_s_000546.png to s3://udacity-ml-workflow/train/bicycle_s_000546.png\n",
+ "upload: train/bicycle_s_000369.png to s3://udacity-ml-workflow/train/bicycle_s_000369.png\n",
+ "upload: train/bicycle_s_000435.png to s3://udacity-ml-workflow/train/bicycle_s_000435.png\n",
+ "upload: train/bicycle_s_000396.png to s3://udacity-ml-workflow/train/bicycle_s_000396.png\n",
+ "upload: train/bicycle_s_000537.png to s3://udacity-ml-workflow/train/bicycle_s_000537.png\n",
+ "upload: train/bicycle_s_000561.png to s3://udacity-ml-workflow/train/bicycle_s_000561.png\n",
+ "upload: train/bicycle_s_000408.png to s3://udacity-ml-workflow/train/bicycle_s_000408.png\n",
+ "upload: train/bicycle_s_000667.png to s3://udacity-ml-workflow/train/bicycle_s_000667.png\n",
+ "upload: train/bicycle_s_000569.png to s3://udacity-ml-workflow/train/bicycle_s_000569.png\n",
+ "upload: train/bicycle_s_000723.png to s3://udacity-ml-workflow/train/bicycle_s_000723.png\n",
+ "upload: train/bicycle_s_000759.png to s3://udacity-ml-workflow/train/bicycle_s_000759.png\n",
+ "upload: train/bicycle_s_000522.png to s3://udacity-ml-workflow/train/bicycle_s_000522.png\n",
+ "upload: train/bicycle_s_000775.png to s3://udacity-ml-workflow/train/bicycle_s_000775.png\n",
+ "upload: train/bicycle_s_000753.png to s3://udacity-ml-workflow/train/bicycle_s_000753.png\n",
+ "upload: train/bicycle_s_000822.png to s3://udacity-ml-workflow/train/bicycle_s_000822.png\n",
+ "upload: train/bicycle_s_000782.png to s3://udacity-ml-workflow/train/bicycle_s_000782.png\n",
+ "upload: train/bicycle_s_000785.png to s3://udacity-ml-workflow/train/bicycle_s_000785.png\n",
+ "upload: train/bicycle_s_000668.png to s3://udacity-ml-workflow/train/bicycle_s_000668.png\n",
+ "upload: train/bicycle_s_000781.png to s3://udacity-ml-workflow/train/bicycle_s_000781.png\n",
+ "upload: train/bicycle_s_000463.png to s3://udacity-ml-workflow/train/bicycle_s_000463.png\n",
+ "upload: train/bicycle_s_000996.png to s3://udacity-ml-workflow/train/bicycle_s_000996.png\n",
+ "upload: train/bicycle_s_000986.png to s3://udacity-ml-workflow/train/bicycle_s_000986.png\n",
+ "upload: train/bicycle_s_001111.png to s3://udacity-ml-workflow/train/bicycle_s_001111.png\n",
+ "upload: train/bicycle_s_000778.png to s3://udacity-ml-workflow/train/bicycle_s_000778.png\n",
+ "upload: train/bicycle_s_000774.png to s3://udacity-ml-workflow/train/bicycle_s_000774.png\n",
+ "upload: train/bicycle_s_001168.png to s3://udacity-ml-workflow/train/bicycle_s_001168.png\n",
+ "upload: train/bicycle_s_000829.png to s3://udacity-ml-workflow/train/bicycle_s_000829.png\n",
+ "upload: train/bicycle_s_000951.png to s3://udacity-ml-workflow/train/bicycle_s_000951.png\n",
+ "upload: train/bicycle_s_000861.png to s3://udacity-ml-workflow/train/bicycle_s_000861.png\n",
+ "upload: train/bicycle_s_001174.png to s3://udacity-ml-workflow/train/bicycle_s_001174.png\n",
+ "upload: train/bicycle_s_001002.png to s3://udacity-ml-workflow/train/bicycle_s_001002.png\n",
+ "upload: train/bicycle_s_001205.png to s3://udacity-ml-workflow/train/bicycle_s_001205.png\n",
+ "upload: train/bicycle_s_001203.png to s3://udacity-ml-workflow/train/bicycle_s_001203.png\n",
+ "upload: train/bicycle_s_001228.png to s3://udacity-ml-workflow/train/bicycle_s_001228.png\n",
+ "upload: train/bicycle_s_001245.png to s3://udacity-ml-workflow/train/bicycle_s_001245.png\n",
+ "upload: train/bicycle_s_001348.png to s3://udacity-ml-workflow/train/bicycle_s_001348.png\n",
+ "upload: train/bicycle_s_000978.png to s3://udacity-ml-workflow/train/bicycle_s_000978.png\n",
+ "upload: train/bicycle_s_001411.png to s3://udacity-ml-workflow/train/bicycle_s_001411.png\n",
+ "upload: train/bicycle_s_001338.png to s3://udacity-ml-workflow/train/bicycle_s_001338.png\n",
+ "upload: train/bicycle_s_001388.png to s3://udacity-ml-workflow/train/bicycle_s_001388.png\n",
+ "upload: train/bicycle_s_001448.png to s3://udacity-ml-workflow/train/bicycle_s_001448.png\n",
+ "upload: train/bicycle_s_001402.png to s3://udacity-ml-workflow/train/bicycle_s_001402.png\n",
+ "upload: train/bicycle_s_001452.png to s3://udacity-ml-workflow/train/bicycle_s_001452.png\n",
+ "upload: train/bicycle_s_001247.png to s3://udacity-ml-workflow/train/bicycle_s_001247.png\n",
+ "upload: train/bicycle_s_001409.png to s3://udacity-ml-workflow/train/bicycle_s_001409.png\n",
+ "upload: train/bicycle_s_001554.png to s3://udacity-ml-workflow/train/bicycle_s_001554.png\n",
+ "upload: train/bicycle_s_001569.png to s3://udacity-ml-workflow/train/bicycle_s_001569.png\n",
+ "upload: train/bicycle_s_001583.png to s3://udacity-ml-workflow/train/bicycle_s_001583.png\n",
+ "upload: train/bicycle_s_001470.png to s3://udacity-ml-workflow/train/bicycle_s_001470.png\n",
+ "upload: train/bicycle_s_001663.png to s3://udacity-ml-workflow/train/bicycle_s_001663.png\n",
+ "upload: train/bicycle_s_001679.png to s3://udacity-ml-workflow/train/bicycle_s_001679.png\n",
+ "upload: train/bicycle_s_001681.png to s3://udacity-ml-workflow/train/bicycle_s_001681.png\n",
+ "upload: train/bicycle_s_001688.png to s3://udacity-ml-workflow/train/bicycle_s_001688.png\n",
+ "upload: train/bicycle_s_001748.png to s3://udacity-ml-workflow/train/bicycle_s_001748.png\n",
+ "upload: train/bicycle_s_001642.png to s3://udacity-ml-workflow/train/bicycle_s_001642.png\n",
+ "upload: train/bicycle_s_001687.png to s3://udacity-ml-workflow/train/bicycle_s_001687.png\n",
+ "upload: train/bicycle_s_001693.png to s3://udacity-ml-workflow/train/bicycle_s_001693.png\n",
+ "upload: train/bicycle_s_001757.png to s3://udacity-ml-workflow/train/bicycle_s_001757.png\n",
+ "upload: train/bicycle_s_001814.png to s3://udacity-ml-workflow/train/bicycle_s_001814.png\n",
+ "upload: train/bicycle_s_001956.png to s3://udacity-ml-workflow/train/bicycle_s_001956.png\n",
+ "upload: train/bicycle_s_001904.png to s3://udacity-ml-workflow/train/bicycle_s_001904.png\n",
+ "upload: train/bicycle_s_002012.png to s3://udacity-ml-workflow/train/bicycle_s_002012.png\n",
+ "upload: train/bicycle_s_002005.png to s3://udacity-ml-workflow/train/bicycle_s_002005.png\n",
+ "upload: train/bicycle_s_002029.png to s3://udacity-ml-workflow/train/bicycle_s_002029.png\n",
+ "upload: train/bicycle_s_001673.png to s3://udacity-ml-workflow/train/bicycle_s_001673.png\n",
+ "upload: train/bicycle_s_001928.png to s3://udacity-ml-workflow/train/bicycle_s_001928.png\n",
+ "upload: train/bicycle_s_002129.png to s3://udacity-ml-workflow/train/bicycle_s_002129.png \n",
+ "upload: train/bicycle_s_002132.png to s3://udacity-ml-workflow/train/bicycle_s_002132.png \n",
+ "upload: train/bicycle_s_002153.png to s3://udacity-ml-workflow/train/bicycle_s_002153.png \n",
+ "upload: train/bicycle_s_002049.png to s3://udacity-ml-workflow/train/bicycle_s_002049.png \n",
+ "upload: train/bicycle_s_002222.png to s3://udacity-ml-workflow/train/bicycle_s_002222.png \n",
+ "upload: train/bicycle_s_002237.png to s3://udacity-ml-workflow/train/bicycle_s_002237.png \n",
+ "upload: train/bicycle_s_002100.png to s3://udacity-ml-workflow/train/bicycle_s_002100.png \n",
+ "upload: train/bicycle_s_002218.png to s3://udacity-ml-workflow/train/bicycle_s_002218.png \n",
+ "upload: train/bicycle_s_002247.png to s3://udacity-ml-workflow/train/bicycle_s_002247.png \n",
+ "upload: train/bicycle_s_002258.png to s3://udacity-ml-workflow/train/bicycle_s_002258.png \n",
+ "upload: train/bicycle_s_002374.png to s3://udacity-ml-workflow/train/bicycle_s_002374.png \n",
+ "upload: train/bicycle_s_002299.png to s3://udacity-ml-workflow/train/bicycle_s_002299.png\n",
+ "upload: train/bicycle_s_002400.png to s3://udacity-ml-workflow/train/bicycle_s_002400.png\n",
+ "upload: train/bicycle_s_002410.png to s3://udacity-ml-workflow/train/bicycle_s_002410.png\n",
+ "upload: train/bicycle_s_002448.png to s3://udacity-ml-workflow/train/bicycle_s_002448.png\n",
+ "upload: train/bicycle_s_002338.png to s3://udacity-ml-workflow/train/bicycle_s_002338.png\n",
+ "upload: train/bicycle_s_002521.png to s3://udacity-ml-workflow/train/bicycle_s_002521.png\n",
+ "upload: train/bicycle_s_002661.png to s3://udacity-ml-workflow/train/bicycle_s_002661.png\n",
+ "upload: train/bicycle_s_002624.png to s3://udacity-ml-workflow/train/bicycle_s_002624.png\n",
+ "upload: train/bicycle_s_002475.png to s3://udacity-ml-workflow/train/bicycle_s_002475.png\n",
+ "upload: train/bicycle_s_002569.png to s3://udacity-ml-workflow/train/bicycle_s_002569.png\n",
+ "upload: train/bicycle_s_002711.png to s3://udacity-ml-workflow/train/bicycle_s_002711.png\n",
+ "upload: train/bicycle_s_002550.png to s3://udacity-ml-workflow/train/bicycle_s_002550.png\n",
+ "upload: train/bicycle_s_002725.png to s3://udacity-ml-workflow/train/bicycle_s_002725.png\n",
+ "upload: train/bicycle_s_002436.png to s3://udacity-ml-workflow/train/bicycle_s_002436.png\n",
+ "upload: train/bicycle_s_002759.png to s3://udacity-ml-workflow/train/bicycle_s_002759.png\n",
+ "upload: train/bicycle_s_002715.png to s3://udacity-ml-workflow/train/bicycle_s_002715.png\n",
+ "upload: train/bicycle_s_002729.png to s3://udacity-ml-workflow/train/bicycle_s_002729.png\n",
+ "upload: train/bicycle_s_002728.png to s3://udacity-ml-workflow/train/bicycle_s_002728.png\n",
+ "upload: train/bicycle_s_002373.png to s3://udacity-ml-workflow/train/bicycle_s_002373.png\n",
+ "upload: train/bicycle_s_002762.png to s3://udacity-ml-workflow/train/bicycle_s_002762.png\n",
+ "upload: train/bike_s_000018.png to s3://udacity-ml-workflow/train/bike_s_000018.png \n",
+ "upload: train/bike_s_000003.png to s3://udacity-ml-workflow/train/bike_s_000003.png \n",
+ "upload: train/bike_s_000015.png to s3://udacity-ml-workflow/train/bike_s_000015.png \n",
+ "upload: train/bike_s_000001.png to s3://udacity-ml-workflow/train/bike_s_000001.png \n",
+ "upload: train/bike_s_000023.png to s3://udacity-ml-workflow/train/bike_s_000023.png \n",
+ "upload: train/bicycle_s_002669.png to s3://udacity-ml-workflow/train/bicycle_s_002669.png\n",
+ "upload: train/bike_s_000005.png to s3://udacity-ml-workflow/train/bike_s_000005.png \n",
+ "upload: train/bike_s_000025.png to s3://udacity-ml-workflow/train/bike_s_000025.png \n",
+ "upload: train/bike_s_000034.png to s3://udacity-ml-workflow/train/bike_s_000034.png \n",
+ "upload: train/bike_s_000035.png to s3://udacity-ml-workflow/train/bike_s_000035.png \n",
+ "upload: train/bike_s_000062.png to s3://udacity-ml-workflow/train/bike_s_000062.png \n",
+ "upload: train/bike_s_000026.png to s3://udacity-ml-workflow/train/bike_s_000026.png \n",
+ "upload: train/bike_s_000121.png to s3://udacity-ml-workflow/train/bike_s_000121.png \n",
+ "upload: train/bike_s_000021.png to s3://udacity-ml-workflow/train/bike_s_000021.png \n",
+ "upload: train/bike_s_000040.png to s3://udacity-ml-workflow/train/bike_s_000040.png \n",
+ "upload: train/bike_s_000127.png to s3://udacity-ml-workflow/train/bike_s_000127.png \n",
+ "upload: train/bike_s_000111.png to s3://udacity-ml-workflow/train/bike_s_000111.png \n",
+ "upload: train/bike_s_000154.png to s3://udacity-ml-workflow/train/bike_s_000154.png \n",
+ "upload: train/bike_s_000162.png to s3://udacity-ml-workflow/train/bike_s_000162.png \n",
+ "upload: train/bike_s_000129.png to s3://udacity-ml-workflow/train/bike_s_000129.png \n",
+ "upload: train/bike_s_000051.png to s3://udacity-ml-workflow/train/bike_s_000051.png \n",
+ "upload: train/bike_s_000256.png to s3://udacity-ml-workflow/train/bike_s_000256.png \n",
+ "upload: train/bike_s_000024.png to s3://udacity-ml-workflow/train/bike_s_000024.png \n",
+ "upload: train/bike_s_000164.png to s3://udacity-ml-workflow/train/bike_s_000164.png \n",
+ "upload: train/bike_s_000204.png to s3://udacity-ml-workflow/train/bike_s_000204.png \n",
+ "upload: train/bike_s_000299.png to s3://udacity-ml-workflow/train/bike_s_000299.png \n",
+ "upload: train/bike_s_000237.png to s3://udacity-ml-workflow/train/bike_s_000237.png \n",
+ "upload: train/bike_s_000302.png to s3://udacity-ml-workflow/train/bike_s_000302.png \n",
+ "upload: train/bike_s_000304.png to s3://udacity-ml-workflow/train/bike_s_000304.png \n",
+ "upload: train/bike_s_000336.png to s3://udacity-ml-workflow/train/bike_s_000336.png \n",
+ "upload: train/bike_s_000390.png to s3://udacity-ml-workflow/train/bike_s_000390.png \n",
+ "upload: train/bike_s_000397.png to s3://udacity-ml-workflow/train/bike_s_000397.png \n",
+ "upload: train/bike_s_000392.png to s3://udacity-ml-workflow/train/bike_s_000392.png \n",
+ "upload: train/bike_s_000516.png to s3://udacity-ml-workflow/train/bike_s_000516.png \n",
+ "upload: train/bike_s_000364.png to s3://udacity-ml-workflow/train/bike_s_000364.png \n",
+ "upload: train/bike_s_000545.png to s3://udacity-ml-workflow/train/bike_s_000545.png \n",
+ "upload: train/bike_s_000474.png to s3://udacity-ml-workflow/train/bike_s_000474.png \n",
+ "upload: train/bike_s_000522.png to s3://udacity-ml-workflow/train/bike_s_000522.png \n",
+ "upload: train/bike_s_000544.png to s3://udacity-ml-workflow/train/bike_s_000544.png \n",
+ "upload: train/bike_s_000555.png to s3://udacity-ml-workflow/train/bike_s_000555.png \n",
+ "upload: train/bike_s_000593.png to s3://udacity-ml-workflow/train/bike_s_000593.png \n",
+ "upload: train/bike_s_000657.png to s3://udacity-ml-workflow/train/bike_s_000657.png \n",
+ "upload: train/bike_s_000628.png to s3://udacity-ml-workflow/train/bike_s_000628.png \n",
+ "upload: train/bike_s_000682.png to s3://udacity-ml-workflow/train/bike_s_000682.png \n",
+ "upload: train/bike_s_000506.png to s3://udacity-ml-workflow/train/bike_s_000506.png \n",
+ "upload: train/bike_s_000722.png to s3://udacity-ml-workflow/train/bike_s_000722.png \n",
+ "upload: train/bike_s_000934.png to s3://udacity-ml-workflow/train/bike_s_000934.png \n",
+ "upload: train/bike_s_000990.png to s3://udacity-ml-workflow/train/bike_s_000990.png \n",
+ "upload: train/bike_s_000855.png to s3://udacity-ml-workflow/train/bike_s_000855.png \n",
+ "upload: train/bike_s_000679.png to s3://udacity-ml-workflow/train/bike_s_000679.png \n",
+ "upload: train/bike_s_000926.png to s3://udacity-ml-workflow/train/bike_s_000926.png \n",
+ "upload: train/bike_s_001027.png to s3://udacity-ml-workflow/train/bike_s_001027.png \n",
+ "upload: train/bike_s_001072.png to s3://udacity-ml-workflow/train/bike_s_001072.png \n",
+ "upload: train/bike_s_001078.png to s3://udacity-ml-workflow/train/bike_s_001078.png \n",
+ "upload: train/bike_s_001116.png to s3://udacity-ml-workflow/train/bike_s_001116.png \n",
+ "upload: train/bike_s_001131.png to s3://udacity-ml-workflow/train/bike_s_001131.png \n",
+ "upload: train/bike_s_001200.png to s3://udacity-ml-workflow/train/bike_s_001200.png \n",
+ "upload: train/bike_s_001113.png to s3://udacity-ml-workflow/train/bike_s_001113.png \n",
+ "upload: train/bike_s_001093.png to s3://udacity-ml-workflow/train/bike_s_001093.png \n",
+ "upload: train/bike_s_001260.png to s3://udacity-ml-workflow/train/bike_s_001260.png \n",
+ "upload: train/bike_s_001320.png to s3://udacity-ml-workflow/train/bike_s_001320.png \n",
+ "upload: train/bike_s_001375.png to s3://udacity-ml-workflow/train/bike_s_001375.png \n",
+ "upload: train/bike_s_001414.png to s3://udacity-ml-workflow/train/bike_s_001414.png \n",
+ "upload: train/bike_s_001226.png to s3://udacity-ml-workflow/train/bike_s_001226.png \n",
+ "upload: train/bike_s_001462.png to s3://udacity-ml-workflow/train/bike_s_001462.png \n",
+ "upload: train/bike_s_001380.png to s3://udacity-ml-workflow/train/bike_s_001380.png \n",
+ "upload: train/bike_s_001418.png to s3://udacity-ml-workflow/train/bike_s_001418.png \n",
+ "upload: train/bike_s_001517.png to s3://udacity-ml-workflow/train/bike_s_001517.png \n",
+ "upload: train/bike_s_001572.png to s3://udacity-ml-workflow/train/bike_s_001572.png \n",
+ "upload: train/bike_s_001415.png to s3://udacity-ml-workflow/train/bike_s_001415.png \n",
+ "upload: train/bike_s_001592.png to s3://udacity-ml-workflow/train/bike_s_001592.png \n",
+ "upload: train/bike_s_001519.png to s3://udacity-ml-workflow/train/bike_s_001519.png \n",
+ "upload: train/bike_s_001761.png to s3://udacity-ml-workflow/train/bike_s_001761.png \n",
+ "upload: train/bike_s_001739.png to s3://udacity-ml-workflow/train/bike_s_001739.png \n",
+ "upload: train/bike_s_001683.png to s3://udacity-ml-workflow/train/bike_s_001683.png \n",
+ "upload: train/bike_s_001839.png to s3://udacity-ml-workflow/train/bike_s_001839.png \n",
+ "upload: train/bike_s_001613.png to s3://udacity-ml-workflow/train/bike_s_001613.png \n",
+ "upload: train/bike_s_001847.png to s3://udacity-ml-workflow/train/bike_s_001847.png \n",
+ "upload: train/bike_s_001679.png to s3://udacity-ml-workflow/train/bike_s_001679.png \n",
+ "upload: train/bike_s_001882.png to s3://udacity-ml-workflow/train/bike_s_001882.png \n",
+ "upload: train/bike_s_001827.png to s3://udacity-ml-workflow/train/bike_s_001827.png \n",
+ "upload: train/bike_s_001877.png to s3://udacity-ml-workflow/train/bike_s_001877.png \n",
+ "upload: train/bike_s_001767.png to s3://udacity-ml-workflow/train/bike_s_001767.png \n",
+ "upload: train/bike_s_001980.png to s3://udacity-ml-workflow/train/bike_s_001980.png \n",
+ "upload: train/bike_s_002024.png to s3://udacity-ml-workflow/train/bike_s_002024.png \n",
+ "upload: train/bike_s_002033.png to s3://udacity-ml-workflow/train/bike_s_002033.png \n",
+ "upload: train/bike_s_002042.png to s3://udacity-ml-workflow/train/bike_s_002042.png \n",
+ "upload: train/bike_s_001876.png to s3://udacity-ml-workflow/train/bike_s_001876.png \n",
+ "upload: train/bike_s_001897.png to s3://udacity-ml-workflow/train/bike_s_001897.png \n",
+ "upload: train/bike_s_001915.png to s3://udacity-ml-workflow/train/bike_s_001915.png \n",
+ "upload: train/bike_s_001945.png to s3://udacity-ml-workflow/train/bike_s_001945.png \n",
+ "upload: train/bike_s_001928.png to s3://udacity-ml-workflow/train/bike_s_001928.png \n",
+ "upload: train/bike_s_002047.png to s3://udacity-ml-workflow/train/bike_s_002047.png \n",
+ "upload: train/bike_s_002109.png to s3://udacity-ml-workflow/train/bike_s_002109.png \n",
+ "upload: train/bike_s_002098.png to s3://udacity-ml-workflow/train/bike_s_002098.png \n",
+ "upload: train/bike_s_002090.png to s3://udacity-ml-workflow/train/bike_s_002090.png \n",
+ "upload: train/bike_s_002164.png to s3://udacity-ml-workflow/train/bike_s_002164.png \n",
+ "upload: train/bike_s_002118.png to s3://udacity-ml-workflow/train/bike_s_002118.png \n",
+ "upload: train/bike_s_002215.png to s3://udacity-ml-workflow/train/bike_s_002215.png \n",
+ "upload: train/bike_s_002139.png to s3://udacity-ml-workflow/train/bike_s_002139.png \n",
+ "upload: train/bike_s_002203.png to s3://udacity-ml-workflow/train/bike_s_002203.png \n",
+ "upload: train/bike_s_002222.png to s3://udacity-ml-workflow/train/bike_s_002222.png \n",
+ "upload: train/bike_s_002288.png to s3://udacity-ml-workflow/train/bike_s_002288.png \n",
+ "upload: train/bike_s_002277.png to s3://udacity-ml-workflow/train/bike_s_002277.png \n",
+ "upload: train/cycle_s_000463.png to s3://udacity-ml-workflow/train/cycle_s_000463.png \n",
+ "upload: train/cycle_s_000492.png to s3://udacity-ml-workflow/train/cycle_s_000492.png \n",
+ "upload: train/bike_s_002292.png to s3://udacity-ml-workflow/train/bike_s_002292.png \n",
+ "upload: train/cycle_s_000318.png to s3://udacity-ml-workflow/train/cycle_s_000318.png \n",
+ "upload: train/cycle_s_000042.png to s3://udacity-ml-workflow/train/cycle_s_000042.png \n",
+ "upload: train/cycle_s_000639.png to s3://udacity-ml-workflow/train/cycle_s_000639.png \n",
+ "upload: train/bike_s_002283.png to s3://udacity-ml-workflow/train/bike_s_002283.png \n",
+ "upload: train/cycle_s_000222.png to s3://udacity-ml-workflow/train/cycle_s_000222.png \n",
+ "upload: train/cycle_s_000718.png to s3://udacity-ml-workflow/train/cycle_s_000718.png \n",
+ "upload: train/cycle_s_000666.png to s3://udacity-ml-workflow/train/cycle_s_000666.png \n",
+ "upload: train/cycle_s_001286.png to s3://udacity-ml-workflow/train/cycle_s_001286.png \n",
+ "upload: train/cycle_s_000871.png to s3://udacity-ml-workflow/train/cycle_s_000871.png \n",
+ "upload: train/cycle_s_000583.png to s3://udacity-ml-workflow/train/cycle_s_000583.png \n",
+ "upload: train/cycle_s_001309.png to s3://udacity-ml-workflow/train/cycle_s_001309.png \n",
+ "upload: train/cycle_s_001413.png to s3://udacity-ml-workflow/train/cycle_s_001413.png \n",
+ "upload: train/cycle_s_000899.png to s3://udacity-ml-workflow/train/cycle_s_000899.png \n",
+ "upload: train/cycle_s_001474.png to s3://udacity-ml-workflow/train/cycle_s_001474.png \n",
+ "upload: train/cycle_s_001412.png to s3://udacity-ml-workflow/train/cycle_s_001412.png \n",
+ "upload: train/cycle_s_001477.png to s3://udacity-ml-workflow/train/cycle_s_001477.png \n",
+ "upload: train/cycle_s_001640.png to s3://udacity-ml-workflow/train/cycle_s_001640.png \n",
+ "upload: train/cycle_s_001875.png to s3://udacity-ml-workflow/train/cycle_s_001875.png \n",
+ "upload: train/cycle_s_001472.png to s3://udacity-ml-workflow/train/cycle_s_001472.png \n",
+ "upload: train/cycle_s_001745.png to s3://udacity-ml-workflow/train/cycle_s_001745.png \n",
+ "upload: train/cycle_s_001735.png to s3://udacity-ml-workflow/train/cycle_s_001735.png \n",
+ "upload: train/cycle_s_001976.png to s3://udacity-ml-workflow/train/cycle_s_001976.png \n",
+ "upload: train/cycle_s_001439.png to s3://udacity-ml-workflow/train/cycle_s_001439.png \n",
+ "upload: train/cycle_s_001374.png to s3://udacity-ml-workflow/train/cycle_s_001374.png \n",
+ "upload: train/cycle_s_002015.png to s3://udacity-ml-workflow/train/cycle_s_002015.png \n",
+ "upload: train/cycle_s_002168.png to s3://udacity-ml-workflow/train/cycle_s_002168.png \n",
+ "upload: train/cycle_s_002092.png to s3://udacity-ml-workflow/train/cycle_s_002092.png \n",
+ "upload: train/cycle_s_002053.png to s3://udacity-ml-workflow/train/cycle_s_002053.png \n",
+ "upload: train/cycle_s_002178.png to s3://udacity-ml-workflow/train/cycle_s_002178.png \n",
+ "upload: train/cycle_s_002093.png to s3://udacity-ml-workflow/train/cycle_s_002093.png \n",
+ "upload: train/cycle_s_002659.png to s3://udacity-ml-workflow/train/cycle_s_002659.png \n",
+ "upload: train/cycle_s_002651.png to s3://udacity-ml-workflow/train/cycle_s_002651.png \n",
+ "upload: train/cycle_s_002090.png to s3://udacity-ml-workflow/train/cycle_s_002090.png \n",
+ "upload: train/cycle_s_002399.png to s3://udacity-ml-workflow/train/cycle_s_002399.png \n",
+ "upload: train/cycle_s_002746.png to s3://udacity-ml-workflow/train/cycle_s_002746.png \n",
+ "upload: train/cycle_s_002779.png to s3://udacity-ml-workflow/train/cycle_s_002779.png \n",
+ "upload: train/cycle_s_002503.png to s3://udacity-ml-workflow/train/cycle_s_002503.png \n",
+ "upload: train/cycle_s_002844.png to s3://udacity-ml-workflow/train/cycle_s_002844.png \n",
+ "upload: train/cycle_s_002598.png to s3://udacity-ml-workflow/train/cycle_s_002598.png \n",
+ "upload: train/cycle_s_002638.png to s3://udacity-ml-workflow/train/cycle_s_002638.png \n",
+ "upload: train/cycle_s_002882.png to s3://udacity-ml-workflow/train/cycle_s_002882.png \n",
+ "upload: train/cycle_s_002666.png to s3://udacity-ml-workflow/train/cycle_s_002666.png \n",
+ "upload: train/cycle_s_002904.png to s3://udacity-ml-workflow/train/cycle_s_002904.png \n",
+ "upload: train/cycle_s_002703.png to s3://udacity-ml-workflow/train/cycle_s_002703.png \n",
+ "upload: train/cycle_s_003026.png to s3://udacity-ml-workflow/train/cycle_s_003026.png \n",
+ "upload: train/cycle_s_002978.png to s3://udacity-ml-workflow/train/cycle_s_002978.png \n",
+ "upload: train/cycle_s_003008.png to s3://udacity-ml-workflow/train/cycle_s_003008.png \n",
+ "upload: train/cycle_s_003147.png to s3://udacity-ml-workflow/train/cycle_s_003147.png \n",
+ "upload: train/cycle_s_003006.png to s3://udacity-ml-workflow/train/cycle_s_003006.png \n",
+ "upload: train/dirt_bike_s_000003.png to s3://udacity-ml-workflow/train/dirt_bike_s_000003.png\n",
+ "upload: train/cycle_s_003122.png to s3://udacity-ml-workflow/train/cycle_s_003122.png \n",
+ "upload: train/cycle_s_003162.png to s3://udacity-ml-workflow/train/cycle_s_003162.png \n",
+ "upload: train/cycle_s_003148.png to s3://udacity-ml-workflow/train/cycle_s_003148.png \n",
+ "upload: train/dirt_bike_s_000005.png to s3://udacity-ml-workflow/train/dirt_bike_s_000005.png\n",
+ "upload: train/cycle_s_003043.png to s3://udacity-ml-workflow/train/cycle_s_003043.png \n",
+ "upload: train/dirt_bike_s_000059.png to s3://udacity-ml-workflow/train/dirt_bike_s_000059.png\n",
+ "upload: train/dirt_bike_s_000017.png to s3://udacity-ml-workflow/train/dirt_bike_s_000017.png\n",
+ "upload: train/dirt_bike_s_000134.png to s3://udacity-ml-workflow/train/dirt_bike_s_000134.png\n",
+ "upload: train/dirt_bike_s_000124.png to s3://udacity-ml-workflow/train/dirt_bike_s_000124.png\n",
+ "upload: train/dirt_bike_s_000119.png to s3://udacity-ml-workflow/train/dirt_bike_s_000119.png\n",
+ "upload: train/minibike_s_000011.png to s3://udacity-ml-workflow/train/minibike_s_000011.png\n",
+ "upload: train/dirt_bike_s_000030.png to s3://udacity-ml-workflow/train/dirt_bike_s_000030.png\n",
+ "upload: train/minibike_s_000010.png to s3://udacity-ml-workflow/train/minibike_s_000010.png\n",
+ "upload: train/minibike_s_000035.png to s3://udacity-ml-workflow/train/minibike_s_000035.png\n",
+ "upload: train/minibike_s_000020.png to s3://udacity-ml-workflow/train/minibike_s_000020.png\n",
+ "upload: train/minibike_s_000022.png to s3://udacity-ml-workflow/train/minibike_s_000022.png\n",
+ "upload: train/minibike_s_000064.png to s3://udacity-ml-workflow/train/minibike_s_000064.png\n",
+ "upload: train/minibike_s_000036.png to s3://udacity-ml-workflow/train/minibike_s_000036.png\n",
+ "upload: train/minibike_s_000099.png to s3://udacity-ml-workflow/train/minibike_s_000099.png\n",
+ "upload: train/minibike_s_000108.png to s3://udacity-ml-workflow/train/minibike_s_000108.png\n",
+ "upload: train/minibike_s_000110.png to s3://udacity-ml-workflow/train/minibike_s_000110.png\n",
+ "upload: train/minibike_s_000116.png to s3://udacity-ml-workflow/train/minibike_s_000116.png\n",
+ "upload: train/minibike_s_000127.png to s3://udacity-ml-workflow/train/minibike_s_000127.png\n",
+ "upload: train/minibike_s_000102.png to s3://udacity-ml-workflow/train/minibike_s_000102.png\n",
+ "upload: train/minibike_s_000130.png to s3://udacity-ml-workflow/train/minibike_s_000130.png\n",
+ "upload: train/minibike_s_000146.png to s3://udacity-ml-workflow/train/minibike_s_000146.png\n",
+ "upload: train/minibike_s_000117.png to s3://udacity-ml-workflow/train/minibike_s_000117.png\n",
+ "upload: train/minibike_s_000165.png to s3://udacity-ml-workflow/train/minibike_s_000165.png\n",
+ "upload: train/minibike_s_000149.png to s3://udacity-ml-workflow/train/minibike_s_000149.png\n",
+ "upload: train/minibike_s_000244.png to s3://udacity-ml-workflow/train/minibike_s_000244.png\n",
+ "upload: train/minibike_s_000121.png to s3://udacity-ml-workflow/train/minibike_s_000121.png\n",
+ "upload: train/minibike_s_000293.png to s3://udacity-ml-workflow/train/minibike_s_000293.png\n",
+ "upload: train/minibike_s_000314.png to s3://udacity-ml-workflow/train/minibike_s_000314.png\n",
+ "upload: train/minibike_s_000324.png to s3://udacity-ml-workflow/train/minibike_s_000324.png\n",
+ "upload: train/minibike_s_000350.png to s3://udacity-ml-workflow/train/minibike_s_000350.png\n",
+ "upload: train/minibike_s_000203.png to s3://udacity-ml-workflow/train/minibike_s_000203.png\n",
+ "upload: train/minibike_s_000335.png to s3://udacity-ml-workflow/train/minibike_s_000335.png\n",
+ "upload: train/minibike_s_000340.png to s3://udacity-ml-workflow/train/minibike_s_000340.png\n",
+ "upload: train/minibike_s_000218.png to s3://udacity-ml-workflow/train/minibike_s_000218.png\n",
+ "upload: train/minibike_s_000408.png to s3://udacity-ml-workflow/train/minibike_s_000408.png\n",
+ "upload: train/minibike_s_000392.png to s3://udacity-ml-workflow/train/minibike_s_000392.png\n",
+ "upload: train/minibike_s_000402.png to s3://udacity-ml-workflow/train/minibike_s_000402.png\n",
+ "upload: train/minibike_s_000401.png to s3://udacity-ml-workflow/train/minibike_s_000401.png\n",
+ "upload: train/minibike_s_000429.png to s3://udacity-ml-workflow/train/minibike_s_000429.png\n",
+ "upload: train/minibike_s_000362.png to s3://udacity-ml-workflow/train/minibike_s_000362.png\n",
+ "upload: train/minibike_s_000435.png to s3://udacity-ml-workflow/train/minibike_s_000435.png\n",
+ "upload: train/minibike_s_000427.png to s3://udacity-ml-workflow/train/minibike_s_000427.png\n",
+ "upload: train/minibike_s_000459.png to s3://udacity-ml-workflow/train/minibike_s_000459.png\n",
+ "upload: train/minibike_s_000451.png to s3://udacity-ml-workflow/train/minibike_s_000451.png\n",
+ "upload: train/minibike_s_000485.png to s3://udacity-ml-workflow/train/minibike_s_000485.png\n",
+ "upload: train/minibike_s_000409.png to s3://udacity-ml-workflow/train/minibike_s_000409.png\n",
+ "upload: train/minibike_s_000498.png to s3://udacity-ml-workflow/train/minibike_s_000498.png\n",
+ "upload: train/minibike_s_000434.png to s3://udacity-ml-workflow/train/minibike_s_000434.png\n",
+ "upload: train/minibike_s_000507.png to s3://udacity-ml-workflow/train/minibike_s_000507.png\n",
+ "upload: train/minibike_s_000519.png to s3://udacity-ml-workflow/train/minibike_s_000519.png\n",
+ "upload: train/minibike_s_000520.png to s3://udacity-ml-workflow/train/minibike_s_000520.png\n",
+ "upload: train/minibike_s_000511.png to s3://udacity-ml-workflow/train/minibike_s_000511.png\n",
+ "upload: train/minibike_s_000491.png to s3://udacity-ml-workflow/train/minibike_s_000491.png\n",
+ "upload: train/minibike_s_000527.png to s3://udacity-ml-workflow/train/minibike_s_000527.png\n",
+ "upload: train/minibike_s_000522.png to s3://udacity-ml-workflow/train/minibike_s_000522.png\n",
+ "upload: train/minibike_s_000565.png to s3://udacity-ml-workflow/train/minibike_s_000565.png\n",
+ "upload: train/minibike_s_000518.png to s3://udacity-ml-workflow/train/minibike_s_000518.png\n",
+ "upload: train/minibike_s_000566.png to s3://udacity-ml-workflow/train/minibike_s_000566.png\n",
+ "upload: train/minibike_s_000569.png to s3://udacity-ml-workflow/train/minibike_s_000569.png\n",
+ "upload: train/minibike_s_000567.png to s3://udacity-ml-workflow/train/minibike_s_000567.png\n",
+ "upload: train/minibike_s_000571.png to s3://udacity-ml-workflow/train/minibike_s_000571.png\n",
+ "upload: train/minibike_s_000613.png to s3://udacity-ml-workflow/train/minibike_s_000613.png\n",
+ "upload: train/minibike_s_000568.png to s3://udacity-ml-workflow/train/minibike_s_000568.png\n",
+ "upload: train/minibike_s_000526.png to s3://udacity-ml-workflow/train/minibike_s_000526.png\n",
+ "upload: train/minibike_s_000690.png to s3://udacity-ml-workflow/train/minibike_s_000690.png\n",
+ "upload: train/minibike_s_000570.png to s3://udacity-ml-workflow/train/minibike_s_000570.png\n",
+ "upload: train/minibike_s_000652.png to s3://udacity-ml-workflow/train/minibike_s_000652.png\n",
+ "upload: train/minibike_s_000701.png to s3://udacity-ml-workflow/train/minibike_s_000701.png\n",
+ "upload: train/minibike_s_000709.png to s3://udacity-ml-workflow/train/minibike_s_000709.png\n",
+ "upload: train/minibike_s_000743.png to s3://udacity-ml-workflow/train/minibike_s_000743.png\n",
+ "upload: train/minibike_s_000800.png to s3://udacity-ml-workflow/train/minibike_s_000800.png\n",
+ "upload: train/minibike_s_000738.png to s3://udacity-ml-workflow/train/minibike_s_000738.png\n",
+ "upload: train/minibike_s_000698.png to s3://udacity-ml-workflow/train/minibike_s_000698.png\n",
+ "upload: train/minibike_s_000813.png to s3://udacity-ml-workflow/train/minibike_s_000813.png\n",
+ "upload: train/minibike_s_000654.png to s3://udacity-ml-workflow/train/minibike_s_000654.png\n",
+ "upload: train/minibike_s_000802.png to s3://udacity-ml-workflow/train/minibike_s_000802.png\n",
+ "upload: train/minibike_s_000741.png to s3://udacity-ml-workflow/train/minibike_s_000741.png\n",
+ "upload: train/minibike_s_000824.png to s3://udacity-ml-workflow/train/minibike_s_000824.png\n",
+ "upload: train/minibike_s_000830.png to s3://udacity-ml-workflow/train/minibike_s_000830.png\n",
+ "upload: train/minibike_s_000820.png to s3://udacity-ml-workflow/train/minibike_s_000820.png\n",
+ "upload: train/minibike_s_000831.png to s3://udacity-ml-workflow/train/minibike_s_000831.png\n",
+ "upload: train/minibike_s_000885.png to s3://udacity-ml-workflow/train/minibike_s_000885.png\n",
+ "upload: train/minibike_s_000886.png to s3://udacity-ml-workflow/train/minibike_s_000886.png\n",
+ "upload: train/minibike_s_000967.png to s3://udacity-ml-workflow/train/minibike_s_000967.png\n",
+ "upload: train/minibike_s_000968.png to s3://udacity-ml-workflow/train/minibike_s_000968.png\n",
+ "upload: train/minibike_s_001017.png to s3://udacity-ml-workflow/train/minibike_s_001017.png\n",
+ "upload: train/minibike_s_001072.png to s3://udacity-ml-workflow/train/minibike_s_001072.png\n",
+ "upload: train/minibike_s_000906.png to s3://udacity-ml-workflow/train/minibike_s_000906.png\n",
+ "upload: train/minibike_s_000855.png to s3://udacity-ml-workflow/train/minibike_s_000855.png\n",
+ "upload: train/minibike_s_001016.png to s3://udacity-ml-workflow/train/minibike_s_001016.png\n",
+ "upload: train/minibike_s_000914.png to s3://udacity-ml-workflow/train/minibike_s_000914.png\n",
+ "upload: train/minibike_s_001079.png to s3://udacity-ml-workflow/train/minibike_s_001079.png\n",
+ "upload: train/minibike_s_001094.png to s3://udacity-ml-workflow/train/minibike_s_001094.png\n",
+ "upload: train/minibike_s_001169.png to s3://udacity-ml-workflow/train/minibike_s_001169.png\n",
+ "upload: train/minibike_s_001185.png to s3://udacity-ml-workflow/train/minibike_s_001185.png\n",
+ "upload: train/minibike_s_001177.png to s3://udacity-ml-workflow/train/minibike_s_001177.png\n",
+ "upload: train/minibike_s_001179.png to s3://udacity-ml-workflow/train/minibike_s_001179.png\n",
+ "upload: train/minibike_s_001193.png to s3://udacity-ml-workflow/train/minibike_s_001193.png\n",
+ "upload: train/minibike_s_001168.png to s3://udacity-ml-workflow/train/minibike_s_001168.png\n",
+ "upload: train/minibike_s_001157.png to s3://udacity-ml-workflow/train/minibike_s_001157.png\n",
+ "upload: train/minibike_s_001250.png to s3://udacity-ml-workflow/train/minibike_s_001250.png\n",
+ "upload: train/minibike_s_001191.png to s3://udacity-ml-workflow/train/minibike_s_001191.png\n",
+ "upload: train/minibike_s_001261.png to s3://udacity-ml-workflow/train/minibike_s_001261.png\n",
+ "upload: train/minibike_s_001249.png to s3://udacity-ml-workflow/train/minibike_s_001249.png\n",
+ "upload: train/minibike_s_001270.png to s3://udacity-ml-workflow/train/minibike_s_001270.png\n",
+ "upload: train/minibike_s_001275.png to s3://udacity-ml-workflow/train/minibike_s_001275.png\n",
+ "upload: train/minibike_s_001344.png to s3://udacity-ml-workflow/train/minibike_s_001344.png\n",
+ "upload: train/minibike_s_001294.png to s3://udacity-ml-workflow/train/minibike_s_001294.png\n",
+ "upload: train/minibike_s_001417.png to s3://udacity-ml-workflow/train/minibike_s_001417.png\n",
+ "upload: train/minibike_s_001458.png to s3://udacity-ml-workflow/train/minibike_s_001458.png\n",
+ "upload: train/minibike_s_001348.png to s3://udacity-ml-workflow/train/minibike_s_001348.png\n",
+ "upload: train/minibike_s_001479.png to s3://udacity-ml-workflow/train/minibike_s_001479.png\n",
+ "upload: train/minibike_s_001450.png to s3://udacity-ml-workflow/train/minibike_s_001450.png\n",
+ "upload: train/minibike_s_001345.png to s3://udacity-ml-workflow/train/minibike_s_001345.png\n",
+ "upload: train/minibike_s_001498.png to s3://udacity-ml-workflow/train/minibike_s_001498.png\n",
+ "upload: train/minibike_s_001511.png to s3://udacity-ml-workflow/train/minibike_s_001511.png\n",
+ "upload: train/minibike_s_001496.png to s3://udacity-ml-workflow/train/minibike_s_001496.png\n",
+ "upload: train/minibike_s_001512.png to s3://udacity-ml-workflow/train/minibike_s_001512.png\n",
+ "upload: train/minibike_s_001279.png to s3://udacity-ml-workflow/train/minibike_s_001279.png\n",
+ "upload: train/minibike_s_001506.png to s3://udacity-ml-workflow/train/minibike_s_001506.png\n",
+ "upload: train/minibike_s_001539.png to s3://udacity-ml-workflow/train/minibike_s_001539.png\n",
+ "upload: train/minibike_s_001540.png to s3://udacity-ml-workflow/train/minibike_s_001540.png\n",
+ "upload: train/minibike_s_001366.png to s3://udacity-ml-workflow/train/minibike_s_001366.png\n",
+ "upload: train/minibike_s_001565.png to s3://udacity-ml-workflow/train/minibike_s_001565.png\n",
+ "upload: train/minibike_s_001491.png to s3://udacity-ml-workflow/train/minibike_s_001491.png\n",
+ "upload: train/minibike_s_001546.png to s3://udacity-ml-workflow/train/minibike_s_001546.png\n",
+ "upload: train/minibike_s_001631.png to s3://udacity-ml-workflow/train/minibike_s_001631.png\n",
+ "upload: train/minibike_s_001558.png to s3://udacity-ml-workflow/train/minibike_s_001558.png\n",
+ "upload: train/minibike_s_001639.png to s3://udacity-ml-workflow/train/minibike_s_001639.png\n",
+ "upload: train/minibike_s_001653.png to s3://udacity-ml-workflow/train/minibike_s_001653.png\n",
+ "upload: train/minibike_s_001573.png to s3://udacity-ml-workflow/train/minibike_s_001573.png\n",
+ "upload: train/minibike_s_001597.png to s3://udacity-ml-workflow/train/minibike_s_001597.png\n",
+ "upload: train/minibike_s_001747.png to s3://udacity-ml-workflow/train/minibike_s_001747.png\n",
+ "upload: train/minibike_s_001689.png to s3://udacity-ml-workflow/train/minibike_s_001689.png\n",
+ "upload: train/minibike_s_001575.png to s3://udacity-ml-workflow/train/minibike_s_001575.png\n",
+ "upload: train/minibike_s_001701.png to s3://udacity-ml-workflow/train/minibike_s_001701.png\n",
+ "upload: train/minibike_s_001734.png to s3://udacity-ml-workflow/train/minibike_s_001734.png\n",
+ "upload: train/minibike_s_001638.png to s3://udacity-ml-workflow/train/minibike_s_001638.png\n",
+ "upload: train/minibike_s_001731.png to s3://udacity-ml-workflow/train/minibike_s_001731.png\n",
+ "upload: train/minibike_s_001771.png to s3://udacity-ml-workflow/train/minibike_s_001771.png\n",
+ "upload: train/minibike_s_001691.png to s3://udacity-ml-workflow/train/minibike_s_001691.png\n",
+ "upload: train/minibike_s_001836.png to s3://udacity-ml-workflow/train/minibike_s_001836.png\n",
+ "upload: train/minibike_s_001789.png to s3://udacity-ml-workflow/train/minibike_s_001789.png\n",
+ "upload: train/minibike_s_001863.png to s3://udacity-ml-workflow/train/minibike_s_001863.png\n",
+ "upload: train/minibike_s_001767.png to s3://udacity-ml-workflow/train/minibike_s_001767.png\n",
+ "upload: train/minibike_s_001865.png to s3://udacity-ml-workflow/train/minibike_s_001865.png\n",
+ "upload: train/minibike_s_001829.png to s3://udacity-ml-workflow/train/minibike_s_001829.png\n",
+ "upload: train/minibike_s_001880.png to s3://udacity-ml-workflow/train/minibike_s_001880.png\n",
+ "upload: train/minibike_s_001838.png to s3://udacity-ml-workflow/train/minibike_s_001838.png\n",
+ "upload: train/minibike_s_001885.png to s3://udacity-ml-workflow/train/minibike_s_001885.png\n",
+ "upload: train/minibike_s_001873.png to s3://udacity-ml-workflow/train/minibike_s_001873.png\n",
+ "upload: train/minibike_s_001827.png to s3://udacity-ml-workflow/train/minibike_s_001827.png\n",
+ "upload: train/minibike_s_001881.png to s3://udacity-ml-workflow/train/minibike_s_001881.png\n",
+ "upload: train/minibike_s_001870.png to s3://udacity-ml-workflow/train/minibike_s_001870.png\n",
+ "upload: train/minibike_s_001972.png to s3://udacity-ml-workflow/train/minibike_s_001972.png\n",
+ "upload: train/minibike_s_001969.png to s3://udacity-ml-workflow/train/minibike_s_001969.png\n",
+ "upload: train/minibike_s_001996.png to s3://udacity-ml-workflow/train/minibike_s_001996.png\n",
+ "upload: train/minibike_s_002030.png to s3://udacity-ml-workflow/train/minibike_s_002030.png\n",
+ "upload: train/minibike_s_002009.png to s3://udacity-ml-workflow/train/minibike_s_002009.png\n",
+ "upload: train/minibike_s_001944.png to s3://udacity-ml-workflow/train/minibike_s_001944.png\n",
+ "upload: train/minibike_s_002048.png to s3://udacity-ml-workflow/train/minibike_s_002048.png\n",
+ "upload: train/minibike_s_001921.png to s3://udacity-ml-workflow/train/minibike_s_001921.png\n",
+ "upload: train/minibike_s_002046.png to s3://udacity-ml-workflow/train/minibike_s_002046.png\n",
+ "upload: train/minibike_s_002038.png to s3://udacity-ml-workflow/train/minibike_s_002038.png\n",
+ "upload: train/minibike_s_001917.png to s3://udacity-ml-workflow/train/minibike_s_001917.png\n",
+ "upload: train/minibike_s_002115.png to s3://udacity-ml-workflow/train/minibike_s_002115.png\n",
+ "upload: train/minibike_s_002124.png to s3://udacity-ml-workflow/train/minibike_s_002124.png\n",
+ "upload: train/minibike_s_002130.png to s3://udacity-ml-workflow/train/minibike_s_002130.png\n",
+ "upload: train/minibike_s_002137.png to s3://udacity-ml-workflow/train/minibike_s_002137.png\n",
+ "upload: train/minibike_s_002146.png to s3://udacity-ml-workflow/train/minibike_s_002146.png\n",
+ "upload: train/minibike_s_002186.png to s3://udacity-ml-workflow/train/minibike_s_002186.png\n",
+ "upload: train/minibike_s_002163.png to s3://udacity-ml-workflow/train/minibike_s_002163.png\n",
+ "upload: train/minibike_s_002196.png to s3://udacity-ml-workflow/train/minibike_s_002196.png\n",
+ "upload: train/minibike_s_002182.png to s3://udacity-ml-workflow/train/minibike_s_002182.png\n",
+ "upload: train/minibike_s_002084.png to s3://udacity-ml-workflow/train/minibike_s_002084.png\n",
+ "upload: train/minibike_s_002198.png to s3://udacity-ml-workflow/train/minibike_s_002198.png\n",
+ "upload: train/moped_s_000004.png to s3://udacity-ml-workflow/train/moped_s_000004.png\n",
+ "upload: train/minibike_s_002176.png to s3://udacity-ml-workflow/train/minibike_s_002176.png\n",
+ "upload: train/moped_s_000021.png to s3://udacity-ml-workflow/train/moped_s_000021.png\n",
+ "upload: train/moped_s_000030.png to s3://udacity-ml-workflow/train/moped_s_000030.png\n",
+ "upload: train/moped_s_000009.png to s3://udacity-ml-workflow/train/moped_s_000009.png\n",
+ "upload: train/minibike_s_002218.png to s3://udacity-ml-workflow/train/minibike_s_002218.png\n",
+ "upload: train/minibike_s_002194.png to s3://udacity-ml-workflow/train/minibike_s_002194.png\n",
+ "upload: train/moped_s_000071.png to s3://udacity-ml-workflow/train/moped_s_000071.png\n",
+ "upload: train/moped_s_000035.png to s3://udacity-ml-workflow/train/moped_s_000035.png\n",
+ "upload: train/moped_s_000034.png to s3://udacity-ml-workflow/train/moped_s_000034.png\n",
+ "upload: train/moped_s_000124.png to s3://udacity-ml-workflow/train/moped_s_000124.png\n",
+ "upload: train/moped_s_000065.png to s3://udacity-ml-workflow/train/moped_s_000065.png\n",
+ "upload: train/moped_s_000135.png to s3://udacity-ml-workflow/train/moped_s_000135.png\n",
+ "upload: train/moped_s_000044.png to s3://udacity-ml-workflow/train/moped_s_000044.png\n",
+ "upload: train/moped_s_000119.png to s3://udacity-ml-workflow/train/moped_s_000119.png\n",
+ "upload: train/motorbike_s_000009.png to s3://udacity-ml-workflow/train/motorbike_s_000009.png\n",
+ "upload: train/motorbike_s_000022.png to s3://udacity-ml-workflow/train/motorbike_s_000022.png\n",
+ "upload: train/moped_s_000168.png to s3://udacity-ml-workflow/train/moped_s_000168.png\n",
+ "upload: train/moped_s_000169.png to s3://udacity-ml-workflow/train/moped_s_000169.png\n",
+ "upload: train/moped_s_000237.png to s3://udacity-ml-workflow/train/moped_s_000237.png\n",
+ "upload: train/motorbike_s_000035.png to s3://udacity-ml-workflow/train/motorbike_s_000035.png\n",
+ "upload: train/motorbike_s_000021.png to s3://udacity-ml-workflow/train/motorbike_s_000021.png\n",
+ "upload: train/motorbike_s_000041.png to s3://udacity-ml-workflow/train/motorbike_s_000041.png\n",
+ "upload: train/motorbike_s_000106.png to s3://udacity-ml-workflow/train/motorbike_s_000106.png\n",
+ "upload: train/motorbike_s_000060.png to s3://udacity-ml-workflow/train/motorbike_s_000060.png\n",
+ "upload: train/motorbike_s_000058.png to s3://udacity-ml-workflow/train/motorbike_s_000058.png\n",
+ "upload: train/motorbike_s_000117.png to s3://udacity-ml-workflow/train/motorbike_s_000117.png\n",
+ "upload: train/motorbike_s_000124.png to s3://udacity-ml-workflow/train/motorbike_s_000124.png\n",
+ "upload: train/motorbike_s_000068.png to s3://udacity-ml-workflow/train/motorbike_s_000068.png\n",
+ "upload: train/motorbike_s_000134.png to s3://udacity-ml-workflow/train/motorbike_s_000134.png\n",
+ "upload: train/motorbike_s_000115.png to s3://udacity-ml-workflow/train/motorbike_s_000115.png\n",
+ "upload: train/motorbike_s_000141.png to s3://udacity-ml-workflow/train/motorbike_s_000141.png\n",
+ "upload: train/moped_s_000236.png to s3://udacity-ml-workflow/train/moped_s_000236.png\n",
+ "upload: train/motorbike_s_000172.png to s3://udacity-ml-workflow/train/motorbike_s_000172.png\n",
+ "upload: train/motorbike_s_000308.png to s3://udacity-ml-workflow/train/motorbike_s_000308.png\n",
+ "upload: train/motorbike_s_000062.png to s3://udacity-ml-workflow/train/motorbike_s_000062.png\n",
+ "upload: train/motorbike_s_000225.png to s3://udacity-ml-workflow/train/motorbike_s_000225.png\n",
+ "upload: train/motorbike_s_000254.png to s3://udacity-ml-workflow/train/motorbike_s_000254.png\n",
+ "upload: train/motorbike_s_000346.png to s3://udacity-ml-workflow/train/motorbike_s_000346.png\n",
+ "upload: train/motorbike_s_000331.png to s3://udacity-ml-workflow/train/motorbike_s_000331.png\n",
+ "upload: train/motorbike_s_000119.png to s3://udacity-ml-workflow/train/motorbike_s_000119.png\n",
+ "upload: train/motorbike_s_000223.png to s3://udacity-ml-workflow/train/motorbike_s_000223.png\n",
+ "upload: train/motorbike_s_000221.png to s3://udacity-ml-workflow/train/motorbike_s_000221.png\n",
+ "upload: train/motorbike_s_000361.png to s3://udacity-ml-workflow/train/motorbike_s_000361.png\n",
+ "upload: train/motorbike_s_000501.png to s3://udacity-ml-workflow/train/motorbike_s_000501.png\n",
+ "upload: train/motorbike_s_000362.png to s3://udacity-ml-workflow/train/motorbike_s_000362.png\n",
+ "upload: train/motorbike_s_000449.png to s3://udacity-ml-workflow/train/motorbike_s_000449.png\n",
+ "upload: train/motorcycle_s_000001.png to s3://udacity-ml-workflow/train/motorcycle_s_000001.png\n",
+ "upload: train/motorbike_s_000541.png to s3://udacity-ml-workflow/train/motorbike_s_000541.png\n",
+ "upload: train/motorbike_s_000463.png to s3://udacity-ml-workflow/train/motorbike_s_000463.png\n",
+ "upload: train/motorbike_s_000578.png to s3://udacity-ml-workflow/train/motorbike_s_000578.png\n",
+ "upload: train/motorbike_s_000534.png to s3://udacity-ml-workflow/train/motorbike_s_000534.png\n",
+ "upload: train/motorcycle_s_000003.png to s3://udacity-ml-workflow/train/motorcycle_s_000003.png\n",
+ "upload: train/motorcycle_s_000009.png to s3://udacity-ml-workflow/train/motorcycle_s_000009.png\n",
+ "upload: train/motorbike_s_000427.png to s3://udacity-ml-workflow/train/motorbike_s_000427.png\n",
+ "upload: train/motorcycle_s_000022.png to s3://udacity-ml-workflow/train/motorcycle_s_000022.png\n",
+ "upload: train/motorcycle_s_000025.png to s3://udacity-ml-workflow/train/motorcycle_s_000025.png\n",
+ "upload: train/motorcycle_s_000002.png to s3://udacity-ml-workflow/train/motorcycle_s_000002.png\n",
+ "upload: train/motorcycle_s_000004.png to s3://udacity-ml-workflow/train/motorcycle_s_000004.png\n",
+ "upload: train/motorcycle_s_000027.png to s3://udacity-ml-workflow/train/motorcycle_s_000027.png\n",
+ "upload: train/motorcycle_s_000032.png to s3://udacity-ml-workflow/train/motorcycle_s_000032.png\n",
+ "upload: train/motorcycle_s_000050.png to s3://udacity-ml-workflow/train/motorcycle_s_000050.png\n",
+ "upload: train/motorcycle_s_000072.png to s3://udacity-ml-workflow/train/motorcycle_s_000072.png\n",
+ "upload: train/motorcycle_s_000127.png to s3://udacity-ml-workflow/train/motorcycle_s_000127.png\n",
+ "upload: train/motorcycle_s_000126.png to s3://udacity-ml-workflow/train/motorcycle_s_000126.png\n",
+ "upload: train/motorcycle_s_000070.png to s3://udacity-ml-workflow/train/motorcycle_s_000070.png\n",
+ "upload: train/motorcycle_s_000076.png to s3://udacity-ml-workflow/train/motorcycle_s_000076.png\n",
+ "upload: train/motorcycle_s_000120.png to s3://udacity-ml-workflow/train/motorcycle_s_000120.png\n",
+ "upload: train/motorcycle_s_000136.png to s3://udacity-ml-workflow/train/motorcycle_s_000136.png\n",
+ "upload: train/motorcycle_s_000026.png to s3://udacity-ml-workflow/train/motorcycle_s_000026.png\n",
+ "upload: train/motorcycle_s_000154.png to s3://udacity-ml-workflow/train/motorcycle_s_000154.png\n",
+ "upload: train/motorcycle_s_000133.png to s3://udacity-ml-workflow/train/motorcycle_s_000133.png\n",
+ "upload: train/motorcycle_s_000029.png to s3://udacity-ml-workflow/train/motorcycle_s_000029.png\n",
+ "upload: train/motorcycle_s_000074.png to s3://udacity-ml-workflow/train/motorcycle_s_000074.png\n",
+ "upload: train/motorcycle_s_000169.png to s3://udacity-ml-workflow/train/motorcycle_s_000169.png\n",
+ "upload: train/motorcycle_s_000146.png to s3://udacity-ml-workflow/train/motorcycle_s_000146.png\n",
+ "upload: train/motorcycle_s_000170.png to s3://udacity-ml-workflow/train/motorcycle_s_000170.png\n",
+ "upload: train/motorcycle_s_000216.png to s3://udacity-ml-workflow/train/motorcycle_s_000216.png\n",
+ "upload: train/motorcycle_s_000220.png to s3://udacity-ml-workflow/train/motorcycle_s_000220.png\n",
+ "upload: train/motorcycle_s_000223.png to s3://udacity-ml-workflow/train/motorcycle_s_000223.png\n",
+ "upload: train/motorcycle_s_000144.png to s3://udacity-ml-workflow/train/motorcycle_s_000144.png\n",
+ "upload: train/motorcycle_s_000207.png to s3://udacity-ml-workflow/train/motorcycle_s_000207.png\n",
+ "upload: train/motorcycle_s_000217.png to s3://udacity-ml-workflow/train/motorcycle_s_000217.png\n",
+ "upload: train/motorcycle_s_000167.png to s3://udacity-ml-workflow/train/motorcycle_s_000167.png\n",
+ "upload: train/motorcycle_s_000151.png to s3://udacity-ml-workflow/train/motorcycle_s_000151.png\n",
+ "upload: train/motorcycle_s_000249.png to s3://udacity-ml-workflow/train/motorcycle_s_000249.png\n",
+ "upload: train/motorcycle_s_000219.png to s3://udacity-ml-workflow/train/motorcycle_s_000219.png\n",
+ "upload: train/motorcycle_s_000246.png to s3://udacity-ml-workflow/train/motorcycle_s_000246.png\n",
+ "upload: train/motorcycle_s_000242.png to s3://udacity-ml-workflow/train/motorcycle_s_000242.png\n",
+ "upload: train/motorcycle_s_000245.png to s3://udacity-ml-workflow/train/motorcycle_s_000245.png\n",
+ "upload: train/motorcycle_s_000252.png to s3://udacity-ml-workflow/train/motorcycle_s_000252.png\n",
+ "upload: train/motorcycle_s_000256.png to s3://udacity-ml-workflow/train/motorcycle_s_000256.png\n",
+ "upload: train/motorcycle_s_000253.png to s3://udacity-ml-workflow/train/motorcycle_s_000253.png\n",
+ "upload: train/motorcycle_s_000277.png to s3://udacity-ml-workflow/train/motorcycle_s_000277.png\n",
+ "upload: train/motorcycle_s_000284.png to s3://udacity-ml-workflow/train/motorcycle_s_000284.png\n",
+ "upload: train/motorcycle_s_000291.png to s3://udacity-ml-workflow/train/motorcycle_s_000291.png\n",
+ "upload: train/motorcycle_s_000309.png to s3://udacity-ml-workflow/train/motorcycle_s_000309.png\n",
+ "upload: train/motorcycle_s_000300.png to s3://udacity-ml-workflow/train/motorcycle_s_000300.png\n",
+ "upload: train/motorcycle_s_000221.png to s3://udacity-ml-workflow/train/motorcycle_s_000221.png\n",
+ "upload: train/motorcycle_s_000312.png to s3://udacity-ml-workflow/train/motorcycle_s_000312.png\n",
+ "upload: train/motorcycle_s_000262.png to s3://udacity-ml-workflow/train/motorcycle_s_000262.png\n",
+ "upload: train/motorcycle_s_000304.png to s3://udacity-ml-workflow/train/motorcycle_s_000304.png\n",
+ "upload: train/motorcycle_s_000319.png to s3://udacity-ml-workflow/train/motorcycle_s_000319.png\n",
+ "upload: train/motorcycle_s_000332.png to s3://udacity-ml-workflow/train/motorcycle_s_000332.png\n",
+ "upload: train/motorcycle_s_000290.png to s3://udacity-ml-workflow/train/motorcycle_s_000290.png\n",
+ "upload: train/motorcycle_s_000325.png to s3://udacity-ml-workflow/train/motorcycle_s_000325.png\n",
+ "upload: train/motorcycle_s_000339.png to s3://udacity-ml-workflow/train/motorcycle_s_000339.png\n",
+ "upload: train/motorcycle_s_000340.png to s3://udacity-ml-workflow/train/motorcycle_s_000340.png\n",
+ "upload: train/motorcycle_s_000346.png to s3://udacity-ml-workflow/train/motorcycle_s_000346.png\n",
+ "upload: train/motorcycle_s_000320.png to s3://udacity-ml-workflow/train/motorcycle_s_000320.png\n",
+ "upload: train/motorcycle_s_000417.png to s3://udacity-ml-workflow/train/motorcycle_s_000417.png\n",
+ "upload: train/motorcycle_s_000353.png to s3://udacity-ml-workflow/train/motorcycle_s_000353.png\n",
+ "upload: train/motorcycle_s_000422.png to s3://udacity-ml-workflow/train/motorcycle_s_000422.png\n",
+ "upload: train/motorcycle_s_000423.png to s3://udacity-ml-workflow/train/motorcycle_s_000423.png\n",
+ "upload: train/motorcycle_s_000407.png to s3://udacity-ml-workflow/train/motorcycle_s_000407.png\n",
+ "upload: train/motorcycle_s_000432.png to s3://udacity-ml-workflow/train/motorcycle_s_000432.png\n",
+ "upload: train/motorcycle_s_000418.png to s3://udacity-ml-workflow/train/motorcycle_s_000418.png\n",
+ "upload: train/motorcycle_s_000430.png to s3://udacity-ml-workflow/train/motorcycle_s_000430.png\n",
+ "upload: train/motorcycle_s_000431.png to s3://udacity-ml-workflow/train/motorcycle_s_000431.png\n",
+ "upload: train/motorcycle_s_000447.png to s3://udacity-ml-workflow/train/motorcycle_s_000447.png\n",
+ "upload: train/motorcycle_s_000440.png to s3://udacity-ml-workflow/train/motorcycle_s_000440.png\n",
+ "upload: train/motorcycle_s_000347.png to s3://udacity-ml-workflow/train/motorcycle_s_000347.png\n",
+ "upload: train/motorcycle_s_000454.png to s3://udacity-ml-workflow/train/motorcycle_s_000454.png\n",
+ "upload: train/motorcycle_s_000451.png to s3://udacity-ml-workflow/train/motorcycle_s_000451.png\n",
+ "upload: train/motorcycle_s_000508.png to s3://udacity-ml-workflow/train/motorcycle_s_000508.png\n",
+ "upload: train/motorcycle_s_000459.png to s3://udacity-ml-workflow/train/motorcycle_s_000459.png\n",
+ "upload: train/motorcycle_s_000542.png to s3://udacity-ml-workflow/train/motorcycle_s_000542.png\n",
+ "upload: train/motorcycle_s_000521.png to s3://udacity-ml-workflow/train/motorcycle_s_000521.png\n",
+ "upload: train/motorcycle_s_000456.png to s3://udacity-ml-workflow/train/motorcycle_s_000456.png\n",
+ "upload: train/motorcycle_s_000580.png to s3://udacity-ml-workflow/train/motorcycle_s_000580.png\n",
+ "upload: train/motorcycle_s_000517.png to s3://udacity-ml-workflow/train/motorcycle_s_000517.png\n",
+ "upload: train/motorcycle_s_000585.png to s3://udacity-ml-workflow/train/motorcycle_s_000585.png\n",
+ "upload: train/motorcycle_s_000594.png to s3://udacity-ml-workflow/train/motorcycle_s_000594.png\n",
+ "upload: train/motorcycle_s_000545.png to s3://udacity-ml-workflow/train/motorcycle_s_000545.png\n",
+ "upload: train/motorcycle_s_000486.png to s3://udacity-ml-workflow/train/motorcycle_s_000486.png\n",
+ "upload: train/motorcycle_s_000622.png to s3://udacity-ml-workflow/train/motorcycle_s_000622.png\n",
+ "upload: train/motorcycle_s_000617.png to s3://udacity-ml-workflow/train/motorcycle_s_000617.png\n",
+ "upload: train/motorcycle_s_000654.png to s3://udacity-ml-workflow/train/motorcycle_s_000654.png\n",
+ "upload: train/motorcycle_s_000629.png to s3://udacity-ml-workflow/train/motorcycle_s_000629.png\n",
+ "upload: train/motorcycle_s_000605.png to s3://udacity-ml-workflow/train/motorcycle_s_000605.png\n",
+ "upload: train/motorcycle_s_000687.png to s3://udacity-ml-workflow/train/motorcycle_s_000687.png\n",
+ "upload: train/motorcycle_s_000686.png to s3://udacity-ml-workflow/train/motorcycle_s_000686.png\n",
+ "upload: train/motorcycle_s_000695.png to s3://udacity-ml-workflow/train/motorcycle_s_000695.png\n",
+ "upload: train/motorcycle_s_000543.png to s3://udacity-ml-workflow/train/motorcycle_s_000543.png\n",
+ "upload: train/motorcycle_s_000593.png to s3://udacity-ml-workflow/train/motorcycle_s_000593.png\n",
+ "upload: train/motorcycle_s_000496.png to s3://udacity-ml-workflow/train/motorcycle_s_000496.png\n",
+ "upload: train/motorcycle_s_000669.png to s3://udacity-ml-workflow/train/motorcycle_s_000669.png\n",
+ "upload: train/motorcycle_s_000696.png to s3://udacity-ml-workflow/train/motorcycle_s_000696.png\n",
+ "upload: train/motorcycle_s_000714.png to s3://udacity-ml-workflow/train/motorcycle_s_000714.png\n",
+ "upload: train/motorcycle_s_000724.png to s3://udacity-ml-workflow/train/motorcycle_s_000724.png\n",
+ "upload: train/motorcycle_s_000698.png to s3://udacity-ml-workflow/train/motorcycle_s_000698.png\n",
+ "upload: train/motorcycle_s_000713.png to s3://udacity-ml-workflow/train/motorcycle_s_000713.png\n",
+ "upload: train/motorcycle_s_000772.png to s3://udacity-ml-workflow/train/motorcycle_s_000772.png\n",
+ "upload: train/motorcycle_s_000699.png to s3://udacity-ml-workflow/train/motorcycle_s_000699.png\n",
+ "upload: train/motorcycle_s_000776.png to s3://udacity-ml-workflow/train/motorcycle_s_000776.png\n",
+ "upload: train/motorcycle_s_000741.png to s3://udacity-ml-workflow/train/motorcycle_s_000741.png\n",
+ "upload: train/motorcycle_s_000700.png to s3://udacity-ml-workflow/train/motorcycle_s_000700.png\n",
+ "upload: train/motorcycle_s_000734.png to s3://udacity-ml-workflow/train/motorcycle_s_000734.png\n",
+ "upload: train/motorcycle_s_000732.png to s3://udacity-ml-workflow/train/motorcycle_s_000732.png\n",
+ "upload: train/motorcycle_s_000787.png to s3://udacity-ml-workflow/train/motorcycle_s_000787.png\n",
+ "upload: train/motorcycle_s_000792.png to s3://udacity-ml-workflow/train/motorcycle_s_000792.png\n",
+ "upload: train/motorcycle_s_000791.png to s3://udacity-ml-workflow/train/motorcycle_s_000791.png\n",
+ "upload: train/motorcycle_s_000785.png to s3://udacity-ml-workflow/train/motorcycle_s_000785.png\n",
+ "upload: train/motorcycle_s_000796.png to s3://udacity-ml-workflow/train/motorcycle_s_000796.png\n",
+ "upload: train/motorcycle_s_000807.png to s3://udacity-ml-workflow/train/motorcycle_s_000807.png\n",
+ "upload: train/motorcycle_s_000894.png to s3://udacity-ml-workflow/train/motorcycle_s_000894.png\n",
+ "upload: train/motorcycle_s_000790.png to s3://udacity-ml-workflow/train/motorcycle_s_000790.png\n",
+ "upload: train/motorcycle_s_000887.png to s3://udacity-ml-workflow/train/motorcycle_s_000887.png\n",
+ "upload: train/motorcycle_s_000917.png to s3://udacity-ml-workflow/train/motorcycle_s_000917.png\n",
+ "upload: train/motorcycle_s_000919.png to s3://udacity-ml-workflow/train/motorcycle_s_000919.png\n",
+ "upload: train/motorcycle_s_000924.png to s3://udacity-ml-workflow/train/motorcycle_s_000924.png\n",
+ "upload: train/motorcycle_s_000834.png to s3://udacity-ml-workflow/train/motorcycle_s_000834.png\n",
+ "upload: train/motorcycle_s_000928.png to s3://udacity-ml-workflow/train/motorcycle_s_000928.png\n",
+ "upload: train/motorcycle_s_000925.png to s3://udacity-ml-workflow/train/motorcycle_s_000925.png\n",
+ "upload: train/motorcycle_s_000938.png to s3://udacity-ml-workflow/train/motorcycle_s_000938.png\n",
+ "upload: train/motorcycle_s_000941.png to s3://udacity-ml-workflow/train/motorcycle_s_000941.png\n",
+ "upload: train/motorcycle_s_000978.png to s3://udacity-ml-workflow/train/motorcycle_s_000978.png\n",
+ "upload: train/motorcycle_s_000979.png to s3://udacity-ml-workflow/train/motorcycle_s_000979.png\n",
+ "upload: train/motorcycle_s_000991.png to s3://udacity-ml-workflow/train/motorcycle_s_000991.png\n",
+ "upload: train/motorcycle_s_001012.png to s3://udacity-ml-workflow/train/motorcycle_s_001012.png\n",
+ "upload: train/motorcycle_s_001017.png to s3://udacity-ml-workflow/train/motorcycle_s_001017.png\n",
+ "upload: train/motorcycle_s_000922.png to s3://udacity-ml-workflow/train/motorcycle_s_000922.png\n",
+ "upload: train/motorcycle_s_001106.png to s3://udacity-ml-workflow/train/motorcycle_s_001106.png\n",
+ "upload: train/motorcycle_s_000989.png to s3://udacity-ml-workflow/train/motorcycle_s_000989.png\n",
+ "upload: train/motorcycle_s_001027.png to s3://udacity-ml-workflow/train/motorcycle_s_001027.png\n",
+ "upload: train/motorcycle_s_001063.png to s3://udacity-ml-workflow/train/motorcycle_s_001063.png\n",
+ "upload: train/motorcycle_s_000923.png to s3://udacity-ml-workflow/train/motorcycle_s_000923.png\n",
+ "upload: train/motorcycle_s_001118.png to s3://udacity-ml-workflow/train/motorcycle_s_001118.png\n",
+ "upload: train/motorcycle_s_000933.png to s3://udacity-ml-workflow/train/motorcycle_s_000933.png\n",
+ "upload: train/motorcycle_s_001016.png to s3://udacity-ml-workflow/train/motorcycle_s_001016.png\n",
+ "upload: train/motorcycle_s_001033.png to s3://udacity-ml-workflow/train/motorcycle_s_001033.png\n",
+ "upload: train/motorcycle_s_001064.png to s3://udacity-ml-workflow/train/motorcycle_s_001064.png\n",
+ "upload: train/motorcycle_s_001119.png to s3://udacity-ml-workflow/train/motorcycle_s_001119.png\n",
+ "upload: train/motorcycle_s_001167.png to s3://udacity-ml-workflow/train/motorcycle_s_001167.png\n",
+ "upload: train/motorcycle_s_001176.png to s3://udacity-ml-workflow/train/motorcycle_s_001176.png\n",
+ "upload: train/motorcycle_s_001183.png to s3://udacity-ml-workflow/train/motorcycle_s_001183.png\n",
+ "upload: train/motorcycle_s_001126.png to s3://udacity-ml-workflow/train/motorcycle_s_001126.png\n",
+ "upload: train/motorcycle_s_001205.png to s3://udacity-ml-workflow/train/motorcycle_s_001205.png\n",
+ "upload: train/motorcycle_s_001180.png to s3://udacity-ml-workflow/train/motorcycle_s_001180.png\n",
+ "upload: train/motorcycle_s_001181.png to s3://udacity-ml-workflow/train/motorcycle_s_001181.png\n",
+ "upload: train/motorcycle_s_001196.png to s3://udacity-ml-workflow/train/motorcycle_s_001196.png\n",
+ "upload: train/motorcycle_s_001209.png to s3://udacity-ml-workflow/train/motorcycle_s_001209.png\n",
+ "upload: train/motorcycle_s_001182.png to s3://udacity-ml-workflow/train/motorcycle_s_001182.png\n",
+ "upload: train/motorcycle_s_001215.png to s3://udacity-ml-workflow/train/motorcycle_s_001215.png\n",
+ "upload: train/motorcycle_s_001197.png to s3://udacity-ml-workflow/train/motorcycle_s_001197.png\n",
+ "upload: train/motorcycle_s_001236.png to s3://udacity-ml-workflow/train/motorcycle_s_001236.png\n",
+ "upload: train/motorcycle_s_001237.png to s3://udacity-ml-workflow/train/motorcycle_s_001237.png\n",
+ "upload: train/motorcycle_s_001238.png to s3://udacity-ml-workflow/train/motorcycle_s_001238.png\n",
+ "upload: train/motorcycle_s_001220.png to s3://udacity-ml-workflow/train/motorcycle_s_001220.png\n",
+ "upload: train/motorcycle_s_001246.png to s3://udacity-ml-workflow/train/motorcycle_s_001246.png\n",
+ "upload: train/motorcycle_s_001213.png to s3://udacity-ml-workflow/train/motorcycle_s_001213.png\n",
+ "upload: train/motorcycle_s_001242.png to s3://udacity-ml-workflow/train/motorcycle_s_001242.png\n",
+ "upload: train/motorcycle_s_001244.png to s3://udacity-ml-workflow/train/motorcycle_s_001244.png\n",
+ "upload: train/motorcycle_s_001247.png to s3://udacity-ml-workflow/train/motorcycle_s_001247.png\n",
+ "upload: train/motorcycle_s_001273.png to s3://udacity-ml-workflow/train/motorcycle_s_001273.png\n",
+ "upload: train/motorcycle_s_001287.png to s3://udacity-ml-workflow/train/motorcycle_s_001287.png\n",
+ "upload: train/motorcycle_s_001303.png to s3://udacity-ml-workflow/train/motorcycle_s_001303.png\n",
+ "upload: train/motorcycle_s_001297.png to s3://udacity-ml-workflow/train/motorcycle_s_001297.png\n",
+ "upload: train/motorcycle_s_001315.png to s3://udacity-ml-workflow/train/motorcycle_s_001315.png\n",
+ "upload: train/motorcycle_s_001326.png to s3://udacity-ml-workflow/train/motorcycle_s_001326.png\n",
+ "upload: train/motorcycle_s_001263.png to s3://udacity-ml-workflow/train/motorcycle_s_001263.png\n",
+ "upload: train/motorcycle_s_001337.png to s3://udacity-ml-workflow/train/motorcycle_s_001337.png\n",
+ "upload: train/motorcycle_s_001360.png to s3://udacity-ml-workflow/train/motorcycle_s_001360.png\n",
+ "upload: train/motorcycle_s_001370.png to s3://udacity-ml-workflow/train/motorcycle_s_001370.png\n",
+ "upload: train/motorcycle_s_001368.png to s3://udacity-ml-workflow/train/motorcycle_s_001368.png\n",
+ "upload: train/motorcycle_s_001363.png to s3://udacity-ml-workflow/train/motorcycle_s_001363.png\n",
+ "upload: train/motorcycle_s_001400.png to s3://udacity-ml-workflow/train/motorcycle_s_001400.png\n",
+ "upload: train/motorcycle_s_001397.png to s3://udacity-ml-workflow/train/motorcycle_s_001397.png\n",
+ "upload: train/motorcycle_s_001407.png to s3://udacity-ml-workflow/train/motorcycle_s_001407.png\n",
+ "upload: train/motorcycle_s_001319.png to s3://udacity-ml-workflow/train/motorcycle_s_001319.png\n",
+ "upload: train/motorcycle_s_001392.png to s3://udacity-ml-workflow/train/motorcycle_s_001392.png\n",
+ "upload: train/motorcycle_s_001384.png to s3://udacity-ml-workflow/train/motorcycle_s_001384.png\n",
+ "upload: train/motorcycle_s_001435.png to s3://udacity-ml-workflow/train/motorcycle_s_001435.png\n",
+ "upload: train/motorcycle_s_001413.png to s3://udacity-ml-workflow/train/motorcycle_s_001413.png\n",
+ "upload: train/motorcycle_s_001453.png to s3://udacity-ml-workflow/train/motorcycle_s_001453.png\n",
+ "upload: train/motorcycle_s_001402.png to s3://udacity-ml-workflow/train/motorcycle_s_001402.png\n",
+ "upload: train/motorcycle_s_001492.png to s3://udacity-ml-workflow/train/motorcycle_s_001492.png\n",
+ "upload: train/motorcycle_s_001507.png to s3://udacity-ml-workflow/train/motorcycle_s_001507.png\n",
+ "upload: train/motorcycle_s_001438.png to s3://udacity-ml-workflow/train/motorcycle_s_001438.png\n",
+ "upload: train/motorcycle_s_001520.png to s3://udacity-ml-workflow/train/motorcycle_s_001520.png\n",
+ "upload: train/motorcycle_s_001409.png to s3://udacity-ml-workflow/train/motorcycle_s_001409.png\n",
+ "upload: train/motorcycle_s_001549.png to s3://udacity-ml-workflow/train/motorcycle_s_001549.png\n",
+ "upload: train/motorcycle_s_001527.png to s3://udacity-ml-workflow/train/motorcycle_s_001527.png\n",
+ "upload: train/motorcycle_s_001563.png to s3://udacity-ml-workflow/train/motorcycle_s_001563.png\n",
+ "upload: train/motorcycle_s_001439.png to s3://udacity-ml-workflow/train/motorcycle_s_001439.png\n",
+ "upload: train/motorcycle_s_001536.png to s3://udacity-ml-workflow/train/motorcycle_s_001536.png\n",
+ "upload: train/motorcycle_s_001585.png to s3://udacity-ml-workflow/train/motorcycle_s_001585.png\n",
+ "upload: train/motorcycle_s_001587.png to s3://udacity-ml-workflow/train/motorcycle_s_001587.png\n",
+ "upload: train/motorcycle_s_001584.png to s3://udacity-ml-workflow/train/motorcycle_s_001584.png\n",
+ "upload: train/motorcycle_s_001565.png to s3://udacity-ml-workflow/train/motorcycle_s_001565.png\n",
+ "upload: train/motorcycle_s_001580.png to s3://udacity-ml-workflow/train/motorcycle_s_001580.png\n",
+ "upload: train/motorcycle_s_001641.png to s3://udacity-ml-workflow/train/motorcycle_s_001641.png\n",
+ "upload: train/motorcycle_s_001623.png to s3://udacity-ml-workflow/train/motorcycle_s_001623.png\n",
+ "upload: train/motorcycle_s_001622.png to s3://udacity-ml-workflow/train/motorcycle_s_001622.png\n",
+ "upload: train/motorcycle_s_001690.png to s3://udacity-ml-workflow/train/motorcycle_s_001690.png\n",
+ "upload: train/motorcycle_s_001611.png to s3://udacity-ml-workflow/train/motorcycle_s_001611.png\n",
+ "upload: train/motorcycle_s_001686.png to s3://udacity-ml-workflow/train/motorcycle_s_001686.png\n",
+ "upload: train/motorcycle_s_001699.png to s3://udacity-ml-workflow/train/motorcycle_s_001699.png\n",
+ "upload: train/motorcycle_s_001707.png to s3://udacity-ml-workflow/train/motorcycle_s_001707.png\n",
+ "upload: train/motorcycle_s_001695.png to s3://udacity-ml-workflow/train/motorcycle_s_001695.png\n",
+ "upload: train/motorcycle_s_001709.png to s3://udacity-ml-workflow/train/motorcycle_s_001709.png\n",
+ "upload: train/motorcycle_s_001696.png to s3://udacity-ml-workflow/train/motorcycle_s_001696.png\n",
+ "upload: train/motorcycle_s_001610.png to s3://udacity-ml-workflow/train/motorcycle_s_001610.png\n",
+ "upload: train/motorcycle_s_001711.png to s3://udacity-ml-workflow/train/motorcycle_s_001711.png\n",
+ "upload: train/motorcycle_s_001706.png to s3://udacity-ml-workflow/train/motorcycle_s_001706.png\n",
+ "upload: train/motorcycle_s_001714.png to s3://udacity-ml-workflow/train/motorcycle_s_001714.png\n",
+ "upload: train/motorcycle_s_001693.png to s3://udacity-ml-workflow/train/motorcycle_s_001693.png\n",
+ "upload: train/motorcycle_s_001715.png to s3://udacity-ml-workflow/train/motorcycle_s_001715.png\n",
+ "upload: train/motorcycle_s_001784.png to s3://udacity-ml-workflow/train/motorcycle_s_001784.png\n",
+ "upload: train/motorcycle_s_001765.png to s3://udacity-ml-workflow/train/motorcycle_s_001765.png\n",
+ "upload: train/motorcycle_s_001767.png to s3://udacity-ml-workflow/train/motorcycle_s_001767.png\n",
+ "upload: train/motorcycle_s_001710.png to s3://udacity-ml-workflow/train/motorcycle_s_001710.png\n",
+ "upload: train/motorcycle_s_001792.png to s3://udacity-ml-workflow/train/motorcycle_s_001792.png\n",
+ "upload: train/motorcycle_s_001790.png to s3://udacity-ml-workflow/train/motorcycle_s_001790.png\n",
+ "upload: train/motorcycle_s_001753.png to s3://udacity-ml-workflow/train/motorcycle_s_001753.png\n",
+ "upload: train/motorcycle_s_001856.png to s3://udacity-ml-workflow/train/motorcycle_s_001856.png\n",
+ "upload: train/motorcycle_s_001848.png to s3://udacity-ml-workflow/train/motorcycle_s_001848.png\n",
+ "upload: train/motorcycle_s_001853.png to s3://udacity-ml-workflow/train/motorcycle_s_001853.png\n",
+ "upload: train/motorcycle_s_001778.png to s3://udacity-ml-workflow/train/motorcycle_s_001778.png\n",
+ "upload: train/motorcycle_s_001862.png to s3://udacity-ml-workflow/train/motorcycle_s_001862.png\n",
+ "upload: train/motorcycle_s_001878.png to s3://udacity-ml-workflow/train/motorcycle_s_001878.png\n",
+ "upload: train/motorcycle_s_001905.png to s3://udacity-ml-workflow/train/motorcycle_s_001905.png\n",
+ "upload: train/motorcycle_s_002031.png to s3://udacity-ml-workflow/train/motorcycle_s_002031.png\n",
+ "upload: train/motorcycle_s_001896.png to s3://udacity-ml-workflow/train/motorcycle_s_001896.png\n",
+ "upload: train/motorcycle_s_001973.png to s3://udacity-ml-workflow/train/motorcycle_s_001973.png\n",
+ "upload: train/motorcycle_s_001920.png to s3://udacity-ml-workflow/train/motorcycle_s_001920.png\n",
+ "upload: train/motorcycle_s_002030.png to s3://udacity-ml-workflow/train/motorcycle_s_002030.png\n",
+ "upload: train/motorcycle_s_002067.png to s3://udacity-ml-workflow/train/motorcycle_s_002067.png\n",
+ "upload: train/motorcycle_s_002065.png to s3://udacity-ml-workflow/train/motorcycle_s_002065.png\n",
+ "upload: train/motorcycle_s_002066.png to s3://udacity-ml-workflow/train/motorcycle_s_002066.png\n",
+ "upload: train/motorcycle_s_002121.png to s3://udacity-ml-workflow/train/motorcycle_s_002121.png\n",
+ "upload: train/motorcycle_s_002143.png to s3://udacity-ml-workflow/train/motorcycle_s_002143.png\n",
+ "upload: train/motorcycle_s_002105.png to s3://udacity-ml-workflow/train/motorcycle_s_002105.png\n",
+ "upload: train/motorcycle_s_002183.png to s3://udacity-ml-workflow/train/motorcycle_s_002183.png\n",
+ "upload: train/motorcycle_s_002162.png to s3://udacity-ml-workflow/train/motorcycle_s_002162.png\n",
+ "upload: train/motorcycle_s_002153.png to s3://udacity-ml-workflow/train/motorcycle_s_002153.png\n",
+ "upload: train/motorcycle_s_002192.png to s3://udacity-ml-workflow/train/motorcycle_s_002192.png\n",
+ "upload: train/motorcycle_s_002197.png to s3://udacity-ml-workflow/train/motorcycle_s_002197.png\n",
+ "upload: train/motorcycle_s_002215.png to s3://udacity-ml-workflow/train/motorcycle_s_002215.png\n",
+ "upload: train/motorcycle_s_002214.png to s3://udacity-ml-workflow/train/motorcycle_s_002214.png\n",
+ "upload: train/motorcycle_s_002193.png to s3://udacity-ml-workflow/train/motorcycle_s_002193.png\n",
+ "upload: train/motorcycle_s_002221.png to s3://udacity-ml-workflow/train/motorcycle_s_002221.png\n",
+ "upload: train/motorcycle_s_002140.png to s3://udacity-ml-workflow/train/motorcycle_s_002140.png\n",
+ "upload: train/motorcycle_s_002225.png to s3://udacity-ml-workflow/train/motorcycle_s_002225.png\n",
+ "upload: train/motorcycle_s_002222.png to s3://udacity-ml-workflow/train/motorcycle_s_002222.png\n",
+ "upload: train/motorcycle_s_002237.png to s3://udacity-ml-workflow/train/motorcycle_s_002237.png\n",
+ "upload: train/motorcycle_s_002236.png to s3://udacity-ml-workflow/train/motorcycle_s_002236.png\n",
+ "upload: train/motorcycle_s_002234.png to s3://udacity-ml-workflow/train/motorcycle_s_002234.png\n",
+ "upload: train/motorcycle_s_002254.png to s3://udacity-ml-workflow/train/motorcycle_s_002254.png\n",
+ "upload: train/motorcycle_s_002316.png to s3://udacity-ml-workflow/train/motorcycle_s_002316.png\n",
+ "upload: train/ordinary_bicycle_s_000008.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000008.png\n",
+ "upload: train/motorcycle_s_002298.png to s3://udacity-ml-workflow/train/motorcycle_s_002298.png\n",
+ "upload: train/motorcycle_s_002275.png to s3://udacity-ml-workflow/train/motorcycle_s_002275.png\n",
+ "upload: train/motorcycle_s_002271.png to s3://udacity-ml-workflow/train/motorcycle_s_002271.png\n",
+ "upload: train/motorcycle_s_002291.png to s3://udacity-ml-workflow/train/motorcycle_s_002291.png\n",
+ "upload: train/motorcycle_s_002317.png to s3://udacity-ml-workflow/train/motorcycle_s_002317.png\n",
+ "upload: train/ordinary_bicycle_s_000022.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000022.png\n",
+ "upload: train/ordinary_bicycle_s_000031.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000031.png\n",
+ "upload: train/ordinary_bicycle_s_000016.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000016.png\n",
+ "upload: train/ordinary_bicycle_s_000023.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000023.png\n",
+ "upload: train/ordinary_bicycle_s_000029.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000029.png\n",
+ "upload: train/ordinary_bicycle_s_000049.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000049.png\n",
+ "upload: train/ordinary_bicycle_s_000011.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000011.png\n",
+ "upload: train/ordinary_bicycle_s_000035.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000035.png\n",
+ "upload: train/ordinary_bicycle_s_000056.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000056.png\n",
+ "upload: train/ordinary_bicycle_s_000060.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000060.png\n",
+ "upload: train/ordinary_bicycle_s_000097.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000097.png\n",
+ "upload: train/ordinary_bicycle_s_000066.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000066.png\n",
+ "upload: train/ordinary_bicycle_s_000095.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000095.png\n",
+ "upload: train/ordinary_bicycle_s_000098.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000098.png\n",
+ "upload: train/ordinary_bicycle_s_000096.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000096.png\n",
+ "upload: train/ordinary_bicycle_s_000101.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000101.png\n",
+ "upload: train/ordinary_bicycle_s_000099.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000099.png\n",
+ "upload: train/ordinary_bicycle_s_000036.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000036.png\n",
+ "upload: train/ordinary_bicycle_s_000102.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000102.png\n",
+ "upload: train/ordinary_bicycle_s_000100.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000100.png\n",
+ "upload: train/ordinary_bicycle_s_000125.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000125.png\n",
+ "upload: train/ordinary_bicycle_s_000112.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000112.png\n",
+ "upload: train/ordinary_bicycle_s_000155.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000155.png\n",
+ "upload: train/ordinary_bicycle_s_000104.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000104.png\n",
+ "upload: train/ordinary_bicycle_s_000161.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000161.png\n",
+ "upload: train/ordinary_bicycle_s_000167.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000167.png\n",
+ "upload: train/ordinary_bicycle_s_000201.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000201.png\n",
+ "upload: train/ordinary_bicycle_s_000154.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000154.png\n",
+ "upload: train/ordinary_bicycle_s_000110.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000110.png\n",
+ "upload: train/ordinary_bicycle_s_000216.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000216.png\n",
+ "upload: train/ordinary_bicycle_s_000205.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000205.png\n",
+ "upload: train/ordinary_bicycle_s_000218.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000218.png\n",
+ "upload: train/ordinary_bicycle_s_000274.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000274.png\n",
+ "upload: train/ordinary_bicycle_s_000277.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000277.png\n",
+ "upload: train/ordinary_bicycle_s_000286.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000286.png\n",
+ "upload: train/ordinary_bicycle_s_000280.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000280.png\n",
+ "upload: train/ordinary_bicycle_s_000107.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000107.png\n",
+ "upload: train/ordinary_bicycle_s_000265.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000265.png\n",
+ "upload: train/ordinary_bicycle_s_000157.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000157.png\n",
+ "upload: train/ordinary_bicycle_s_000308.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000308.png\n",
+ "upload: train/ordinary_bicycle_s_000269.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000269.png\n",
+ "upload: train/ordinary_bicycle_s_000297.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000297.png\n",
+ "upload: train/ordinary_bicycle_s_000324.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000324.png\n",
+ "upload: train/ordinary_bicycle_s_000355.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000355.png\n",
+ "upload: train/ordinary_bicycle_s_000387.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000387.png\n",
+ "upload: train/ordinary_bicycle_s_000432.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000432.png\n",
+ "upload: train/ordinary_bicycle_s_000426.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000426.png\n",
+ "upload: train/ordinary_bicycle_s_000298.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000298.png\n",
+ "upload: train/safety_bicycle_s_000019.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000019.png\n",
+ "upload: train/safety_bicycle_s_000079.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000079.png\n",
+ "upload: train/ordinary_bicycle_s_000419.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000419.png\n",
+ "upload: train/ordinary_bicycle_s_000451.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000451.png\n",
+ "upload: train/ordinary_bicycle_s_000433.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000433.png\n",
+ "upload: train/ordinary_bicycle_s_000347.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000347.png\n",
+ "upload: train/safety_bicycle_s_000092.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000092.png\n",
+ "upload: train/safety_bicycle_s_000140.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000140.png\n",
+ "upload: train/safety_bicycle_s_000162.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000162.png\n",
+ "upload: train/safety_bicycle_s_000167.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000167.png\n",
+ "upload: train/safety_bicycle_s_000193.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000193.png\n",
+ "upload: train/safety_bicycle_s_000207.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000207.png\n",
+ "upload: train/safety_bicycle_s_000239.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000239.png\n",
+ "upload: train/safety_bicycle_s_000233.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000233.png\n",
+ "upload: train/safety_bicycle_s_000261.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000261.png\n",
+ "upload: train/safety_bicycle_s_000125.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000125.png\n",
+ "upload: train/safety_bicycle_s_000196.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000196.png\n",
+ "upload: train/safety_bicycle_s_000296.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000296.png\n",
+ "upload: train/safety_bicycle_s_000322.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000322.png\n",
+ "upload: train/safety_bicycle_s_000232.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000232.png\n",
+ "upload: train/safety_bicycle_s_000373.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000373.png\n",
+ "upload: train/safety_bicycle_s_000255.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000255.png\n",
+ "upload: train/safety_bicycle_s_000425.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000425.png\n",
+ "upload: train/safety_bicycle_s_000303.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000303.png\n",
+ "upload: train/safety_bicycle_s_000532.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000532.png\n",
+ "upload: train/safety_bicycle_s_000427.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000427.png\n",
+ "upload: train/safety_bicycle_s_000533.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000533.png\n",
+ "upload: train/safety_bicycle_s_000348.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000348.png\n",
+ "upload: train/safety_bicycle_s_000324.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000324.png\n",
+ "upload: train/safety_bicycle_s_000500.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000500.png\n",
+ "upload: train/safety_bicycle_s_000660.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000660.png\n",
+ "upload: train/safety_bicycle_s_000760.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000760.png\n",
+ "upload: train/safety_bicycle_s_000789.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000789.png\n",
+ "upload: train/safety_bicycle_s_001026.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001026.png\n",
+ "upload: train/safety_bicycle_s_000655.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000655.png\n",
+ "upload: train/safety_bicycle_s_001028.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001028.png\n",
+ "upload: train/safety_bicycle_s_000568.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000568.png\n",
+ "upload: train/safety_bicycle_s_000728.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000728.png\n",
+ "upload: train/safety_bicycle_s_000860.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000860.png\n",
+ "upload: train/safety_bicycle_s_000359.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000359.png\n",
+ "upload: train/safety_bicycle_s_001029.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001029.png\n",
+ "upload: train/safety_bicycle_s_001049.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001049.png\n",
+ "upload: train/safety_bicycle_s_001085.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001085.png\n",
+ "upload: train/safety_bicycle_s_001202.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001202.png\n",
+ "upload: train/safety_bicycle_s_001063.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001063.png\n",
+ "upload: train/safety_bicycle_s_001109.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001109.png\n",
+ "upload: train/safety_bicycle_s_001254.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001254.png\n",
+ "upload: train/safety_bicycle_s_001320.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001320.png\n",
+ "upload: train/safety_bicycle_s_001303.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001303.png\n",
+ "upload: train/safety_bicycle_s_001327.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001327.png\n",
+ "upload: train/safety_bicycle_s_001381.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001381.png\n",
+ "upload: train/safety_bicycle_s_001570.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001570.png\n",
+ "upload: train/safety_bicycle_s_001253.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001253.png\n",
+ "upload: train/safety_bicycle_s_001639.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001639.png\n",
+ "upload: train/safety_bicycle_s_001113.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001113.png\n",
+ "upload: train/safety_bicycle_s_001651.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001651.png\n",
+ "upload: train/safety_bicycle_s_001243.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001243.png\n",
+ "upload: train/safety_bicycle_s_001608.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001608.png\n",
+ "upload: train/safety_bicycle_s_001699.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001699.png\n",
+ "upload: train/safety_bicycle_s_001705.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001705.png\n",
+ "upload: train/safety_bicycle_s_001240.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001240.png\n",
+ "upload: train/safety_bicycle_s_001659.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001659.png\n",
+ "upload: train/safety_bicycle_s_001706.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001706.png\n",
+ "upload: train/safety_bike_s_000009.png to s3://udacity-ml-workflow/train/safety_bike_s_000009.png\n",
+ "upload: train/safety_bike_s_000058.png to s3://udacity-ml-workflow/train/safety_bike_s_000058.png\n",
+ "upload: train/safety_bike_s_000079.png to s3://udacity-ml-workflow/train/safety_bike_s_000079.png\n",
+ "upload: train/safety_bike_s_000104.png to s3://udacity-ml-workflow/train/safety_bike_s_000104.png\n",
+ "upload: train/safety_bike_s_000158.png to s3://udacity-ml-workflow/train/safety_bike_s_000158.png\n",
+ "upload: train/safety_bike_s_000160.png to s3://udacity-ml-workflow/train/safety_bike_s_000160.png\n",
+ "upload: train/safety_bike_s_000100.png to s3://udacity-ml-workflow/train/safety_bike_s_000100.png\n",
+ "upload: train/safety_bike_s_000155.png to s3://udacity-ml-workflow/train/safety_bike_s_000155.png\n",
+ "upload: train/safety_bike_s_000173.png to s3://udacity-ml-workflow/train/safety_bike_s_000173.png\n",
+ "upload: train/safety_bike_s_000015.png to s3://udacity-ml-workflow/train/safety_bike_s_000015.png\n",
+ "upload: train/safety_bike_s_000054.png to s3://udacity-ml-workflow/train/safety_bike_s_000054.png\n",
+ "upload: train/safety_bike_s_000198.png to s3://udacity-ml-workflow/train/safety_bike_s_000198.png\n",
+ "upload: train/safety_bike_s_000311.png to s3://udacity-ml-workflow/train/safety_bike_s_000311.png\n",
+ "upload: train/safety_bike_s_000244.png to s3://udacity-ml-workflow/train/safety_bike_s_000244.png\n",
+ "upload: train/safety_bike_s_000245.png to s3://udacity-ml-workflow/train/safety_bike_s_000245.png\n",
+ "upload: train/safety_bike_s_000165.png to s3://udacity-ml-workflow/train/safety_bike_s_000165.png\n",
+ "upload: train/safety_bike_s_000178.png to s3://udacity-ml-workflow/train/safety_bike_s_000178.png\n",
+ "upload: train/safety_bike_s_000381.png to s3://udacity-ml-workflow/train/safety_bike_s_000381.png\n",
+ "upload: train/safety_bike_s_000328.png to s3://udacity-ml-workflow/train/safety_bike_s_000328.png\n",
+ "upload: train/safety_bike_s_000461.png to s3://udacity-ml-workflow/train/safety_bike_s_000461.png\n",
+ "upload: train/safety_bike_s_000263.png to s3://udacity-ml-workflow/train/safety_bike_s_000263.png\n",
+ "upload: train/safety_bike_s_000482.png to s3://udacity-ml-workflow/train/safety_bike_s_000482.png\n",
+ "upload: train/safety_bike_s_000567.png to s3://udacity-ml-workflow/train/safety_bike_s_000567.png\n",
+ "upload: train/safety_bike_s_000914.png to s3://udacity-ml-workflow/train/safety_bike_s_000914.png\n",
+ "upload: train/safety_bike_s_000277.png to s3://udacity-ml-workflow/train/safety_bike_s_000277.png\n",
+ "upload: train/safety_bike_s_000950.png to s3://udacity-ml-workflow/train/safety_bike_s_000950.png\n",
+ "upload: train/safety_bike_s_000848.png to s3://udacity-ml-workflow/train/safety_bike_s_000848.png\n",
+ "upload: train/safety_bike_s_000921.png to s3://udacity-ml-workflow/train/safety_bike_s_000921.png\n",
+ "upload: train/safety_bike_s_000643.png to s3://udacity-ml-workflow/train/safety_bike_s_000643.png\n",
+ "upload: train/safety_bike_s_000867.png to s3://udacity-ml-workflow/train/safety_bike_s_000867.png\n",
+ "upload: train/safety_bike_s_000830.png to s3://udacity-ml-workflow/train/safety_bike_s_000830.png\n",
+ "upload: train/safety_bike_s_000934.png to s3://udacity-ml-workflow/train/safety_bike_s_000934.png\n",
+ "upload: train/safety_bike_s_000963.png to s3://udacity-ml-workflow/train/safety_bike_s_000963.png\n",
+ "upload: train/safety_bike_s_001010.png to s3://udacity-ml-workflow/train/safety_bike_s_001010.png\n",
+ "upload: train/safety_bike_s_001148.png to s3://udacity-ml-workflow/train/safety_bike_s_001148.png\n",
+ "upload: train/safety_bike_s_001257.png to s3://udacity-ml-workflow/train/safety_bike_s_001257.png\n",
+ "upload: train/safety_bike_s_001289.png to s3://udacity-ml-workflow/train/safety_bike_s_001289.png\n",
+ "upload: train/safety_bike_s_001338.png to s3://udacity-ml-workflow/train/safety_bike_s_001338.png\n",
+ "upload: train/safety_bike_s_000984.png to s3://udacity-ml-workflow/train/safety_bike_s_000984.png\n",
+ "upload: train/safety_bike_s_001355.png to s3://udacity-ml-workflow/train/safety_bike_s_001355.png\n",
+ "upload: train/safety_bike_s_000989.png to s3://udacity-ml-workflow/train/safety_bike_s_000989.png\n",
+ "upload: train/safety_bike_s_001012.png to s3://udacity-ml-workflow/train/safety_bike_s_001012.png\n",
+ "upload: train/safety_bike_s_001560.png to s3://udacity-ml-workflow/train/safety_bike_s_001560.png\n",
+ "upload: train/safety_bike_s_001608.png to s3://udacity-ml-workflow/train/safety_bike_s_001608.png\n",
+ "upload: train/safety_bike_s_001552.png to s3://udacity-ml-workflow/train/safety_bike_s_001552.png\n",
+ "upload: train/safety_bike_s_001371.png to s3://udacity-ml-workflow/train/safety_bike_s_001371.png\n",
+ "upload: train/safety_bike_s_001465.png to s3://udacity-ml-workflow/train/safety_bike_s_001465.png\n",
+ "upload: train/safety_bike_s_001590.png to s3://udacity-ml-workflow/train/safety_bike_s_001590.png\n",
+ "upload: train/safety_bike_s_001472.png to s3://udacity-ml-workflow/train/safety_bike_s_001472.png\n",
+ "upload: train/safety_bike_s_001659.png to s3://udacity-ml-workflow/train/safety_bike_s_001659.png\n",
+ "upload: train/safety_bike_s_001784.png to s3://udacity-ml-workflow/train/safety_bike_s_001784.png\n",
+ "upload: train/safety_bike_s_001640.png to s3://udacity-ml-workflow/train/safety_bike_s_001640.png\n",
+ "upload: train/safety_bike_s_001474.png to s3://udacity-ml-workflow/train/safety_bike_s_001474.png\n",
+ "upload: train/safety_bike_s_001715.png to s3://udacity-ml-workflow/train/safety_bike_s_001715.png\n",
+ "upload: train/velocipede_s_000010.png to s3://udacity-ml-workflow/train/velocipede_s_000010.png\n",
+ "upload: train/velocipede_s_000021.png to s3://udacity-ml-workflow/train/velocipede_s_000021.png\n",
+ "upload: train/trail_bike_s_000016.png to s3://udacity-ml-workflow/train/trail_bike_s_000016.png\n",
+ "upload: train/velocipede_s_000265.png to s3://udacity-ml-workflow/train/velocipede_s_000265.png\n",
+ "upload: train/velocipede_s_000282.png to s3://udacity-ml-workflow/train/velocipede_s_000282.png\n",
+ "upload: train/velocipede_s_000430.png to s3://udacity-ml-workflow/train/velocipede_s_000430.png\n",
+ "upload: train/velocipede_s_000139.png to s3://udacity-ml-workflow/train/velocipede_s_000139.png\n",
+ "upload: train/velocipede_s_000049.png to s3://udacity-ml-workflow/train/velocipede_s_000049.png\n",
+ "upload: train/velocipede_s_000023.png to s3://udacity-ml-workflow/train/velocipede_s_000023.png\n",
+ "upload: train/velocipede_s_000012.png to s3://udacity-ml-workflow/train/velocipede_s_000012.png\n",
+ "upload: train/velocipede_s_000358.png to s3://udacity-ml-workflow/train/velocipede_s_000358.png\n",
+ "upload: train/velocipede_s_000586.png to s3://udacity-ml-workflow/train/velocipede_s_000586.png\n",
+ "upload: train/velocipede_s_000330.png to s3://udacity-ml-workflow/train/velocipede_s_000330.png\n",
+ "upload: train/velocipede_s_000807.png to s3://udacity-ml-workflow/train/velocipede_s_000807.png\n",
+ "upload: train/velocipede_s_000702.png to s3://udacity-ml-workflow/train/velocipede_s_000702.png\n",
+ "upload: train/velocipede_s_000825.png to s3://udacity-ml-workflow/train/velocipede_s_000825.png\n",
+ "upload: train/velocipede_s_000949.png to s3://udacity-ml-workflow/train/velocipede_s_000949.png\n",
+ "upload: train/velocipede_s_000989.png to s3://udacity-ml-workflow/train/velocipede_s_000989.png\n",
+ "upload: train/velocipede_s_001056.png to s3://udacity-ml-workflow/train/velocipede_s_001056.png\n",
+ "upload: train/velocipede_s_000670.png to s3://udacity-ml-workflow/train/velocipede_s_000670.png\n",
+ "upload: train/velocipede_s_001141.png to s3://udacity-ml-workflow/train/velocipede_s_001141.png\n",
+ "upload: train/velocipede_s_001210.png to s3://udacity-ml-workflow/train/velocipede_s_001210.png\n",
+ "upload: train/velocipede_s_000485.png to s3://udacity-ml-workflow/train/velocipede_s_000485.png\n",
+ "upload: train/velocipede_s_000931.png to s3://udacity-ml-workflow/train/velocipede_s_000931.png\n",
+ "upload: train/velocipede_s_001158.png to s3://udacity-ml-workflow/train/velocipede_s_001158.png\n",
+ "upload: train/velocipede_s_000659.png to s3://udacity-ml-workflow/train/velocipede_s_000659.png\n",
+ "upload: train/velocipede_s_001200.png to s3://udacity-ml-workflow/train/velocipede_s_001200.png\n",
+ "upload: train/velocipede_s_001225.png to s3://udacity-ml-workflow/train/velocipede_s_001225.png\n",
+ "upload: train/velocipede_s_001222.png to s3://udacity-ml-workflow/train/velocipede_s_001222.png\n",
+ "upload: train/velocipede_s_001279.png to s3://udacity-ml-workflow/train/velocipede_s_001279.png\n",
+ "upload: train/velocipede_s_001244.png to s3://udacity-ml-workflow/train/velocipede_s_001244.png\n",
+ "upload: train/velocipede_s_001298.png to s3://udacity-ml-workflow/train/velocipede_s_001298.png\n",
+ "upload: train/velocipede_s_001166.png to s3://udacity-ml-workflow/train/velocipede_s_001166.png\n",
+ "upload: train/velocipede_s_001142.png to s3://udacity-ml-workflow/train/velocipede_s_001142.png\n",
+ "upload: train/velocipede_s_001278.png to s3://udacity-ml-workflow/train/velocipede_s_001278.png\n",
+ "upload: train/velocipede_s_001489.png to s3://udacity-ml-workflow/train/velocipede_s_001489.png\n",
+ "upload: train/velocipede_s_001299.png to s3://udacity-ml-workflow/train/velocipede_s_001299.png\n",
+ "upload: train/velocipede_s_001358.png to s3://udacity-ml-workflow/train/velocipede_s_001358.png\n",
+ "upload: train/velocipede_s_001338.png to s3://udacity-ml-workflow/train/velocipede_s_001338.png\n",
+ "upload: train/velocipede_s_001637.png to s3://udacity-ml-workflow/train/velocipede_s_001637.png\n",
+ "upload: train/velocipede_s_001361.png to s3://udacity-ml-workflow/train/velocipede_s_001361.png\n",
+ "upload: train/velocipede_s_001514.png to s3://udacity-ml-workflow/train/velocipede_s_001514.png\n",
+ "upload: train/velocipede_s_001874.png to s3://udacity-ml-workflow/train/velocipede_s_001874.png\n",
+ "upload: train/velocipede_s_001880.png to s3://udacity-ml-workflow/train/velocipede_s_001880.png\n",
+ "upload: train/velocipede_s_001422.png to s3://udacity-ml-workflow/train/velocipede_s_001422.png\n",
+ "upload: train/velocipede_s_001883.png to s3://udacity-ml-workflow/train/velocipede_s_001883.png\n",
+ "upload: train/velocipede_s_001870.png to s3://udacity-ml-workflow/train/velocipede_s_001870.png\n",
+ "upload: train/velocipede_s_001872.png to s3://udacity-ml-workflow/train/velocipede_s_001872.png\n",
+ "upload: train/velocipede_s_001882.png to s3://udacity-ml-workflow/train/velocipede_s_001882.png\n",
+ "upload: train/velocipede_s_001935.png to s3://udacity-ml-workflow/train/velocipede_s_001935.png\n",
+ "upload: train/velocipede_s_001958.png to s3://udacity-ml-workflow/train/velocipede_s_001958.png\n",
+ "upload: train/velocipede_s_001585.png to s3://udacity-ml-workflow/train/velocipede_s_001585.png\n",
+ "upload: train/velocipede_s_001920.png to s3://udacity-ml-workflow/train/velocipede_s_001920.png\n",
+ "upload: train/velocipede_s_001907.png to s3://udacity-ml-workflow/train/velocipede_s_001907.png\n",
+ "upload: test/bicycle_s_000030.png to s3://udacity-ml-workflow/test/bicycle_s_000030.png\n",
+ "upload: test/bicycle_s_000977.png to s3://udacity-ml-workflow/test/bicycle_s_000977.png\n",
+ "upload: test/bicycle_s_000031.png to s3://udacity-ml-workflow/test/bicycle_s_000031.png\n",
+ "upload: test/bicycle_s_000513.png to s3://udacity-ml-workflow/test/bicycle_s_000513.png\n",
+ "upload: test/bicycle_s_001107.png to s3://udacity-ml-workflow/test/bicycle_s_001107.png\n",
+ "upload: test/bicycle_s_000776.png to s3://udacity-ml-workflow/test/bicycle_s_000776.png\n",
+ "upload: test/bicycle_s_000059.png to s3://udacity-ml-workflow/test/bicycle_s_000059.png\n",
+ "upload: test/bicycle_s_000479.png to s3://udacity-ml-workflow/test/bicycle_s_000479.png\n",
+ "upload: test/bicycle_s_001789.png to s3://udacity-ml-workflow/test/bicycle_s_001789.png\n",
+ "upload: test/bicycle_s_001047.png to s3://udacity-ml-workflow/test/bicycle_s_001047.png\n",
+ "upload: test/bicycle_s_001102.png to s3://udacity-ml-workflow/test/bicycle_s_001102.png\n",
+ "upload: test/bicycle_s_001218.png to s3://udacity-ml-workflow/test/bicycle_s_001218.png\n",
+ "upload: test/bicycle_s_000779.png to s3://udacity-ml-workflow/test/bicycle_s_000779.png\n",
+ "upload: test/bicycle_s_001804.png to s3://udacity-ml-workflow/test/bicycle_s_001804.png\n",
+ "upload: test/bike_s_000163.png to s3://udacity-ml-workflow/test/bike_s_000163.png \n",
+ "upload: test/bicycle_s_000777.png to s3://udacity-ml-workflow/test/bicycle_s_000777.png\n",
+ "upload: test/bicycle_s_002458.png to s3://udacity-ml-workflow/test/bicycle_s_002458.png\n",
+ "upload: test/bicycle_s_002735.png to s3://udacity-ml-workflow/test/bicycle_s_002735.png\n",
+ "upload: test/bike_s_000131.png to s3://udacity-ml-workflow/test/bike_s_000131.png \n",
+ "upload: test/bike_s_000041.png to s3://udacity-ml-workflow/test/bike_s_000041.png \n",
+ "upload: test/bike_s_000330.png to s3://udacity-ml-workflow/test/bike_s_000330.png \n",
+ "upload: test/bike_s_000071.png to s3://udacity-ml-workflow/test/bike_s_000071.png \n",
+ "upload: test/bike_s_000487.png to s3://udacity-ml-workflow/test/bike_s_000487.png \n",
+ "upload: test/bike_s_000643.png to s3://udacity-ml-workflow/test/bike_s_000643.png \n",
+ "upload: test/bike_s_000658.png to s3://udacity-ml-workflow/test/bike_s_000658.png \n",
+ "upload: test/bike_s_000457.png to s3://udacity-ml-workflow/test/bike_s_000457.png \n",
+ "upload: test/bike_s_000694.png to s3://udacity-ml-workflow/test/bike_s_000694.png \n",
+ "upload: test/bike_s_001073.png to s3://udacity-ml-workflow/test/bike_s_001073.png \n",
+ "upload: test/bike_s_001068.png to s3://udacity-ml-workflow/test/bike_s_001068.png \n",
+ "upload: test/bike_s_001159.png to s3://udacity-ml-workflow/test/bike_s_001159.png \n",
+ "upload: test/bike_s_000801.png to s3://udacity-ml-workflow/test/bike_s_000801.png \n",
+ "upload: test/bike_s_001738.png to s3://udacity-ml-workflow/test/bike_s_001738.png \n",
+ "upload: test/bike_s_000941.png to s3://udacity-ml-workflow/test/bike_s_000941.png \n",
+ "upload: test/bike_s_002116.png to s3://udacity-ml-workflow/test/bike_s_002116.png \n",
+ "upload: test/bike_s_001342.png to s3://udacity-ml-workflow/test/bike_s_001342.png \n",
+ "upload: test/bike_s_001852.png to s3://udacity-ml-workflow/test/bike_s_001852.png \n",
+ "upload: test/bike_s_001216.png to s3://udacity-ml-workflow/test/bike_s_001216.png \n",
+ "upload: test/bike_s_001784.png to s3://udacity-ml-workflow/test/bike_s_001784.png \n",
+ "upload: test/bike_s_002208.png to s3://udacity-ml-workflow/test/bike_s_002208.png \n",
+ "upload: test/cycle_s_001044.png to s3://udacity-ml-workflow/test/cycle_s_001044.png \n",
+ "upload: test/cycle_s_000010.png to s3://udacity-ml-workflow/test/cycle_s_000010.png \n",
+ "upload: test/cycle_s_000970.png to s3://udacity-ml-workflow/test/cycle_s_000970.png \n",
+ "upload: test/cycle_s_001214.png to s3://udacity-ml-workflow/test/cycle_s_001214.png \n",
+ "upload: test/cycle_s_001297.png to s3://udacity-ml-workflow/test/cycle_s_001297.png \n",
+ "upload: test/cycle_s_000068.png to s3://udacity-ml-workflow/test/cycle_s_000068.png \n",
+ "upload: test/cycle_s_001306.png to s3://udacity-ml-workflow/test/cycle_s_001306.png \n",
+ "upload: test/bike_s_002009.png to s3://udacity-ml-workflow/test/bike_s_002009.png \n",
+ "upload: test/cycle_s_001648.png to s3://udacity-ml-workflow/test/cycle_s_001648.png\n",
+ "upload: test/cycle_s_002613.png to s3://udacity-ml-workflow/test/cycle_s_002613.png\n",
+ "upload: test/cycle_s_001915.png to s3://udacity-ml-workflow/test/cycle_s_001915.png\n",
+ "upload: test/minibike_s_000052.png to s3://udacity-ml-workflow/test/minibike_s_000052.png\n",
+ "upload: test/cycle_s_002964.png to s3://udacity-ml-workflow/test/cycle_s_002964.png\n",
+ "upload: test/minibike_s_000055.png to s3://udacity-ml-workflow/test/minibike_s_000055.png\n",
+ "upload: test/cycle_s_001953.png to s3://udacity-ml-workflow/test/cycle_s_001953.png\n",
+ "upload: test/minibike_s_000075.png to s3://udacity-ml-workflow/test/minibike_s_000075.png\n",
+ "upload: test/cycle_s_002661.png to s3://udacity-ml-workflow/test/cycle_s_002661.png\n",
+ "upload: test/minibike_s_000288.png to s3://udacity-ml-workflow/test/minibike_s_000288.png\n",
+ "upload: test/cycle_s_002305.png to s3://udacity-ml-workflow/test/cycle_s_002305.png\n",
+ "upload: test/minibike_s_000254.png to s3://udacity-ml-workflow/test/minibike_s_000254.png\n",
+ "upload: test/dirt_bike_s_000001.png to s3://udacity-ml-workflow/test/dirt_bike_s_000001.png\n",
+ "upload: test/minibike_s_000309.png to s3://udacity-ml-workflow/test/minibike_s_000309.png\n",
+ "upload: test/minibike_s_000792.png to s3://udacity-ml-workflow/test/minibike_s_000792.png\n",
+ "upload: test/minibike_s_000573.png to s3://udacity-ml-workflow/test/minibike_s_000573.png\n",
+ "upload: test/minibike_s_000505.png to s3://udacity-ml-workflow/test/minibike_s_000505.png\n",
+ "upload: test/minibike_s_000398.png to s3://udacity-ml-workflow/test/minibike_s_000398.png\n",
+ "upload: test/minibike_s_000290.png to s3://udacity-ml-workflow/test/minibike_s_000290.png\n",
+ "upload: test/minibike_s_000801.png to s3://udacity-ml-workflow/test/minibike_s_000801.png\n",
+ "upload: test/minibike_s_000497.png to s3://udacity-ml-workflow/test/minibike_s_000497.png\n",
+ "upload: test/minibike_s_000880.png to s3://udacity-ml-workflow/test/minibike_s_000880.png\n",
+ "upload: test/minibike_s_000947.png to s3://udacity-ml-workflow/test/minibike_s_000947.png\n",
+ "upload: test/minibike_s_000828.png to s3://udacity-ml-workflow/test/minibike_s_000828.png\n",
+ "upload: test/minibike_s_001089.png to s3://udacity-ml-workflow/test/minibike_s_001089.png\n",
+ "upload: test/minibike_s_001473.png to s3://udacity-ml-workflow/test/minibike_s_001473.png\n",
+ "upload: test/minibike_s_001441.png to s3://udacity-ml-workflow/test/minibike_s_001441.png\n",
+ "upload: test/minibike_s_001732.png to s3://udacity-ml-workflow/test/minibike_s_001732.png\n",
+ "upload: test/minibike_s_001651.png to s3://udacity-ml-workflow/test/minibike_s_001651.png\n",
+ "upload: test/minibike_s_000913.png to s3://udacity-ml-workflow/test/minibike_s_000913.png\n",
+ "upload: test/minibike_s_001893.png to s3://udacity-ml-workflow/test/minibike_s_001893.png\n",
+ "upload: test/minibike_s_001605.png to s3://udacity-ml-workflow/test/minibike_s_001605.png\n",
+ "upload: test/minibike_s_002230.png to s3://udacity-ml-workflow/test/minibike_s_002230.png\n",
+ "upload: test/minibike_s_002173.png to s3://udacity-ml-workflow/test/minibike_s_002173.png\n",
+ "upload: test/minibike_s_002227.png to s3://udacity-ml-workflow/test/minibike_s_002227.png\n",
+ "upload: test/minibike_s_001547.png to s3://udacity-ml-workflow/test/minibike_s_001547.png\n",
+ "upload: test/minibike_s_001867.png to s3://udacity-ml-workflow/test/minibike_s_001867.png\n",
+ "upload: test/motorbike_s_000121.png to s3://udacity-ml-workflow/test/motorbike_s_000121.png\n",
+ "upload: test/moped_s_000064.png to s3://udacity-ml-workflow/test/moped_s_000064.png\n",
+ "upload: test/minibike_s_000960.png to s3://udacity-ml-workflow/test/minibike_s_000960.png\n",
+ "upload: test/moped_s_000007.png to s3://udacity-ml-workflow/test/moped_s_000007.png\n",
+ "upload: test/moped_s_000306.png to s3://udacity-ml-workflow/test/moped_s_000306.png\n",
+ "upload: test/motorbike_s_000005.png to s3://udacity-ml-workflow/test/motorbike_s_000005.png\n",
+ "upload: test/minibike_s_002051.png to s3://udacity-ml-workflow/test/minibike_s_002051.png\n",
+ "upload: test/motorbike_s_000126.png to s3://udacity-ml-workflow/test/motorbike_s_000126.png\n",
+ "upload: test/moped_s_000033.png to s3://udacity-ml-workflow/test/moped_s_000033.png\n",
+ "upload: test/motorbike_s_000324.png to s3://udacity-ml-workflow/test/motorbike_s_000324.png\n",
+ "upload: test/motorbike_s_000433.png to s3://udacity-ml-workflow/test/motorbike_s_000433.png\n",
+ "upload: test/motorbike_s_000465.png to s3://udacity-ml-workflow/test/motorbike_s_000465.png\n",
+ "upload: test/motorbike_s_000629.png to s3://udacity-ml-workflow/test/motorbike_s_000629.png\n",
+ "upload: test/motorcycle_s_000040.png to s3://udacity-ml-workflow/test/motorcycle_s_000040.png\n",
+ "upload: test/motorbike_s_000333.png to s3://udacity-ml-workflow/test/motorbike_s_000333.png\n",
+ "upload: test/motorcycle_s_000007.png to s3://udacity-ml-workflow/test/motorcycle_s_000007.png\n",
+ "upload: test/motorbike_s_000135.png to s3://udacity-ml-workflow/test/motorbike_s_000135.png\n",
+ "upload: test/motorcycle_s_000042.png to s3://udacity-ml-workflow/test/motorcycle_s_000042.png\n",
+ "upload: test/motorcycle_s_000063.png to s3://udacity-ml-workflow/test/motorcycle_s_000063.png\n",
+ "upload: test/motorcycle_s_000141.png to s3://udacity-ml-workflow/test/motorcycle_s_000141.png\n",
+ "upload: test/motorcycle_s_000139.png to s3://udacity-ml-workflow/test/motorcycle_s_000139.png\n",
+ "upload: test/motorcycle_s_000211.png to s3://udacity-ml-workflow/test/motorcycle_s_000211.png\n",
+ "upload: test/motorcycle_s_000049.png to s3://udacity-ml-workflow/test/motorcycle_s_000049.png\n",
+ "upload: test/motorcycle_s_000427.png to s3://udacity-ml-workflow/test/motorcycle_s_000427.png\n",
+ "upload: test/motorcycle_s_000171.png to s3://udacity-ml-workflow/test/motorcycle_s_000171.png\n",
+ "upload: test/motorcycle_s_000485.png to s3://udacity-ml-workflow/test/motorcycle_s_000485.png\n",
+ "upload: test/motorcycle_s_000450.png to s3://udacity-ml-workflow/test/motorcycle_s_000450.png\n",
+ "upload: test/motorcycle_s_000060.png to s3://udacity-ml-workflow/test/motorcycle_s_000060.png\n",
+ "upload: test/motorcycle_s_000446.png to s3://udacity-ml-workflow/test/motorcycle_s_000446.png\n",
+ "upload: test/motorcycle_s_000222.png to s3://udacity-ml-workflow/test/motorcycle_s_000222.png\n",
+ "upload: test/motorcycle_s_000530.png to s3://udacity-ml-workflow/test/motorcycle_s_000530.png\n",
+ "upload: test/motorcycle_s_000512.png to s3://udacity-ml-workflow/test/motorcycle_s_000512.png\n",
+ "upload: test/motorcycle_s_000352.png to s3://udacity-ml-workflow/test/motorcycle_s_000352.png\n",
+ "upload: test/motorcycle_s_000323.png to s3://udacity-ml-workflow/test/motorcycle_s_000323.png\n",
+ "upload: test/motorcycle_s_000602.png to s3://udacity-ml-workflow/test/motorcycle_s_000602.png\n",
+ "upload: test/motorcycle_s_000494.png to s3://udacity-ml-workflow/test/motorcycle_s_000494.png\n",
+ "upload: test/motorcycle_s_000679.png to s3://udacity-ml-workflow/test/motorcycle_s_000679.png\n",
+ "upload: test/motorcycle_s_000685.png to s3://udacity-ml-workflow/test/motorcycle_s_000685.png\n",
+ "upload: test/motorcycle_s_000606.png to s3://udacity-ml-workflow/test/motorcycle_s_000606.png\n",
+ "upload: test/motorcycle_s_000866.png to s3://udacity-ml-workflow/test/motorcycle_s_000866.png\n",
+ "upload: test/motorcycle_s_000825.png to s3://udacity-ml-workflow/test/motorcycle_s_000825.png\n",
+ "upload: test/motorcycle_s_001249.png to s3://udacity-ml-workflow/test/motorcycle_s_001249.png\n",
+ "upload: test/motorcycle_s_000615.png to s3://udacity-ml-workflow/test/motorcycle_s_000615.png\n",
+ "upload: test/motorcycle_s_000739.png to s3://udacity-ml-workflow/test/motorcycle_s_000739.png\n",
+ "upload: test/motorcycle_s_001261.png to s3://udacity-ml-workflow/test/motorcycle_s_001261.png\n",
+ "upload: test/motorcycle_s_000878.png to s3://udacity-ml-workflow/test/motorcycle_s_000878.png\n",
+ "upload: test/motorcycle_s_000963.png to s3://udacity-ml-workflow/test/motorcycle_s_000963.png\n",
+ "upload: test/motorcycle_s_000876.png to s3://udacity-ml-workflow/test/motorcycle_s_000876.png\n",
+ "upload: test/motorcycle_s_001164.png to s3://udacity-ml-workflow/test/motorcycle_s_001164.png\n",
+ "upload: test/motorcycle_s_000797.png to s3://udacity-ml-workflow/test/motorcycle_s_000797.png\n",
+ "upload: test/motorcycle_s_001269.png to s3://udacity-ml-workflow/test/motorcycle_s_001269.png\n",
+ "upload: test/motorcycle_s_001385.png to s3://udacity-ml-workflow/test/motorcycle_s_001385.png\n",
+ "upload: test/motorcycle_s_001348.png to s3://udacity-ml-workflow/test/motorcycle_s_001348.png\n",
+ "upload: test/motorcycle_s_001679.png to s3://udacity-ml-workflow/test/motorcycle_s_001679.png\n",
+ "upload: test/motorcycle_s_001782.png to s3://udacity-ml-workflow/test/motorcycle_s_001782.png\n",
+ "upload: test/motorcycle_s_001892.png to s3://udacity-ml-workflow/test/motorcycle_s_001892.png\n",
+ "upload: test/motorcycle_s_001687.png to s3://udacity-ml-workflow/test/motorcycle_s_001687.png\n",
+ "upload: test/motorcycle_s_001519.png to s3://udacity-ml-workflow/test/motorcycle_s_001519.png\n",
+ "upload: test/motorcycle_s_001960.png to s3://udacity-ml-workflow/test/motorcycle_s_001960.png\n",
+ "upload: test/motorcycle_s_001936.png to s3://udacity-ml-workflow/test/motorcycle_s_001936.png\n",
+ "upload: test/motorcycle_s_001508.png to s3://udacity-ml-workflow/test/motorcycle_s_001508.png\n",
+ "upload: test/motorcycle_s_001906.png to s3://udacity-ml-workflow/test/motorcycle_s_001906.png\n",
+ "upload: test/motorcycle_s_001971.png to s3://udacity-ml-workflow/test/motorcycle_s_001971.png\n",
+ "upload: test/motorcycle_s_002126.png to s3://udacity-ml-workflow/test/motorcycle_s_002126.png\n",
+ "upload: test/motorcycle_s_002177.png to s3://udacity-ml-workflow/test/motorcycle_s_002177.png\n",
+ "upload: test/ordinary_bicycle_s_000158.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000158.png\n",
+ "upload: test/motorcycle_s_002026.png to s3://udacity-ml-workflow/test/motorcycle_s_002026.png\n",
+ "upload: test/motorcycle_s_001955.png to s3://udacity-ml-workflow/test/motorcycle_s_001955.png\n",
+ "upload: test/ordinary_bicycle_s_000431.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000431.png\n",
+ "upload: test/ordinary_bicycle_s_000113.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000113.png\n",
+ "upload: test/motorcycle_s_002112.png to s3://udacity-ml-workflow/test/motorcycle_s_002112.png\n",
+ "upload: test/ordinary_bicycle_s_000350.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000350.png\n",
+ "upload: test/safety_bicycle_s_000315.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000315.png\n",
+ "upload: test/safety_bicycle_s_001153.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001153.png\n",
+ "upload: test/ordinary_bicycle_s_000169.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000169.png\n",
+ "upload: test/safety_bicycle_s_000280.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000280.png\n",
+ "upload: test/ordinary_bicycle_s_000284.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000284.png\n",
+ "upload: test/ordinary_bicycle_s_000105.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000105.png\n",
+ "upload: test/safety_bicycle_s_000235.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000235.png\n",
+ "upload: test/safety_bicycle_s_001322.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001322.png\n",
+ "upload: test/ordinary_bicycle_s_000437.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000437.png\n",
+ "upload: test/safety_bicycle_s_001575.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001575.png\n",
+ "upload: test/safety_bicycle_s_001286.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001286.png\n",
+ "upload: test/safety_bike_s_000488.png to s3://udacity-ml-workflow/test/safety_bike_s_000488.png\n",
+ "upload: test/safety_bike_s_000541.png to s3://udacity-ml-workflow/test/safety_bike_s_000541.png\n",
+ "upload: test/safety_bike_s_000390.png to s3://udacity-ml-workflow/test/safety_bike_s_000390.png\n",
+ "upload: test/safety_bike_s_001065.png to s3://udacity-ml-workflow/test/safety_bike_s_001065.png\n",
+ "upload: test/safety_bike_s_000791.png to s3://udacity-ml-workflow/test/safety_bike_s_000791.png\n",
+ "upload: test/safety_bike_s_001087.png to s3://udacity-ml-workflow/test/safety_bike_s_001087.png\n",
+ "upload: test/safety_bike_s_000699.png to s3://udacity-ml-workflow/test/safety_bike_s_000699.png\n",
+ "upload: test/safety_bike_s_001132.png to s3://udacity-ml-workflow/test/safety_bike_s_001132.png\n",
+ "upload: test/safety_bike_s_000438.png to s3://udacity-ml-workflow/test/safety_bike_s_000438.png\n",
+ "upload: test/safety_bike_s_001481.png to s3://udacity-ml-workflow/test/safety_bike_s_001481.png\n",
+ "upload: test/safety_bike_s_000540.png to s3://udacity-ml-workflow/test/safety_bike_s_000540.png\n",
+ "upload: test/safety_bike_s_001253.png to s3://udacity-ml-workflow/test/safety_bike_s_001253.png\n",
+ "upload: test/velocipede_s_000001.png to s3://udacity-ml-workflow/test/velocipede_s_000001.png\n",
+ "upload: test/safety_bike_s_000192.png to s3://udacity-ml-workflow/test/safety_bike_s_000192.png\n",
+ "upload: test/safety_bike_s_001088.png to s3://udacity-ml-workflow/test/safety_bike_s_001088.png\n",
+ "upload: test/velocipede_s_000369.png to s3://udacity-ml-workflow/test/velocipede_s_000369.png\n",
+ "upload: test/trail_bike_s_000073.png to s3://udacity-ml-workflow/test/trail_bike_s_000073.png\n",
+ "upload: test/velocipede_s_000106.png to s3://udacity-ml-workflow/test/velocipede_s_000106.png\n",
+ "upload: test/velocipede_s_000041.png to s3://udacity-ml-workflow/test/velocipede_s_000041.png\n",
+ "upload: test/velocipede_s_001201.png to s3://udacity-ml-workflow/test/velocipede_s_001201.png\n",
+ "upload: test/safety_bike_s_001690.png to s3://udacity-ml-workflow/test/safety_bike_s_001690.png\n",
+ "upload: test/velocipede_s_000863.png to s3://udacity-ml-workflow/test/velocipede_s_000863.png\n",
+ "upload: test/velocipede_s_001232.png to s3://udacity-ml-workflow/test/velocipede_s_001232.png\n",
+ "upload: test/velocipede_s_001277.png to s3://udacity-ml-workflow/test/velocipede_s_001277.png\n",
+ "upload: test/velocipede_s_000292.png to s3://udacity-ml-workflow/test/velocipede_s_000292.png\n",
+ "upload: test/velocipede_s_001699.png to s3://udacity-ml-workflow/test/velocipede_s_001699.png\n",
+ "upload: test/velocipede_s_001335.png to s3://udacity-ml-workflow/test/velocipede_s_001335.png\n",
+ "upload: test/velocipede_s_001633.png to s3://udacity-ml-workflow/test/velocipede_s_001633.png\n",
+ "upload: test/velocipede_s_001355.png to s3://udacity-ml-workflow/test/velocipede_s_001355.png\n",
+ "upload: test/velocipede_s_001379.png to s3://udacity-ml-workflow/test/velocipede_s_001379.png\n",
+ "upload: test/velocipede_s_001790.png to s3://udacity-ml-workflow/test/velocipede_s_001790.png\n",
+ "upload: test/velocipede_s_001744.png to s3://udacity-ml-workflow/test/velocipede_s_001744.png\n",
+ "upload: test/velocipede_s_001466.png to s3://udacity-ml-workflow/test/velocipede_s_001466.png\n"
+ ]
+ }
+ ],
+ "source": [
+ "import os\n",
+ "\n",
+ "os.environ[\"DEFAULT_S3_BUCKET\"] = bucket\n",
+ "!aws s3 sync ./train s3://${DEFAULT_S3_BUCKET}/train/\n",
+ "!aws s3 sync ./test s3://${DEFAULT_S3_BUCKET}/test/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And that's it! You can check the bucket and verify that the items were uploaded.\n",
+ "\n",
+ "## Model Training\n",
+ "\n",
+ "For Image Classification, Sagemaker [also expects metadata](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) e.g. in the form of TSV files with labels and filepaths. We can generate these using our Pandas DataFrames from earlier:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 82,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "def to_metadata_file(df, prefix):\n",
+ " df[\"s3_path\"] = df[\"filenames\"]\n",
+ " df[\"labels\"] = df[\"labels\"].apply(lambda x: 0 if x==8 else 1)\n",
+ " return df[[\"row\", \"labels\", \"s3_path\"]].to_csv(\n",
+ " f\"{prefix}.lst\", sep=\"\\t\", index=False, header=False\n",
+ " )\n",
+ " \n",
+ "to_metadata_file(df_train.copy(), \"train\")\n",
+ "to_metadata_file(df_test.copy(), \"test\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can also upload our manifest files:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 84,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import boto3\n",
+ "bucket = \"udacity-ml-workflow\"\n",
+ "# Upload files\n",
+ "boto3.Session().resource('s3').Bucket(\n",
+ " bucket).Object('train.lst').upload_file('./train.lst')\n",
+ "boto3.Session().resource('s3').Bucket(\n",
+ " bucket).Object('test.lst').upload_file('./test.lst')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Using the `bucket` and `region` info we can get the latest prebuilt container to run our training job, and define an output location on our s3 bucket for the model. Use the `image_uris` function from the SageMaker SDK to retrieve the latest `image-classification` image below:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 88,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Use the image_uris function to retrieve the latest 'image-classification' image \n",
+ "algo_image = sagemaker.image_uris.retrieve('image-classification', region=region)\n",
+ "s3_output_location = f\"s3://{bucket}/models/image_model\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We're ready to create an estimator! Create an estimator `img_classifier_model` that uses one instance of `ml.p3.2xlarge`. Ensure that y ou use the output location we defined above - we'll be referring to that later!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 91,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "img_classifier_model=sagemaker.estimator.Estimator(\n",
+ " ## TODO: define your estimator options \n",
+ " role=role,\n",
+ " instance_count = 1,\n",
+ " instance_type= 'ml.p3.2xlarge',\n",
+ " volume_size=5,\n",
+ " output_path=s3_output_location,\n",
+ " sagemaker_session=sagemaker.Session(),\n",
+ " image_uri = algo_image\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1000"
+ ]
+ },
+ "execution_count": 92,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(df_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 94,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'811284229777.dkr.ecr.us-east-1.amazonaws.com/image-classification:1'"
+ ]
+ },
+ "execution_count": 94,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "algo_image"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can also set a few key hyperparameters and define the inputs for our model:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 100,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "img_classifier_model.set_hyperparameters(\n",
+ " image_shape= \"3,32,32\", # TODO: Fill in\n",
+ " num_classes=2, # TODO: Fill in\n",
+ " num_training_samples=1000 # TODO: fill in\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The `image-classification` image uses four input channels with very specific input parameters. For convenience, we've provided them below:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 101,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.debugger import Rule, rule_configs\n",
+ "from sagemaker.session import TrainingInput\n",
+ "model_inputs = {\n",
+ " \"train\": sagemaker.inputs.TrainingInput(\n",
+ " s3_data=f\"s3://{bucket}/train/\",\n",
+ " content_type=\"application/x-image\"\n",
+ " ),\n",
+ " \"validation\": sagemaker.inputs.TrainingInput(\n",
+ " s3_data=f\"s3://{bucket}/test/\",\n",
+ " content_type=\"application/x-image\"\n",
+ " ),\n",
+ " \"train_lst\": sagemaker.inputs.TrainingInput(\n",
+ " s3_data=f\"s3://{bucket}/train.lst\",\n",
+ " content_type=\"application/x-image\"\n",
+ " ),\n",
+ " \"validation_lst\": sagemaker.inputs.TrainingInput(\n",
+ " s3_data=f\"s3://{bucket}/test.lst\",\n",
+ " content_type=\"application/x-image\"\n",
+ " )\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Great, now we can train the model using the model_inputs. In the cell below, call the `fit` method on our model,:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 102,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2023-02-14 13:09:33 Starting - Starting the training job...\n",
+ "2023-02-14 13:09:58 Starting - Preparing the instances for trainingProfilerReport-1676380173: InProgress\n",
+ ".........\n",
+ "2023-02-14 13:11:17 Downloading - Downloading input data...\n",
+ "2023-02-14 13:11:57 Training - Downloading the training image...............\n",
+ "2023-02-14 13:14:32 Training - Training image download completed. Training in progress....\u001b[34mDocker entrypoint called with argument(s): train\u001b[0m\n",
+ "\u001b[34mRunning default environment configuration script\u001b[0m\n",
+ "\u001b[34mNvidia gpu devices, drivers and cuda toolkit versions (only available on hosts with GPU):\u001b[0m\n",
+ "\u001b[34mTue Feb 14 13:14:59 2023 \u001b[0m\n",
+ "\u001b[34m+-----------------------------------------------------------------------------+\u001b[0m\n",
+ "\u001b[34m| NVIDIA-SMI 515.65.07 Driver Version: 515.65.07 CUDA Version: 11.7 |\u001b[0m\n",
+ "\u001b[34m|-------------------------------+----------------------+----------------------+\u001b[0m\n",
+ "\u001b[34m| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\u001b[0m\n",
+ "\u001b[34m| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\u001b[0m\n",
+ "\u001b[34m| | | MIG M. |\u001b[0m\n",
+ "\u001b[34m|===============================+======================+======================|\u001b[0m\n",
+ "\u001b[34m| 0 Tesla V100-SXM2... On | 00000000:00:1E.0 Off | 0 |\u001b[0m\n",
+ "\u001b[34m| N/A 42C P0 23W / 300W | 0MiB / 16384MiB | 0% Default |\u001b[0m\n",
+ "\u001b[34m| | | N/A |\u001b[0m\n",
+ "\u001b[34m+-------------------------------+----------------------+----------------------+\n",
+ " \u001b[0m\n",
+ "\u001b[34m+-----------------------------------------------------------------------------+\u001b[0m\n",
+ "\u001b[34m| Processes: |\u001b[0m\n",
+ "\u001b[34m| GPU GI CI PID Type Process name GPU Memory |\u001b[0m\n",
+ "\u001b[34m| ID ID Usage |\u001b[0m\n",
+ "\u001b[34m|=============================================================================|\u001b[0m\n",
+ "\u001b[34m| No running processes found |\u001b[0m\n",
+ "\u001b[34m+-----------------------------------------------------------------------------+\u001b[0m\n",
+ "\u001b[34mChecking for nvidia driver and cuda compatibility.\u001b[0m\n",
+ "\u001b[34mCUDA Compatibility driver provided.\u001b[0m\n",
+ "\u001b[34mProceeding with compatibility check between driver, cuda-toolkit and cuda-compat.\u001b[0m\n",
+ "\u001b[34mDetected cuda-toolkit version: 11.1.\u001b[0m\n",
+ "\u001b[34mDetected cuda-compat version: 455.32.00.\u001b[0m\n",
+ "\u001b[34mDetected Nvidia driver version: 515.65.07.\u001b[0m\n",
+ "\u001b[34mNvidia driver compatible with cuda-toolkit. Disabling cuda-compat.\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:03 INFO 140622489470784] Reading default configuration from /opt/amazon/lib/python3.7/site-packages/image_classification/default-input.json: {'use_pretrained_model': 0, 'num_layers': 152, 'epochs': 30, 'learning_rate': 0.1, 'lr_scheduler_factor': 0.1, 'optimizer': 'sgd', 'momentum': 0, 'weight_decay': 0.0001, 'beta_1': 0.9, 'beta_2': 0.999, 'eps': 1e-08, 'gamma': 0.9, 'mini_batch_size': 32, 'image_shape': '3,224,224', 'precision_dtype': 'float32'}\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:03 INFO 140622489470784] Merging with provided configuration from /opt/ml/input/config/hyperparameters.json: {'image_shape': '3,32,32', 'num_classes': '2', 'num_training_samples': '1000'}\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:03 INFO 140622489470784] Final configuration: {'use_pretrained_model': 0, 'num_layers': 152, 'epochs': 30, 'learning_rate': 0.1, 'lr_scheduler_factor': 0.1, 'optimizer': 'sgd', 'momentum': 0, 'weight_decay': 0.0001, 'beta_1': 0.9, 'beta_2': 0.999, 'eps': 1e-08, 'gamma': 0.9, 'mini_batch_size': 32, 'image_shape': '3,32,32', 'precision_dtype': 'float32', 'num_classes': '2', 'num_training_samples': '1000'}\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:03 INFO 140622489470784] Searching for .lst files in /opt/ml/input/data/train_lst.\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:03 INFO 140622489470784] Creating record files for train.lst\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] Done creating record files...\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] Searching for .lst files in /opt/ml/input/data/validation_lst.\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] Creating record files for test.lst\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] Done creating record files...\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] use_pretrained_model: 0\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] multi_label: 0\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] Performing random weight initialization\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] ---- Parameters ----\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] num_layers: 152\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] data type: \u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] epochs: 30\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] optimizer: sgd\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] momentum: 0.9\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] weight_decay: 0.0001\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] learning_rate: 0.1\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] num_training_samples: 1000\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] mini_batch_size: 32\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] image_shape: 3,32,32\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] num_classes: 2\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] augmentation_type: None\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] kv_store: device\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] checkpoint_frequency not set, will store the best model\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] --------------------\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:04 INFO 140622489470784] Setting number of threads: 7\u001b[0m\n",
+ "\u001b[34m[13:15:08] /opt/brazil-pkg-cache/packages/AIAlgorithmsMXNet/AIAlgorithmsMXNet-1.4.x_ecl_Cuda_11.1.x.38.0/AL2_x86_64/generic-flavor/src/src/operator/nn/./cudnn/./cudnn_algoreg-inl.h:97: Running performance tests to find the best convolution algorithm, this can take a while... (setting env variable MXNET_CUDNN_AUTOTUNE_DEFAULT to 0 to disable)\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:13 INFO 140622489470784] Epoch[0] Batch [20]#011Speed: 121.736 samples/sec#011accuracy=0.584821\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:15 INFO 140622489470784] Epoch[0] Train-accuracy=0.626008\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:15 INFO 140622489470784] Epoch[0] Time cost=6.944\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:15 INFO 140622489470784] Epoch[0] Validation-accuracy=0.484375\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:15 INFO 140622489470784] Storing the best model with validation accuracy: 0.484375\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:16 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0001.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:19 INFO 140622489470784] Epoch[1] Batch [20]#011Speed: 184.679 samples/sec#011accuracy=0.630952\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:21 INFO 140622489470784] Epoch[1] Train-accuracy=0.623992\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:21 INFO 140622489470784] Epoch[1] Time cost=5.127\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:21 INFO 140622489470784] Epoch[1] Validation-accuracy=0.510417\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:22 INFO 140622489470784] Storing the best model with validation accuracy: 0.510417\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:22 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0002.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:26 INFO 140622489470784] Epoch[2] Batch [20]#011Speed: 188.476 samples/sec#011accuracy=0.654762\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:27 INFO 140622489470784] Epoch[2] Train-accuracy=0.650202\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:27 INFO 140622489470784] Epoch[2] Time cost=5.053\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:28 INFO 140622489470784] Epoch[2] Validation-accuracy=0.531250\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:28 INFO 140622489470784] Storing the best model with validation accuracy: 0.531250\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:28 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0003.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:32 INFO 140622489470784] Epoch[3] Batch [20]#011Speed: 188.318 samples/sec#011accuracy=0.714286\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:33 INFO 140622489470784] Epoch[3] Train-accuracy=0.734879\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:33 INFO 140622489470784] Epoch[3] Time cost=5.066\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:34 INFO 140622489470784] Epoch[3] Validation-accuracy=0.522321\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:38 INFO 140622489470784] Epoch[4] Batch [20]#011Speed: 185.520 samples/sec#011accuracy=0.767857\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:40 INFO 140622489470784] Epoch[4] Train-accuracy=0.773185\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:40 INFO 140622489470784] Epoch[4] Time cost=5.139\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:40 INFO 140622489470784] Epoch[4] Validation-accuracy=0.520833\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:44 INFO 140622489470784] Epoch[5] Batch [20]#011Speed: 187.837 samples/sec#011accuracy=0.784226\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:46 INFO 140622489470784] Epoch[5] Train-accuracy=0.770161\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:46 INFO 140622489470784] Epoch[5] Time cost=5.065\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:46 INFO 140622489470784] Epoch[5] Validation-accuracy=0.479167\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:50 INFO 140622489470784] Epoch[6] Batch [20]#011Speed: 188.098 samples/sec#011accuracy=0.827381\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:52 INFO 140622489470784] Epoch[6] Train-accuracy=0.808468\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:52 INFO 140622489470784] Epoch[6] Time cost=5.088\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:52 INFO 140622489470784] Epoch[6] Validation-accuracy=0.520833\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:56 INFO 140622489470784] Epoch[7] Batch [20]#011Speed: 186.858 samples/sec#011accuracy=0.818452\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:58 INFO 140622489470784] Epoch[7] Train-accuracy=0.807460\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:58 INFO 140622489470784] Epoch[7] Time cost=5.106\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:15:58 INFO 140622489470784] Epoch[7] Validation-accuracy=0.513393\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:02 INFO 140622489470784] Epoch[8] Batch [20]#011Speed: 184.425 samples/sec#011accuracy=0.824405\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:04 INFO 140622489470784] Epoch[8] Train-accuracy=0.824597\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:04 INFO 140622489470784] Epoch[8] Time cost=5.189\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:04 INFO 140622489470784] Epoch[8] Validation-accuracy=0.526042\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:08 INFO 140622489470784] Epoch[9] Batch [20]#011Speed: 188.382 samples/sec#011accuracy=0.839286\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:10 INFO 140622489470784] Epoch[9] Train-accuracy=0.832661\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:10 INFO 140622489470784] Epoch[9] Time cost=5.085\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:10 INFO 140622489470784] Epoch[9] Validation-accuracy=0.536458\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:11 INFO 140622489470784] Storing the best model with validation accuracy: 0.536458\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:11 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0010.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:14 INFO 140622489470784] Epoch[10] Batch [20]#011Speed: 188.170 samples/sec#011accuracy=0.831845\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:16 INFO 140622489470784] Epoch[10] Train-accuracy=0.825605\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:16 INFO 140622489470784] Epoch[10] Time cost=5.084\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:17 INFO 140622489470784] Epoch[10] Validation-accuracy=0.541667\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:17 INFO 140622489470784] Storing the best model with validation accuracy: 0.541667\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:17 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0011.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:21 INFO 140622489470784] Epoch[11] Batch [20]#011Speed: 188.872 samples/sec#011accuracy=0.840774\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:22 INFO 140622489470784] Epoch[11] Train-accuracy=0.833669\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:22 INFO 140622489470784] Epoch[11] Time cost=5.063\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:23 INFO 140622489470784] Epoch[11] Validation-accuracy=0.549107\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:23 INFO 140622489470784] Storing the best model with validation accuracy: 0.549107\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:24 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0012.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:27 INFO 140622489470784] Epoch[12] Batch [20]#011Speed: 186.059 samples/sec#011accuracy=0.869048\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:29 INFO 140622489470784] Epoch[12] Train-accuracy=0.868952\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:29 INFO 140622489470784] Epoch[12] Time cost=5.105\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:29 INFO 140622489470784] Epoch[12] Validation-accuracy=0.557292\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:29 INFO 140622489470784] Storing the best model with validation accuracy: 0.557292\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:30 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0013.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:33 INFO 140622489470784] Epoch[13] Batch [20]#011Speed: 187.817 samples/sec#011accuracy=0.858631\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:35 INFO 140622489470784] Epoch[13] Train-accuracy=0.866935\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:35 INFO 140622489470784] Epoch[13] Time cost=5.072\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:35 INFO 140622489470784] Epoch[13] Validation-accuracy=0.494792\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:39 INFO 140622489470784] Epoch[14] Batch [20]#011Speed: 188.960 samples/sec#011accuracy=0.882440\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:41 INFO 140622489470784] Epoch[14] Train-accuracy=0.886089\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:41 INFO 140622489470784] Epoch[14] Time cost=5.070\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:41 INFO 140622489470784] Epoch[14] Validation-accuracy=0.531250\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:45 INFO 140622489470784] Epoch[15] Batch [20]#011Speed: 188.289 samples/sec#011accuracy=0.909226\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:47 INFO 140622489470784] Epoch[15] Train-accuracy=0.900202\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:47 INFO 140622489470784] Epoch[15] Time cost=5.058\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:47 INFO 140622489470784] Epoch[15] Validation-accuracy=0.562500\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:48 INFO 140622489470784] Storing the best model with validation accuracy: 0.562500\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:48 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0016.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:52 INFO 140622489470784] Epoch[16] Batch [20]#011Speed: 188.204 samples/sec#011accuracy=0.901786\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:53 INFO 140622489470784] Epoch[16] Train-accuracy=0.883065\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:53 INFO 140622489470784] Epoch[16] Time cost=5.065\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:54 INFO 140622489470784] Epoch[16] Validation-accuracy=0.541667\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:58 INFO 140622489470784] Epoch[17] Batch [20]#011Speed: 188.836 samples/sec#011accuracy=0.925595\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:59 INFO 140622489470784] Epoch[17] Train-accuracy=0.924395\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:16:59 INFO 140622489470784] Epoch[17] Time cost=5.067\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:00 INFO 140622489470784] Epoch[17] Validation-accuracy=0.494792\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:04 INFO 140622489470784] Epoch[18] Batch [20]#011Speed: 182.995 samples/sec#011accuracy=0.858631\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:05 INFO 140622489470784] Epoch[18] Train-accuracy=0.871976\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:05 INFO 140622489470784] Epoch[18] Time cost=5.178\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:06 INFO 140622489470784] Epoch[18] Validation-accuracy=0.552083\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:10 INFO 140622489470784] Epoch[19] Batch [20]#011Speed: 189.019 samples/sec#011accuracy=0.936012\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:11 INFO 140622489470784] Epoch[19] Train-accuracy=0.927419\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:11 INFO 140622489470784] Epoch[19] Time cost=5.053\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:12 INFO 140622489470784] Epoch[19] Validation-accuracy=0.558036\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:16 INFO 140622489470784] Epoch[20] Batch [20]#011Speed: 188.366 samples/sec#011accuracy=0.924107\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:17 INFO 140622489470784] Epoch[20] Train-accuracy=0.919355\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:17 INFO 140622489470784] Epoch[20] Time cost=5.073\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:18 INFO 140622489470784] Epoch[20] Validation-accuracy=0.536458\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:22 INFO 140622489470784] Epoch[21] Batch [20]#011Speed: 188.032 samples/sec#011accuracy=0.952381\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:23 INFO 140622489470784] Epoch[21] Train-accuracy=0.947581\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:23 INFO 140622489470784] Epoch[21] Time cost=5.079\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:24 INFO 140622489470784] Epoch[21] Validation-accuracy=0.541667\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:28 INFO 140622489470784] Epoch[22] Batch [20]#011Speed: 185.304 samples/sec#011accuracy=0.927083\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:30 INFO 140622489470784] Epoch[22] Train-accuracy=0.920363\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:30 INFO 140622489470784] Epoch[22] Time cost=5.122\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:30 INFO 140622489470784] Epoch[22] Validation-accuracy=0.567708\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:30 INFO 140622489470784] Storing the best model with validation accuracy: 0.567708\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:31 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0023.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:34 INFO 140622489470784] Epoch[23] Batch [20]#011Speed: 189.240 samples/sec#011accuracy=0.953869\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:36 INFO 140622489470784] Epoch[23] Train-accuracy=0.943548\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:36 INFO 140622489470784] Epoch[23] Time cost=5.045\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:36 INFO 140622489470784] Epoch[23] Validation-accuracy=0.571429\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:37 INFO 140622489470784] Storing the best model with validation accuracy: 0.571429\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:37 INFO 140622489470784] Saved checkpoint to \"/opt/ml/model/image-classification-0024.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:40 INFO 140622489470784] Epoch[24] Batch [20]#011Speed: 189.041 samples/sec#011accuracy=0.925595\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:42 INFO 140622489470784] Epoch[24] Train-accuracy=0.924395\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:42 INFO 140622489470784] Epoch[24] Time cost=5.054\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:42 INFO 140622489470784] Epoch[24] Validation-accuracy=0.520833\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:46 INFO 140622489470784] Epoch[25] Batch [20]#011Speed: 189.755 samples/sec#011accuracy=0.953869\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:48 INFO 140622489470784] Epoch[25] Train-accuracy=0.955645\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:48 INFO 140622489470784] Epoch[25] Time cost=5.045\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:49 INFO 140622489470784] Epoch[25] Validation-accuracy=0.531250\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:52 INFO 140622489470784] Epoch[26] Batch [20]#011Speed: 187.638 samples/sec#011accuracy=0.931548\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:54 INFO 140622489470784] Epoch[26] Train-accuracy=0.945565\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:54 INFO 140622489470784] Epoch[26] Time cost=5.087\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:55 INFO 140622489470784] Epoch[26] Validation-accuracy=0.531250\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:17:58 INFO 140622489470784] Epoch[27] Batch [20]#011Speed: 187.239 samples/sec#011accuracy=0.976190\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:00 INFO 140622489470784] Epoch[27] Train-accuracy=0.969758\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:00 INFO 140622489470784] Epoch[27] Time cost=5.104\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:01 INFO 140622489470784] Epoch[27] Validation-accuracy=0.553571\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:05 INFO 140622489470784] Epoch[28] Batch [20]#011Speed: 182.670 samples/sec#011accuracy=0.968750\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:06 INFO 140622489470784] Epoch[28] Train-accuracy=0.965726\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:06 INFO 140622489470784] Epoch[28] Time cost=5.176\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:07 INFO 140622489470784] Epoch[28] Validation-accuracy=0.562500\u001b[0m\n",
+ "\n",
+ "2023-02-14 13:18:19 Uploading - Uploading generated training model\u001b[34m[02/14/2023 13:18:11 INFO 140622489470784] Epoch[29] Batch [20]#011Speed: 189.095 samples/sec#011accuracy=0.979167\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:12 INFO 140622489470784] Epoch[29] Train-accuracy=0.974798\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:12 INFO 140622489470784] Epoch[29] Time cost=5.050\u001b[0m\n",
+ "\u001b[34m[02/14/2023 13:18:13 INFO 140622489470784] Epoch[29] Validation-accuracy=0.531250\u001b[0m\n",
+ "\n",
+ "2023-02-14 13:18:54 Completed - Training job completed\n",
+ "Training seconds: 458\n",
+ "Billable seconds: 458\n"
+ ]
+ }
+ ],
+ "source": [
+ "## TODO: train your model\n",
+ "img_classifier_model.fit(model_inputs)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If all goes well, you'll end up with a model topping out above `.8` validation accuracy. With only 1000 training samples in the CIFAR dataset, that's pretty good. We could definitely pursue data augmentation & gathering more samples to help us improve further, but for now let's proceed to deploy our model.\n",
+ "\n",
+ "### Getting ready to deploy\n",
+ "\n",
+ "To begin with, let's configure Model Monitor to track our deployment. We'll define a `DataCaptureConfig` below:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 103,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.model_monitor import DataCaptureConfig\n",
+ "\n",
+ "data_capture_config = DataCaptureConfig(\n",
+ " ## TODO: Set config options\n",
+ " enable_capture=True,\n",
+ " sampling_percentage=100,\n",
+ " destination_s3_uri=f\"s3://{bucket}/data_capture\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note the `destination_s3_uri` parameter: At the end of the project, we can explore the `data_capture` directory in S3 to find crucial data about the inputs and outputs Model Monitor has observed on our model endpoint over time.\n",
+ "\n",
+ "With that done, deploy your model on a single `ml.m5.xlarge` instance with the data capture config attached:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 104,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-------!image-classification-2023-02-14-13-25-18-287\n"
+ ]
+ }
+ ],
+ "source": [
+ "deployment = img_classifier_model.deploy(\n",
+ " ## TODO: fill in deployment options\n",
+ " data_capture_config=data_capture_config,\n",
+ " initial_instance_count=1, \n",
+ " instance_type='ml.m5.xlarge',\n",
+ " \n",
+ " )\n",
+ "\n",
+ "endpoint = deployment.endpoint_name\n",
+ "print(endpoint)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note the endpoint name for later as well.\n",
+ "\n",
+ "Next, instantiate a Predictor:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 105,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.predictor import Predictor\n",
+ "predictor = Predictor('image-classification-2023-02-14-13-25-18-287') ## TODO: fill in"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In the code snippet below we are going to prepare one of your saved images for prediction. Use the predictor to process the `payload`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 108,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.serializers import IdentitySerializer\n",
+ "import base64\n",
+ "import json\n",
+ "predictor.serializer = IdentitySerializer(\"image/png\")\n",
+ "with open(\"./test/bicycle_s_001789.png\", \"rb\") as f:\n",
+ " payload = f.read()\n",
+ "\n",
+ " \n",
+ "inference = predictor.predict(payload)## TODO: Process the payload with your predictor"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Your `inference` object is an array of two values, the predicted probability value for each of your classes (bicycle and motorcycle respectively.) So, for example, a value of `b'[0.91, 0.09]'` indicates the probability of being a bike is 91% and being a motorcycle is 9%."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 109,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b'[0.9987309575080872, 0.001269030850380659]'\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(inference)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "jp-MarkdownHeadingCollapsed": true,
+ "tags": []
+ },
+ "source": [
+ "### Draft Lambdas and Step Function Workflow\n",
+ "\n",
+ "Your operations team uses Step Functions to orchestrate serverless workflows. One of the nice things about Step Functions is that [workflows can call other workflows](https://docs.aws.amazon.com/step-functions/latest/dg/connect-stepfunctions.html), so the team can easily plug your workflow into the broader production architecture for Scones Unlimited.\n",
+ "\n",
+ "In this next stage you're going to write and deploy three Lambda functions, and then use the Step Functions visual editor to chain them together! Our functions are going to work with a simple data object:\n",
+ "\n",
+ "```python\n",
+ "{\n",
+ " \"inferences\": [], # Output of predictor.predict\n",
+ " \"s3_key\": \"\", # Source data S3 key\n",
+ " \"s3_bucket\": \"\", # Source data S3 bucket\n",
+ " \"image_data\": \"\" # base64 encoded string containing the image data\n",
+ "}\n",
+ "```\n",
+ "\n",
+ "A good test object that you can use for Lambda tests and Step Function executions, throughout the next section, might look like this:\n",
+ "\n",
+ "```python\n",
+ "{\n",
+ " \"image_data\": \"\",\n",
+ " \"s3_bucket\": MY_BUCKET_NAME, # Fill in with your bucket\n",
+ " \"s3_key\": \"test/bicycle_s_000513.png\"\n",
+ "}\n",
+ "```\n",
+ "\n",
+ "Using these fields, your functions can read and write the necessary data to execute your workflow. Let's start with the first function. Your first Lambda function will copy an object from S3, base64 encode it, and then return it to the step function as `image_data` in an event.\n",
+ "\n",
+ "Go to the Lambda dashboard and create a new Lambda function with a descriptive name like \"serializeImageData\" and select thr 'Python 3.8' runtime. Add the same permissions as the SageMaker role you created earlier. (Reminder: you do this in the Configuration tab under \"Permissions\"). Once you're ready, use the starter code below to craft your Lambda handler:\n",
+ "\n",
+ "```python\n",
+ "import json\n",
+ "import boto3\n",
+ "import base64\n",
+ "\n",
+ "s3 = boto3.client('s3')\n",
+ "\n",
+ "def lambda_handler(event, context):\n",
+ " \"\"\"A function to serialize target data from S3\"\"\"\n",
+ " \n",
+ " # Get the s3 address from the Step Function event input\n",
+ " key = ## TODO: fill in\n",
+ " bucket = ## TODO: fill in\n",
+ " \n",
+ " # Download the data from s3 to /tmp/image.png\n",
+ " ## TODO: fill in\n",
+ " \n",
+ " # We read the data from a file\n",
+ " with open(\"/tmp/image.png\", \"rb\") as f:\n",
+ " image_data = base64.b64encode(f.read())\n",
+ "\n",
+ " # Pass the data back to the Step Function\n",
+ " print(\"Event:\", event.keys())\n",
+ " return {\n",
+ " 'statusCode': 200,\n",
+ " 'body': {\n",
+ " \"image_data\": image_data,\n",
+ " \"s3_bucket\": bucket,\n",
+ " \"s3_key\": key,\n",
+ " \"inferences\": []\n",
+ " }\n",
+ " }\n",
+ "```\n",
+ "\n",
+ "The next function is responsible for the classification part - we're going to take the image output from the previous function, decode it, and then pass inferences back to the the Step Function.\n",
+ "\n",
+ "Because this Lambda will have runtime dependencies (i.e. the SageMaker SDK) you'll need to package them in your function. *Key reading:* https://docs.aws.amazon.com/lambda/latest/dg/python-package-create.html#python-package-create-with-dependency\n",
+ "\n",
+ "Create a new Lambda function with the same rights and a descriptive name, then fill in the starter code below for your classifier Lambda.\n",
+ "\n",
+ "```python\n",
+ "import json\n",
+ "import sagemaker\n",
+ "import base64\n",
+ "from sagemaker.serializers import IdentitySerializer\n",
+ "\n",
+ "# Fill this in with the name of your deployed model\n",
+ "ENDPOINT = ## TODO: fill in\n",
+ "\n",
+ "def lambda_handler(event, context):\n",
+ "\n",
+ " # Decode the image data\n",
+ " image = base64.b64decode(## TODO: fill in)\n",
+ "\n",
+ " # Instantiate a Predictor\n",
+ " predictor = ## TODO: fill in\n",
+ "\n",
+ " # For this model the IdentitySerializer needs to be \"image/png\"\n",
+ " predictor.serializer = IdentitySerializer(\"image/png\")\n",
+ " \n",
+ " # Make a prediction:\n",
+ " inferences = ## TODO: fill in\n",
+ " \n",
+ " # We return the data back to the Step Function \n",
+ " event[\"inferences\"] = inferences.decode('utf-8')\n",
+ " return {\n",
+ " 'statusCode': 200,\n",
+ " 'body': json.dumps(event)\n",
+ " }\n",
+ "```\n",
+ "\n",
+ "Finally, we need to filter low-confidence inferences. Define a threshold between 1.00 and 0.000 for your model: what is reasonble for you? If the model predicts at `.70` for it's highest confidence label, do we want to pass that inference along to downstream systems? Make one last Lambda function and tee up the same permissions:\n",
+ "\n",
+ "```python\n",
+ "import json\n",
+ "\n",
+ "\n",
+ "THRESHOLD = .93\n",
+ "\n",
+ "\n",
+ "def lambda_handler(event, context):\n",
+ " \n",
+ " # Grab the inferences from the event\n",
+ " inferences = ## TODO: fill in\n",
+ " \n",
+ " # Check if any values in our inferences are above THRESHOLD\n",
+ " meets_threshold = ## TODO: fill in\n",
+ " \n",
+ " # If our threshold is met, pass our data back out of the\n",
+ " # Step Function, else, end the Step Function with an error\n",
+ " if meets_threshold:\n",
+ " pass\n",
+ " else:\n",
+ " raise(\"THRESHOLD_CONFIDENCE_NOT_MET\")\n",
+ "\n",
+ " return {\n",
+ " 'statusCode': 200,\n",
+ " 'body': json.dumps(event)\n",
+ " }\n",
+ "```\n",
+ "Once you have tested the lambda functions, save the code for each lambda function in a python script called 'lambda.py'.\n",
+ "\n",
+ "With your lambdas in place, you can use the Step Functions visual editor to construct a workflow that chains them together. In the Step Functions console you'll have the option to author a Standard step function *Visually*.\n",
+ "\n",
+ "When the visual editor opens, you'll have many options to add transitions in your workflow. We're going to keep it simple and have just one: to inbc83d5eb0be10e316708b03ecf7fcc5fvoke Lambda functions. Add three of them chained together. For each one, you'll be able to select the Lambda functions you just created in the proper order, filter inputs and outputs, and give them descriptive names.\n",
+ "\n",
+ "Make sure that you:\n",
+ "\n",
+ "1. Are properly filtering the inputs and outputs of your invokations (e.g. `$.body`)\n",
+ "2. Take care to remove the error handling from the last function - it's supposed to \"fail loudly\" for your operations colleagues!\n",
+ "\n",
+ "Take a screenshot of your working step function in action and export the step function as JSON for your submission package."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Great! Now you can use the files in `./test` as test files for our workflow. Depending on our threshold, our workflow should reliably pass predictions about images from `./test` on to downstream systems, while erroring out for inferences below our confidence threshold!\n",
+ "\n",
+ "### Testing and Evaluation\n",
+ "\n",
+ "Do several step function invokations using data from the `./test` folder. This process should give you confidence that the workflow both *succeeds* AND *fails* as expected. In addition, SageMaker Model Monitor will generate recordings of your data and inferences which we can visualize.\n",
+ "\n",
+ "Here's a function that can help you generate test inputs for your invokations:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 132,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'{\"image_data\": \"\", \"s3_bucket\": \"udacity-ml-workflow\", \"s3_key\": \"test/ordinary_bicycle_s_000431.png\"}'"
+ ]
+ },
+ "execution_count": 132,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import random\n",
+ "import boto3\n",
+ "import json\n",
+ "\n",
+ "\n",
+ "def generate_test_case():\n",
+ " # Setup s3 in boto3\n",
+ " s3 = boto3.resource('s3')\n",
+ " \n",
+ " # Randomly pick from sfn or test folders in our bucket\n",
+ " objects = s3.Bucket(bucket).objects.filter(Prefix=\"test\")\n",
+ " \n",
+ " # Grab any random object key from that folder!\n",
+ " obj = random.choice([x.key for x in objects])\n",
+ " \n",
+ " return json.dumps({\n",
+ " \"image_data\": \"\",\n",
+ " \"s3_bucket\": bucket,\n",
+ " \"s3_key\": obj\n",
+ " })\n",
+ "generate_test_case()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In the Step Function dashboard for your new function, you can create new executions and copy in the generated test cases. Do several executions so that you can generate data you can evaluate and visualize.\n",
+ "\n",
+ "Once you've done several executions, let's visualize the record of our inferences. Pull in the JSONLines data from your inferences like so:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 135,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.s3 import S3Downloader\n",
+ "\n",
+ "# In S3 your data will be saved to a datetime-aware path\n",
+ "# Find a path related to a datetime you're interested in\n",
+ "data_path = \"s3://udacity-ml-workflow/data_capture/image-classification-2023-02-14-13-25-18-287/AllTraffic/2023/02/14/13/42-58-655-83d904b7-a5b0-4a0f-93d7-60d194497d27.jsonl\"## TODO: fill in the path to your captured data\n",
+ "\n",
+ "S3Downloader.download(data_path, \"captured_data\")\n",
+ "\n",
+ "# Feel free to repeat this multiple times and pull in more data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The data are in JSONLines format, where multiple valid JSON objects are stacked on top of eachother in a single `jsonl` file. We'll import an open-source library, `jsonlines` that was purpose built for parsing this format."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 136,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Keyring is skipped due to an exception: 'keyring.backends'\n",
+ "Requirement already satisfied: jsonlines in /opt/conda/lib/python3.7/site-packages (3.1.0)\n",
+ "Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.7/site-packages (from jsonlines) (4.4.0)\n",
+ "Requirement already satisfied: attrs>=19.2.0 in /opt/conda/lib/python3.7/site-packages (from jsonlines) (22.1.0)\n",
+ "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n",
+ "\u001b[0m\n",
+ "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.0\u001b[0m\n",
+ "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install jsonlines\n",
+ "import jsonlines"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can extract the data from each of the source files:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 137,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "\n",
+ "# List the file names we downloaded\n",
+ "file_handles = os.listdir(\"./captured_data\")\n",
+ "\n",
+ "# Dump all the data into an array\n",
+ "json_data = []\n",
+ "for jsonl in file_handles:\n",
+ " with jsonlines.open(f\"./captured_data/{jsonl}\") as f:\n",
+ " json_data.append(f.read())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The data should now be a list of dictionaries, with significant nesting. We'll give you an example of some code that grabs data out of the objects and visualizes it:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 138,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "([0.9987309575080872, 0.001269030850380659], '2023-02-14T13:42:58Z')"
+ ]
+ },
+ "execution_count": 138,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Define how we'll get our data\n",
+ "def simple_getter(obj):\n",
+ " inferences = obj[\"captureData\"][\"endpointOutput\"][\"data\"]\n",
+ " timestamp = obj[\"eventMetadata\"][\"inferenceTime\"]\n",
+ " return json.loads(inferences), timestamp\n",
+ "\n",
+ "simple_getter(json_data[0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Finally, here's an example of a visualization you can build with this data. In this last part, you will take some time and build your own - the captured data has the input images, the resulting inferences, and the timestamps."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 147,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'captureData': {'endpointInput': {'observedContentType': 'image/png',\n",
+ " 'mode': 'INPUT',\n",
+ " 'data': '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',\n",
+ " 'encoding': 'BASE64'},\n",
+ " 'endpointOutput': {'observedContentType': 'application/json',\n",
+ " 'mode': 'OUTPUT',\n",
+ " 'data': '[0.9987309575080872, 0.001269030850380659]',\n",
+ " 'encoding': 'JSON'}},\n",
+ " 'eventMetadata': {'eventId': '57ba9915-6477-481e-886e-f2e8baf84035',\n",
+ " 'inferenceTime': '2023-02-14T13:42:58Z'},\n",
+ " 'eventVersion': '0'}"
+ ]
+ },
+ "execution_count": 147,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "obj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 148,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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iMwotoCvUStuJnGny6RFpjO73U5MdDQer1eLkmTGi42J+cxdHyF/hioiIjIdKFBFREQsoEAVERGxgAJVRETEAgpUERERCyhQRURELKBAFRERsYACVURExAIKVBEREQsoUEVERCygQBUREbGAAlVERMQCClQRERELKFBFREQsoEAVERGxgAJVRETEAgpUERERCyhQRURELKBAFRERsYACVURExAIKVBEREQsoUEVERCygQBUREbGAAlVERMQCClQRERELKFBFREQsoEAVERGxgAJVRETEAgpUERERCyhQRURELKBAFRERsYACVURExAIKVBEREQsoUEVERCygQBUREbGAAlVERMQCClQRERELKFBFREQsoEAVERGxgAJVRETEAgpUERERCzhD3YFr9lXUsOvwGfq9PjJTEnhh80ryZ6dN2jYQMNhxqIpPqi7R5xkkLSmO5x5dRmFu1l1fU0RE5F48EDPUiuo6Xt91lG1rivnebz1FXnYqP3htFz393knbv7O/kgOV5/nyY6X8xbefZf3S+fzwjb00tHXf9TVFRETuxQMRqLuPnGXNQ/msXVJARnI8L24pJSE2iv2VtZO2P3L6EtvWFFGUl0VKQgwPL1vAopxMdh85e9fXFBERuRchv+XrDwRoaO3msbKiCccX5mRyuanjFucYuJyOCcdcTicXG9vv+ppj/gD+QCD42TRNAGw2Gzab7fMNSmSasNvtE76KzESmaQYz4bOEPFC9vhEM0yQ2OmLC8dioCAa8Q5OeMz4brSZvdjopCTHU1LVy6nxDcMB3c80dh6p4r/xU8LPb5eSvfvspYqKjFagy40VFRoa6CyIhY5omAx7PbduFPFCv+XRkmaZ588GrXtxcyk/eP8hf/vBtbEBKQgyrS/I5dOrCXV9z6+piNpUWTmg7NjqCx+tVoMqMZbfbiYqMZNDnwzCMUHdHJCTuZHYKD0CgRke6sdts9H9q5ujxDRMbFTHpOTFR4fzOCxsZ8/vx+kaIj4nk7b3HSY6PuetrupyOCbeRrwXqnU71RaYzwzAUqCK3EfIHI06Hg9kZSZyra5lw/FxdCzlZqZ95rsvpJCE2CsMwOVFTT0lB9j1fU0RE5G6EfIYKsKm0kFfeKWdORjI5WSmUnzhPb/8g65fOB+CVd8uJj4nk2UeWAVDX3Emfx0dWWiJ9Hh/by09imiZbyhbf8TVF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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Populate the data for the x and y axis\n",
+ "x = []\n",
+ "y = []\n",
+ "for obj in json_data:\n",
+ " inference, timestamp = simple_getter(obj)\n",
+ " \n",
+ " y.append(max(inference))\n",
+ " x.append(timestamp)\n",
+ "\n",
+ "# Todo: here is an visualization example, take some time to build another visual that helps monitor the result\n",
+ "# Plot the data\n",
+ "plt.figure(figsize=(5,5))\n",
+ "plt.scatter(x, y, c=['r' if k<.94 else 'b' for k in y ])\n",
+ "plt.axhline(y=0.94, color='g', linestyle='--')\n",
+ "plt.ylim(bottom=.88)\n",
+ "\n",
+ "# Add labels\n",
+ "plt.ylabel(\"Confidence\")\n",
+ "plt.suptitle(\"Observed Recent Inferences\", size=14)\n",
+ "plt.title(\"Pictured with confidence threshold for production use\", size=10)\n",
+ "\n",
+ "# Give it some pizzaz!\n",
+ "plt.style.use(\"Solarize_Light2\")\n",
+ "plt.gcf().autofmt_xdate()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Congratulations!\n",
+ "\n",
+ "You've reached the end of the project. In this project you created an event-drivent ML workflow that can be incorporated into the Scones Unlimited production architecture. You used the SageMaker Estimator API to deploy your SageMaker Model and Endpoint, and you used AWS Lambda and Step Functions to orchestrate your ML workflow. Using SageMaker Model Monitor, you instrumented and observed your Endpoint, and at the end of the project you built a visualization to help stakeholders understand the performance of the Endpoint over time. If you're up for it, you can even go further with these stretch goals:\n",
+ "\n",
+ "* Extend your workflow to incorporate more classes: the CIFAR dataset includes other vehicles that Scones Unlimited can identify with this model.\n",
+ "* Modify your event driven workflow: can you rewrite your Lambda functions so that the workflow can process multiple image inputs in parallel? Can the Step Function \"fan out\" to accomodate this new workflow?\n",
+ "* Consider the test data generator we provided for you. Can we use it to create a \"dummy data\" generator, to simulate a continuous stream of input data? Or a big paralell load of data?\n",
+ "* What if we want to get notified every time our step function errors out? Can we use the Step Functions visual editor in conjunction with a service like SNS to accomplish this? Try it out!\n",
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "instance_type": "ml.t3.medium",
+ "kernelspec": {
+ "display_name": "Python 3 (Data Science)",
+ "language": "python",
+ "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0"
+ },
+ "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.7.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/project/file.png b/project/file.png
new file mode 100644
index 000000000..d9d88d98c
Binary files /dev/null and b/project/file.png differ
diff --git a/project/lambda function/classify.py b/project/lambda function/classify.py
new file mode 100644
index 000000000..396634d4e
--- /dev/null
+++ b/project/lambda function/classify.py
@@ -0,0 +1,30 @@
+import json
+import sagemaker
+import base64
+from sagemaker.serializers import IdentitySerializer
+from sagemaker.predictor import Predictor
+
+# Fill this in with the name of your deployed model
+ENDPOINT = 'image-classification-2023-02-14-13-25-18-287' ## TODO: fill in
+
+def lambda_handler(event, context):
+
+ # Decode the image data
+ image = base64.b64decode(## TODO: fill in)
+
+ # Instantiate a Predictor
+ ## TODO: fill in
+ predictor = Predictor('image-classification-2023-02-14-13-25-18-287')
+
+ # For this model the IdentitySerializer needs to be "image/png"
+ predictor.serializer = IdentitySerializer("image/png")
+
+ # Make a prediction:
+ inferences = predictor.predict(predictor.serializer) ## TODO: fill in
+
+ # We return the data back to the Step Function
+ event["inferences"] = inferences.decode('utf-8')
+ return {
+ 'statusCode': 200,
+ 'body': json.dumps(event)
+ }
\ No newline at end of file
diff --git a/project/lambda function/filter.py b/project/lambda function/filter.py
new file mode 100644
index 000000000..46e7ed136
--- /dev/null
+++ b/project/lambda function/filter.py
@@ -0,0 +1,30 @@
+import json
+
+THRESHOLD = .93
+
+
+def lambda_handler(event, context):
+
+ # Grab the inferences from the event
+ inferences = event["inferences"] ## TODO: fill in
+
+ # Check if any values in our inferences are above THRESHOLD
+ meets_threshold = (inferences>THRESHOLD) ## TODO: fill in
+
+ # If our threshold is met, pass our data back out of the
+ # Step Function, else, end the Step Function with an error
+ if meets_threshold:
+ pass
+ else:
+ raise("THRESHOLD_CONFIDENCE_NOT_MET")
+
+ return {
+ 'statusCode': 200,
+ 'body': json.dumps(event)
+ }
+def lambda_handler(event, context):
+ # TODO implement
+ return {
+ 'statusCode': 200,
+ 'body': json.dumps('Hello from Lambda!')
+ }
diff --git a/project/lambda function/serializeImageData.py b/project/lambda function/serializeImageData.py
new file mode 100644
index 000000000..e77bba4cb
--- /dev/null
+++ b/project/lambda function/serializeImageData.py
@@ -0,0 +1,36 @@
+import json
+import boto3
+import base64
+
+s3 = boto3.client('s3')
+
+def lambda_handler(event, context):
+ """A function to serialize target data from S3"""
+
+ # Get the s3 address from the Step Function event input
+ key = event["s3_key"] ## TODO: fill in
+ bucket =event["s3_bucket"] ## TODO: fill in
+
+ # Download the data from s3 to /tmp/image.png
+ ## TODO: fill in
+
+ input_object = event['image_data']
+ file_name = '/tmp/image.png'
+ s3.download_file(bucket, input_object, file_name)
+
+ # We read the data from a file
+ with open("/tmp/image.png", "rb") as f:
+ image_data = base64.b64encode(f.read())
+
+ # Pass the data back to the Step Function
+ print("Event:", event.keys())
+ return {
+ 'statusCode': 200,
+ 'body': {
+ "image_data": image_data,
+ "s3_bucket": bucket,
+ "s3_key": key,
+ "inferences": []
+ }
+ }
+
\ No newline at end of file
diff --git a/project/starter (1).ipynb b/project/starter (1).ipynb
new file mode 100644
index 000000000..9879638d7
--- /dev/null
+++ b/project/starter (1).ipynb
@@ -0,0 +1,3144 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Deploy and monitor a machine learning workflow for Image Classification"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Setting up this notebook\n",
+ "\n",
+ "Notes about the instance size and kernel setup: this notebook has been tested on\n",
+ "\n",
+ "1. The `Python 3 (Data Science)` kernel\n",
+ "2. The `ml.t3.medium` Sagemaker notebook instance\n",
+ "\n",
+ "## Data Staging\n",
+ "\n",
+ "We'll use a sample dataset called CIFAR to simulate the challenges Scones Unlimited are facing in Image Classification. In order to start working with CIFAR we'll need to:\n",
+ "\n",
+ "1. Extract the data from a hosting service\n",
+ "2. Transform it into a usable shape and format\n",
+ "3. Load it into a production system\n",
+ "\n",
+ "In other words, we're going to do some simple ETL!\n",
+ "\n",
+ "### 1. Extract the data from the hosting service\n",
+ "\n",
+ "In the cell below, define a function `extract_cifar_data` that extracts python version of the CIFAR-100 dataset. The CIFAR dataaset is open source and generously hosted by the University of Toronto at: https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import requests\n",
+ "\n",
+ "def extract_cifar_data(url, filename=\"cifar.tar.gz\"):\n",
+ " \"\"\"A function for extracting the CIFAR-100 dataset and storing it as a gzipped file\n",
+ " \n",
+ " Arguments:\n",
+ " url -- the URL where the dataset is hosted\n",
+ " filename -- the full path where the dataset will be written\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " # Todo: request the data from the data url\n",
+ " # Hint: use `requests.get` method\n",
+ " r = requests.get(url)\n",
+ " with open(filename, \"wb\") as file_context:\n",
+ " file_context.write(r.content)\n",
+ " return"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's test it out! Run the following cell and check whether a new file `cifar.tar.gz` is created in the file explorer."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "extract_cifar_data(\"https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz\") "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2. Transform the data into a usable shape and format\n",
+ "\n",
+ "Clearly, distributing the data as a gzipped archive makes sense for the hosting service! It saves on bandwidth, storage, and it's a widely-used archive format. In fact, it's so widely used that the Python community ships a utility for working with them, `tarfile`, as part of its Standard Library. Execute the following cell to decompress your extracted dataset:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import tarfile\n",
+ "\n",
+ "with tarfile.open(\"cifar.tar.gz\", \"r:gz\") as tar:\n",
+ " tar.extractall()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A new folder `cifar-100-python` should be created, containing `meta`, `test`, and `train` files. These files are `pickles` and the [CIFAR homepage](https://www.cs.toronto.edu/~kriz/cifar.html) provides a simple script that can be used to load them. We've adapted the script below for you to run:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import pickle\n",
+ "\n",
+ "with open(\"./cifar-100-python/meta\", \"rb\") as f:\n",
+ " dataset_meta = pickle.load(f, encoding='bytes')\n",
+ "\n",
+ "with open(\"./cifar-100-python/test\", \"rb\") as f:\n",
+ " dataset_test = pickle.load(f, encoding='bytes')\n",
+ "\n",
+ "with open(\"./cifar-100-python/train\", \"rb\") as f:\n",
+ " dataset_train = pickle.load(f, encoding='bytes')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dict_keys([b'filenames', b'batch_label', b'fine_labels', b'coarse_labels', b'data'])"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Feel free to explore the datasets\n",
+ "\n",
+ "dataset_train.keys()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "As documented on the homepage, `b'data'` contains rows of 3073 unsigned integers, representing three channels (red, green, and blue) for one 32x32 pixel image per row."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3072"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "32*32*3"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For a simple gut-check, let's transform one of our images. Each 1024 items in a row is a channel (red, green, then blue). Each 32 items in the channel are a row in the 32x32 image. Using python, we can stack these channels into a 32x32x3 array, and save it as a PNG file:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "# Each 1024 in a row is a channel (red, green, then blue)\n",
+ "row = dataset_train[b'data'][0]\n",
+ "red, green, blue = row[0:1024], row[1024:2048], row[2048:]\n",
+ "\n",
+ "# Each 32 items in the channel are a row in the 32x32 image\n",
+ "red = red.reshape(32,32)\n",
+ "green = green.reshape(32,32)\n",
+ "blue = blue.reshape(32,32)\n",
+ "\n",
+ "# Combine the channels into a 32x32x3 image!\n",
+ "combined = np.dstack((red,green,blue))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For a more concise version, consider the following:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# All in one:\n",
+ "test_image = np.dstack((\n",
+ " row[0:1024].reshape(32,32),\n",
+ " row[1024:2048].reshape(32,32),\n",
+ " row[2048:].reshape(32,32)\n",
+ "))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "plt.imshow(test_image);"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Looks like a cow! Let's check the label. `dataset_meta` contains label names in order, and `dataset_train` has a list of labels for each row."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "19"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train[b'fine_labels'][0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Our image has a label of `19`, so let's see what the 19th item is in the list of label names."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b'cattle'\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(dataset_meta[b'fine_label_names'][19])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ok! 'cattle' sounds about right. By the way, using the previous two lines we can do:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b'cattle'\n"
+ ]
+ }
+ ],
+ "source": [
+ "n = 0\n",
+ "print(dataset_meta[b'fine_label_names'][dataset_train[b'fine_labels'][n]])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we know how to check labels, is there a way that we can also check file names? `dataset_train` also contains a `b'filenames'` key. Let's see what we have here:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b'bos_taurus_s_000507.png'\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(dataset_train[b'filenames'][0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\"Taurus\" is the name of a subspecies of cattle, so this looks like a pretty reasonable filename. To save an image we can also do:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "plt.imsave(\"file.png\", test_image)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Your new PNG file should now appear in the file explorer -- go ahead and pop it open to see!\n",
+ "\n",
+ "Now that you know how to reshape the images, save them as files, and capture their filenames and labels, let's just capture all the bicycles and motorcycles and save them. Scones Unlimited can use a model that tells these apart to route delivery drivers automatically.\n",
+ "\n",
+ "In the following cell, identify the label numbers for Bicycles and Motorcycles:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "b'motorcycle'"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_meta[b'fine_label_names'][48]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "b'bicycle'"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_meta[b'fine_label_names'][8]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dict_keys([b'filenames', b'batch_label', b'fine_labels', b'coarse_labels', b'data'])"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train.keys()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "False"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train[b'fine_labels'] == 8 "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dict_keys([b'fine_label_names', b'coarse_label_names'])"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_meta.keys()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Motorcycle Label 48: b'motorcycle'\n",
+ "Bicycle Label 8: b'bicycle'\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "# Todo: Filter the dataset_train and dataset_meta objects to find the label numbers for Bicycle and Motorcycles\n",
+ "motor_label = dataset_meta[b'fine_label_names'][48]\n",
+ "bicycle_label = dataset_meta[b'fine_label_names'][8]\n",
+ "print('Motorcycle Label 48:', dataset_meta[b'fine_label_names'][48])\n",
+ "print('Bicycle Label 8:', dataset_meta[b'fine_label_names'][8])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Good job! We only need objects with label 8 and 48 -- this drastically simplifies our handling of the data! Below we construct a dataframe for you, and you can safely drop the rows that don't contain observations about bicycles and motorcycles. Fill in the missing lines below to drop all other rows:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#Construct the dataframe\n",
+ "df_train = pd.DataFrame({\n",
+ " \"filenames\": dataset_train[b'filenames'],\n",
+ " \"labels\": dataset_train[b'fine_labels'],\n",
+ " \"row\": range(len(dataset_train[b'filenames']))\n",
+ "})\n",
+ "\n",
+ "# Drop all rows from df_train where label is not 8 or 48\n",
+ "mask_train = (df_train['labels'] == 8) | (df_train['labels'] == 48)\n",
+ "df_train = df_train[mask_train]\n",
+ "\n",
+ "# Decode df_train.filenames so they are regular strings\n",
+ "df_train[\"filenames\"] = df_train[\"filenames\"].apply(\n",
+ " lambda x: x.decode(\"utf-8\")\n",
+ ")\n",
+ "\n",
+ "\n",
+ "df_test = pd.DataFrame({\n",
+ " \"filenames\": dataset_test[b'filenames'],\n",
+ " \"labels\": dataset_test[b'fine_labels'],\n",
+ " \"row\": range(len(dataset_test[b'filenames']))\n",
+ "})\n",
+ "\n",
+ "# Drop all rows from df_test where label is not 8 or 48\n",
+ "mask_test = (df_test['labels'] == 8) | (df_test['labels'] == 48)\n",
+ "df_test = df_test[mask_test]\n",
+ "\n",
+ "# Decode df_test.filenames so they are regular strings\n",
+ "df_test[\"filenames\"] = df_test[\"filenames\"].apply(\n",
+ " lambda x: x.decode(\"utf-8\")\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now that the data is filtered for just our classes, we can save all our images."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "!mkdir ./train\n",
+ "!mkdir ./test"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In the previous sections we introduced you to several key snippets of code:\n",
+ "\n",
+ "1. Grabbing the image data:\n",
+ "\n",
+ "```python\n",
+ "dataset_train[b'data'][0]\n",
+ "```\n",
+ "\n",
+ "2. A simple idiom for stacking the image data into the right shape\n",
+ "\n",
+ "```python\n",
+ "import numpy as np\n",
+ "np.dstack((\n",
+ " row[0:1024].reshape(32,32),\n",
+ " row[1024:2048].reshape(32,32),\n",
+ " row[2048:].reshape(32,32)\n",
+ "))\n",
+ "```\n",
+ "\n",
+ "3. A simple `matplotlib` utility for saving images\n",
+ "\n",
+ "```python\n",
+ "plt.imsave(path+row['filenames'], target)\n",
+ "```\n",
+ "\n",
+ "Compose these together into a function that saves all the images into the `./test` and `./train` directories. Use the comments in the body of the `save_images` function below to guide your construction of the function:\n"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "for index, row in df_train.iterrows():\n",
+ " name = row[b'filenames']\n",
+ " path = 'train/'\n",
+ " data = dataset_train[b'data'][row['row']]\n",
+ " save_images(data, path, names)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "8"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train[b'fine_labels'][16]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "b'bike_s_000682.png'"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dataset_train[b'filenames'][16]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
filenames
\n",
+ "
labels
\n",
+ "
row
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
16
\n",
+ "
bike_s_000682.png
\n",
+ "
8
\n",
+ "
16
\n",
+ "
\n",
+ "
\n",
+ "
30
\n",
+ "
bike_s_000127.png
\n",
+ "
8
\n",
+ "
30
\n",
+ "
\n",
+ "
\n",
+ "
130
\n",
+ "
cycle_s_002598.png
\n",
+ "
8
\n",
+ "
130
\n",
+ "
\n",
+ "
\n",
+ "
152
\n",
+ "
minibike_s_000824.png
\n",
+ "
48
\n",
+ "
152
\n",
+ "
\n",
+ "
\n",
+ "
195
\n",
+ "
motorcycle_s_001856.png
\n",
+ "
48
\n",
+ "
195
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
49578
\n",
+ "
velocipede_s_000010.png
\n",
+ "
8
\n",
+ "
49578
\n",
+ "
\n",
+ "
\n",
+ "
49588
\n",
+ "
motorcycle_s_001247.png
\n",
+ "
48
\n",
+ "
49588
\n",
+ "
\n",
+ "
\n",
+ "
49882
\n",
+ "
motorcycle_s_000724.png
\n",
+ "
48
\n",
+ "
49882
\n",
+ "
\n",
+ "
\n",
+ "
49962
\n",
+ "
velocipede_s_001637.png
\n",
+ "
8
\n",
+ "
49962
\n",
+ "
\n",
+ "
\n",
+ "
49985
\n",
+ "
motorcycle_s_000291.png
\n",
+ "
48
\n",
+ "
49985
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1000 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " filenames labels row\n",
+ "16 bike_s_000682.png 8 16\n",
+ "30 bike_s_000127.png 8 30\n",
+ "130 cycle_s_002598.png 8 130\n",
+ "152 minibike_s_000824.png 48 152\n",
+ "195 motorcycle_s_001856.png 48 195\n",
+ "... ... ... ...\n",
+ "49578 velocipede_s_000010.png 8 49578\n",
+ "49588 motorcycle_s_001247.png 48 49588\n",
+ "49882 motorcycle_s_000724.png 48 49882\n",
+ "49962 velocipede_s_001637.png 8 49962\n",
+ "49985 motorcycle_s_000291.png 48 49985\n",
+ "\n",
+ "[1000 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_train"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "def save_images(data, path, filename):\n",
+ " #Grab the image data in row-major form\n",
+ " img = data\n",
+ " \n",
+ " # Consolidated stacking/reshaping from earlier\n",
+ " target = np.dstack((img[0:1024].reshape(32,32),\n",
+ " img[1024:2048].reshape(32,32),\n",
+ " img[2048:].reshape(32,32)\n",
+ " ))\n",
+ " \n",
+ " \n",
+ " # Save the image\n",
+ " plt.imsave(path+filename, target)\n",
+ " \n",
+ " # Return any signal data you want for debugging\n",
+ " return True\n",
+ "\n",
+ "## TODO: save ALL images using the save_images function\n",
+ "for index, row in df_train.iterrows():\n",
+ " name = row['filenames']\n",
+ " path = 'train/'\n",
+ " data = dataset_train[b'data'][row['row']]\n",
+ " save_images(data, path, name)\n",
+ " \n",
+ "for index, row in df_test.iterrows():\n",
+ " name = row['filenames']\n",
+ " path = 'test/'\n",
+ " data = dataset_train[b'data'][row['row']]\n",
+ " save_images(data, path, name)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 3. Load the data\n",
+ "\n",
+ "Now we can load the data into S3.\n",
+ "\n",
+ "Using the sagemaker SDK grab the current region, execution role, and bucket."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Default Bucket: udacity-ml-workflow\n",
+ "AWS Region: us-east-1\n",
+ "RoleArn: arn:aws:iam::683237399578:role/service-role/AmazonSageMaker-ExecutionRole-20230119T145763\n"
+ ]
+ }
+ ],
+ "source": [
+ "import sagemaker\n",
+ "from sagemaker import get_execution_role\n",
+ "\n",
+ "bucket= \"udacity-ml-workflow\"\n",
+ "print(\"Default Bucket: {}\".format(bucket))\n",
+ "\n",
+ "region = \"us-east-1\"\n",
+ "print(\"AWS Region: {}\".format(region))\n",
+ "\n",
+ "role = get_execution_role()\n",
+ "print(\"RoleArn: {}\".format(role))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "With this data we can easily sync your data up into S3!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "upload: train/bicycle_s_000017.png to s3://udacity-ml-workflow/train/bicycle_s_000017.png\n",
+ "upload: train/bicycle_s_000099.png to s3://udacity-ml-workflow/train/bicycle_s_000099.png\n",
+ "upload: train/bicycle_s_000137.png to s3://udacity-ml-workflow/train/bicycle_s_000137.png\n",
+ "upload: train/bicycle_s_000038.png to s3://udacity-ml-workflow/train/bicycle_s_000038.png\n",
+ "upload: train/bicycle_s_000021.png to s3://udacity-ml-workflow/train/bicycle_s_000021.png\n",
+ "upload: train/bicycle_s_000035.png to s3://udacity-ml-workflow/train/bicycle_s_000035.png\n",
+ "upload: train/bicycle_s_000124.png to s3://udacity-ml-workflow/train/bicycle_s_000124.png\n",
+ "upload: train/bicycle_s_000149.png to s3://udacity-ml-workflow/train/bicycle_s_000149.png\n",
+ "upload: train/bicycle_s_000147.png to s3://udacity-ml-workflow/train/bicycle_s_000147.png\n",
+ "upload: train/bicycle_s_000039.png to s3://udacity-ml-workflow/train/bicycle_s_000039.png\n",
+ "upload: train/bicycle_s_000156.png to s3://udacity-ml-workflow/train/bicycle_s_000156.png\n",
+ "upload: train/bicycle_s_000043.png to s3://udacity-ml-workflow/train/bicycle_s_000043.png\n",
+ "upload: train/bicycle_s_000231.png to s3://udacity-ml-workflow/train/bicycle_s_000231.png\n",
+ "upload: train/bicycle_s_000235.png to s3://udacity-ml-workflow/train/bicycle_s_000235.png\n",
+ "upload: train/bicycle_s_000066.png to s3://udacity-ml-workflow/train/bicycle_s_000066.png\n",
+ "upload: train/bicycle_s_000159.png to s3://udacity-ml-workflow/train/bicycle_s_000159.png\n",
+ "upload: train/bicycle_s_000180.png to s3://udacity-ml-workflow/train/bicycle_s_000180.png\n",
+ "upload: train/bicycle_s_000243.png to s3://udacity-ml-workflow/train/bicycle_s_000243.png\n",
+ "upload: train/bicycle_s_000051.png to s3://udacity-ml-workflow/train/bicycle_s_000051.png\n",
+ "upload: train/bicycle_s_000279.png to s3://udacity-ml-workflow/train/bicycle_s_000279.png\n",
+ "upload: train/bicycle_s_000371.png to s3://udacity-ml-workflow/train/bicycle_s_000371.png\n",
+ "upload: train/bicycle_s_000282.png to s3://udacity-ml-workflow/train/bicycle_s_000282.png\n",
+ "upload: train/bicycle_s_000369.png to s3://udacity-ml-workflow/train/bicycle_s_000369.png\n",
+ "upload: train/bicycle_s_000392.png to s3://udacity-ml-workflow/train/bicycle_s_000392.png\n",
+ "upload: train/bicycle_s_000071.png to s3://udacity-ml-workflow/train/bicycle_s_000071.png\n",
+ "upload: train/bicycle_s_000437.png to s3://udacity-ml-workflow/train/bicycle_s_000437.png\n",
+ "upload: train/bicycle_s_000399.png to s3://udacity-ml-workflow/train/bicycle_s_000399.png\n",
+ "upload: train/bicycle_s_000408.png to s3://udacity-ml-workflow/train/bicycle_s_000408.png\n",
+ "upload: train/bicycle_s_000435.png to s3://udacity-ml-workflow/train/bicycle_s_000435.png\n",
+ "upload: train/bicycle_s_000522.png to s3://udacity-ml-workflow/train/bicycle_s_000522.png\n",
+ "upload: train/bicycle_s_000396.png to s3://udacity-ml-workflow/train/bicycle_s_000396.png\n",
+ "upload: train/bicycle_s_000467.png to s3://udacity-ml-workflow/train/bicycle_s_000467.png\n",
+ "upload: train/bicycle_s_000491.png to s3://udacity-ml-workflow/train/bicycle_s_000491.png\n",
+ "upload: train/bicycle_s_000314.png to s3://udacity-ml-workflow/train/bicycle_s_000314.png\n",
+ "upload: train/bicycle_s_000463.png to s3://udacity-ml-workflow/train/bicycle_s_000463.png\n",
+ "upload: train/bicycle_s_000537.png to s3://udacity-ml-workflow/train/bicycle_s_000537.png\n",
+ "upload: train/bicycle_s_000536.png to s3://udacity-ml-workflow/train/bicycle_s_000536.png\n",
+ "upload: train/bicycle_s_000546.png to s3://udacity-ml-workflow/train/bicycle_s_000546.png\n",
+ "upload: train/bicycle_s_000569.png to s3://udacity-ml-workflow/train/bicycle_s_000569.png\n",
+ "upload: train/bicycle_s_000561.png to s3://udacity-ml-workflow/train/bicycle_s_000561.png\n",
+ "upload: train/bicycle_s_000668.png to s3://udacity-ml-workflow/train/bicycle_s_000668.png\n",
+ "upload: train/bicycle_s_000667.png to s3://udacity-ml-workflow/train/bicycle_s_000667.png\n",
+ "upload: train/bicycle_s_000723.png to s3://udacity-ml-workflow/train/bicycle_s_000723.png\n",
+ "upload: train/bicycle_s_000753.png to s3://udacity-ml-workflow/train/bicycle_s_000753.png\n",
+ "upload: train/bicycle_s_000759.png to s3://udacity-ml-workflow/train/bicycle_s_000759.png\n",
+ "upload: train/bicycle_s_000775.png to s3://udacity-ml-workflow/train/bicycle_s_000775.png\n",
+ "upload: train/bicycle_s_000829.png to s3://udacity-ml-workflow/train/bicycle_s_000829.png\n",
+ "upload: train/bicycle_s_000782.png to s3://udacity-ml-workflow/train/bicycle_s_000782.png\n",
+ "upload: train/bicycle_s_000778.png to s3://udacity-ml-workflow/train/bicycle_s_000778.png\n",
+ "upload: train/bicycle_s_000951.png to s3://udacity-ml-workflow/train/bicycle_s_000951.png\n",
+ "upload: train/bicycle_s_000785.png to s3://udacity-ml-workflow/train/bicycle_s_000785.png\n",
+ "upload: train/bicycle_s_000774.png to s3://udacity-ml-workflow/train/bicycle_s_000774.png\n",
+ "upload: train/bicycle_s_000822.png to s3://udacity-ml-workflow/train/bicycle_s_000822.png\n",
+ "upload: train/bicycle_s_000978.png to s3://udacity-ml-workflow/train/bicycle_s_000978.png\n",
+ "upload: train/bicycle_s_000986.png to s3://udacity-ml-workflow/train/bicycle_s_000986.png\n",
+ "upload: train/bicycle_s_000861.png to s3://udacity-ml-workflow/train/bicycle_s_000861.png\n",
+ "upload: train/bicycle_s_000781.png to s3://udacity-ml-workflow/train/bicycle_s_000781.png\n",
+ "upload: train/bicycle_s_001168.png to s3://udacity-ml-workflow/train/bicycle_s_001168.png\n",
+ "upload: train/bicycle_s_000996.png to s3://udacity-ml-workflow/train/bicycle_s_000996.png\n",
+ "upload: train/bicycle_s_001111.png to s3://udacity-ml-workflow/train/bicycle_s_001111.png\n",
+ "upload: train/bicycle_s_001002.png to s3://udacity-ml-workflow/train/bicycle_s_001002.png\n",
+ "upload: train/bicycle_s_001174.png to s3://udacity-ml-workflow/train/bicycle_s_001174.png\n",
+ "upload: train/bicycle_s_001245.png to s3://udacity-ml-workflow/train/bicycle_s_001245.png\n",
+ "upload: train/bicycle_s_001228.png to s3://udacity-ml-workflow/train/bicycle_s_001228.png\n",
+ "upload: train/bicycle_s_001388.png to s3://udacity-ml-workflow/train/bicycle_s_001388.png\n",
+ "upload: train/bicycle_s_001348.png to s3://udacity-ml-workflow/train/bicycle_s_001348.png\n",
+ "upload: train/bicycle_s_001247.png to s3://udacity-ml-workflow/train/bicycle_s_001247.png\n",
+ "upload: train/bicycle_s_001205.png to s3://udacity-ml-workflow/train/bicycle_s_001205.png\n",
+ "upload: train/bicycle_s_001402.png to s3://udacity-ml-workflow/train/bicycle_s_001402.png\n",
+ "upload: train/bicycle_s_001338.png to s3://udacity-ml-workflow/train/bicycle_s_001338.png\n",
+ "upload: train/bicycle_s_001203.png to s3://udacity-ml-workflow/train/bicycle_s_001203.png\n",
+ "upload: train/bicycle_s_001411.png to s3://udacity-ml-workflow/train/bicycle_s_001411.png\n",
+ "upload: train/bicycle_s_001452.png to s3://udacity-ml-workflow/train/bicycle_s_001452.png\n",
+ "upload: train/bicycle_s_001470.png to s3://udacity-ml-workflow/train/bicycle_s_001470.png\n",
+ "upload: train/bicycle_s_001448.png to s3://udacity-ml-workflow/train/bicycle_s_001448.png\n",
+ "upload: train/bicycle_s_001409.png to s3://udacity-ml-workflow/train/bicycle_s_001409.png\n",
+ "upload: train/bicycle_s_001554.png to s3://udacity-ml-workflow/train/bicycle_s_001554.png\n",
+ "upload: train/bicycle_s_001663.png to s3://udacity-ml-workflow/train/bicycle_s_001663.png\n",
+ "upload: train/bicycle_s_001583.png to s3://udacity-ml-workflow/train/bicycle_s_001583.png\n",
+ "upload: train/bicycle_s_001688.png to s3://udacity-ml-workflow/train/bicycle_s_001688.png\n",
+ "upload: train/bicycle_s_001687.png to s3://udacity-ml-workflow/train/bicycle_s_001687.png\n",
+ "upload: train/bicycle_s_001693.png to s3://udacity-ml-workflow/train/bicycle_s_001693.png\n",
+ "upload: train/bicycle_s_001679.png to s3://udacity-ml-workflow/train/bicycle_s_001679.png\n",
+ "upload: train/bicycle_s_001673.png to s3://udacity-ml-workflow/train/bicycle_s_001673.png\n",
+ "upload: train/bicycle_s_001748.png to s3://udacity-ml-workflow/train/bicycle_s_001748.png\n",
+ "upload: train/bicycle_s_001642.png to s3://udacity-ml-workflow/train/bicycle_s_001642.png\n",
+ "upload: train/bicycle_s_001681.png to s3://udacity-ml-workflow/train/bicycle_s_001681.png\n",
+ "upload: train/bicycle_s_001757.png to s3://udacity-ml-workflow/train/bicycle_s_001757.png\n",
+ "upload: train/bicycle_s_001569.png to s3://udacity-ml-workflow/train/bicycle_s_001569.png\n",
+ "upload: train/bicycle_s_001956.png to s3://udacity-ml-workflow/train/bicycle_s_001956.png\n",
+ "upload: train/bicycle_s_001814.png to s3://udacity-ml-workflow/train/bicycle_s_001814.png\n",
+ "upload: train/bicycle_s_002029.png to s3://udacity-ml-workflow/train/bicycle_s_002029.png\n",
+ "upload: train/bicycle_s_002012.png to s3://udacity-ml-workflow/train/bicycle_s_002012.png\n",
+ "upload: train/bicycle_s_001904.png to s3://udacity-ml-workflow/train/bicycle_s_001904.png\n",
+ "upload: train/bicycle_s_002100.png to s3://udacity-ml-workflow/train/bicycle_s_002100.png\n",
+ "upload: train/bicycle_s_002005.png to s3://udacity-ml-workflow/train/bicycle_s_002005.png\n",
+ "upload: train/bicycle_s_001928.png to s3://udacity-ml-workflow/train/bicycle_s_001928.png\n",
+ "upload: train/bicycle_s_002049.png to s3://udacity-ml-workflow/train/bicycle_s_002049.png\n",
+ "upload: train/bicycle_s_002129.png to s3://udacity-ml-workflow/train/bicycle_s_002129.png\n",
+ "upload: train/bicycle_s_002132.png to s3://udacity-ml-workflow/train/bicycle_s_002132.png\n",
+ "upload: train/bicycle_s_002218.png to s3://udacity-ml-workflow/train/bicycle_s_002218.png\n",
+ "upload: train/bicycle_s_002222.png to s3://udacity-ml-workflow/train/bicycle_s_002222.png\n",
+ "upload: train/bicycle_s_002153.png to s3://udacity-ml-workflow/train/bicycle_s_002153.png\n",
+ "upload: train/bicycle_s_002258.png to s3://udacity-ml-workflow/train/bicycle_s_002258.png\n",
+ "upload: train/bicycle_s_002247.png to s3://udacity-ml-workflow/train/bicycle_s_002247.png\n",
+ "upload: train/bicycle_s_002373.png to s3://udacity-ml-workflow/train/bicycle_s_002373.png\n",
+ "upload: train/bicycle_s_002299.png to s3://udacity-ml-workflow/train/bicycle_s_002299.png\n",
+ "upload: train/bicycle_s_002338.png to s3://udacity-ml-workflow/train/bicycle_s_002338.png\n",
+ "upload: train/bicycle_s_002374.png to s3://udacity-ml-workflow/train/bicycle_s_002374.png\n",
+ "upload: train/bicycle_s_002400.png to s3://udacity-ml-workflow/train/bicycle_s_002400.png\n",
+ "upload: train/bicycle_s_002237.png to s3://udacity-ml-workflow/train/bicycle_s_002237.png\n",
+ "upload: train/bicycle_s_002436.png to s3://udacity-ml-workflow/train/bicycle_s_002436.png\n",
+ "upload: train/bicycle_s_002448.png to s3://udacity-ml-workflow/train/bicycle_s_002448.png\n",
+ "upload: train/bicycle_s_002410.png to s3://udacity-ml-workflow/train/bicycle_s_002410.png\n",
+ "upload: train/bicycle_s_002475.png to s3://udacity-ml-workflow/train/bicycle_s_002475.png\n",
+ "upload: train/bicycle_s_002550.png to s3://udacity-ml-workflow/train/bicycle_s_002550.png\n",
+ "upload: train/bicycle_s_002661.png to s3://udacity-ml-workflow/train/bicycle_s_002661.png\n",
+ "upload: train/bicycle_s_002569.png to s3://udacity-ml-workflow/train/bicycle_s_002569.png\n",
+ "upload: train/bicycle_s_002711.png to s3://udacity-ml-workflow/train/bicycle_s_002711.png\n",
+ "upload: train/bicycle_s_002669.png to s3://udacity-ml-workflow/train/bicycle_s_002669.png\n",
+ "upload: train/bicycle_s_002715.png to s3://udacity-ml-workflow/train/bicycle_s_002715.png\n",
+ "upload: train/bicycle_s_002521.png to s3://udacity-ml-workflow/train/bicycle_s_002521.png\n",
+ "upload: train/bicycle_s_002725.png to s3://udacity-ml-workflow/train/bicycle_s_002725.png\n",
+ "upload: train/bicycle_s_002624.png to s3://udacity-ml-workflow/train/bicycle_s_002624.png\n",
+ "upload: train/bicycle_s_002729.png to s3://udacity-ml-workflow/train/bicycle_s_002729.png\n",
+ "upload: train/bicycle_s_002728.png to s3://udacity-ml-workflow/train/bicycle_s_002728.png\n",
+ "upload: train/bike_s_000001.png to s3://udacity-ml-workflow/train/bike_s_000001.png \n",
+ "upload: train/bicycle_s_002759.png to s3://udacity-ml-workflow/train/bicycle_s_002759.png\n",
+ "upload: train/bike_s_000015.png to s3://udacity-ml-workflow/train/bike_s_000015.png \n",
+ "upload: train/bike_s_000021.png to s3://udacity-ml-workflow/train/bike_s_000021.png \n",
+ "upload: train/bike_s_000018.png to s3://udacity-ml-workflow/train/bike_s_000018.png \n",
+ "upload: train/bike_s_000023.png to s3://udacity-ml-workflow/train/bike_s_000023.png \n",
+ "upload: train/bike_s_000005.png to s3://udacity-ml-workflow/train/bike_s_000005.png \n",
+ "upload: train/bicycle_s_002762.png to s3://udacity-ml-workflow/train/bicycle_s_002762.png\n",
+ "upload: train/bike_s_000025.png to s3://udacity-ml-workflow/train/bike_s_000025.png \n",
+ "upload: train/bike_s_000003.png to s3://udacity-ml-workflow/train/bike_s_000003.png \n",
+ "upload: train/bike_s_000026.png to s3://udacity-ml-workflow/train/bike_s_000026.png \n",
+ "upload: train/bike_s_000034.png to s3://udacity-ml-workflow/train/bike_s_000034.png \n",
+ "upload: train/bike_s_000024.png to s3://udacity-ml-workflow/train/bike_s_000024.png \n",
+ "upload: train/bike_s_000111.png to s3://udacity-ml-workflow/train/bike_s_000111.png \n",
+ "upload: train/bike_s_000062.png to s3://udacity-ml-workflow/train/bike_s_000062.png \n",
+ "upload: train/bike_s_000121.png to s3://udacity-ml-workflow/train/bike_s_000121.png \n",
+ "upload: train/bike_s_000127.png to s3://udacity-ml-workflow/train/bike_s_000127.png \n",
+ "upload: train/bike_s_000040.png to s3://udacity-ml-workflow/train/bike_s_000040.png \n",
+ "upload: train/bike_s_000162.png to s3://udacity-ml-workflow/train/bike_s_000162.png \n",
+ "upload: train/bike_s_000051.png to s3://udacity-ml-workflow/train/bike_s_000051.png \n",
+ "upload: train/bike_s_000129.png to s3://udacity-ml-workflow/train/bike_s_000129.png \n",
+ "upload: train/bike_s_000154.png to s3://udacity-ml-workflow/train/bike_s_000154.png \n",
+ "upload: train/bike_s_000237.png to s3://udacity-ml-workflow/train/bike_s_000237.png \n",
+ "upload: train/bike_s_000204.png to s3://udacity-ml-workflow/train/bike_s_000204.png \n",
+ "upload: train/bike_s_000035.png to s3://udacity-ml-workflow/train/bike_s_000035.png \n",
+ "upload: train/bike_s_000164.png to s3://udacity-ml-workflow/train/bike_s_000164.png \n",
+ "upload: train/bike_s_000256.png to s3://udacity-ml-workflow/train/bike_s_000256.png \n",
+ "upload: train/bike_s_000304.png to s3://udacity-ml-workflow/train/bike_s_000304.png \n",
+ "upload: train/bike_s_000392.png to s3://udacity-ml-workflow/train/bike_s_000392.png \n",
+ "upload: train/bike_s_000364.png to s3://udacity-ml-workflow/train/bike_s_000364.png \n",
+ "upload: train/bike_s_000390.png to s3://udacity-ml-workflow/train/bike_s_000390.png \n",
+ "upload: train/bike_s_000302.png to s3://udacity-ml-workflow/train/bike_s_000302.png \n",
+ "upload: train/bike_s_000474.png to s3://udacity-ml-workflow/train/bike_s_000474.png \n",
+ "upload: train/bike_s_000336.png to s3://udacity-ml-workflow/train/bike_s_000336.png \n",
+ "upload: train/bike_s_000506.png to s3://udacity-ml-workflow/train/bike_s_000506.png \n",
+ "upload: train/bike_s_000516.png to s3://udacity-ml-workflow/train/bike_s_000516.png \n",
+ "upload: train/bike_s_000299.png to s3://udacity-ml-workflow/train/bike_s_000299.png \n",
+ "upload: train/bike_s_000522.png to s3://udacity-ml-workflow/train/bike_s_000522.png \n",
+ "upload: train/bike_s_000545.png to s3://udacity-ml-workflow/train/bike_s_000545.png \n",
+ "upload: train/bike_s_000544.png to s3://udacity-ml-workflow/train/bike_s_000544.png \n",
+ "upload: train/bike_s_000555.png to s3://udacity-ml-workflow/train/bike_s_000555.png \n",
+ "upload: train/bike_s_000397.png to s3://udacity-ml-workflow/train/bike_s_000397.png \n",
+ "upload: train/bike_s_000593.png to s3://udacity-ml-workflow/train/bike_s_000593.png \n",
+ "upload: train/bike_s_000657.png to s3://udacity-ml-workflow/train/bike_s_000657.png \n",
+ "upload: train/bike_s_000628.png to s3://udacity-ml-workflow/train/bike_s_000628.png \n",
+ "upload: train/bike_s_000679.png to s3://udacity-ml-workflow/train/bike_s_000679.png \n",
+ "upload: train/bike_s_000682.png to s3://udacity-ml-workflow/train/bike_s_000682.png \n",
+ "upload: train/bike_s_000855.png to s3://udacity-ml-workflow/train/bike_s_000855.png \n",
+ "upload: train/bike_s_000722.png to s3://udacity-ml-workflow/train/bike_s_000722.png \n",
+ "upload: train/bike_s_000926.png to s3://udacity-ml-workflow/train/bike_s_000926.png \n",
+ "upload: train/bike_s_000934.png to s3://udacity-ml-workflow/train/bike_s_000934.png \n",
+ "upload: train/bike_s_001027.png to s3://udacity-ml-workflow/train/bike_s_001027.png \n",
+ "upload: train/bike_s_001078.png to s3://udacity-ml-workflow/train/bike_s_001078.png \n",
+ "upload: train/bike_s_001072.png to s3://udacity-ml-workflow/train/bike_s_001072.png \n",
+ "upload: train/bike_s_001093.png to s3://udacity-ml-workflow/train/bike_s_001093.png \n",
+ "upload: train/bike_s_000990.png to s3://udacity-ml-workflow/train/bike_s_000990.png \n",
+ "upload: train/bike_s_001113.png to s3://udacity-ml-workflow/train/bike_s_001113.png \n",
+ "upload: train/bike_s_001131.png to s3://udacity-ml-workflow/train/bike_s_001131.png \n",
+ "upload: train/bike_s_001200.png to s3://udacity-ml-workflow/train/bike_s_001200.png \n",
+ "upload: train/bike_s_001226.png to s3://udacity-ml-workflow/train/bike_s_001226.png \n",
+ "upload: train/bike_s_001415.png to s3://udacity-ml-workflow/train/bike_s_001415.png \n",
+ "upload: train/bike_s_001320.png to s3://udacity-ml-workflow/train/bike_s_001320.png \n",
+ "upload: train/bike_s_001260.png to s3://udacity-ml-workflow/train/bike_s_001260.png \n",
+ "upload: train/bike_s_001418.png to s3://udacity-ml-workflow/train/bike_s_001418.png \n",
+ "upload: train/bike_s_001375.png to s3://udacity-ml-workflow/train/bike_s_001375.png \n",
+ "upload: train/bike_s_001517.png to s3://udacity-ml-workflow/train/bike_s_001517.png \n",
+ "upload: train/bike_s_001519.png to s3://udacity-ml-workflow/train/bike_s_001519.png \n",
+ "upload: train/bike_s_001592.png to s3://udacity-ml-workflow/train/bike_s_001592.png \n",
+ "upload: train/bike_s_001572.png to s3://udacity-ml-workflow/train/bike_s_001572.png \n",
+ "upload: train/bike_s_001116.png to s3://udacity-ml-workflow/train/bike_s_001116.png \n",
+ "upload: train/bike_s_001679.png to s3://udacity-ml-workflow/train/bike_s_001679.png \n",
+ "upload: train/bike_s_001683.png to s3://udacity-ml-workflow/train/bike_s_001683.png \n",
+ "upload: train/bike_s_001839.png to s3://udacity-ml-workflow/train/bike_s_001839.png \n",
+ "upload: train/bike_s_001739.png to s3://udacity-ml-workflow/train/bike_s_001739.png \n",
+ "upload: train/bike_s_001767.png to s3://udacity-ml-workflow/train/bike_s_001767.png \n",
+ "upload: train/bike_s_001380.png to s3://udacity-ml-workflow/train/bike_s_001380.png \n",
+ "upload: train/bike_s_001462.png to s3://udacity-ml-workflow/train/bike_s_001462.png \n",
+ "upload: train/bike_s_001827.png to s3://udacity-ml-workflow/train/bike_s_001827.png \n",
+ "upload: train/bike_s_001613.png to s3://udacity-ml-workflow/train/bike_s_001613.png \n",
+ "upload: train/bike_s_001761.png to s3://udacity-ml-workflow/train/bike_s_001761.png \n",
+ "upload: train/bike_s_001847.png to s3://udacity-ml-workflow/train/bike_s_001847.png \n",
+ "upload: train/bike_s_001414.png to s3://udacity-ml-workflow/train/bike_s_001414.png \n",
+ "upload: train/bike_s_001928.png to s3://udacity-ml-workflow/train/bike_s_001928.png \n",
+ "upload: train/bike_s_001876.png to s3://udacity-ml-workflow/train/bike_s_001876.png \n",
+ "upload: train/bike_s_001897.png to s3://udacity-ml-workflow/train/bike_s_001897.png \n",
+ "upload: train/bike_s_001877.png to s3://udacity-ml-workflow/train/bike_s_001877.png \n",
+ "upload: train/bike_s_001980.png to s3://udacity-ml-workflow/train/bike_s_001980.png \n",
+ "upload: train/bike_s_001945.png to s3://udacity-ml-workflow/train/bike_s_001945.png \n",
+ "upload: train/bike_s_002024.png to s3://udacity-ml-workflow/train/bike_s_002024.png \n",
+ "upload: train/bike_s_002033.png to s3://udacity-ml-workflow/train/bike_s_002033.png \n",
+ "upload: train/bike_s_002047.png to s3://udacity-ml-workflow/train/bike_s_002047.png \n",
+ "upload: train/bike_s_001915.png to s3://udacity-ml-workflow/train/bike_s_001915.png \n",
+ "upload: train/bike_s_002090.png to s3://udacity-ml-workflow/train/bike_s_002090.png \n",
+ "upload: train/bike_s_002042.png to s3://udacity-ml-workflow/train/bike_s_002042.png \n",
+ "upload: train/bike_s_002118.png to s3://udacity-ml-workflow/train/bike_s_002118.png \n",
+ "upload: train/bike_s_002098.png to s3://udacity-ml-workflow/train/bike_s_002098.png \n",
+ "upload: train/bike_s_002139.png to s3://udacity-ml-workflow/train/bike_s_002139.png \n",
+ "upload: train/bike_s_001882.png to s3://udacity-ml-workflow/train/bike_s_001882.png \n",
+ "upload: train/bike_s_002277.png to s3://udacity-ml-workflow/train/bike_s_002277.png \n",
+ "upload: train/bike_s_002164.png to s3://udacity-ml-workflow/train/bike_s_002164.png \n",
+ "upload: train/bike_s_002203.png to s3://udacity-ml-workflow/train/bike_s_002203.png \n",
+ "upload: train/bike_s_002109.png to s3://udacity-ml-workflow/train/bike_s_002109.png \n",
+ "upload: train/bike_s_002283.png to s3://udacity-ml-workflow/train/bike_s_002283.png \n",
+ "upload: train/bike_s_002288.png to s3://udacity-ml-workflow/train/bike_s_002288.png \n",
+ "upload: train/cycle_s_000042.png to s3://udacity-ml-workflow/train/cycle_s_000042.png \n",
+ "upload: train/bike_s_002292.png to s3://udacity-ml-workflow/train/bike_s_002292.png \n",
+ "upload: train/cycle_s_000492.png to s3://udacity-ml-workflow/train/cycle_s_000492.png \n",
+ "upload: train/cycle_s_000463.png to s3://udacity-ml-workflow/train/cycle_s_000463.png \n",
+ "upload: train/cycle_s_000583.png to s3://udacity-ml-workflow/train/cycle_s_000583.png \n",
+ "upload: train/cycle_s_000718.png to s3://udacity-ml-workflow/train/cycle_s_000718.png \n",
+ "upload: train/cycle_s_000639.png to s3://udacity-ml-workflow/train/cycle_s_000639.png \n",
+ "upload: train/bike_s_002215.png to s3://udacity-ml-workflow/train/bike_s_002215.png \n",
+ "upload: train/bike_s_002222.png to s3://udacity-ml-workflow/train/bike_s_002222.png \n",
+ "upload: train/cycle_s_000222.png to s3://udacity-ml-workflow/train/cycle_s_000222.png \n",
+ "upload: train/cycle_s_001286.png to s3://udacity-ml-workflow/train/cycle_s_001286.png \n",
+ "upload: train/cycle_s_000871.png to s3://udacity-ml-workflow/train/cycle_s_000871.png \n",
+ "upload: train/cycle_s_001309.png to s3://udacity-ml-workflow/train/cycle_s_001309.png \n",
+ "upload: train/cycle_s_000899.png to s3://udacity-ml-workflow/train/cycle_s_000899.png \n",
+ "upload: train/cycle_s_000318.png to s3://udacity-ml-workflow/train/cycle_s_000318.png \n",
+ "upload: train/cycle_s_000666.png to s3://udacity-ml-workflow/train/cycle_s_000666.png \n",
+ "upload: train/cycle_s_001413.png to s3://udacity-ml-workflow/train/cycle_s_001413.png \n",
+ "upload: train/cycle_s_001439.png to s3://udacity-ml-workflow/train/cycle_s_001439.png \n",
+ "upload: train/cycle_s_001412.png to s3://udacity-ml-workflow/train/cycle_s_001412.png \n",
+ "upload: train/cycle_s_001474.png to s3://udacity-ml-workflow/train/cycle_s_001474.png \n",
+ "upload: train/cycle_s_001477.png to s3://udacity-ml-workflow/train/cycle_s_001477.png \n",
+ "upload: train/cycle_s_001745.png to s3://udacity-ml-workflow/train/cycle_s_001745.png \n",
+ "upload: train/cycle_s_001374.png to s3://udacity-ml-workflow/train/cycle_s_001374.png \n",
+ "upload: train/cycle_s_001640.png to s3://udacity-ml-workflow/train/cycle_s_001640.png \n",
+ "upload: train/cycle_s_001875.png to s3://udacity-ml-workflow/train/cycle_s_001875.png \n",
+ "upload: train/cycle_s_002015.png to s3://udacity-ml-workflow/train/cycle_s_002015.png \n",
+ "upload: train/cycle_s_001472.png to s3://udacity-ml-workflow/train/cycle_s_001472.png \n",
+ "upload: train/cycle_s_001976.png to s3://udacity-ml-workflow/train/cycle_s_001976.png \n",
+ "upload: train/cycle_s_001735.png to s3://udacity-ml-workflow/train/cycle_s_001735.png \n",
+ "upload: train/cycle_s_002093.png to s3://udacity-ml-workflow/train/cycle_s_002093.png \n",
+ "upload: train/cycle_s_002092.png to s3://udacity-ml-workflow/train/cycle_s_002092.png \n",
+ "upload: train/cycle_s_002090.png to s3://udacity-ml-workflow/train/cycle_s_002090.png \n",
+ "upload: train/cycle_s_002053.png to s3://udacity-ml-workflow/train/cycle_s_002053.png \n",
+ "upload: train/cycle_s_002168.png to s3://udacity-ml-workflow/train/cycle_s_002168.png \n",
+ "upload: train/cycle_s_002399.png to s3://udacity-ml-workflow/train/cycle_s_002399.png \n",
+ "upload: train/cycle_s_002659.png to s3://udacity-ml-workflow/train/cycle_s_002659.png \n",
+ "upload: train/cycle_s_002503.png to s3://udacity-ml-workflow/train/cycle_s_002503.png \n",
+ "upload: train/cycle_s_002178.png to s3://udacity-ml-workflow/train/cycle_s_002178.png \n",
+ "upload: train/cycle_s_002651.png to s3://udacity-ml-workflow/train/cycle_s_002651.png \n",
+ "upload: train/cycle_s_002666.png to s3://udacity-ml-workflow/train/cycle_s_002666.png \n",
+ "upload: train/cycle_s_002638.png to s3://udacity-ml-workflow/train/cycle_s_002638.png \n",
+ "upload: train/cycle_s_002703.png to s3://udacity-ml-workflow/train/cycle_s_002703.png \n",
+ "upload: train/cycle_s_002904.png to s3://udacity-ml-workflow/train/cycle_s_002904.png \n",
+ "upload: train/cycle_s_002882.png to s3://udacity-ml-workflow/train/cycle_s_002882.png \n",
+ "upload: train/cycle_s_002779.png to s3://udacity-ml-workflow/train/cycle_s_002779.png \n",
+ "upload: train/cycle_s_002598.png to s3://udacity-ml-workflow/train/cycle_s_002598.png \n",
+ "upload: train/cycle_s_002746.png to s3://udacity-ml-workflow/train/cycle_s_002746.png \n",
+ "upload: train/cycle_s_002978.png to s3://udacity-ml-workflow/train/cycle_s_002978.png \n",
+ "upload: train/cycle_s_002844.png to s3://udacity-ml-workflow/train/cycle_s_002844.png \n",
+ "upload: train/cycle_s_003008.png to s3://udacity-ml-workflow/train/cycle_s_003008.png \n",
+ "upload: train/cycle_s_003006.png to s3://udacity-ml-workflow/train/cycle_s_003006.png \n",
+ "upload: train/cycle_s_003026.png to s3://udacity-ml-workflow/train/cycle_s_003026.png \n",
+ "upload: train/cycle_s_003147.png to s3://udacity-ml-workflow/train/cycle_s_003147.png \n",
+ "upload: train/cycle_s_003043.png to s3://udacity-ml-workflow/train/cycle_s_003043.png \n",
+ "upload: train/cycle_s_003162.png to s3://udacity-ml-workflow/train/cycle_s_003162.png \n",
+ "upload: train/dirt_bike_s_000003.png to s3://udacity-ml-workflow/train/dirt_bike_s_000003.png\n",
+ "upload: train/cycle_s_003148.png to s3://udacity-ml-workflow/train/cycle_s_003148.png \n",
+ "upload: train/dirt_bike_s_000005.png to s3://udacity-ml-workflow/train/dirt_bike_s_000005.png\n",
+ "upload: train/cycle_s_003122.png to s3://udacity-ml-workflow/train/cycle_s_003122.png \n",
+ "upload: train/dirt_bike_s_000030.png to s3://udacity-ml-workflow/train/dirt_bike_s_000030.png\n",
+ "upload: train/dirt_bike_s_000059.png to s3://udacity-ml-workflow/train/dirt_bike_s_000059.png\n",
+ "upload: train/dirt_bike_s_000119.png to s3://udacity-ml-workflow/train/dirt_bike_s_000119.png\n",
+ "upload: train/dirt_bike_s_000134.png to s3://udacity-ml-workflow/train/dirt_bike_s_000134.png\n",
+ "upload: train/dirt_bike_s_000124.png to s3://udacity-ml-workflow/train/dirt_bike_s_000124.png\n",
+ "upload: train/minibike_s_000010.png to s3://udacity-ml-workflow/train/minibike_s_000010.png\n",
+ "upload: train/dirt_bike_s_000017.png to s3://udacity-ml-workflow/train/dirt_bike_s_000017.png\n",
+ "upload: train/minibike_s_000035.png to s3://udacity-ml-workflow/train/minibike_s_000035.png\n",
+ "upload: train/minibike_s_000011.png to s3://udacity-ml-workflow/train/minibike_s_000011.png\n",
+ "upload: train/minibike_s_000099.png to s3://udacity-ml-workflow/train/minibike_s_000099.png\n",
+ "upload: train/minibike_s_000064.png to s3://udacity-ml-workflow/train/minibike_s_000064.png\n",
+ "upload: train/minibike_s_000108.png to s3://udacity-ml-workflow/train/minibike_s_000108.png\n",
+ "upload: train/minibike_s_000022.png to s3://udacity-ml-workflow/train/minibike_s_000022.png\n",
+ "upload: train/minibike_s_000110.png to s3://udacity-ml-workflow/train/minibike_s_000110.png\n",
+ "upload: train/minibike_s_000102.png to s3://udacity-ml-workflow/train/minibike_s_000102.png\n",
+ "upload: train/minibike_s_000116.png to s3://udacity-ml-workflow/train/minibike_s_000116.png\n",
+ "upload: train/minibike_s_000036.png to s3://udacity-ml-workflow/train/minibike_s_000036.png\n",
+ "upload: train/minibike_s_000117.png to s3://udacity-ml-workflow/train/minibike_s_000117.png\n",
+ "upload: train/minibike_s_000020.png to s3://udacity-ml-workflow/train/minibike_s_000020.png\n",
+ "upload: train/minibike_s_000127.png to s3://udacity-ml-workflow/train/minibike_s_000127.png\n",
+ "upload: train/minibike_s_000130.png to s3://udacity-ml-workflow/train/minibike_s_000130.png\n",
+ "upload: train/minibike_s_000165.png to s3://udacity-ml-workflow/train/minibike_s_000165.png\n",
+ "upload: train/minibike_s_000149.png to s3://udacity-ml-workflow/train/minibike_s_000149.png\n",
+ "upload: train/minibike_s_000146.png to s3://udacity-ml-workflow/train/minibike_s_000146.png\n",
+ "upload: train/minibike_s_000203.png to s3://udacity-ml-workflow/train/minibike_s_000203.png\n",
+ "upload: train/minibike_s_000218.png to s3://udacity-ml-workflow/train/minibike_s_000218.png\n",
+ "upload: train/minibike_s_000293.png to s3://udacity-ml-workflow/train/minibike_s_000293.png\n",
+ "upload: train/minibike_s_000244.png to s3://udacity-ml-workflow/train/minibike_s_000244.png\n",
+ "upload: train/minibike_s_000314.png to s3://udacity-ml-workflow/train/minibike_s_000314.png\n",
+ "upload: train/minibike_s_000121.png to s3://udacity-ml-workflow/train/minibike_s_000121.png\n",
+ "upload: train/minibike_s_000324.png to s3://udacity-ml-workflow/train/minibike_s_000324.png\n",
+ "upload: train/minibike_s_000335.png to s3://udacity-ml-workflow/train/minibike_s_000335.png\n",
+ "upload: train/minibike_s_000350.png to s3://udacity-ml-workflow/train/minibike_s_000350.png\n",
+ "upload: train/minibike_s_000362.png to s3://udacity-ml-workflow/train/minibike_s_000362.png\n",
+ "upload: train/minibike_s_000402.png to s3://udacity-ml-workflow/train/minibike_s_000402.png\n",
+ "upload: train/minibike_s_000392.png to s3://udacity-ml-workflow/train/minibike_s_000392.png\n",
+ "upload: train/minibike_s_000427.png to s3://udacity-ml-workflow/train/minibike_s_000427.png\n",
+ "upload: train/minibike_s_000401.png to s3://udacity-ml-workflow/train/minibike_s_000401.png\n",
+ "upload: train/minibike_s_000429.png to s3://udacity-ml-workflow/train/minibike_s_000429.png\n",
+ "upload: train/minibike_s_000435.png to s3://udacity-ml-workflow/train/minibike_s_000435.png\n",
+ "upload: train/minibike_s_000408.png to s3://udacity-ml-workflow/train/minibike_s_000408.png\n",
+ "upload: train/minibike_s_000451.png to s3://udacity-ml-workflow/train/minibike_s_000451.png\n",
+ "upload: train/minibike_s_000459.png to s3://udacity-ml-workflow/train/minibike_s_000459.png\n",
+ "upload: train/minibike_s_000485.png to s3://udacity-ml-workflow/train/minibike_s_000485.png\n",
+ "upload: train/minibike_s_000507.png to s3://udacity-ml-workflow/train/minibike_s_000507.png\n",
+ "upload: train/minibike_s_000491.png to s3://udacity-ml-workflow/train/minibike_s_000491.png\n",
+ "upload: train/minibike_s_000434.png to s3://udacity-ml-workflow/train/minibike_s_000434.png\n",
+ "upload: train/minibike_s_000498.png to s3://udacity-ml-workflow/train/minibike_s_000498.png\n",
+ "upload: train/minibike_s_000409.png to s3://udacity-ml-workflow/train/minibike_s_000409.png\n",
+ "upload: train/minibike_s_000518.png to s3://udacity-ml-workflow/train/minibike_s_000518.png\n",
+ "upload: train/minibike_s_000340.png to s3://udacity-ml-workflow/train/minibike_s_000340.png\n",
+ "upload: train/minibike_s_000520.png to s3://udacity-ml-workflow/train/minibike_s_000520.png\n",
+ "upload: train/minibike_s_000511.png to s3://udacity-ml-workflow/train/minibike_s_000511.png\n",
+ "upload: train/minibike_s_000519.png to s3://udacity-ml-workflow/train/minibike_s_000519.png\n",
+ "upload: train/minibike_s_000565.png to s3://udacity-ml-workflow/train/minibike_s_000565.png\n",
+ "upload: train/minibike_s_000526.png to s3://udacity-ml-workflow/train/minibike_s_000526.png\n",
+ "upload: train/minibike_s_000567.png to s3://udacity-ml-workflow/train/minibike_s_000567.png\n",
+ "upload: train/minibike_s_000522.png to s3://udacity-ml-workflow/train/minibike_s_000522.png\n",
+ "upload: train/minibike_s_000569.png to s3://udacity-ml-workflow/train/minibike_s_000569.png\n",
+ "upload: train/minibike_s_000527.png to s3://udacity-ml-workflow/train/minibike_s_000527.png\n",
+ "upload: train/minibike_s_000568.png to s3://udacity-ml-workflow/train/minibike_s_000568.png\n",
+ "upload: train/minibike_s_000571.png to s3://udacity-ml-workflow/train/minibike_s_000571.png\n",
+ "upload: train/minibike_s_000570.png to s3://udacity-ml-workflow/train/minibike_s_000570.png\n",
+ "upload: train/minibike_s_000654.png to s3://udacity-ml-workflow/train/minibike_s_000654.png\n",
+ "upload: train/minibike_s_000566.png to s3://udacity-ml-workflow/train/minibike_s_000566.png\n",
+ "upload: train/minibike_s_000690.png to s3://udacity-ml-workflow/train/minibike_s_000690.png\n",
+ "upload: train/minibike_s_000652.png to s3://udacity-ml-workflow/train/minibike_s_000652.png\n",
+ "upload: train/minibike_s_000613.png to s3://udacity-ml-workflow/train/minibike_s_000613.png\n",
+ "upload: train/minibike_s_000738.png to s3://udacity-ml-workflow/train/minibike_s_000738.png\n",
+ "upload: train/minibike_s_000698.png to s3://udacity-ml-workflow/train/minibike_s_000698.png\n",
+ "upload: train/minibike_s_000709.png to s3://udacity-ml-workflow/train/minibike_s_000709.png\n",
+ "upload: train/minibike_s_000701.png to s3://udacity-ml-workflow/train/minibike_s_000701.png\n",
+ "upload: train/minibike_s_000802.png to s3://udacity-ml-workflow/train/minibike_s_000802.png\n",
+ "upload: train/minibike_s_000741.png to s3://udacity-ml-workflow/train/minibike_s_000741.png\n",
+ "upload: train/minibike_s_000800.png to s3://udacity-ml-workflow/train/minibike_s_000800.png\n",
+ "upload: train/minibike_s_000743.png to s3://udacity-ml-workflow/train/minibike_s_000743.png\n",
+ "upload: train/minibike_s_000830.png to s3://udacity-ml-workflow/train/minibike_s_000830.png\n",
+ "upload: train/minibike_s_000824.png to s3://udacity-ml-workflow/train/minibike_s_000824.png\n",
+ "upload: train/minibike_s_000906.png to s3://udacity-ml-workflow/train/minibike_s_000906.png\n",
+ "upload: train/minibike_s_000886.png to s3://udacity-ml-workflow/train/minibike_s_000886.png\n",
+ "upload: train/minibike_s_000820.png to s3://udacity-ml-workflow/train/minibike_s_000820.png\n",
+ "upload: train/minibike_s_000813.png to s3://udacity-ml-workflow/train/minibike_s_000813.png\n",
+ "upload: train/minibike_s_000855.png to s3://udacity-ml-workflow/train/minibike_s_000855.png\n",
+ "upload: train/minibike_s_000885.png to s3://udacity-ml-workflow/train/minibike_s_000885.png\n",
+ "upload: train/minibike_s_000914.png to s3://udacity-ml-workflow/train/minibike_s_000914.png\n",
+ "upload: train/minibike_s_000831.png to s3://udacity-ml-workflow/train/minibike_s_000831.png\n",
+ "upload: train/minibike_s_000967.png to s3://udacity-ml-workflow/train/minibike_s_000967.png\n",
+ "upload: train/minibike_s_001016.png to s3://udacity-ml-workflow/train/minibike_s_001016.png\n",
+ "upload: train/minibike_s_001017.png to s3://udacity-ml-workflow/train/minibike_s_001017.png\n",
+ "upload: train/minibike_s_001072.png to s3://udacity-ml-workflow/train/minibike_s_001072.png\n",
+ "upload: train/minibike_s_001157.png to s3://udacity-ml-workflow/train/minibike_s_001157.png\n",
+ "upload: train/minibike_s_001094.png to s3://udacity-ml-workflow/train/minibike_s_001094.png\n",
+ "upload: train/minibike_s_001168.png to s3://udacity-ml-workflow/train/minibike_s_001168.png\n",
+ "upload: train/minibike_s_001177.png to s3://udacity-ml-workflow/train/minibike_s_001177.png\n",
+ "upload: train/minibike_s_000968.png to s3://udacity-ml-workflow/train/minibike_s_000968.png\n",
+ "upload: train/minibike_s_001169.png to s3://udacity-ml-workflow/train/minibike_s_001169.png\n",
+ "upload: train/minibike_s_001179.png to s3://udacity-ml-workflow/train/minibike_s_001179.png\n",
+ "upload: train/minibike_s_001191.png to s3://udacity-ml-workflow/train/minibike_s_001191.png\n",
+ "upload: train/minibike_s_001193.png to s3://udacity-ml-workflow/train/minibike_s_001193.png\n",
+ "upload: train/minibike_s_001250.png to s3://udacity-ml-workflow/train/minibike_s_001250.png\n",
+ "upload: train/minibike_s_001261.png to s3://udacity-ml-workflow/train/minibike_s_001261.png\n",
+ "upload: train/minibike_s_001185.png to s3://udacity-ml-workflow/train/minibike_s_001185.png\n",
+ "upload: train/minibike_s_001249.png to s3://udacity-ml-workflow/train/minibike_s_001249.png\n",
+ "upload: train/minibike_s_001079.png to s3://udacity-ml-workflow/train/minibike_s_001079.png\n",
+ "upload: train/minibike_s_001279.png to s3://udacity-ml-workflow/train/minibike_s_001279.png\n",
+ "upload: train/minibike_s_001270.png to s3://udacity-ml-workflow/train/minibike_s_001270.png\n",
+ "upload: train/minibike_s_001348.png to s3://udacity-ml-workflow/train/minibike_s_001348.png\n",
+ "upload: train/minibike_s_001345.png to s3://udacity-ml-workflow/train/minibike_s_001345.png\n",
+ "upload: train/minibike_s_001344.png to s3://udacity-ml-workflow/train/minibike_s_001344.png\n",
+ "upload: train/minibike_s_001366.png to s3://udacity-ml-workflow/train/minibike_s_001366.png\n",
+ "upload: train/minibike_s_001294.png to s3://udacity-ml-workflow/train/minibike_s_001294.png\n",
+ "upload: train/minibike_s_001458.png to s3://udacity-ml-workflow/train/minibike_s_001458.png\n",
+ "upload: train/minibike_s_001450.png to s3://udacity-ml-workflow/train/minibike_s_001450.png\n",
+ "upload: train/minibike_s_001275.png to s3://udacity-ml-workflow/train/minibike_s_001275.png\n",
+ "upload: train/minibike_s_001506.png to s3://udacity-ml-workflow/train/minibike_s_001506.png\n",
+ "upload: train/minibike_s_001496.png to s3://udacity-ml-workflow/train/minibike_s_001496.png\n",
+ "upload: train/minibike_s_001491.png to s3://udacity-ml-workflow/train/minibike_s_001491.png\n",
+ "upload: train/minibike_s_001511.png to s3://udacity-ml-workflow/train/minibike_s_001511.png\n",
+ "upload: train/minibike_s_001512.png to s3://udacity-ml-workflow/train/minibike_s_001512.png\n",
+ "upload: train/minibike_s_001498.png to s3://udacity-ml-workflow/train/minibike_s_001498.png\n",
+ "upload: train/minibike_s_001479.png to s3://udacity-ml-workflow/train/minibike_s_001479.png\n",
+ "upload: train/minibike_s_001539.png to s3://udacity-ml-workflow/train/minibike_s_001539.png\n",
+ "upload: train/minibike_s_001558.png to s3://udacity-ml-workflow/train/minibike_s_001558.png\n",
+ "upload: train/minibike_s_001540.png to s3://udacity-ml-workflow/train/minibike_s_001540.png\n",
+ "upload: train/minibike_s_001546.png to s3://udacity-ml-workflow/train/minibike_s_001546.png\n",
+ "upload: train/minibike_s_001565.png to s3://udacity-ml-workflow/train/minibike_s_001565.png\n",
+ "upload: train/minibike_s_001597.png to s3://udacity-ml-workflow/train/minibike_s_001597.png\n",
+ "upload: train/minibike_s_001573.png to s3://udacity-ml-workflow/train/minibike_s_001573.png\n",
+ "upload: train/minibike_s_001417.png to s3://udacity-ml-workflow/train/minibike_s_001417.png\n",
+ "upload: train/minibike_s_001575.png to s3://udacity-ml-workflow/train/minibike_s_001575.png\n",
+ "upload: train/minibike_s_001638.png to s3://udacity-ml-workflow/train/minibike_s_001638.png\n",
+ "upload: train/minibike_s_001639.png to s3://udacity-ml-workflow/train/minibike_s_001639.png\n",
+ "upload: train/minibike_s_001631.png to s3://udacity-ml-workflow/train/minibike_s_001631.png\n",
+ "upload: train/minibike_s_001653.png to s3://udacity-ml-workflow/train/minibike_s_001653.png\n",
+ "upload: train/minibike_s_001689.png to s3://udacity-ml-workflow/train/minibike_s_001689.png\n",
+ "upload: train/minibike_s_001734.png to s3://udacity-ml-workflow/train/minibike_s_001734.png\n",
+ "upload: train/minibike_s_001701.png to s3://udacity-ml-workflow/train/minibike_s_001701.png\n",
+ "upload: train/minibike_s_001747.png to s3://udacity-ml-workflow/train/minibike_s_001747.png\n",
+ "upload: train/minibike_s_001731.png to s3://udacity-ml-workflow/train/minibike_s_001731.png\n",
+ "upload: train/minibike_s_001771.png to s3://udacity-ml-workflow/train/minibike_s_001771.png\n",
+ "upload: train/minibike_s_001767.png to s3://udacity-ml-workflow/train/minibike_s_001767.png\n",
+ "upload: train/minibike_s_001789.png to s3://udacity-ml-workflow/train/minibike_s_001789.png\n",
+ "upload: train/minibike_s_001691.png to s3://udacity-ml-workflow/train/minibike_s_001691.png\n",
+ "upload: train/minibike_s_001829.png to s3://udacity-ml-workflow/train/minibike_s_001829.png\n",
+ "upload: train/minibike_s_001827.png to s3://udacity-ml-workflow/train/minibike_s_001827.png\n",
+ "upload: train/minibike_s_001838.png to s3://udacity-ml-workflow/train/minibike_s_001838.png\n",
+ "upload: train/minibike_s_001863.png to s3://udacity-ml-workflow/train/minibike_s_001863.png\n",
+ "upload: train/minibike_s_001870.png to s3://udacity-ml-workflow/train/minibike_s_001870.png\n",
+ "upload: train/minibike_s_001865.png to s3://udacity-ml-workflow/train/minibike_s_001865.png\n",
+ "upload: train/minibike_s_001873.png to s3://udacity-ml-workflow/train/minibike_s_001873.png\n",
+ "upload: train/minibike_s_001836.png to s3://udacity-ml-workflow/train/minibike_s_001836.png\n",
+ "upload: train/minibike_s_001885.png to s3://udacity-ml-workflow/train/minibike_s_001885.png\n",
+ "upload: train/minibike_s_001881.png to s3://udacity-ml-workflow/train/minibike_s_001881.png\n",
+ "upload: train/minibike_s_001921.png to s3://udacity-ml-workflow/train/minibike_s_001921.png\n",
+ "upload: train/minibike_s_001880.png to s3://udacity-ml-workflow/train/minibike_s_001880.png\n",
+ "upload: train/minibike_s_001944.png to s3://udacity-ml-workflow/train/minibike_s_001944.png\n",
+ "upload: train/minibike_s_001969.png to s3://udacity-ml-workflow/train/minibike_s_001969.png\n",
+ "upload: train/minibike_s_001996.png to s3://udacity-ml-workflow/train/minibike_s_001996.png\n",
+ "upload: train/minibike_s_001917.png to s3://udacity-ml-workflow/train/minibike_s_001917.png\n",
+ "upload: train/minibike_s_002038.png to s3://udacity-ml-workflow/train/minibike_s_002038.png\n",
+ "upload: train/minibike_s_002030.png to s3://udacity-ml-workflow/train/minibike_s_002030.png\n",
+ "upload: train/minibike_s_002046.png to s3://udacity-ml-workflow/train/minibike_s_002046.png\n",
+ "upload: train/minibike_s_002009.png to s3://udacity-ml-workflow/train/minibike_s_002009.png\n",
+ "upload: train/minibike_s_002115.png to s3://udacity-ml-workflow/train/minibike_s_002115.png\n",
+ "upload: train/minibike_s_002124.png to s3://udacity-ml-workflow/train/minibike_s_002124.png\n",
+ "upload: train/minibike_s_002130.png to s3://udacity-ml-workflow/train/minibike_s_002130.png\n",
+ "upload: train/minibike_s_001972.png to s3://udacity-ml-workflow/train/minibike_s_001972.png\n",
+ "upload: train/minibike_s_002146.png to s3://udacity-ml-workflow/train/minibike_s_002146.png\n",
+ "upload: train/minibike_s_002163.png to s3://udacity-ml-workflow/train/minibike_s_002163.png\n",
+ "upload: train/minibike_s_002084.png to s3://udacity-ml-workflow/train/minibike_s_002084.png\n",
+ "upload: train/minibike_s_002137.png to s3://udacity-ml-workflow/train/minibike_s_002137.png\n",
+ "upload: train/minibike_s_002176.png to s3://udacity-ml-workflow/train/minibike_s_002176.png\n",
+ "upload: train/minibike_s_002182.png to s3://udacity-ml-workflow/train/minibike_s_002182.png\n",
+ "upload: train/minibike_s_002194.png to s3://udacity-ml-workflow/train/minibike_s_002194.png\n",
+ "upload: train/minibike_s_002196.png to s3://udacity-ml-workflow/train/minibike_s_002196.png\n",
+ "upload: train/minibike_s_002048.png to s3://udacity-ml-workflow/train/minibike_s_002048.png\n",
+ "upload: train/minibike_s_002198.png to s3://udacity-ml-workflow/train/minibike_s_002198.png\n",
+ "upload: train/minibike_s_002218.png to s3://udacity-ml-workflow/train/minibike_s_002218.png\n",
+ "upload: train/moped_s_000030.png to s3://udacity-ml-workflow/train/moped_s_000030.png\n",
+ "upload: train/moped_s_000004.png to s3://udacity-ml-workflow/train/moped_s_000004.png\n",
+ "upload: train/moped_s_000034.png to s3://udacity-ml-workflow/train/moped_s_000034.png\n",
+ "upload: train/minibike_s_002186.png to s3://udacity-ml-workflow/train/minibike_s_002186.png\n",
+ "upload: train/moped_s_000021.png to s3://udacity-ml-workflow/train/moped_s_000021.png\n",
+ "upload: train/moped_s_000071.png to s3://udacity-ml-workflow/train/moped_s_000071.png\n",
+ "upload: train/moped_s_000035.png to s3://udacity-ml-workflow/train/moped_s_000035.png\n",
+ "upload: train/moped_s_000009.png to s3://udacity-ml-workflow/train/moped_s_000009.png\n",
+ "upload: train/moped_s_000044.png to s3://udacity-ml-workflow/train/moped_s_000044.png\n",
+ "upload: train/moped_s_000124.png to s3://udacity-ml-workflow/train/moped_s_000124.png\n",
+ "upload: train/moped_s_000065.png to s3://udacity-ml-workflow/train/moped_s_000065.png\n",
+ "upload: train/moped_s_000169.png to s3://udacity-ml-workflow/train/moped_s_000169.png\n",
+ "upload: train/moped_s_000119.png to s3://udacity-ml-workflow/train/moped_s_000119.png\n",
+ "upload: train/moped_s_000236.png to s3://udacity-ml-workflow/train/moped_s_000236.png\n",
+ "upload: train/moped_s_000168.png to s3://udacity-ml-workflow/train/moped_s_000168.png\n",
+ "upload: train/moped_s_000237.png to s3://udacity-ml-workflow/train/moped_s_000237.png\n",
+ "upload: train/motorbike_s_000009.png to s3://udacity-ml-workflow/train/motorbike_s_000009.png\n",
+ "upload: train/motorbike_s_000021.png to s3://udacity-ml-workflow/train/motorbike_s_000021.png\n",
+ "upload: train/motorbike_s_000035.png to s3://udacity-ml-workflow/train/motorbike_s_000035.png\n",
+ "upload: train/motorbike_s_000022.png to s3://udacity-ml-workflow/train/motorbike_s_000022.png\n",
+ "upload: train/moped_s_000135.png to s3://udacity-ml-workflow/train/moped_s_000135.png\n",
+ "upload: train/motorbike_s_000106.png to s3://udacity-ml-workflow/train/motorbike_s_000106.png\n",
+ "upload: train/motorbike_s_000041.png to s3://udacity-ml-workflow/train/motorbike_s_000041.png\n",
+ "upload: train/motorbike_s_000115.png to s3://udacity-ml-workflow/train/motorbike_s_000115.png\n",
+ "upload: train/motorbike_s_000058.png to s3://udacity-ml-workflow/train/motorbike_s_000058.png\n",
+ "upload: train/motorbike_s_000060.png to s3://udacity-ml-workflow/train/motorbike_s_000060.png\n",
+ "upload: train/motorbike_s_000068.png to s3://udacity-ml-workflow/train/motorbike_s_000068.png\n",
+ "upload: train/motorbike_s_000117.png to s3://udacity-ml-workflow/train/motorbike_s_000117.png\n",
+ "upload: train/motorbike_s_000124.png to s3://udacity-ml-workflow/train/motorbike_s_000124.png\n",
+ "upload: train/motorbike_s_000134.png to s3://udacity-ml-workflow/train/motorbike_s_000134.png\n",
+ "upload: train/motorbike_s_000223.png to s3://udacity-ml-workflow/train/motorbike_s_000223.png\n",
+ "upload: train/motorbike_s_000119.png to s3://udacity-ml-workflow/train/motorbike_s_000119.png\n",
+ "upload: train/motorbike_s_000225.png to s3://udacity-ml-workflow/train/motorbike_s_000225.png\n",
+ "upload: train/motorbike_s_000221.png to s3://udacity-ml-workflow/train/motorbike_s_000221.png\n",
+ "upload: train/motorbike_s_000141.png to s3://udacity-ml-workflow/train/motorbike_s_000141.png\n",
+ "upload: train/motorbike_s_000308.png to s3://udacity-ml-workflow/train/motorbike_s_000308.png\n",
+ "upload: train/motorbike_s_000254.png to s3://udacity-ml-workflow/train/motorbike_s_000254.png\n",
+ "upload: train/motorbike_s_000346.png to s3://udacity-ml-workflow/train/motorbike_s_000346.png\n",
+ "upload: train/motorbike_s_000331.png to s3://udacity-ml-workflow/train/motorbike_s_000331.png\n",
+ "upload: train/motorbike_s_000062.png to s3://udacity-ml-workflow/train/motorbike_s_000062.png\n",
+ "upload: train/motorbike_s_000172.png to s3://udacity-ml-workflow/train/motorbike_s_000172.png\n",
+ "upload: train/motorbike_s_000449.png to s3://udacity-ml-workflow/train/motorbike_s_000449.png\n",
+ "upload: train/motorbike_s_000463.png to s3://udacity-ml-workflow/train/motorbike_s_000463.png\n",
+ "upload: train/motorbike_s_000501.png to s3://udacity-ml-workflow/train/motorbike_s_000501.png\n",
+ "upload: train/motorbike_s_000541.png to s3://udacity-ml-workflow/train/motorbike_s_000541.png\n",
+ "upload: train/motorbike_s_000362.png to s3://udacity-ml-workflow/train/motorbike_s_000362.png\n",
+ "upload: train/motorbike_s_000578.png to s3://udacity-ml-workflow/train/motorbike_s_000578.png\n",
+ "upload: train/motorcycle_s_000001.png to s3://udacity-ml-workflow/train/motorcycle_s_000001.png\n",
+ "upload: train/motorbike_s_000427.png to s3://udacity-ml-workflow/train/motorbike_s_000427.png\n",
+ "upload: train/motorbike_s_000361.png to s3://udacity-ml-workflow/train/motorbike_s_000361.png\n",
+ "upload: train/motorbike_s_000534.png to s3://udacity-ml-workflow/train/motorbike_s_000534.png\n",
+ "upload: train/motorcycle_s_000004.png to s3://udacity-ml-workflow/train/motorcycle_s_000004.png\n",
+ "upload: train/motorcycle_s_000002.png to s3://udacity-ml-workflow/train/motorcycle_s_000002.png\n",
+ "upload: train/motorcycle_s_000009.png to s3://udacity-ml-workflow/train/motorcycle_s_000009.png\n",
+ "upload: train/motorcycle_s_000026.png to s3://udacity-ml-workflow/train/motorcycle_s_000026.png\n",
+ "upload: train/motorcycle_s_000025.png to s3://udacity-ml-workflow/train/motorcycle_s_000025.png\n",
+ "upload: train/motorcycle_s_000022.png to s3://udacity-ml-workflow/train/motorcycle_s_000022.png\n",
+ "upload: train/motorcycle_s_000003.png to s3://udacity-ml-workflow/train/motorcycle_s_000003.png\n",
+ "upload: train/motorcycle_s_000032.png to s3://udacity-ml-workflow/train/motorcycle_s_000032.png\n",
+ "upload: train/motorcycle_s_000029.png to s3://udacity-ml-workflow/train/motorcycle_s_000029.png\n",
+ "upload: train/motorcycle_s_000027.png to s3://udacity-ml-workflow/train/motorcycle_s_000027.png\n",
+ "upload: train/motorcycle_s_000070.png to s3://udacity-ml-workflow/train/motorcycle_s_000070.png\n",
+ "upload: train/motorcycle_s_000072.png to s3://udacity-ml-workflow/train/motorcycle_s_000072.png\n",
+ "upload: train/motorcycle_s_000076.png to s3://udacity-ml-workflow/train/motorcycle_s_000076.png\n",
+ "upload: train/motorcycle_s_000127.png to s3://udacity-ml-workflow/train/motorcycle_s_000127.png\n",
+ "upload: train/motorcycle_s_000120.png to s3://udacity-ml-workflow/train/motorcycle_s_000120.png\n",
+ "upload: train/motorcycle_s_000050.png to s3://udacity-ml-workflow/train/motorcycle_s_000050.png\n",
+ "upload: train/motorcycle_s_000126.png to s3://udacity-ml-workflow/train/motorcycle_s_000126.png\n",
+ "upload: train/motorcycle_s_000133.png to s3://udacity-ml-workflow/train/motorcycle_s_000133.png\n",
+ "upload: train/motorcycle_s_000151.png to s3://udacity-ml-workflow/train/motorcycle_s_000151.png\n",
+ "upload: train/motorcycle_s_000154.png to s3://udacity-ml-workflow/train/motorcycle_s_000154.png\n",
+ "upload: train/motorcycle_s_000146.png to s3://udacity-ml-workflow/train/motorcycle_s_000146.png\n",
+ "upload: train/motorcycle_s_000169.png to s3://udacity-ml-workflow/train/motorcycle_s_000169.png\n",
+ "upload: train/motorcycle_s_000136.png to s3://udacity-ml-workflow/train/motorcycle_s_000136.png\n",
+ "upload: train/motorcycle_s_000074.png to s3://udacity-ml-workflow/train/motorcycle_s_000074.png\n",
+ "upload: train/motorcycle_s_000207.png to s3://udacity-ml-workflow/train/motorcycle_s_000207.png\n",
+ "upload: train/motorcycle_s_000217.png to s3://udacity-ml-workflow/train/motorcycle_s_000217.png\n",
+ "upload: train/motorcycle_s_000220.png to s3://udacity-ml-workflow/train/motorcycle_s_000220.png\n",
+ "upload: train/motorcycle_s_000221.png to s3://udacity-ml-workflow/train/motorcycle_s_000221.png\n",
+ "upload: train/motorcycle_s_000216.png to s3://udacity-ml-workflow/train/motorcycle_s_000216.png\n",
+ "upload: train/motorcycle_s_000144.png to s3://udacity-ml-workflow/train/motorcycle_s_000144.png\n",
+ "upload: train/motorcycle_s_000223.png to s3://udacity-ml-workflow/train/motorcycle_s_000223.png\n",
+ "upload: train/motorcycle_s_000167.png to s3://udacity-ml-workflow/train/motorcycle_s_000167.png\n",
+ "upload: train/motorcycle_s_000170.png to s3://udacity-ml-workflow/train/motorcycle_s_000170.png\n",
+ "upload: train/motorcycle_s_000245.png to s3://udacity-ml-workflow/train/motorcycle_s_000245.png\n",
+ "upload: train/motorcycle_s_000246.png to s3://udacity-ml-workflow/train/motorcycle_s_000246.png\n",
+ "upload: train/motorcycle_s_000252.png to s3://udacity-ml-workflow/train/motorcycle_s_000252.png\n",
+ "upload: train/motorcycle_s_000219.png to s3://udacity-ml-workflow/train/motorcycle_s_000219.png\n",
+ "upload: train/motorcycle_s_000242.png to s3://udacity-ml-workflow/train/motorcycle_s_000242.png\n",
+ "upload: train/motorcycle_s_000249.png to s3://udacity-ml-workflow/train/motorcycle_s_000249.png\n",
+ "upload: train/motorcycle_s_000256.png to s3://udacity-ml-workflow/train/motorcycle_s_000256.png\n",
+ "upload: train/motorcycle_s_000253.png to s3://udacity-ml-workflow/train/motorcycle_s_000253.png\n",
+ "upload: train/motorcycle_s_000291.png to s3://udacity-ml-workflow/train/motorcycle_s_000291.png\n",
+ "upload: train/motorcycle_s_000262.png to s3://udacity-ml-workflow/train/motorcycle_s_000262.png\n",
+ "upload: train/motorcycle_s_000290.png to s3://udacity-ml-workflow/train/motorcycle_s_000290.png\n",
+ "upload: train/motorcycle_s_000300.png to s3://udacity-ml-workflow/train/motorcycle_s_000300.png\n",
+ "upload: train/motorcycle_s_000309.png to s3://udacity-ml-workflow/train/motorcycle_s_000309.png\n",
+ "upload: train/motorcycle_s_000319.png to s3://udacity-ml-workflow/train/motorcycle_s_000319.png\n",
+ "upload: train/motorcycle_s_000284.png to s3://udacity-ml-workflow/train/motorcycle_s_000284.png\n",
+ "upload: train/motorcycle_s_000304.png to s3://udacity-ml-workflow/train/motorcycle_s_000304.png\n",
+ "upload: train/motorcycle_s_000312.png to s3://udacity-ml-workflow/train/motorcycle_s_000312.png\n",
+ "upload: train/motorcycle_s_000325.png to s3://udacity-ml-workflow/train/motorcycle_s_000325.png\n",
+ "upload: train/motorcycle_s_000277.png to s3://udacity-ml-workflow/train/motorcycle_s_000277.png\n",
+ "upload: train/motorcycle_s_000339.png to s3://udacity-ml-workflow/train/motorcycle_s_000339.png\n",
+ "upload: train/motorcycle_s_000346.png to s3://udacity-ml-workflow/train/motorcycle_s_000346.png\n",
+ "upload: train/motorcycle_s_000417.png to s3://udacity-ml-workflow/train/motorcycle_s_000417.png\n",
+ "upload: train/motorcycle_s_000353.png to s3://udacity-ml-workflow/train/motorcycle_s_000353.png\n",
+ "upload: train/motorcycle_s_000332.png to s3://udacity-ml-workflow/train/motorcycle_s_000332.png\n",
+ "upload: train/motorcycle_s_000347.png to s3://udacity-ml-workflow/train/motorcycle_s_000347.png\n",
+ "upload: train/motorcycle_s_000320.png to s3://udacity-ml-workflow/train/motorcycle_s_000320.png\n",
+ "upload: train/motorcycle_s_000418.png to s3://udacity-ml-workflow/train/motorcycle_s_000418.png\n",
+ "upload: train/motorcycle_s_000423.png to s3://udacity-ml-workflow/train/motorcycle_s_000423.png\n",
+ "upload: train/motorcycle_s_000430.png to s3://udacity-ml-workflow/train/motorcycle_s_000430.png\n",
+ "upload: train/motorcycle_s_000422.png to s3://udacity-ml-workflow/train/motorcycle_s_000422.png\n",
+ "upload: train/motorcycle_s_000407.png to s3://udacity-ml-workflow/train/motorcycle_s_000407.png\n",
+ "upload: train/motorcycle_s_000340.png to s3://udacity-ml-workflow/train/motorcycle_s_000340.png\n",
+ "upload: train/motorcycle_s_000447.png to s3://udacity-ml-workflow/train/motorcycle_s_000447.png\n",
+ "upload: train/motorcycle_s_000486.png to s3://udacity-ml-workflow/train/motorcycle_s_000486.png\n",
+ "upload: train/motorcycle_s_000440.png to s3://udacity-ml-workflow/train/motorcycle_s_000440.png\n",
+ "upload: train/motorcycle_s_000431.png to s3://udacity-ml-workflow/train/motorcycle_s_000431.png\n",
+ "upload: train/motorcycle_s_000496.png to s3://udacity-ml-workflow/train/motorcycle_s_000496.png\n",
+ "upload: train/motorcycle_s_000456.png to s3://udacity-ml-workflow/train/motorcycle_s_000456.png\n",
+ "upload: train/motorcycle_s_000517.png to s3://udacity-ml-workflow/train/motorcycle_s_000517.png\n",
+ "upload: train/motorcycle_s_000521.png to s3://udacity-ml-workflow/train/motorcycle_s_000521.png\n",
+ "upload: train/motorcycle_s_000454.png to s3://udacity-ml-workflow/train/motorcycle_s_000454.png\n",
+ "upload: train/motorcycle_s_000459.png to s3://udacity-ml-workflow/train/motorcycle_s_000459.png\n",
+ "upload: train/motorcycle_s_000451.png to s3://udacity-ml-workflow/train/motorcycle_s_000451.png\n",
+ "upload: train/motorcycle_s_000432.png to s3://udacity-ml-workflow/train/motorcycle_s_000432.png\n",
+ "upload: train/motorcycle_s_000508.png to s3://udacity-ml-workflow/train/motorcycle_s_000508.png\n",
+ "upload: train/motorcycle_s_000545.png to s3://udacity-ml-workflow/train/motorcycle_s_000545.png\n",
+ "upload: train/motorcycle_s_000542.png to s3://udacity-ml-workflow/train/motorcycle_s_000542.png\n",
+ "upload: train/motorcycle_s_000543.png to s3://udacity-ml-workflow/train/motorcycle_s_000543.png\n",
+ "upload: train/motorcycle_s_000622.png to s3://udacity-ml-workflow/train/motorcycle_s_000622.png\n",
+ "upload: train/motorcycle_s_000617.png to s3://udacity-ml-workflow/train/motorcycle_s_000617.png\n",
+ "upload: train/motorcycle_s_000585.png to s3://udacity-ml-workflow/train/motorcycle_s_000585.png\n",
+ "upload: train/motorcycle_s_000629.png to s3://udacity-ml-workflow/train/motorcycle_s_000629.png\n",
+ "upload: train/motorcycle_s_000605.png to s3://udacity-ml-workflow/train/motorcycle_s_000605.png\n",
+ "upload: train/motorcycle_s_000580.png to s3://udacity-ml-workflow/train/motorcycle_s_000580.png\n",
+ "upload: train/motorcycle_s_000594.png to s3://udacity-ml-workflow/train/motorcycle_s_000594.png\n",
+ "upload: train/motorcycle_s_000593.png to s3://udacity-ml-workflow/train/motorcycle_s_000593.png\n",
+ "upload: train/motorcycle_s_000687.png to s3://udacity-ml-workflow/train/motorcycle_s_000687.png\n",
+ "upload: train/motorcycle_s_000669.png to s3://udacity-ml-workflow/train/motorcycle_s_000669.png\n",
+ "upload: train/motorcycle_s_000686.png to s3://udacity-ml-workflow/train/motorcycle_s_000686.png\n",
+ "upload: train/motorcycle_s_000695.png to s3://udacity-ml-workflow/train/motorcycle_s_000695.png\n",
+ "upload: train/motorcycle_s_000698.png to s3://udacity-ml-workflow/train/motorcycle_s_000698.png\n",
+ "upload: train/motorcycle_s_000699.png to s3://udacity-ml-workflow/train/motorcycle_s_000699.png\n",
+ "upload: train/motorcycle_s_000696.png to s3://udacity-ml-workflow/train/motorcycle_s_000696.png\n",
+ "upload: train/motorcycle_s_000713.png to s3://udacity-ml-workflow/train/motorcycle_s_000713.png\n",
+ "upload: train/motorcycle_s_000732.png to s3://udacity-ml-workflow/train/motorcycle_s_000732.png\n",
+ "upload: train/motorcycle_s_000724.png to s3://udacity-ml-workflow/train/motorcycle_s_000724.png\n",
+ "upload: train/motorcycle_s_000734.png to s3://udacity-ml-workflow/train/motorcycle_s_000734.png\n",
+ "upload: train/motorcycle_s_000776.png to s3://udacity-ml-workflow/train/motorcycle_s_000776.png\n",
+ "upload: train/motorcycle_s_000714.png to s3://udacity-ml-workflow/train/motorcycle_s_000714.png\n",
+ "upload: train/motorcycle_s_000654.png to s3://udacity-ml-workflow/train/motorcycle_s_000654.png\n",
+ "upload: train/motorcycle_s_000741.png to s3://udacity-ml-workflow/train/motorcycle_s_000741.png\n",
+ "upload: train/motorcycle_s_000700.png to s3://udacity-ml-workflow/train/motorcycle_s_000700.png\n",
+ "upload: train/motorcycle_s_000772.png to s3://udacity-ml-workflow/train/motorcycle_s_000772.png\n",
+ "upload: train/motorcycle_s_000787.png to s3://udacity-ml-workflow/train/motorcycle_s_000787.png\n",
+ "upload: train/motorcycle_s_000790.png to s3://udacity-ml-workflow/train/motorcycle_s_000790.png\n",
+ "upload: train/motorcycle_s_000792.png to s3://udacity-ml-workflow/train/motorcycle_s_000792.png\n",
+ "upload: train/motorcycle_s_000785.png to s3://udacity-ml-workflow/train/motorcycle_s_000785.png\n",
+ "upload: train/motorcycle_s_000894.png to s3://udacity-ml-workflow/train/motorcycle_s_000894.png\n",
+ "upload: train/motorcycle_s_000834.png to s3://udacity-ml-workflow/train/motorcycle_s_000834.png\n",
+ "upload: train/motorcycle_s_000917.png to s3://udacity-ml-workflow/train/motorcycle_s_000917.png\n",
+ "upload: train/motorcycle_s_000791.png to s3://udacity-ml-workflow/train/motorcycle_s_000791.png\n",
+ "upload: train/motorcycle_s_000887.png to s3://udacity-ml-workflow/train/motorcycle_s_000887.png\n",
+ "upload: train/motorcycle_s_000796.png to s3://udacity-ml-workflow/train/motorcycle_s_000796.png\n",
+ "upload: train/motorcycle_s_000922.png to s3://udacity-ml-workflow/train/motorcycle_s_000922.png\n",
+ "upload: train/motorcycle_s_000807.png to s3://udacity-ml-workflow/train/motorcycle_s_000807.png\n",
+ "upload: train/motorcycle_s_000919.png to s3://udacity-ml-workflow/train/motorcycle_s_000919.png\n",
+ "upload: train/motorcycle_s_000938.png to s3://udacity-ml-workflow/train/motorcycle_s_000938.png\n",
+ "upload: train/motorcycle_s_000923.png to s3://udacity-ml-workflow/train/motorcycle_s_000923.png\n",
+ "upload: train/motorcycle_s_000924.png to s3://udacity-ml-workflow/train/motorcycle_s_000924.png\n",
+ "upload: train/motorcycle_s_000941.png to s3://udacity-ml-workflow/train/motorcycle_s_000941.png\n",
+ "upload: train/motorcycle_s_000933.png to s3://udacity-ml-workflow/train/motorcycle_s_000933.png\n",
+ "upload: train/motorcycle_s_000979.png to s3://udacity-ml-workflow/train/motorcycle_s_000979.png\n",
+ "upload: train/motorcycle_s_000978.png to s3://udacity-ml-workflow/train/motorcycle_s_000978.png\n",
+ "upload: train/motorcycle_s_000989.png to s3://udacity-ml-workflow/train/motorcycle_s_000989.png\n",
+ "upload: train/motorcycle_s_000925.png to s3://udacity-ml-workflow/train/motorcycle_s_000925.png\n",
+ "upload: train/motorcycle_s_001012.png to s3://udacity-ml-workflow/train/motorcycle_s_001012.png\n",
+ "upload: train/motorcycle_s_000991.png to s3://udacity-ml-workflow/train/motorcycle_s_000991.png\n",
+ "upload: train/motorcycle_s_000928.png to s3://udacity-ml-workflow/train/motorcycle_s_000928.png\n",
+ "upload: train/motorcycle_s_001016.png to s3://udacity-ml-workflow/train/motorcycle_s_001016.png\n",
+ "upload: train/motorcycle_s_001064.png to s3://udacity-ml-workflow/train/motorcycle_s_001064.png\n",
+ "upload: train/motorcycle_s_001033.png to s3://udacity-ml-workflow/train/motorcycle_s_001033.png\n",
+ "upload: train/motorcycle_s_001106.png to s3://udacity-ml-workflow/train/motorcycle_s_001106.png\n",
+ "upload: train/motorcycle_s_001118.png to s3://udacity-ml-workflow/train/motorcycle_s_001118.png\n",
+ "upload: train/motorcycle_s_001027.png to s3://udacity-ml-workflow/train/motorcycle_s_001027.png\n",
+ "upload: train/motorcycle_s_001017.png to s3://udacity-ml-workflow/train/motorcycle_s_001017.png\n",
+ "upload: train/motorcycle_s_001063.png to s3://udacity-ml-workflow/train/motorcycle_s_001063.png\n",
+ "upload: train/motorcycle_s_001119.png to s3://udacity-ml-workflow/train/motorcycle_s_001119.png\n",
+ "upload: train/motorcycle_s_001126.png to s3://udacity-ml-workflow/train/motorcycle_s_001126.png\n",
+ "upload: train/motorcycle_s_001167.png to s3://udacity-ml-workflow/train/motorcycle_s_001167.png\n",
+ "upload: train/motorcycle_s_001176.png to s3://udacity-ml-workflow/train/motorcycle_s_001176.png\n",
+ "upload: train/motorcycle_s_001197.png to s3://udacity-ml-workflow/train/motorcycle_s_001197.png\n",
+ "upload: train/motorcycle_s_001205.png to s3://udacity-ml-workflow/train/motorcycle_s_001205.png\n",
+ "upload: train/motorcycle_s_001181.png to s3://udacity-ml-workflow/train/motorcycle_s_001181.png\n",
+ "upload: train/motorcycle_s_001180.png to s3://udacity-ml-workflow/train/motorcycle_s_001180.png\n",
+ "upload: train/motorcycle_s_001196.png to s3://udacity-ml-workflow/train/motorcycle_s_001196.png\n",
+ "upload: train/motorcycle_s_001183.png to s3://udacity-ml-workflow/train/motorcycle_s_001183.png\n",
+ "upload: train/motorcycle_s_001213.png to s3://udacity-ml-workflow/train/motorcycle_s_001213.png\n",
+ "upload: train/motorcycle_s_001236.png to s3://udacity-ml-workflow/train/motorcycle_s_001236.png\n",
+ "upload: train/motorcycle_s_001237.png to s3://udacity-ml-workflow/train/motorcycle_s_001237.png\n",
+ "upload: train/motorcycle_s_001182.png to s3://udacity-ml-workflow/train/motorcycle_s_001182.png\n",
+ "upload: train/motorcycle_s_001238.png to s3://udacity-ml-workflow/train/motorcycle_s_001238.png\n",
+ "upload: train/motorcycle_s_001220.png to s3://udacity-ml-workflow/train/motorcycle_s_001220.png\n",
+ "upload: train/motorcycle_s_001209.png to s3://udacity-ml-workflow/train/motorcycle_s_001209.png\n",
+ "upload: train/motorcycle_s_001215.png to s3://udacity-ml-workflow/train/motorcycle_s_001215.png\n",
+ "upload: train/motorcycle_s_001247.png to s3://udacity-ml-workflow/train/motorcycle_s_001247.png\n",
+ "upload: train/motorcycle_s_001246.png to s3://udacity-ml-workflow/train/motorcycle_s_001246.png\n",
+ "upload: train/motorcycle_s_001263.png to s3://udacity-ml-workflow/train/motorcycle_s_001263.png\n",
+ "upload: train/motorcycle_s_001244.png to s3://udacity-ml-workflow/train/motorcycle_s_001244.png\n",
+ "upload: train/motorcycle_s_001242.png to s3://udacity-ml-workflow/train/motorcycle_s_001242.png\n",
+ "upload: train/motorcycle_s_001273.png to s3://udacity-ml-workflow/train/motorcycle_s_001273.png\n",
+ "upload: train/motorcycle_s_001287.png to s3://udacity-ml-workflow/train/motorcycle_s_001287.png\n",
+ "upload: train/motorcycle_s_001297.png to s3://udacity-ml-workflow/train/motorcycle_s_001297.png\n",
+ "upload: train/motorcycle_s_001315.png to s3://udacity-ml-workflow/train/motorcycle_s_001315.png\n",
+ "upload: train/motorcycle_s_001337.png to s3://udacity-ml-workflow/train/motorcycle_s_001337.png\n",
+ "upload: train/motorcycle_s_001326.png to s3://udacity-ml-workflow/train/motorcycle_s_001326.png\n",
+ "upload: train/motorcycle_s_001319.png to s3://udacity-ml-workflow/train/motorcycle_s_001319.png\n",
+ "upload: train/motorcycle_s_001303.png to s3://udacity-ml-workflow/train/motorcycle_s_001303.png\n",
+ "upload: train/motorcycle_s_001360.png to s3://udacity-ml-workflow/train/motorcycle_s_001360.png\n",
+ "upload: train/motorcycle_s_001368.png to s3://udacity-ml-workflow/train/motorcycle_s_001368.png\n",
+ "upload: train/motorcycle_s_001363.png to s3://udacity-ml-workflow/train/motorcycle_s_001363.png\n",
+ "upload: train/motorcycle_s_001370.png to s3://udacity-ml-workflow/train/motorcycle_s_001370.png\n",
+ "upload: train/motorcycle_s_001407.png to s3://udacity-ml-workflow/train/motorcycle_s_001407.png\n",
+ "upload: train/motorcycle_s_001409.png to s3://udacity-ml-workflow/train/motorcycle_s_001409.png\n",
+ "upload: train/motorcycle_s_001402.png to s3://udacity-ml-workflow/train/motorcycle_s_001402.png\n",
+ "upload: train/motorcycle_s_001435.png to s3://udacity-ml-workflow/train/motorcycle_s_001435.png\n",
+ "upload: train/motorcycle_s_001413.png to s3://udacity-ml-workflow/train/motorcycle_s_001413.png\n",
+ "upload: train/motorcycle_s_001384.png to s3://udacity-ml-workflow/train/motorcycle_s_001384.png\n",
+ "upload: train/motorcycle_s_001397.png to s3://udacity-ml-workflow/train/motorcycle_s_001397.png\n",
+ "upload: train/motorcycle_s_001439.png to s3://udacity-ml-workflow/train/motorcycle_s_001439.png\n",
+ "upload: train/motorcycle_s_001453.png to s3://udacity-ml-workflow/train/motorcycle_s_001453.png\n",
+ "upload: train/motorcycle_s_001400.png to s3://udacity-ml-workflow/train/motorcycle_s_001400.png\n",
+ "upload: train/motorcycle_s_001392.png to s3://udacity-ml-workflow/train/motorcycle_s_001392.png\n",
+ "upload: train/motorcycle_s_001492.png to s3://udacity-ml-workflow/train/motorcycle_s_001492.png\n",
+ "upload: train/motorcycle_s_001507.png to s3://udacity-ml-workflow/train/motorcycle_s_001507.png\n",
+ "upload: train/motorcycle_s_001520.png to s3://udacity-ml-workflow/train/motorcycle_s_001520.png\n",
+ "upload: train/motorcycle_s_001438.png to s3://udacity-ml-workflow/train/motorcycle_s_001438.png\n",
+ "upload: train/motorcycle_s_001536.png to s3://udacity-ml-workflow/train/motorcycle_s_001536.png\n",
+ "upload: train/motorcycle_s_001584.png to s3://udacity-ml-workflow/train/motorcycle_s_001584.png\n",
+ "upload: train/motorcycle_s_001549.png to s3://udacity-ml-workflow/train/motorcycle_s_001549.png\n",
+ "upload: train/motorcycle_s_001580.png to s3://udacity-ml-workflow/train/motorcycle_s_001580.png\n",
+ "upload: train/motorcycle_s_001610.png to s3://udacity-ml-workflow/train/motorcycle_s_001610.png\n",
+ "upload: train/motorcycle_s_001527.png to s3://udacity-ml-workflow/train/motorcycle_s_001527.png\n",
+ "upload: train/motorcycle_s_001563.png to s3://udacity-ml-workflow/train/motorcycle_s_001563.png\n",
+ "upload: train/motorcycle_s_001565.png to s3://udacity-ml-workflow/train/motorcycle_s_001565.png\n",
+ "upload: train/motorcycle_s_001585.png to s3://udacity-ml-workflow/train/motorcycle_s_001585.png\n",
+ "upload: train/motorcycle_s_001587.png to s3://udacity-ml-workflow/train/motorcycle_s_001587.png\n",
+ "upload: train/motorcycle_s_001623.png to s3://udacity-ml-workflow/train/motorcycle_s_001623.png\n",
+ "upload: train/motorcycle_s_001641.png to s3://udacity-ml-workflow/train/motorcycle_s_001641.png\n",
+ "upload: train/motorcycle_s_001622.png to s3://udacity-ml-workflow/train/motorcycle_s_001622.png\n",
+ "upload: train/motorcycle_s_001696.png to s3://udacity-ml-workflow/train/motorcycle_s_001696.png\n",
+ "upload: train/motorcycle_s_001695.png to s3://udacity-ml-workflow/train/motorcycle_s_001695.png\n",
+ "upload: train/motorcycle_s_001686.png to s3://udacity-ml-workflow/train/motorcycle_s_001686.png\n",
+ "upload: train/motorcycle_s_001690.png to s3://udacity-ml-workflow/train/motorcycle_s_001690.png\n",
+ "upload: train/motorcycle_s_001611.png to s3://udacity-ml-workflow/train/motorcycle_s_001611.png\n",
+ "upload: train/motorcycle_s_001706.png to s3://udacity-ml-workflow/train/motorcycle_s_001706.png\n",
+ "upload: train/motorcycle_s_001693.png to s3://udacity-ml-workflow/train/motorcycle_s_001693.png\n",
+ "upload: train/motorcycle_s_001711.png to s3://udacity-ml-workflow/train/motorcycle_s_001711.png\n",
+ "upload: train/motorcycle_s_001699.png to s3://udacity-ml-workflow/train/motorcycle_s_001699.png\n",
+ "upload: train/motorcycle_s_001709.png to s3://udacity-ml-workflow/train/motorcycle_s_001709.png\n",
+ "upload: train/motorcycle_s_001715.png to s3://udacity-ml-workflow/train/motorcycle_s_001715.png\n",
+ "upload: train/motorcycle_s_001707.png to s3://udacity-ml-workflow/train/motorcycle_s_001707.png\n",
+ "upload: train/motorcycle_s_001767.png to s3://udacity-ml-workflow/train/motorcycle_s_001767.png\n",
+ "upload: train/motorcycle_s_001714.png to s3://udacity-ml-workflow/train/motorcycle_s_001714.png\n",
+ "upload: train/motorcycle_s_001710.png to s3://udacity-ml-workflow/train/motorcycle_s_001710.png\n",
+ "upload: train/motorcycle_s_001765.png to s3://udacity-ml-workflow/train/motorcycle_s_001765.png\n",
+ "upload: train/motorcycle_s_001792.png to s3://udacity-ml-workflow/train/motorcycle_s_001792.png\n",
+ "upload: train/motorcycle_s_001778.png to s3://udacity-ml-workflow/train/motorcycle_s_001778.png\n",
+ "upload: train/motorcycle_s_001853.png to s3://udacity-ml-workflow/train/motorcycle_s_001853.png\n",
+ "upload: train/motorcycle_s_001905.png to s3://udacity-ml-workflow/train/motorcycle_s_001905.png\n",
+ "upload: train/motorcycle_s_001856.png to s3://udacity-ml-workflow/train/motorcycle_s_001856.png\n",
+ "upload: train/motorcycle_s_001790.png to s3://udacity-ml-workflow/train/motorcycle_s_001790.png\n",
+ "upload: train/motorcycle_s_001753.png to s3://udacity-ml-workflow/train/motorcycle_s_001753.png\n",
+ "upload: train/motorcycle_s_001848.png to s3://udacity-ml-workflow/train/motorcycle_s_001848.png\n",
+ "upload: train/motorcycle_s_001784.png to s3://udacity-ml-workflow/train/motorcycle_s_001784.png\n",
+ "upload: train/motorcycle_s_001920.png to s3://udacity-ml-workflow/train/motorcycle_s_001920.png\n",
+ "upload: train/motorcycle_s_001862.png to s3://udacity-ml-workflow/train/motorcycle_s_001862.png\n",
+ "upload: train/motorcycle_s_001896.png to s3://udacity-ml-workflow/train/motorcycle_s_001896.png\n",
+ "upload: train/motorcycle_s_001973.png to s3://udacity-ml-workflow/train/motorcycle_s_001973.png\n",
+ "upload: train/motorcycle_s_001878.png to s3://udacity-ml-workflow/train/motorcycle_s_001878.png\n",
+ "upload: train/motorcycle_s_002065.png to s3://udacity-ml-workflow/train/motorcycle_s_002065.png\n",
+ "upload: train/motorcycle_s_002067.png to s3://udacity-ml-workflow/train/motorcycle_s_002067.png\n",
+ "upload: train/motorcycle_s_002105.png to s3://udacity-ml-workflow/train/motorcycle_s_002105.png\n",
+ "upload: train/motorcycle_s_002030.png to s3://udacity-ml-workflow/train/motorcycle_s_002030.png\n",
+ "upload: train/motorcycle_s_002143.png to s3://udacity-ml-workflow/train/motorcycle_s_002143.png\n",
+ "upload: train/motorcycle_s_002153.png to s3://udacity-ml-workflow/train/motorcycle_s_002153.png\n",
+ "upload: train/motorcycle_s_002183.png to s3://udacity-ml-workflow/train/motorcycle_s_002183.png\n",
+ "upload: train/motorcycle_s_002121.png to s3://udacity-ml-workflow/train/motorcycle_s_002121.png\n",
+ "upload: train/motorcycle_s_002031.png to s3://udacity-ml-workflow/train/motorcycle_s_002031.png\n",
+ "upload: train/motorcycle_s_002140.png to s3://udacity-ml-workflow/train/motorcycle_s_002140.png\n",
+ "upload: train/motorcycle_s_002162.png to s3://udacity-ml-workflow/train/motorcycle_s_002162.png\n",
+ "upload: train/motorcycle_s_002192.png to s3://udacity-ml-workflow/train/motorcycle_s_002192.png\n",
+ "upload: train/motorcycle_s_002193.png to s3://udacity-ml-workflow/train/motorcycle_s_002193.png\n",
+ "upload: train/motorcycle_s_002214.png to s3://udacity-ml-workflow/train/motorcycle_s_002214.png\n",
+ "upload: train/motorcycle_s_002197.png to s3://udacity-ml-workflow/train/motorcycle_s_002197.png\n",
+ "upload: train/motorcycle_s_002066.png to s3://udacity-ml-workflow/train/motorcycle_s_002066.png\n",
+ "upload: train/motorcycle_s_002221.png to s3://udacity-ml-workflow/train/motorcycle_s_002221.png\n",
+ "upload: train/motorcycle_s_002225.png to s3://udacity-ml-workflow/train/motorcycle_s_002225.png\n",
+ "upload: train/motorcycle_s_002222.png to s3://udacity-ml-workflow/train/motorcycle_s_002222.png\n",
+ "upload: train/motorcycle_s_002237.png to s3://udacity-ml-workflow/train/motorcycle_s_002237.png\n",
+ "upload: train/motorcycle_s_002215.png to s3://udacity-ml-workflow/train/motorcycle_s_002215.png\n",
+ "upload: train/motorcycle_s_002254.png to s3://udacity-ml-workflow/train/motorcycle_s_002254.png\n",
+ "upload: train/motorcycle_s_002234.png to s3://udacity-ml-workflow/train/motorcycle_s_002234.png\n",
+ "upload: train/motorcycle_s_002236.png to s3://udacity-ml-workflow/train/motorcycle_s_002236.png\n",
+ "upload: train/motorcycle_s_002271.png to s3://udacity-ml-workflow/train/motorcycle_s_002271.png\n",
+ "upload: train/motorcycle_s_002275.png to s3://udacity-ml-workflow/train/motorcycle_s_002275.png\n",
+ "upload: train/motorcycle_s_002316.png to s3://udacity-ml-workflow/train/motorcycle_s_002316.png\n",
+ "upload: train/motorcycle_s_002291.png to s3://udacity-ml-workflow/train/motorcycle_s_002291.png\n",
+ "upload: train/motorcycle_s_002317.png to s3://udacity-ml-workflow/train/motorcycle_s_002317.png\n",
+ "upload: train/motorcycle_s_002298.png to s3://udacity-ml-workflow/train/motorcycle_s_002298.png\n",
+ "upload: train/ordinary_bicycle_s_000022.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000022.png\n",
+ "upload: train/ordinary_bicycle_s_000008.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000008.png\n",
+ "upload: train/ordinary_bicycle_s_000023.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000023.png\n",
+ "upload: train/ordinary_bicycle_s_000016.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000016.png\n",
+ "upload: train/ordinary_bicycle_s_000031.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000031.png\n",
+ "upload: train/ordinary_bicycle_s_000035.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000035.png\n",
+ "upload: train/ordinary_bicycle_s_000029.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000029.png\n",
+ "upload: train/ordinary_bicycle_s_000011.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000011.png\n",
+ "upload: train/ordinary_bicycle_s_000049.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000049.png\n",
+ "upload: train/ordinary_bicycle_s_000056.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000056.png\n",
+ "upload: train/ordinary_bicycle_s_000036.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000036.png\n",
+ "upload: train/ordinary_bicycle_s_000060.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000060.png\n",
+ "upload: train/ordinary_bicycle_s_000066.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000066.png\n",
+ "upload: train/ordinary_bicycle_s_000096.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000096.png\n",
+ "upload: train/ordinary_bicycle_s_000099.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000099.png\n",
+ "upload: train/ordinary_bicycle_s_000097.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000097.png\n",
+ "upload: train/ordinary_bicycle_s_000095.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000095.png\n",
+ "upload: train/ordinary_bicycle_s_000102.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000102.png\n",
+ "upload: train/ordinary_bicycle_s_000101.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000101.png\n",
+ "upload: train/ordinary_bicycle_s_000104.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000104.png\n",
+ "upload: train/ordinary_bicycle_s_000100.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000100.png\n",
+ "upload: train/ordinary_bicycle_s_000107.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000107.png\n",
+ "upload: train/ordinary_bicycle_s_000112.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000112.png\n",
+ "upload: train/ordinary_bicycle_s_000098.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000098.png\n",
+ "upload: train/ordinary_bicycle_s_000110.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000110.png\n",
+ "upload: train/ordinary_bicycle_s_000155.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000155.png\n",
+ "upload: train/ordinary_bicycle_s_000201.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000201.png\n",
+ "upload: train/ordinary_bicycle_s_000205.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000205.png\n",
+ "upload: train/ordinary_bicycle_s_000154.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000154.png\n",
+ "upload: train/ordinary_bicycle_s_000218.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000218.png\n",
+ "upload: train/ordinary_bicycle_s_000167.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000167.png\n",
+ "upload: train/ordinary_bicycle_s_000125.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000125.png\n",
+ "upload: train/ordinary_bicycle_s_000265.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000265.png\n",
+ "upload: train/ordinary_bicycle_s_000274.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000274.png\n",
+ "upload: train/ordinary_bicycle_s_000269.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000269.png\n",
+ "upload: train/ordinary_bicycle_s_000216.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000216.png\n",
+ "upload: train/ordinary_bicycle_s_000286.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000286.png\n",
+ "upload: train/ordinary_bicycle_s_000280.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000280.png\n",
+ "upload: train/ordinary_bicycle_s_000297.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000297.png\n",
+ "upload: train/ordinary_bicycle_s_000298.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000298.png\n",
+ "upload: train/ordinary_bicycle_s_000277.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000277.png\n",
+ "upload: train/ordinary_bicycle_s_000308.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000308.png\n",
+ "upload: train/ordinary_bicycle_s_000347.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000347.png\n",
+ "upload: train/ordinary_bicycle_s_000324.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000324.png\n",
+ "upload: train/ordinary_bicycle_s_000355.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000355.png\n",
+ "upload: train/ordinary_bicycle_s_000419.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000419.png\n",
+ "upload: train/ordinary_bicycle_s_000157.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000157.png\n",
+ "upload: train/ordinary_bicycle_s_000426.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000426.png\n",
+ "upload: train/ordinary_bicycle_s_000451.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000451.png\n",
+ "upload: train/ordinary_bicycle_s_000433.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000433.png\n",
+ "upload: train/safety_bicycle_s_000092.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000092.png\n",
+ "upload: train/ordinary_bicycle_s_000387.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000387.png\n",
+ "upload: train/ordinary_bicycle_s_000432.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000432.png\n",
+ "upload: train/safety_bicycle_s_000079.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000079.png\n",
+ "upload: train/safety_bicycle_s_000125.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000125.png\n",
+ "upload: train/safety_bicycle_s_000162.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000162.png\n",
+ "upload: train/safety_bicycle_s_000140.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000140.png\n",
+ "upload: train/safety_bicycle_s_000193.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000193.png\n",
+ "upload: train/safety_bicycle_s_000207.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000207.png\n",
+ "upload: train/safety_bicycle_s_000019.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000019.png\n",
+ "upload: train/safety_bicycle_s_000233.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000233.png\n",
+ "upload: train/safety_bicycle_s_000167.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000167.png\n",
+ "upload: train/safety_bicycle_s_000255.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000255.png\n",
+ "upload: train/safety_bicycle_s_000232.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000232.png\n",
+ "upload: train/safety_bicycle_s_000296.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000296.png\n",
+ "upload: train/safety_bicycle_s_000322.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000322.png\n",
+ "upload: train/safety_bicycle_s_000239.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000239.png\n",
+ "upload: train/safety_bicycle_s_000303.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000303.png\n",
+ "upload: train/safety_bicycle_s_000196.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000196.png\n",
+ "upload: train/safety_bicycle_s_000261.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000261.png\n",
+ "upload: train/safety_bicycle_s_000324.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000324.png\n",
+ "upload: train/safety_bicycle_s_000373.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000373.png\n",
+ "upload: train/safety_bicycle_s_000359.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000359.png\n",
+ "upload: train/safety_bicycle_s_000500.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000500.png\n",
+ "upload: train/safety_bicycle_s_000568.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000568.png\n",
+ "upload: train/safety_bicycle_s_000427.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000427.png\n",
+ "upload: train/safety_bicycle_s_000533.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000533.png\n",
+ "upload: train/safety_bicycle_s_000655.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000655.png\n",
+ "upload: train/safety_bicycle_s_000348.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000348.png\n",
+ "upload: train/safety_bicycle_s_000532.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000532.png\n",
+ "upload: train/safety_bicycle_s_000660.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000660.png\n",
+ "upload: train/safety_bicycle_s_000789.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000789.png\n",
+ "upload: train/safety_bicycle_s_000728.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000728.png\n",
+ "upload: train/safety_bicycle_s_000760.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000760.png\n",
+ "upload: train/safety_bicycle_s_000425.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000425.png\n",
+ "upload: train/safety_bicycle_s_001026.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001026.png\n",
+ "upload: train/safety_bicycle_s_000860.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000860.png\n",
+ "upload: train/safety_bicycle_s_001049.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001049.png\n",
+ "upload: train/safety_bicycle_s_001028.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001028.png\n",
+ "upload: train/safety_bicycle_s_001063.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001063.png\n",
+ "upload: train/safety_bicycle_s_001029.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001029.png\n",
+ "upload: train/safety_bicycle_s_001202.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001202.png\n",
+ "upload: train/safety_bicycle_s_001113.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001113.png\n",
+ "upload: train/ordinary_bicycle_s_000161.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000161.png\n",
+ "upload: train/safety_bicycle_s_001109.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001109.png\n",
+ "upload: train/safety_bicycle_s_001253.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001253.png\n",
+ "upload: train/safety_bicycle_s_001254.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001254.png\n",
+ "upload: train/safety_bicycle_s_001327.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001327.png\n",
+ "upload: train/safety_bicycle_s_001085.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001085.png\n",
+ "upload: train/safety_bicycle_s_001303.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001303.png\n",
+ "upload: train/safety_bicycle_s_001243.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001243.png\n",
+ "upload: train/safety_bicycle_s_001381.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001381.png\n",
+ "upload: train/safety_bicycle_s_001320.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001320.png\n",
+ "upload: train/safety_bicycle_s_001570.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001570.png\n",
+ "upload: train/safety_bicycle_s_001240.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001240.png\n",
+ "upload: train/safety_bicycle_s_001659.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001659.png\n",
+ "upload: train/safety_bicycle_s_001639.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001639.png\n",
+ "upload: train/safety_bicycle_s_001608.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001608.png\n",
+ "upload: train/safety_bicycle_s_001705.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001705.png\n",
+ "upload: train/safety_bike_s_000054.png to s3://udacity-ml-workflow/train/safety_bike_s_000054.png\n",
+ "upload: train/safety_bicycle_s_001651.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001651.png\n",
+ "upload: train/safety_bike_s_000058.png to s3://udacity-ml-workflow/train/safety_bike_s_000058.png\n",
+ "upload: train/safety_bicycle_s_001699.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001699.png\n",
+ "upload: train/safety_bike_s_000100.png to s3://udacity-ml-workflow/train/safety_bike_s_000100.png\n",
+ "upload: train/safety_bike_s_000015.png to s3://udacity-ml-workflow/train/safety_bike_s_000015.png\n",
+ "upload: train/safety_bicycle_s_001706.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001706.png\n",
+ "upload: train/safety_bike_s_000104.png to s3://udacity-ml-workflow/train/safety_bike_s_000104.png\n",
+ "upload: train/safety_bike_s_000155.png to s3://udacity-ml-workflow/train/safety_bike_s_000155.png\n",
+ "upload: train/safety_bike_s_000165.png to s3://udacity-ml-workflow/train/safety_bike_s_000165.png\n",
+ "upload: train/safety_bike_s_000009.png to s3://udacity-ml-workflow/train/safety_bike_s_000009.png\n",
+ "upload: train/safety_bike_s_000160.png to s3://udacity-ml-workflow/train/safety_bike_s_000160.png\n",
+ "upload: train/safety_bike_s_000079.png to s3://udacity-ml-workflow/train/safety_bike_s_000079.png\n",
+ "upload: train/safety_bike_s_000158.png to s3://udacity-ml-workflow/train/safety_bike_s_000158.png\n",
+ "upload: train/safety_bike_s_000178.png to s3://udacity-ml-workflow/train/safety_bike_s_000178.png\n",
+ "upload: train/safety_bike_s_000198.png to s3://udacity-ml-workflow/train/safety_bike_s_000198.png\n",
+ "upload: train/safety_bike_s_000263.png to s3://udacity-ml-workflow/train/safety_bike_s_000263.png\n",
+ "upload: train/safety_bike_s_000277.png to s3://udacity-ml-workflow/train/safety_bike_s_000277.png\n",
+ "upload: train/safety_bike_s_000381.png to s3://udacity-ml-workflow/train/safety_bike_s_000381.png\n",
+ "upload: train/safety_bike_s_000244.png to s3://udacity-ml-workflow/train/safety_bike_s_000244.png\n",
+ "upload: train/safety_bike_s_000328.png to s3://udacity-ml-workflow/train/safety_bike_s_000328.png\n",
+ "upload: train/safety_bike_s_000311.png to s3://udacity-ml-workflow/train/safety_bike_s_000311.png\n",
+ "upload: train/safety_bike_s_000482.png to s3://udacity-ml-workflow/train/safety_bike_s_000482.png\n",
+ "upload: train/safety_bike_s_000567.png to s3://udacity-ml-workflow/train/safety_bike_s_000567.png\n",
+ "upload: train/safety_bike_s_000245.png to s3://udacity-ml-workflow/train/safety_bike_s_000245.png\n",
+ "upload: train/safety_bike_s_000830.png to s3://udacity-ml-workflow/train/safety_bike_s_000830.png\n",
+ "upload: train/safety_bike_s_000643.png to s3://udacity-ml-workflow/train/safety_bike_s_000643.png\n",
+ "upload: train/safety_bike_s_000848.png to s3://udacity-ml-workflow/train/safety_bike_s_000848.png\n",
+ "upload: train/safety_bike_s_000173.png to s3://udacity-ml-workflow/train/safety_bike_s_000173.png\n",
+ "upload: train/safety_bike_s_000461.png to s3://udacity-ml-workflow/train/safety_bike_s_000461.png\n",
+ "upload: train/safety_bike_s_000914.png to s3://udacity-ml-workflow/train/safety_bike_s_000914.png\n",
+ "upload: train/safety_bike_s_000934.png to s3://udacity-ml-workflow/train/safety_bike_s_000934.png\n",
+ "upload: train/safety_bike_s_000867.png to s3://udacity-ml-workflow/train/safety_bike_s_000867.png\n",
+ "upload: train/safety_bike_s_000989.png to s3://udacity-ml-workflow/train/safety_bike_s_000989.png\n",
+ "upload: train/safety_bike_s_000921.png to s3://udacity-ml-workflow/train/safety_bike_s_000921.png\n",
+ "upload: train/safety_bike_s_001010.png to s3://udacity-ml-workflow/train/safety_bike_s_001010.png\n",
+ "upload: train/safety_bike_s_000984.png to s3://udacity-ml-workflow/train/safety_bike_s_000984.png\n",
+ "upload: train/safety_bike_s_000950.png to s3://udacity-ml-workflow/train/safety_bike_s_000950.png\n",
+ "upload: train/safety_bike_s_001148.png to s3://udacity-ml-workflow/train/safety_bike_s_001148.png\n",
+ "upload: train/safety_bike_s_001289.png to s3://udacity-ml-workflow/train/safety_bike_s_001289.png\n",
+ "upload: train/safety_bike_s_001012.png to s3://udacity-ml-workflow/train/safety_bike_s_001012.png\n",
+ "upload: train/safety_bike_s_001338.png to s3://udacity-ml-workflow/train/safety_bike_s_001338.png\n",
+ "upload: train/safety_bike_s_001355.png to s3://udacity-ml-workflow/train/safety_bike_s_001355.png\n",
+ "upload: train/safety_bike_s_001371.png to s3://udacity-ml-workflow/train/safety_bike_s_001371.png\n",
+ "upload: train/safety_bike_s_001465.png to s3://udacity-ml-workflow/train/safety_bike_s_001465.png\n",
+ "upload: train/safety_bike_s_001472.png to s3://udacity-ml-workflow/train/safety_bike_s_001472.png\n",
+ "upload: train/safety_bike_s_000963.png to s3://udacity-ml-workflow/train/safety_bike_s_000963.png\n",
+ "upload: train/safety_bike_s_001552.png to s3://udacity-ml-workflow/train/safety_bike_s_001552.png\n",
+ "upload: train/safety_bike_s_001560.png to s3://udacity-ml-workflow/train/safety_bike_s_001560.png\n",
+ "upload: train/safety_bike_s_001640.png to s3://udacity-ml-workflow/train/safety_bike_s_001640.png\n",
+ "upload: train/safety_bike_s_001474.png to s3://udacity-ml-workflow/train/safety_bike_s_001474.png\n",
+ "upload: train/safety_bike_s_001257.png to s3://udacity-ml-workflow/train/safety_bike_s_001257.png\n",
+ "upload: train/safety_bike_s_001608.png to s3://udacity-ml-workflow/train/safety_bike_s_001608.png\n",
+ "upload: train/safety_bike_s_001590.png to s3://udacity-ml-workflow/train/safety_bike_s_001590.png\n",
+ "upload: train/trail_bike_s_000016.png to s3://udacity-ml-workflow/train/trail_bike_s_000016.png\n",
+ "upload: train/velocipede_s_000010.png to s3://udacity-ml-workflow/train/velocipede_s_000010.png\n",
+ "upload: train/safety_bike_s_001659.png to s3://udacity-ml-workflow/train/safety_bike_s_001659.png\n",
+ "upload: train/velocipede_s_000023.png to s3://udacity-ml-workflow/train/velocipede_s_000023.png\n",
+ "upload: train/safety_bike_s_001784.png to s3://udacity-ml-workflow/train/safety_bike_s_001784.png\n",
+ "upload: train/velocipede_s_000265.png to s3://udacity-ml-workflow/train/velocipede_s_000265.png\n",
+ "upload: train/velocipede_s_000139.png to s3://udacity-ml-workflow/train/velocipede_s_000139.png\n",
+ "upload: train/velocipede_s_000049.png to s3://udacity-ml-workflow/train/velocipede_s_000049.png\n",
+ "upload: train/velocipede_s_000330.png to s3://udacity-ml-workflow/train/velocipede_s_000330.png\n",
+ "upload: train/velocipede_s_000282.png to s3://udacity-ml-workflow/train/velocipede_s_000282.png\n",
+ "upload: train/velocipede_s_000430.png to s3://udacity-ml-workflow/train/velocipede_s_000430.png\n",
+ "upload: train/velocipede_s_000021.png to s3://udacity-ml-workflow/train/velocipede_s_000021.png\n",
+ "upload: train/velocipede_s_000485.png to s3://udacity-ml-workflow/train/velocipede_s_000485.png\n",
+ "upload: train/velocipede_s_000012.png to s3://udacity-ml-workflow/train/velocipede_s_000012.png\n",
+ "upload: train/velocipede_s_000659.png to s3://udacity-ml-workflow/train/velocipede_s_000659.png\n",
+ "upload: train/safety_bike_s_001715.png to s3://udacity-ml-workflow/train/safety_bike_s_001715.png\n",
+ "upload: train/velocipede_s_000586.png to s3://udacity-ml-workflow/train/velocipede_s_000586.png\n",
+ "upload: train/velocipede_s_000825.png to s3://udacity-ml-workflow/train/velocipede_s_000825.png\n",
+ "upload: train/velocipede_s_000807.png to s3://udacity-ml-workflow/train/velocipede_s_000807.png\n",
+ "upload: train/velocipede_s_001056.png to s3://udacity-ml-workflow/train/velocipede_s_001056.png\n",
+ "upload: train/velocipede_s_000670.png to s3://udacity-ml-workflow/train/velocipede_s_000670.png\n",
+ "upload: train/velocipede_s_000989.png to s3://udacity-ml-workflow/train/velocipede_s_000989.png\n",
+ "upload: train/velocipede_s_001158.png to s3://udacity-ml-workflow/train/velocipede_s_001158.png\n",
+ "upload: train/velocipede_s_000702.png to s3://udacity-ml-workflow/train/velocipede_s_000702.png\n",
+ "upload: train/velocipede_s_000931.png to s3://udacity-ml-workflow/train/velocipede_s_000931.png\n",
+ "upload: train/velocipede_s_001141.png to s3://udacity-ml-workflow/train/velocipede_s_001141.png\n",
+ "upload: train/velocipede_s_000358.png to s3://udacity-ml-workflow/train/velocipede_s_000358.png\n",
+ "upload: train/velocipede_s_000949.png to s3://udacity-ml-workflow/train/velocipede_s_000949.png\n",
+ "upload: train/velocipede_s_001166.png to s3://udacity-ml-workflow/train/velocipede_s_001166.png\n",
+ "upload: train/velocipede_s_001142.png to s3://udacity-ml-workflow/train/velocipede_s_001142.png\n",
+ "upload: train/velocipede_s_001200.png to s3://udacity-ml-workflow/train/velocipede_s_001200.png\n",
+ "upload: train/velocipede_s_001222.png to s3://udacity-ml-workflow/train/velocipede_s_001222.png\n",
+ "upload: train/velocipede_s_001210.png to s3://udacity-ml-workflow/train/velocipede_s_001210.png\n",
+ "upload: train/velocipede_s_001298.png to s3://udacity-ml-workflow/train/velocipede_s_001298.png\n",
+ "upload: train/velocipede_s_001338.png to s3://udacity-ml-workflow/train/velocipede_s_001338.png\n",
+ "upload: train/velocipede_s_001225.png to s3://udacity-ml-workflow/train/velocipede_s_001225.png\n",
+ "upload: train/velocipede_s_001361.png to s3://udacity-ml-workflow/train/velocipede_s_001361.png\n",
+ "upload: train/velocipede_s_001299.png to s3://udacity-ml-workflow/train/velocipede_s_001299.png\n",
+ "upload: train/velocipede_s_001244.png to s3://udacity-ml-workflow/train/velocipede_s_001244.png\n",
+ "upload: train/velocipede_s_001585.png to s3://udacity-ml-workflow/train/velocipede_s_001585.png\n",
+ "upload: train/velocipede_s_001489.png to s3://udacity-ml-workflow/train/velocipede_s_001489.png\n",
+ "upload: train/velocipede_s_001422.png to s3://udacity-ml-workflow/train/velocipede_s_001422.png\n",
+ "upload: train/velocipede_s_001514.png to s3://udacity-ml-workflow/train/velocipede_s_001514.png\n",
+ "upload: train/velocipede_s_001278.png to s3://udacity-ml-workflow/train/velocipede_s_001278.png\n",
+ "upload: train/velocipede_s_001358.png to s3://udacity-ml-workflow/train/velocipede_s_001358.png\n",
+ "upload: train/velocipede_s_001279.png to s3://udacity-ml-workflow/train/velocipede_s_001279.png\n",
+ "upload: train/velocipede_s_001637.png to s3://udacity-ml-workflow/train/velocipede_s_001637.png\n",
+ "upload: train/velocipede_s_001880.png to s3://udacity-ml-workflow/train/velocipede_s_001880.png\n",
+ "upload: train/velocipede_s_001882.png to s3://udacity-ml-workflow/train/velocipede_s_001882.png\n",
+ "upload: train/velocipede_s_001907.png to s3://udacity-ml-workflow/train/velocipede_s_001907.png\n",
+ "upload: train/velocipede_s_001920.png to s3://udacity-ml-workflow/train/velocipede_s_001920.png\n",
+ "upload: train/velocipede_s_001872.png to s3://udacity-ml-workflow/train/velocipede_s_001872.png\n",
+ "upload: train/velocipede_s_001870.png to s3://udacity-ml-workflow/train/velocipede_s_001870.png\n",
+ "upload: train/velocipede_s_001958.png to s3://udacity-ml-workflow/train/velocipede_s_001958.png\n",
+ "upload: train/velocipede_s_001874.png to s3://udacity-ml-workflow/train/velocipede_s_001874.png\n",
+ "upload: train/velocipede_s_001883.png to s3://udacity-ml-workflow/train/velocipede_s_001883.png\n",
+ "upload: train/velocipede_s_001935.png to s3://udacity-ml-workflow/train/velocipede_s_001935.png\n",
+ "upload: test/bicycle_s_000030.png to s3://udacity-ml-workflow/test/bicycle_s_000030.png\n",
+ "upload: test/bicycle_s_001107.png to s3://udacity-ml-workflow/test/bicycle_s_001107.png\n",
+ "upload: test/bicycle_s_000059.png to s3://udacity-ml-workflow/test/bicycle_s_000059.png\n",
+ "upload: test/bicycle_s_000479.png to s3://udacity-ml-workflow/test/bicycle_s_000479.png\n",
+ "upload: test/bicycle_s_000779.png to s3://udacity-ml-workflow/test/bicycle_s_000779.png\n",
+ "upload: test/bicycle_s_001047.png to s3://udacity-ml-workflow/test/bicycle_s_001047.png\n",
+ "upload: test/bicycle_s_000031.png to s3://udacity-ml-workflow/test/bicycle_s_000031.png\n",
+ "upload: test/bicycle_s_001218.png to s3://udacity-ml-workflow/test/bicycle_s_001218.png\n",
+ "upload: test/bike_s_000041.png to s3://udacity-ml-workflow/test/bike_s_000041.png \n",
+ "upload: test/bicycle_s_001102.png to s3://udacity-ml-workflow/test/bicycle_s_001102.png\n",
+ "upload: test/bicycle_s_002735.png to s3://udacity-ml-workflow/test/bicycle_s_002735.png\n",
+ "upload: test/bicycle_s_000977.png to s3://udacity-ml-workflow/test/bicycle_s_000977.png\n",
+ "upload: test/bicycle_s_000513.png to s3://udacity-ml-workflow/test/bicycle_s_000513.png\n",
+ "upload: test/bicycle_s_000776.png to s3://udacity-ml-workflow/test/bicycle_s_000776.png\n",
+ "upload: test/bicycle_s_001804.png to s3://udacity-ml-workflow/test/bicycle_s_001804.png\n",
+ "upload: test/bicycle_s_001789.png to s3://udacity-ml-workflow/test/bicycle_s_001789.png\n",
+ "upload: test/bicycle_s_000777.png to s3://udacity-ml-workflow/test/bicycle_s_000777.png\n",
+ "upload: test/bicycle_s_002458.png to s3://udacity-ml-workflow/test/bicycle_s_002458.png\n",
+ "upload: test/bike_s_000330.png to s3://udacity-ml-workflow/test/bike_s_000330.png \n",
+ "upload: test/bike_s_000643.png to s3://udacity-ml-workflow/test/bike_s_000643.png \n",
+ "upload: test/bike_s_000071.png to s3://udacity-ml-workflow/test/bike_s_000071.png \n",
+ "upload: test/bike_s_000658.png to s3://udacity-ml-workflow/test/bike_s_000658.png \n",
+ "upload: test/bike_s_000487.png to s3://udacity-ml-workflow/test/bike_s_000487.png \n",
+ "upload: test/bike_s_000457.png to s3://udacity-ml-workflow/test/bike_s_000457.png \n",
+ "upload: test/bike_s_000694.png to s3://udacity-ml-workflow/test/bike_s_000694.png \n",
+ "upload: test/bike_s_000131.png to s3://udacity-ml-workflow/test/bike_s_000131.png \n",
+ "upload: test/bike_s_000163.png to s3://udacity-ml-workflow/test/bike_s_000163.png \n",
+ "upload: test/bike_s_000801.png to s3://udacity-ml-workflow/test/bike_s_000801.png \n",
+ "upload: test/bike_s_001073.png to s3://udacity-ml-workflow/test/bike_s_001073.png \n",
+ "upload: test/bike_s_001342.png to s3://udacity-ml-workflow/test/bike_s_001342.png \n",
+ "upload: test/bike_s_001216.png to s3://udacity-ml-workflow/test/bike_s_001216.png \n",
+ "upload: test/bike_s_001738.png to s3://udacity-ml-workflow/test/bike_s_001738.png \n",
+ "upload: test/bike_s_001784.png to s3://udacity-ml-workflow/test/bike_s_001784.png \n",
+ "upload: test/bike_s_002116.png to s3://udacity-ml-workflow/test/bike_s_002116.png \n",
+ "upload: test/bike_s_001068.png to s3://udacity-ml-workflow/test/bike_s_001068.png \n",
+ "upload: test/bike_s_000941.png to s3://udacity-ml-workflow/test/bike_s_000941.png \n",
+ "upload: test/bike_s_002009.png to s3://udacity-ml-workflow/test/bike_s_002009.png \n",
+ "upload: test/bike_s_001852.png to s3://udacity-ml-workflow/test/bike_s_001852.png \n",
+ "upload: test/cycle_s_000010.png to s3://udacity-ml-workflow/test/cycle_s_000010.png \n",
+ "upload: test/bike_s_001159.png to s3://udacity-ml-workflow/test/bike_s_001159.png \n",
+ "upload: test/cycle_s_000068.png to s3://udacity-ml-workflow/test/cycle_s_000068.png \n",
+ "upload: test/cycle_s_001214.png to s3://udacity-ml-workflow/test/cycle_s_001214.png \n",
+ "upload: test/cycle_s_001297.png to s3://udacity-ml-workflow/test/cycle_s_001297.png \n",
+ "upload: test/cycle_s_000970.png to s3://udacity-ml-workflow/test/cycle_s_000970.png \n",
+ "upload: test/cycle_s_001306.png to s3://udacity-ml-workflow/test/cycle_s_001306.png \n",
+ "upload: test/cycle_s_001648.png to s3://udacity-ml-workflow/test/cycle_s_001648.png \n",
+ "upload: test/bike_s_002208.png to s3://udacity-ml-workflow/test/bike_s_002208.png \n",
+ "upload: test/cycle_s_002613.png to s3://udacity-ml-workflow/test/cycle_s_002613.png \n",
+ "upload: test/cycle_s_002661.png to s3://udacity-ml-workflow/test/cycle_s_002661.png \n",
+ "upload: test/cycle_s_002964.png to s3://udacity-ml-workflow/test/cycle_s_002964.png \n",
+ "upload: test/cycle_s_002305.png to s3://udacity-ml-workflow/test/cycle_s_002305.png \n",
+ "upload: test/cycle_s_001044.png to s3://udacity-ml-workflow/test/cycle_s_001044.png \n",
+ "upload: test/dirt_bike_s_000001.png to s3://udacity-ml-workflow/test/dirt_bike_s_000001.png\n",
+ "upload: test/minibike_s_000288.png to s3://udacity-ml-workflow/test/minibike_s_000288.png\n",
+ "upload: test/minibike_s_000055.png to s3://udacity-ml-workflow/test/minibike_s_000055.png\n",
+ "upload: test/minibike_s_000075.png to s3://udacity-ml-workflow/test/minibike_s_000075.png\n",
+ "upload: test/minibike_s_000254.png to s3://udacity-ml-workflow/test/minibike_s_000254.png\n",
+ "upload: test/minibike_s_000052.png to s3://udacity-ml-workflow/test/minibike_s_000052.png\n",
+ "upload: test/cycle_s_001915.png to s3://udacity-ml-workflow/test/cycle_s_001915.png \n",
+ "upload: test/cycle_s_001953.png to s3://udacity-ml-workflow/test/cycle_s_001953.png \n",
+ "upload: test/minibike_s_000398.png to s3://udacity-ml-workflow/test/minibike_s_000398.png\n",
+ "upload: test/minibike_s_000290.png to s3://udacity-ml-workflow/test/minibike_s_000290.png\n",
+ "upload: test/minibike_s_000505.png to s3://udacity-ml-workflow/test/minibike_s_000505.png\n",
+ "upload: test/minibike_s_000497.png to s3://udacity-ml-workflow/test/minibike_s_000497.png\n",
+ "upload: test/minibike_s_000801.png to s3://udacity-ml-workflow/test/minibike_s_000801.png\n",
+ "upload: test/minibike_s_000573.png to s3://udacity-ml-workflow/test/minibike_s_000573.png\n",
+ "upload: test/minibike_s_000309.png to s3://udacity-ml-workflow/test/minibike_s_000309.png\n",
+ "upload: test/minibike_s_000792.png to s3://udacity-ml-workflow/test/minibike_s_000792.png\n",
+ "upload: test/minibike_s_001089.png to s3://udacity-ml-workflow/test/minibike_s_001089.png\n",
+ "upload: test/minibike_s_000828.png to s3://udacity-ml-workflow/test/minibike_s_000828.png\n",
+ "upload: test/minibike_s_000913.png to s3://udacity-ml-workflow/test/minibike_s_000913.png\n",
+ "upload: test/minibike_s_000947.png to s3://udacity-ml-workflow/test/minibike_s_000947.png\n",
+ "upload: test/minibike_s_000960.png to s3://udacity-ml-workflow/test/minibike_s_000960.png\n",
+ "upload: test/minibike_s_001547.png to s3://udacity-ml-workflow/test/minibike_s_001547.png\n",
+ "upload: test/minibike_s_000880.png to s3://udacity-ml-workflow/test/minibike_s_000880.png\n",
+ "upload: test/minibike_s_001441.png to s3://udacity-ml-workflow/test/minibike_s_001441.png\n",
+ "upload: test/minibike_s_001473.png to s3://udacity-ml-workflow/test/minibike_s_001473.png\n",
+ "upload: test/minibike_s_001605.png to s3://udacity-ml-workflow/test/minibike_s_001605.png\n",
+ "upload: test/minibike_s_001651.png to s3://udacity-ml-workflow/test/minibike_s_001651.png\n",
+ "upload: test/minibike_s_001867.png to s3://udacity-ml-workflow/test/minibike_s_001867.png\n",
+ "upload: test/minibike_s_002173.png to s3://udacity-ml-workflow/test/minibike_s_002173.png\n",
+ "upload: test/minibike_s_001732.png to s3://udacity-ml-workflow/test/minibike_s_001732.png\n",
+ "upload: test/minibike_s_002051.png to s3://udacity-ml-workflow/test/minibike_s_002051.png\n",
+ "upload: test/minibike_s_002230.png to s3://udacity-ml-workflow/test/minibike_s_002230.png\n",
+ "upload: test/minibike_s_001893.png to s3://udacity-ml-workflow/test/minibike_s_001893.png\n",
+ "upload: test/moped_s_000033.png to s3://udacity-ml-workflow/test/moped_s_000033.png\n",
+ "upload: test/minibike_s_002227.png to s3://udacity-ml-workflow/test/minibike_s_002227.png\n",
+ "upload: test/moped_s_000064.png to s3://udacity-ml-workflow/test/moped_s_000064.png\n",
+ "upload: test/moped_s_000007.png to s3://udacity-ml-workflow/test/moped_s_000007.png\n",
+ "upload: test/motorbike_s_000121.png to s3://udacity-ml-workflow/test/motorbike_s_000121.png\n",
+ "upload: test/moped_s_000306.png to s3://udacity-ml-workflow/test/moped_s_000306.png\n",
+ "upload: test/motorbike_s_000135.png to s3://udacity-ml-workflow/test/motorbike_s_000135.png\n",
+ "upload: test/motorbike_s_000126.png to s3://udacity-ml-workflow/test/motorbike_s_000126.png\n",
+ "upload: test/motorbike_s_000433.png to s3://udacity-ml-workflow/test/motorbike_s_000433.png\n",
+ "upload: test/motorbike_s_000629.png to s3://udacity-ml-workflow/test/motorbike_s_000629.png\n",
+ "upload: test/motorcycle_s_000040.png to s3://udacity-ml-workflow/test/motorcycle_s_000040.png\n",
+ "upload: test/motorbike_s_000333.png to s3://udacity-ml-workflow/test/motorbike_s_000333.png\n",
+ "upload: test/motorbike_s_000324.png to s3://udacity-ml-workflow/test/motorbike_s_000324.png\n",
+ "upload: test/motorcycle_s_000007.png to s3://udacity-ml-workflow/test/motorcycle_s_000007.png\n",
+ "upload: test/motorcycle_s_000060.png to s3://udacity-ml-workflow/test/motorcycle_s_000060.png\n",
+ "upload: test/motorcycle_s_000139.png to s3://udacity-ml-workflow/test/motorcycle_s_000139.png\n",
+ "upload: test/motorcycle_s_000049.png to s3://udacity-ml-workflow/test/motorcycle_s_000049.png\n",
+ "upload: test/motorcycle_s_000063.png to s3://udacity-ml-workflow/test/motorcycle_s_000063.png\n",
+ "upload: test/motorbike_s_000465.png to s3://udacity-ml-workflow/test/motorbike_s_000465.png\n",
+ "upload: test/motorcycle_s_000042.png to s3://udacity-ml-workflow/test/motorcycle_s_000042.png\n",
+ "upload: test/motorcycle_s_000171.png to s3://udacity-ml-workflow/test/motorcycle_s_000171.png\n",
+ "upload: test/motorcycle_s_000211.png to s3://udacity-ml-workflow/test/motorcycle_s_000211.png\n",
+ "upload: test/motorcycle_s_000323.png to s3://udacity-ml-workflow/test/motorcycle_s_000323.png\n",
+ "upload: test/motorcycle_s_000222.png to s3://udacity-ml-workflow/test/motorcycle_s_000222.png\n",
+ "upload: test/motorcycle_s_000352.png to s3://udacity-ml-workflow/test/motorcycle_s_000352.png\n",
+ "upload: test/motorbike_s_000005.png to s3://udacity-ml-workflow/test/motorbike_s_000005.png\n",
+ "upload: test/motorcycle_s_000141.png to s3://udacity-ml-workflow/test/motorcycle_s_000141.png\n",
+ "upload: test/motorcycle_s_000427.png to s3://udacity-ml-workflow/test/motorcycle_s_000427.png\n",
+ "upload: test/motorcycle_s_000446.png to s3://udacity-ml-workflow/test/motorcycle_s_000446.png\n",
+ "upload: test/motorcycle_s_000450.png to s3://udacity-ml-workflow/test/motorcycle_s_000450.png\n",
+ "upload: test/motorcycle_s_000494.png to s3://udacity-ml-workflow/test/motorcycle_s_000494.png\n",
+ "upload: test/motorcycle_s_000530.png to s3://udacity-ml-workflow/test/motorcycle_s_000530.png\n",
+ "upload: test/motorcycle_s_000512.png to s3://udacity-ml-workflow/test/motorcycle_s_000512.png\n",
+ "upload: test/motorcycle_s_000485.png to s3://udacity-ml-workflow/test/motorcycle_s_000485.png\n",
+ "upload: test/motorcycle_s_000602.png to s3://udacity-ml-workflow/test/motorcycle_s_000602.png\n",
+ "upload: test/motorcycle_s_000615.png to s3://udacity-ml-workflow/test/motorcycle_s_000615.png\n",
+ "upload: test/motorcycle_s_000685.png to s3://udacity-ml-workflow/test/motorcycle_s_000685.png\n",
+ "upload: test/motorcycle_s_000679.png to s3://udacity-ml-workflow/test/motorcycle_s_000679.png\n",
+ "upload: test/motorcycle_s_000739.png to s3://udacity-ml-workflow/test/motorcycle_s_000739.png\n",
+ "upload: test/motorcycle_s_000606.png to s3://udacity-ml-workflow/test/motorcycle_s_000606.png\n",
+ "upload: test/motorcycle_s_000797.png to s3://udacity-ml-workflow/test/motorcycle_s_000797.png\n",
+ "upload: test/motorcycle_s_000825.png to s3://udacity-ml-workflow/test/motorcycle_s_000825.png\n",
+ "upload: test/motorcycle_s_000866.png to s3://udacity-ml-workflow/test/motorcycle_s_000866.png\n",
+ "upload: test/motorcycle_s_001249.png to s3://udacity-ml-workflow/test/motorcycle_s_001249.png\n",
+ "upload: test/motorcycle_s_001261.png to s3://udacity-ml-workflow/test/motorcycle_s_001261.png\n",
+ "upload: test/motorcycle_s_000878.png to s3://udacity-ml-workflow/test/motorcycle_s_000878.png\n",
+ "upload: test/motorcycle_s_000963.png to s3://udacity-ml-workflow/test/motorcycle_s_000963.png\n",
+ "upload: test/motorcycle_s_001385.png to s3://udacity-ml-workflow/test/motorcycle_s_001385.png\n",
+ "upload: test/motorcycle_s_001164.png to s3://udacity-ml-workflow/test/motorcycle_s_001164.png\n",
+ "upload: test/motorcycle_s_000876.png to s3://udacity-ml-workflow/test/motorcycle_s_000876.png\n",
+ "upload: test/motorcycle_s_001348.png to s3://udacity-ml-workflow/test/motorcycle_s_001348.png\n",
+ "upload: test/motorcycle_s_001269.png to s3://udacity-ml-workflow/test/motorcycle_s_001269.png\n",
+ "upload: test/motorcycle_s_001519.png to s3://udacity-ml-workflow/test/motorcycle_s_001519.png\n",
+ "upload: test/motorcycle_s_001679.png to s3://udacity-ml-workflow/test/motorcycle_s_001679.png\n",
+ "upload: test/motorcycle_s_001508.png to s3://udacity-ml-workflow/test/motorcycle_s_001508.png\n",
+ "upload: test/motorcycle_s_001782.png to s3://udacity-ml-workflow/test/motorcycle_s_001782.png\n",
+ "upload: test/motorcycle_s_001687.png to s3://udacity-ml-workflow/test/motorcycle_s_001687.png\n",
+ "upload: test/motorcycle_s_001936.png to s3://udacity-ml-workflow/test/motorcycle_s_001936.png\n",
+ "upload: test/motorcycle_s_001960.png to s3://udacity-ml-workflow/test/motorcycle_s_001960.png\n",
+ "upload: test/motorcycle_s_001955.png to s3://udacity-ml-workflow/test/motorcycle_s_001955.png\n",
+ "upload: test/motorcycle_s_001906.png to s3://udacity-ml-workflow/test/motorcycle_s_001906.png\n",
+ "upload: test/motorcycle_s_002026.png to s3://udacity-ml-workflow/test/motorcycle_s_002026.png\n",
+ "upload: test/motorcycle_s_001971.png to s3://udacity-ml-workflow/test/motorcycle_s_001971.png\n",
+ "upload: test/motorcycle_s_001892.png to s3://udacity-ml-workflow/test/motorcycle_s_001892.png\n",
+ "upload: test/motorcycle_s_002112.png to s3://udacity-ml-workflow/test/motorcycle_s_002112.png\n",
+ "upload: test/motorcycle_s_002177.png to s3://udacity-ml-workflow/test/motorcycle_s_002177.png\n",
+ "upload: test/motorcycle_s_002126.png to s3://udacity-ml-workflow/test/motorcycle_s_002126.png\n",
+ "upload: test/ordinary_bicycle_s_000105.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000105.png\n",
+ "upload: test/ordinary_bicycle_s_000113.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000113.png\n",
+ "upload: test/ordinary_bicycle_s_000350.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000350.png\n",
+ "upload: test/safety_bicycle_s_000235.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000235.png\n",
+ "upload: test/safety_bicycle_s_000280.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000280.png\n",
+ "upload: test/safety_bicycle_s_000315.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000315.png\n",
+ "upload: test/ordinary_bicycle_s_000437.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000437.png\n",
+ "upload: test/ordinary_bicycle_s_000169.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000169.png\n",
+ "upload: test/ordinary_bicycle_s_000431.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000431.png\n",
+ "upload: test/safety_bicycle_s_001153.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001153.png\n",
+ "upload: test/safety_bicycle_s_001286.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001286.png\n",
+ "upload: test/ordinary_bicycle_s_000158.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000158.png\n",
+ "upload: test/safety_bicycle_s_001322.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001322.png\n",
+ "upload: test/safety_bike_s_000438.png to s3://udacity-ml-workflow/test/safety_bike_s_000438.png\n",
+ "upload: test/safety_bike_s_000390.png to s3://udacity-ml-workflow/test/safety_bike_s_000390.png\n",
+ "upload: test/safety_bike_s_000541.png to s3://udacity-ml-workflow/test/safety_bike_s_000541.png\n",
+ "upload: test/safety_bike_s_000699.png to s3://udacity-ml-workflow/test/safety_bike_s_000699.png\n",
+ "upload: test/safety_bicycle_s_001575.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001575.png\n",
+ "upload: test/safety_bike_s_000192.png to s3://udacity-ml-workflow/test/safety_bike_s_000192.png\n",
+ "upload: test/safety_bike_s_000791.png to s3://udacity-ml-workflow/test/safety_bike_s_000791.png\n",
+ "upload: test/safety_bike_s_000540.png to s3://udacity-ml-workflow/test/safety_bike_s_000540.png\n",
+ "upload: test/safety_bike_s_000488.png to s3://udacity-ml-workflow/test/safety_bike_s_000488.png\n",
+ "upload: test/safety_bike_s_001065.png to s3://udacity-ml-workflow/test/safety_bike_s_001065.png\n",
+ "upload: test/safety_bike_s_001088.png to s3://udacity-ml-workflow/test/safety_bike_s_001088.png\n",
+ "upload: test/safety_bike_s_001132.png to s3://udacity-ml-workflow/test/safety_bike_s_001132.png\n",
+ "upload: test/velocipede_s_000001.png to s3://udacity-ml-workflow/test/velocipede_s_000001.png\n",
+ "upload: test/safety_bike_s_001087.png to s3://udacity-ml-workflow/test/safety_bike_s_001087.png\n",
+ "upload: test/velocipede_s_000041.png to s3://udacity-ml-workflow/test/velocipede_s_000041.png\n",
+ "upload: test/safety_bike_s_001253.png to s3://udacity-ml-workflow/test/safety_bike_s_001253.png\n",
+ "upload: test/trail_bike_s_000073.png to s3://udacity-ml-workflow/test/trail_bike_s_000073.png\n",
+ "upload: test/safety_bike_s_001481.png to s3://udacity-ml-workflow/test/safety_bike_s_001481.png\n",
+ "upload: test/safety_bike_s_001690.png to s3://udacity-ml-workflow/test/safety_bike_s_001690.png\n",
+ "upload: test/velocipede_s_000292.png to s3://udacity-ml-workflow/test/velocipede_s_000292.png\n",
+ "upload: test/velocipede_s_000106.png to s3://udacity-ml-workflow/test/velocipede_s_000106.png\n",
+ "upload: test/velocipede_s_000369.png to s3://udacity-ml-workflow/test/velocipede_s_000369.png\n",
+ "upload: test/ordinary_bicycle_s_000284.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000284.png\n",
+ "upload: test/velocipede_s_001277.png to s3://udacity-ml-workflow/test/velocipede_s_001277.png\n",
+ "upload: test/velocipede_s_001335.png to s3://udacity-ml-workflow/test/velocipede_s_001335.png\n",
+ "upload: test/velocipede_s_001355.png to s3://udacity-ml-workflow/test/velocipede_s_001355.png\n",
+ "upload: test/velocipede_s_000863.png to s3://udacity-ml-workflow/test/velocipede_s_000863.png\n",
+ "upload: test/velocipede_s_001201.png to s3://udacity-ml-workflow/test/velocipede_s_001201.png\n",
+ "upload: test/velocipede_s_001379.png to s3://udacity-ml-workflow/test/velocipede_s_001379.png\n",
+ "upload: test/velocipede_s_001466.png to s3://udacity-ml-workflow/test/velocipede_s_001466.png\n",
+ "upload: test/velocipede_s_001232.png to s3://udacity-ml-workflow/test/velocipede_s_001232.png\n",
+ "upload: test/velocipede_s_001633.png to s3://udacity-ml-workflow/test/velocipede_s_001633.png\n",
+ "upload: test/velocipede_s_001699.png to s3://udacity-ml-workflow/test/velocipede_s_001699.png\n",
+ "upload: test/velocipede_s_001744.png to s3://udacity-ml-workflow/test/velocipede_s_001744.png\n",
+ "upload: test/velocipede_s_001790.png to s3://udacity-ml-workflow/test/velocipede_s_001790.png\n"
+ ]
+ }
+ ],
+ "source": [
+ "import os\n",
+ "\n",
+ "os.environ[\"DEFAULT_S3_BUCKET\"] = bucket\n",
+ "!aws s3 sync ./train s3://${DEFAULT_S3_BUCKET}/train/\n",
+ "!aws s3 sync ./test s3://${DEFAULT_S3_BUCKET}/test/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And that's it! You can check the bucket and verify that the items were uploaded.\n",
+ "\n",
+ "## Model Training\n",
+ "\n",
+ "For Image Classification, Sagemaker [also expects metadata](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) e.g. in the form of TSV files with labels and filepaths. We can generate these using our Pandas DataFrames from earlier:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "def to_metadata_file(df, prefix):\n",
+ " df[\"s3_path\"] = df[\"filenames\"]\n",
+ " df[\"labels\"] = df[\"labels\"].apply(lambda x: 0 if x==8 else 1)\n",
+ " return df[[\"row\", \"labels\", \"s3_path\"]].to_csv(\n",
+ " f\"{prefix}.lst\", sep=\"\\t\", index=False, header=False\n",
+ " )\n",
+ " \n",
+ "to_metadata_file(df_train.copy(), \"train\")\n",
+ "to_metadata_file(df_test.copy(), \"test\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can also upload our manifest files:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import boto3\n",
+ "bucket = \"udacity-ml-workflow\"\n",
+ "# Upload files\n",
+ "boto3.Session().resource('s3').Bucket(\n",
+ " bucket).Object('train.lst').upload_file('./train.lst')\n",
+ "boto3.Session().resource('s3').Bucket(\n",
+ " bucket).Object('test.lst').upload_file('./test.lst')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Using the `bucket` and `region` info we can get the latest prebuilt container to run our training job, and define an output location on our s3 bucket for the model. Use the `image_uris` function from the SageMaker SDK to retrieve the latest `image-classification` image below:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Use the image_uris function to retrieve the latest 'image-classification' image \n",
+ "algo_image = sagemaker.image_uris.retrieve('image-classification', region=region)\n",
+ "s3_output_location = f\"s3://{bucket}/models/image_model\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We're ready to create an estimator! Create an estimator `img_classifier_model` that uses one instance of `ml.p3.2xlarge`. Ensure that y ou use the output location we defined above - we'll be referring to that later!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "img_classifier_model=sagemaker.estimator.Estimator(\n",
+ " ## TODO: define your estimator options \n",
+ " role=role,\n",
+ " instance_count = 1,\n",
+ " instance_type= 'ml.p3.2xlarge',\n",
+ " volume_size=5,\n",
+ " output_path=s3_output_location,\n",
+ " sagemaker_session=sagemaker.Session(),\n",
+ " image_uri = algo_image\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1000"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(df_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'811284229777.dkr.ecr.us-east-1.amazonaws.com/image-classification:1'"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "algo_image"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can also set a few key hyperparameters and define the inputs for our model:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "img_classifier_model.set_hyperparameters(\n",
+ " image_shape= \"3,32,32\", # TODO: Fill in\n",
+ " num_classes=2, # TODO: Fill in\n",
+ " num_training_samples=1000 # TODO: fill in\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The `image-classification` image uses four input channels with very specific input parameters. For convenience, we've provided them below:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.debugger import Rule, rule_configs\n",
+ "from sagemaker.session import TrainingInput\n",
+ "model_inputs = {\n",
+ " \"train\": sagemaker.inputs.TrainingInput(\n",
+ " s3_data=f\"s3://{bucket}/train/\",\n",
+ " content_type=\"application/x-image\"\n",
+ " ),\n",
+ " \"validation\": sagemaker.inputs.TrainingInput(\n",
+ " s3_data=f\"s3://{bucket}/test/\",\n",
+ " content_type=\"application/x-image\"\n",
+ " ),\n",
+ " \"train_lst\": sagemaker.inputs.TrainingInput(\n",
+ " s3_data=f\"s3://{bucket}/train.lst\",\n",
+ " content_type=\"application/x-image\"\n",
+ " ),\n",
+ " \"validation_lst\": sagemaker.inputs.TrainingInput(\n",
+ " s3_data=f\"s3://{bucket}/test.lst\",\n",
+ " content_type=\"application/x-image\"\n",
+ " )\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Great, now we can train the model using the model_inputs. In the cell below, call the `fit` method on our model,:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2023-02-14 18:29:48 Starting - Starting the training job...ProfilerReport-1676399388: InProgress\n",
+ ".........\n",
+ "2023-02-14 18:31:41 Starting - Preparing the instances for training......\n",
+ "2023-02-14 18:32:41 Downloading - Downloading input data...\n",
+ "2023-02-14 18:33:02 Training - Downloading the training image............\n",
+ "2023-02-14 18:35:02 Training - Training image download completed. Training in progress...\u001b[34mDocker entrypoint called with argument(s): train\u001b[0m\n",
+ "\u001b[34mRunning default environment configuration script\u001b[0m\n",
+ "\u001b[34mNvidia gpu devices, drivers and cuda toolkit versions (only available on hosts with GPU):\u001b[0m\n",
+ "\u001b[34mTue Feb 14 18:35:26 2023 \u001b[0m\n",
+ "\u001b[34m+-----------------------------------------------------------------------------+\u001b[0m\n",
+ "\u001b[34m| NVIDIA-SMI 515.65.07 Driver Version: 515.65.07 CUDA Version: 11.7 |\u001b[0m\n",
+ "\u001b[34m|-------------------------------+----------------------+----------------------+\u001b[0m\n",
+ "\u001b[34m| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\u001b[0m\n",
+ "\u001b[34m| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\u001b[0m\n",
+ "\u001b[34m| | | MIG M. |\u001b[0m\n",
+ "\u001b[34m|===============================+======================+======================|\u001b[0m\n",
+ "\u001b[34m| 0 Tesla V100-SXM2... On | 00000000:00:1E.0 Off | 0 |\u001b[0m\n",
+ "\u001b[34m| N/A 27C P0 23W / 300W | 0MiB / 16384MiB | 0% Default |\u001b[0m\n",
+ "\u001b[34m| | | N/A |\u001b[0m\n",
+ "\u001b[34m+-------------------------------+----------------------+----------------------+\n",
+ " \u001b[0m\n",
+ "\u001b[34m+-----------------------------------------------------------------------------+\u001b[0m\n",
+ "\u001b[34m| Processes: |\u001b[0m\n",
+ "\u001b[34m| GPU GI CI PID Type Process name GPU Memory |\u001b[0m\n",
+ "\u001b[34m| ID ID Usage |\u001b[0m\n",
+ "\u001b[34m|=============================================================================|\u001b[0m\n",
+ "\u001b[34m| No running processes found |\u001b[0m\n",
+ "\u001b[34m+-----------------------------------------------------------------------------+\u001b[0m\n",
+ "\u001b[34mChecking for nvidia driver and cuda compatibility.\u001b[0m\n",
+ "\u001b[34mCUDA Compatibility driver provided.\u001b[0m\n",
+ "\u001b[34mProceeding with compatibility check between driver, cuda-toolkit and cuda-compat.\u001b[0m\n",
+ "\u001b[34mDetected cuda-toolkit version: 11.1.\u001b[0m\n",
+ "\u001b[34mDetected cuda-compat version: 455.32.00.\u001b[0m\n",
+ "\u001b[34mDetected Nvidia driver version: 515.65.07.\u001b[0m\n",
+ "\u001b[34mNvidia driver compatible with cuda-toolkit. Disabling cuda-compat.\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Reading default configuration from /opt/amazon/lib/python3.7/site-packages/image_classification/default-input.json: {'use_pretrained_model': 0, 'num_layers': 152, 'epochs': 30, 'learning_rate': 0.1, 'lr_scheduler_factor': 0.1, 'optimizer': 'sgd', 'momentum': 0, 'weight_decay': 0.0001, 'beta_1': 0.9, 'beta_2': 0.999, 'eps': 1e-08, 'gamma': 0.9, 'mini_batch_size': 32, 'image_shape': '3,224,224', 'precision_dtype': 'float32'}\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Merging with provided configuration from /opt/ml/input/config/hyperparameters.json: {'image_shape': '3,32,32', 'num_classes': '2', 'num_training_samples': '1000'}\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Final configuration: {'use_pretrained_model': 0, 'num_layers': 152, 'epochs': 30, 'learning_rate': 0.1, 'lr_scheduler_factor': 0.1, 'optimizer': 'sgd', 'momentum': 0, 'weight_decay': 0.0001, 'beta_1': 0.9, 'beta_2': 0.999, 'eps': 1e-08, 'gamma': 0.9, 'mini_batch_size': 32, 'image_shape': '3,32,32', 'precision_dtype': 'float32', 'num_classes': '2', 'num_training_samples': '1000'}\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Searching for .lst files in /opt/ml/input/data/train_lst.\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Creating record files for train.lst\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Done creating record files...\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Searching for .lst files in /opt/ml/input/data/validation_lst.\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Creating record files for test.lst\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Done creating record files...\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] use_pretrained_model: 0\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] multi_label: 0\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Performing random weight initialization\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] ---- Parameters ----\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] num_layers: 152\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] data type: \u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] epochs: 30\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] optimizer: sgd\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] momentum: 0.9\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] weight_decay: 0.0001\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] learning_rate: 0.1\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] num_training_samples: 1000\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] mini_batch_size: 32\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] image_shape: 3,32,32\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] num_classes: 2\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] augmentation_type: None\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] kv_store: device\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] checkpoint_frequency not set, will store the best model\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] --------------------\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:30 INFO 140459943757632] Setting number of threads: 7\u001b[0m\n",
+ "\u001b[34m[18:35:34] /opt/brazil-pkg-cache/packages/AIAlgorithmsMXNet/AIAlgorithmsMXNet-1.4.x_ecl_Cuda_11.1.x.38.0/AL2_x86_64/generic-flavor/src/src/operator/nn/./cudnn/./cudnn_algoreg-inl.h:97: Running performance tests to find the best convolution algorithm, this can take a while... (setting env variable MXNET_CUDNN_AUTOTUNE_DEFAULT to 0 to disable)\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:39 INFO 140459943757632] Epoch[0] Batch [20]#011Speed: 121.912 samples/sec#011accuracy=0.563988\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:41 INFO 140459943757632] Epoch[0] Train-accuracy=0.603831\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:41 INFO 140459943757632] Epoch[0] Time cost=6.905\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:42 INFO 140459943757632] Epoch[0] Validation-accuracy=0.505208\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:42 INFO 140459943757632] Storing the best model with validation accuracy: 0.505208\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:42 INFO 140459943757632] Saved checkpoint to \"/opt/ml/model/image-classification-0001.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:46 INFO 140459943757632] Epoch[1] Batch [20]#011Speed: 184.152 samples/sec#011accuracy=0.714286\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:47 INFO 140459943757632] Epoch[1] Train-accuracy=0.692540\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:47 INFO 140459943757632] Epoch[1] Time cost=5.117\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:48 INFO 140459943757632] Epoch[1] Validation-accuracy=0.505208\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:52 INFO 140459943757632] Epoch[2] Batch [20]#011Speed: 188.485 samples/sec#011accuracy=0.611607\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:53 INFO 140459943757632] Epoch[2] Train-accuracy=0.622984\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:53 INFO 140459943757632] Epoch[2] Time cost=5.041\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:54 INFO 140459943757632] Epoch[2] Validation-accuracy=0.484375\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:58 INFO 140459943757632] Epoch[3] Batch [20]#011Speed: 189.895 samples/sec#011accuracy=0.706845\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:59 INFO 140459943757632] Epoch[3] Train-accuracy=0.743952\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:35:59 INFO 140459943757632] Epoch[3] Time cost=5.016\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:00 INFO 140459943757632] Epoch[3] Validation-accuracy=0.455357\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:04 INFO 140459943757632] Epoch[4] Batch [20]#011Speed: 184.522 samples/sec#011accuracy=0.763393\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:06 INFO 140459943757632] Epoch[4] Train-accuracy=0.766129\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:06 INFO 140459943757632] Epoch[4] Time cost=5.119\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:06 INFO 140459943757632] Epoch[4] Validation-accuracy=0.479167\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:10 INFO 140459943757632] Epoch[5] Batch [20]#011Speed: 187.139 samples/sec#011accuracy=0.796131\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:12 INFO 140459943757632] Epoch[5] Train-accuracy=0.789315\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:12 INFO 140459943757632] Epoch[5] Time cost=5.126\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:12 INFO 140459943757632] Epoch[5] Validation-accuracy=0.520833\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:13 INFO 140459943757632] Storing the best model with validation accuracy: 0.520833\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:13 INFO 140459943757632] Saved checkpoint to \"/opt/ml/model/image-classification-0006.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:17 INFO 140459943757632] Epoch[6] Batch [20]#011Speed: 180.927 samples/sec#011accuracy=0.834821\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:18 INFO 140459943757632] Epoch[6] Train-accuracy=0.815524\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:18 INFO 140459943757632] Epoch[6] Time cost=5.213\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:19 INFO 140459943757632] Epoch[6] Validation-accuracy=0.552083\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:19 INFO 140459943757632] Storing the best model with validation accuracy: 0.552083\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:19 INFO 140459943757632] Saved checkpoint to \"/opt/ml/model/image-classification-0007.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:23 INFO 140459943757632] Epoch[7] Batch [20]#011Speed: 189.254 samples/sec#011accuracy=0.802083\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:24 INFO 140459943757632] Epoch[7] Train-accuracy=0.790323\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:24 INFO 140459943757632] Epoch[7] Time cost=5.030\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:25 INFO 140459943757632] Epoch[7] Validation-accuracy=0.495536\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:29 INFO 140459943757632] Epoch[8] Batch [20]#011Speed: 188.164 samples/sec#011accuracy=0.802083\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:31 INFO 140459943757632] Epoch[8] Train-accuracy=0.811492\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:31 INFO 140459943757632] Epoch[8] Time cost=5.057\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:31 INFO 140459943757632] Epoch[8] Validation-accuracy=0.526042\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:35 INFO 140459943757632] Epoch[9] Batch [20]#011Speed: 189.283 samples/sec#011accuracy=0.825893\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:37 INFO 140459943757632] Epoch[9] Train-accuracy=0.823589\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:37 INFO 140459943757632] Epoch[9] Time cost=5.053\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:37 INFO 140459943757632] Epoch[9] Validation-accuracy=0.557292\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:37 INFO 140459943757632] Storing the best model with validation accuracy: 0.557292\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:38 INFO 140459943757632] Saved checkpoint to \"/opt/ml/model/image-classification-0010.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:41 INFO 140459943757632] Epoch[10] Batch [20]#011Speed: 189.521 samples/sec#011accuracy=0.830357\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:43 INFO 140459943757632] Epoch[10] Train-accuracy=0.833669\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:43 INFO 140459943757632] Epoch[10] Time cost=5.055\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:43 INFO 140459943757632] Epoch[10] Validation-accuracy=0.520833\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:47 INFO 140459943757632] Epoch[11] Batch [20]#011Speed: 190.274 samples/sec#011accuracy=0.857143\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:49 INFO 140459943757632] Epoch[11] Train-accuracy=0.856855\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:49 INFO 140459943757632] Epoch[11] Time cost=5.044\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:49 INFO 140459943757632] Epoch[11] Validation-accuracy=0.558036\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:50 INFO 140459943757632] Storing the best model with validation accuracy: 0.558036\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:50 INFO 140459943757632] Saved checkpoint to \"/opt/ml/model/image-classification-0012.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:54 INFO 140459943757632] Epoch[12] Batch [20]#011Speed: 188.753 samples/sec#011accuracy=0.863095\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:55 INFO 140459943757632] Epoch[12] Train-accuracy=0.865927\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:55 INFO 140459943757632] Epoch[12] Time cost=5.053\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:36:56 INFO 140459943757632] Epoch[12] Validation-accuracy=0.536458\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:00 INFO 140459943757632] Epoch[13] Batch [20]#011Speed: 190.099 samples/sec#011accuracy=0.861607\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:01 INFO 140459943757632] Epoch[13] Train-accuracy=0.864919\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:01 INFO 140459943757632] Epoch[13] Time cost=5.036\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:02 INFO 140459943757632] Epoch[13] Validation-accuracy=0.484375\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:06 INFO 140459943757632] Epoch[14] Batch [20]#011Speed: 187.577 samples/sec#011accuracy=0.888393\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:07 INFO 140459943757632] Epoch[14] Train-accuracy=0.886089\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:07 INFO 140459943757632] Epoch[14] Time cost=5.071\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:08 INFO 140459943757632] Epoch[14] Validation-accuracy=0.500000\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:12 INFO 140459943757632] Epoch[15] Batch [20]#011Speed: 188.221 samples/sec#011accuracy=0.898810\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:13 INFO 140459943757632] Epoch[15] Train-accuracy=0.881048\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:13 INFO 140459943757632] Epoch[15] Time cost=5.042\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:14 INFO 140459943757632] Epoch[15] Validation-accuracy=0.526786\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:18 INFO 140459943757632] Epoch[16] Batch [20]#011Speed: 188.528 samples/sec#011accuracy=0.895833\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:19 INFO 140459943757632] Epoch[16] Train-accuracy=0.885081\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:19 INFO 140459943757632] Epoch[16] Time cost=5.039\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:20 INFO 140459943757632] Epoch[16] Validation-accuracy=0.557292\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:24 INFO 140459943757632] Epoch[17] Batch [20]#011Speed: 190.900 samples/sec#011accuracy=0.910714\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:25 INFO 140459943757632] Epoch[17] Train-accuracy=0.911290\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:25 INFO 140459943757632] Epoch[17] Time cost=5.004\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:26 INFO 140459943757632] Epoch[17] Validation-accuracy=0.536458\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:30 INFO 140459943757632] Epoch[18] Batch [20]#011Speed: 190.156 samples/sec#011accuracy=0.907738\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:31 INFO 140459943757632] Epoch[18] Train-accuracy=0.905242\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:31 INFO 140459943757632] Epoch[18] Time cost=5.033\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:32 INFO 140459943757632] Epoch[18] Validation-accuracy=0.510417\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:36 INFO 140459943757632] Epoch[19] Batch [20]#011Speed: 190.010 samples/sec#011accuracy=0.913690\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:37 INFO 140459943757632] Epoch[19] Train-accuracy=0.910282\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:37 INFO 140459943757632] Epoch[19] Time cost=5.013\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:38 INFO 140459943757632] Epoch[19] Validation-accuracy=0.500000\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:42 INFO 140459943757632] Epoch[20] Batch [20]#011Speed: 189.218 samples/sec#011accuracy=0.938988\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:44 INFO 140459943757632] Epoch[20] Train-accuracy=0.938508\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:44 INFO 140459943757632] Epoch[20] Time cost=5.055\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:44 INFO 140459943757632] Epoch[20] Validation-accuracy=0.494792\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:48 INFO 140459943757632] Epoch[21] Batch [20]#011Speed: 190.363 samples/sec#011accuracy=0.946429\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:49 INFO 140459943757632] Epoch[21] Train-accuracy=0.948589\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:49 INFO 140459943757632] Epoch[21] Time cost=5.010\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:50 INFO 140459943757632] Epoch[21] Validation-accuracy=0.510417\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:54 INFO 140459943757632] Epoch[22] Batch [20]#011Speed: 189.505 samples/sec#011accuracy=0.965774\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:55 INFO 140459943757632] Epoch[22] Train-accuracy=0.952621\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:55 INFO 140459943757632] Epoch[22] Time cost=5.025\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:37:56 INFO 140459943757632] Epoch[22] Validation-accuracy=0.505208\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:00 INFO 140459943757632] Epoch[23] Batch [20]#011Speed: 189.901 samples/sec#011accuracy=0.971726\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:01 INFO 140459943757632] Epoch[23] Train-accuracy=0.958669\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:01 INFO 140459943757632] Epoch[23] Time cost=5.032\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:02 INFO 140459943757632] Epoch[23] Validation-accuracy=0.526786\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:06 INFO 140459943757632] Epoch[24] Batch [20]#011Speed: 187.076 samples/sec#011accuracy=0.944940\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:08 INFO 140459943757632] Epoch[24] Train-accuracy=0.947581\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:08 INFO 140459943757632] Epoch[24] Time cost=5.068\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:08 INFO 140459943757632] Epoch[24] Validation-accuracy=0.526042\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:12 INFO 140459943757632] Epoch[25] Batch [20]#011Speed: 190.792 samples/sec#011accuracy=0.962798\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:14 INFO 140459943757632] Epoch[25] Train-accuracy=0.960685\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:14 INFO 140459943757632] Epoch[25] Time cost=5.010\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:14 INFO 140459943757632] Epoch[25] Validation-accuracy=0.567708\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:14 INFO 140459943757632] Storing the best model with validation accuracy: 0.567708\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:15 INFO 140459943757632] Saved checkpoint to \"/opt/ml/model/image-classification-0026.params\"\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:18 INFO 140459943757632] Epoch[26] Batch [20]#011Speed: 190.751 samples/sec#011accuracy=0.941964\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:20 INFO 140459943757632] Epoch[26] Train-accuracy=0.951613\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:20 INFO 140459943757632] Epoch[26] Time cost=4.996\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:20 INFO 140459943757632] Epoch[26] Validation-accuracy=0.473958\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:24 INFO 140459943757632] Epoch[27] Batch [20]#011Speed: 190.929 samples/sec#011accuracy=0.974702\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:26 INFO 140459943757632] Epoch[27] Train-accuracy=0.975806\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:26 INFO 140459943757632] Epoch[27] Time cost=5.016\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:26 INFO 140459943757632] Epoch[27] Validation-accuracy=0.513393\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:30 INFO 140459943757632] Epoch[28] Batch [20]#011Speed: 188.817 samples/sec#011accuracy=0.970238\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:32 INFO 140459943757632] Epoch[28] Train-accuracy=0.970766\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:32 INFO 140459943757632] Epoch[28] Time cost=5.051\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:32 INFO 140459943757632] Epoch[28] Validation-accuracy=0.515625\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:36 INFO 140459943757632] Epoch[29] Batch [20]#011Speed: 188.920 samples/sec#011accuracy=0.986607\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:38 INFO 140459943757632] Epoch[29] Train-accuracy=0.982863\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:38 INFO 140459943757632] Epoch[29] Time cost=5.026\u001b[0m\n",
+ "\u001b[34m[02/14/2023 18:38:39 INFO 140459943757632] Epoch[29] Validation-accuracy=0.552083\u001b[0m\n",
+ "\n",
+ "2023-02-14 18:39:03 Uploading - Uploading generated training model\n",
+ "2023-02-14 18:39:26 Completed - Training job completed\n",
+ "Training seconds: 408\n",
+ "Billable seconds: 408\n"
+ ]
+ }
+ ],
+ "source": [
+ "## TODO: train your model\n",
+ "img_classifier_model.fit(model_inputs)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If all goes well, you'll end up with a model topping out above `.8` validation accuracy. With only 1000 training samples in the CIFAR dataset, that's pretty good. We could definitely pursue data augmentation & gathering more samples to help us improve further, but for now let's proceed to deploy our model.\n",
+ "\n",
+ "### Getting ready to deploy\n",
+ "\n",
+ "To begin with, let's configure Model Monitor to track our deployment. We'll define a `DataCaptureConfig` below:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 103,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.model_monitor import DataCaptureConfig\n",
+ "\n",
+ "data_capture_config = DataCaptureConfig(\n",
+ " ## TODO: Set config options\n",
+ " enable_capture=True,\n",
+ " sampling_percentage=100,\n",
+ " destination_s3_uri=f\"s3://{bucket}/data_capture\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note the `destination_s3_uri` parameter: At the end of the project, we can explore the `data_capture` directory in S3 to find crucial data about the inputs and outputs Model Monitor has observed on our model endpoint over time.\n",
+ "\n",
+ "With that done, deploy your model on a single `ml.m5.xlarge` instance with the data capture config attached:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 104,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-------!image-classification-2023-02-14-13-25-18-287\n"
+ ]
+ }
+ ],
+ "source": [
+ "deployment = img_classifier_model.deploy(\n",
+ " ## TODO: fill in deployment options\n",
+ " data_capture_config=data_capture_config,\n",
+ " initial_instance_count=1, \n",
+ " instance_type='ml.m5.xlarge',\n",
+ " \n",
+ " )\n",
+ "\n",
+ "endpoint = deployment.endpoint_name\n",
+ "print(endpoint)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note the endpoint name for later as well.\n",
+ "\n",
+ "Next, instantiate a Predictor:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 105,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.predictor import Predictor\n",
+ "predictor = Predictor('image-classification-2023-02-14-13-25-18-287') ## TODO: fill in"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In the code snippet below we are going to prepare one of your saved images for prediction. Use the predictor to process the `payload`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 108,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.serializers import IdentitySerializer\n",
+ "import base64\n",
+ "import json\n",
+ "predictor.serializer = IdentitySerializer(\"image/png\")\n",
+ "with open(\"./test/bicycle_s_001789.png\", \"rb\") as f:\n",
+ " payload = f.read()\n",
+ "\n",
+ " \n",
+ "inference = predictor.predict(payload)## TODO: Process the payload with your predictor"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Your `inference` object is an array of two values, the predicted probability value for each of your classes (bicycle and motorcycle respectively.) So, for example, a value of `b'[0.91, 0.09]'` indicates the probability of being a bike is 91% and being a motorcycle is 9%."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 109,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b'[0.9987309575080872, 0.001269030850380659]'\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(inference)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "jp-MarkdownHeadingCollapsed": true,
+ "tags": []
+ },
+ "source": [
+ "### Draft Lambdas and Step Function Workflow\n",
+ "\n",
+ "Your operations team uses Step Functions to orchestrate serverless workflows. One of the nice things about Step Functions is that [workflows can call other workflows](https://docs.aws.amazon.com/step-functions/latest/dg/connect-stepfunctions.html), so the team can easily plug your workflow into the broader production architecture for Scones Unlimited.\n",
+ "\n",
+ "In this next stage you're going to write and deploy three Lambda functions, and then use the Step Functions visual editor to chain them together! Our functions are going to work with a simple data object:\n",
+ "\n",
+ "```python\n",
+ "{\n",
+ " \"inferences\": [], # Output of predictor.predict\n",
+ " \"s3_key\": \"\", # Source data S3 key\n",
+ " \"s3_bucket\": \"\", # Source data S3 bucket\n",
+ " \"image_data\": \"\" # base64 encoded string containing the image data\n",
+ "}\n",
+ "```\n",
+ "\n",
+ "A good test object that you can use for Lambda tests and Step Function executions, throughout the next section, might look like this:\n",
+ "\n",
+ "```python\n",
+ "{\n",
+ " \"image_data\": \"\",\n",
+ " \"s3_bucket\": MY_BUCKET_NAME, # Fill in with your bucket\n",
+ " \"s3_key\": \"test/bicycle_s_000513.png\"\n",
+ "}\n",
+ "```\n",
+ "\n",
+ "Using these fields, your functions can read and write the necessary data to execute your workflow. Let's start with the first function. Your first Lambda function will copy an object from S3, base64 encode it, and then return it to the step function as `image_data` in an event.\n",
+ "\n",
+ "Go to the Lambda dashboard and create a new Lambda function with a descriptive name like \"serializeImageData\" and select thr 'Python 3.8' runtime. Add the same permissions as the SageMaker role you created earlier. (Reminder: you do this in the Configuration tab under \"Permissions\"). Once you're ready, use the starter code below to craft your Lambda handler:\n",
+ "\n",
+ "```python\n",
+ "import json\n",
+ "import boto3\n",
+ "import base64\n",
+ "\n",
+ "s3 = boto3.client('s3')\n",
+ "\n",
+ "def lambda_handler(event, context):\n",
+ " \"\"\"A function to serialize target data from S3\"\"\"\n",
+ " \n",
+ " # Get the s3 address from the Step Function event input\n",
+ " key = ## TODO: fill in\n",
+ " bucket = ## TODO: fill in\n",
+ " \n",
+ " # Download the data from s3 to /tmp/image.png\n",
+ " ## TODO: fill in\n",
+ " \n",
+ " # We read the data from a file\n",
+ " with open(\"/tmp/image.png\", \"rb\") as f:\n",
+ " image_data = base64.b64encode(f.read())\n",
+ "\n",
+ " # Pass the data back to the Step Function\n",
+ " print(\"Event:\", event.keys())\n",
+ " return {\n",
+ " 'statusCode': 200,\n",
+ " 'body': {\n",
+ " \"image_data\": image_data,\n",
+ " \"s3_bucket\": bucket,\n",
+ " \"s3_key\": key,\n",
+ " \"inferences\": []\n",
+ " }\n",
+ " }\n",
+ "```\n",
+ "\n",
+ "The next function is responsible for the classification part - we're going to take the image output from the previous function, decode it, and then pass inferences back to the the Step Function.\n",
+ "\n",
+ "Because this Lambda will have runtime dependencies (i.e. the SageMaker SDK) you'll need to package them in your function. *Key reading:* https://docs.aws.amazon.com/lambda/latest/dg/python-package-create.html#python-package-create-with-dependency\n",
+ "\n",
+ "Create a new Lambda function with the same rights and a descriptive name, then fill in the starter code below for your classifier Lambda.\n",
+ "\n",
+ "```python\n",
+ "import json\n",
+ "import sagemaker\n",
+ "import base64\n",
+ "from sagemaker.serializers import IdentitySerializer\n",
+ "\n",
+ "# Fill this in with the name of your deployed model\n",
+ "ENDPOINT = ## TODO: fill in\n",
+ "\n",
+ "def lambda_handler(event, context):\n",
+ "\n",
+ " # Decode the image data\n",
+ " image = base64.b64decode(## TODO: fill in)\n",
+ "\n",
+ " # Instantiate a Predictor\n",
+ " predictor = ## TODO: fill in\n",
+ "\n",
+ " # For this model the IdentitySerializer needs to be \"image/png\"\n",
+ " predictor.serializer = IdentitySerializer(\"image/png\")\n",
+ " \n",
+ " # Make a prediction:\n",
+ " inferences = ## TODO: fill in\n",
+ " \n",
+ " # We return the data back to the Step Function \n",
+ " event[\"inferences\"] = inferences.decode('utf-8')\n",
+ " return {\n",
+ " 'statusCode': 200,\n",
+ " 'body': json.dumps(event)\n",
+ " }\n",
+ "```\n",
+ "\n",
+ "Finally, we need to filter low-confidence inferences. Define a threshold between 1.00 and 0.000 for your model: what is reasonble for you? If the model predicts at `.70` for it's highest confidence label, do we want to pass that inference along to downstream systems? Make one last Lambda function and tee up the same permissions:\n",
+ "\n",
+ "```python\n",
+ "import json\n",
+ "\n",
+ "\n",
+ "THRESHOLD = .93\n",
+ "\n",
+ "\n",
+ "def lambda_handler(event, context):\n",
+ " \n",
+ " # Grab the inferences from the event\n",
+ " inferences = ## TODO: fill in\n",
+ " \n",
+ " # Check if any values in our inferences are above THRESHOLD\n",
+ " meets_threshold = ## TODO: fill in\n",
+ " \n",
+ " # If our threshold is met, pass our data back out of the\n",
+ " # Step Function, else, end the Step Function with an error\n",
+ " if meets_threshold:\n",
+ " pass\n",
+ " else:\n",
+ " raise(\"THRESHOLD_CONFIDENCE_NOT_MET\")\n",
+ "\n",
+ " return {\n",
+ " 'statusCode': 200,\n",
+ " 'body': json.dumps(event)\n",
+ " }\n",
+ "```\n",
+ "Once you have tested the lambda functions, save the code for each lambda function in a python script called 'lambda.py'.\n",
+ "\n",
+ "With your lambdas in place, you can use the Step Functions visual editor to construct a workflow that chains them together. In the Step Functions console you'll have the option to author a Standard step function *Visually*.\n",
+ "\n",
+ "When the visual editor opens, you'll have many options to add transitions in your workflow. We're going to keep it simple and have just one: to inbc83d5eb0be10e316708b03ecf7fcc5fvoke Lambda functions. Add three of them chained together. For each one, you'll be able to select the Lambda functions you just created in the proper order, filter inputs and outputs, and give them descriptive names.\n",
+ "\n",
+ "Make sure that you:\n",
+ "\n",
+ "1. Are properly filtering the inputs and outputs of your invokations (e.g. `$.body`)\n",
+ "2. Take care to remove the error handling from the last function - it's supposed to \"fail loudly\" for your operations colleagues!\n",
+ "\n",
+ "Take a screenshot of your working step function in action and export the step function as JSON for your submission package."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Great! Now you can use the files in `./test` as test files for our workflow. Depending on our threshold, our workflow should reliably pass predictions about images from `./test` on to downstream systems, while erroring out for inferences below our confidence threshold!\n",
+ "\n",
+ "### Testing and Evaluation\n",
+ "\n",
+ "Do several step function invokations using data from the `./test` folder. This process should give you confidence that the workflow both *succeeds* AND *fails* as expected. In addition, SageMaker Model Monitor will generate recordings of your data and inferences which we can visualize.\n",
+ "\n",
+ "Here's a function that can help you generate test inputs for your invokations:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 132,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'{\"image_data\": \"\", \"s3_bucket\": \"udacity-ml-workflow\", \"s3_key\": \"test/ordinary_bicycle_s_000431.png\"}'"
+ ]
+ },
+ "execution_count": 132,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import random\n",
+ "import boto3\n",
+ "import json\n",
+ "\n",
+ "\n",
+ "def generate_test_case():\n",
+ " # Setup s3 in boto3\n",
+ " s3 = boto3.resource('s3')\n",
+ " \n",
+ " # Randomly pick from sfn or test folders in our bucket\n",
+ " objects = s3.Bucket(bucket).objects.filter(Prefix=\"test\")\n",
+ " \n",
+ " # Grab any random object key from that folder!\n",
+ " obj = random.choice([x.key for x in objects])\n",
+ " \n",
+ " return json.dumps({\n",
+ " \"image_data\": \"\",\n",
+ " \"s3_bucket\": bucket,\n",
+ " \"s3_key\": obj\n",
+ " })\n",
+ "generate_test_case()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In the Step Function dashboard for your new function, you can create new executions and copy in the generated test cases. Do several executions so that you can generate data you can evaluate and visualize.\n",
+ "\n",
+ "Once you've done several executions, let's visualize the record of our inferences. Pull in the JSONLines data from your inferences like so:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 135,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from sagemaker.s3 import S3Downloader\n",
+ "\n",
+ "# In S3 your data will be saved to a datetime-aware path\n",
+ "# Find a path related to a datetime you're interested in\n",
+ "data_path = \"s3://udacity-ml-workflow/data_capture/image-classification-2023-02-14-13-25-18-287/AllTraffic/2023/02/14/13/42-58-655-83d904b7-a5b0-4a0f-93d7-60d194497d27.jsonl\"## TODO: fill in the path to your captured data\n",
+ "\n",
+ "S3Downloader.download(data_path, \"captured_data\")\n",
+ "\n",
+ "# Feel free to repeat this multiple times and pull in more data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The data are in JSONLines format, where multiple valid JSON objects are stacked on top of eachother in a single `jsonl` file. We'll import an open-source library, `jsonlines` that was purpose built for parsing this format."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 136,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Keyring is skipped due to an exception: 'keyring.backends'\n",
+ "Requirement already satisfied: jsonlines in /opt/conda/lib/python3.7/site-packages (3.1.0)\n",
+ "Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.7/site-packages (from jsonlines) (4.4.0)\n",
+ "Requirement already satisfied: attrs>=19.2.0 in /opt/conda/lib/python3.7/site-packages (from jsonlines) (22.1.0)\n",
+ "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n",
+ "\u001b[0m\n",
+ "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.0\u001b[0m\n",
+ "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install jsonlines\n",
+ "import jsonlines"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can extract the data from each of the source files:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 137,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "\n",
+ "# List the file names we downloaded\n",
+ "file_handles = os.listdir(\"./captured_data\")\n",
+ "\n",
+ "# Dump all the data into an array\n",
+ "json_data = []\n",
+ "for jsonl in file_handles:\n",
+ " with jsonlines.open(f\"./captured_data/{jsonl}\") as f:\n",
+ " json_data.append(f.read())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The data should now be a list of dictionaries, with significant nesting. We'll give you an example of some code that grabs data out of the objects and visualizes it:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 138,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "([0.9987309575080872, 0.001269030850380659], '2023-02-14T13:42:58Z')"
+ ]
+ },
+ "execution_count": 138,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Define how we'll get our data\n",
+ "def simple_getter(obj):\n",
+ " inferences = obj[\"captureData\"][\"endpointOutput\"][\"data\"]\n",
+ " timestamp = obj[\"eventMetadata\"][\"inferenceTime\"]\n",
+ " return json.loads(inferences), timestamp\n",
+ "\n",
+ "simple_getter(json_data[0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Finally, here's an example of a visualization you can build with this data. In this last part, you will take some time and build your own - the captured data has the input images, the resulting inferences, and the timestamps."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 147,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'captureData': {'endpointInput': {'observedContentType': 'image/png',\n",
+ " 'mode': 'INPUT',\n",
+ " 'data': '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',\n",
+ " 'encoding': 'BASE64'},\n",
+ " 'endpointOutput': {'observedContentType': 'application/json',\n",
+ " 'mode': 'OUTPUT',\n",
+ " 'data': '[0.9987309575080872, 0.001269030850380659]',\n",
+ " 'encoding': 'JSON'}},\n",
+ " 'eventMetadata': {'eventId': '57ba9915-6477-481e-886e-f2e8baf84035',\n",
+ " 'inferenceTime': '2023-02-14T13:42:58Z'},\n",
+ " 'eventVersion': '0'}"
+ ]
+ },
+ "execution_count": 147,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "obj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 148,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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iMwotoCvUStuJnGny6RFpjO73U5MdDQer1eLkmTGi42J+cxdHyF/hioiIjIdKFBFREQsoEAVERGxgAJVRETEAgpUERERCyhQRURELKBAFRERsYACVURExAIKVBEREQsoUEVERCygQBUREbGAAlVERMQCClQRERELKFBFREQsoEAVERGxgAJVRETEAgpUERERCyhQRURELKBAFRERsYACVURExAIKVBEREQsoUEVERCygQBUREbGAAlVERMQCClQRERELKFBFREQsoEAVERGxgAJVRETEAgpUERERCyhQRURELKBAFRERsYACVURExAIKVBEREQsoUEVERCygQBUREbGAAlVERMQCClQRERELKFBFREQsoEAVERGxgAJVRETEAgpUERERCzhD3YFr9lXUsOvwGfq9PjJTEnhh80ryZ6dN2jYQMNhxqIpPqi7R5xkkLSmO5x5dRmFu1l1fU0RE5F48EDPUiuo6Xt91lG1rivnebz1FXnYqP3htFz393knbv7O/kgOV5/nyY6X8xbefZf3S+fzwjb00tHXf9TVFRETuxQMRqLuPnGXNQ/msXVJARnI8L24pJSE2iv2VtZO2P3L6EtvWFFGUl0VKQgwPL1vAopxMdh85e9fXFBERuRchv+XrDwRoaO3msbKiCccX5mRyuanjFucYuJyOCcdcTicXG9vv+ppj/gD+QCD42TRNAGw2Gzab7fMNSmSasNvtE76KzESmaQYz4bOEPFC9vhEM0yQ2OmLC8dioCAa8Q5OeMz4brSZvdjopCTHU1LVy6nxDcMB3c80dh6p4r/xU8LPb5eSvfvspYqKjFagy40VFRoa6CyIhY5omAx7PbduFPFCv+XRkmaZ588GrXtxcyk/eP8hf/vBtbEBKQgyrS/I5dOrCXV9z6+piNpUWTmg7NjqCx+tVoMqMZbfbiYqMZNDnwzCMUHdHJCTuZHYKD0CgRke6sdts9H9q5ujxDRMbFTHpOTFR4fzOCxsZ8/vx+kaIj4nk7b3HSY6PuetrupyOCbeRrwXqnU71RaYzwzAUqCK3EfIHI06Hg9kZSZyra5lw/FxdCzlZqZ95rsvpJCE2CsMwOVFTT0lB9j1fU0RE5G6EfIYKsKm0kFfeKWdORjI5WSmUnzhPb/8g65fOB+CVd8uJj4nk2UeWAVDX3Emfx0dWWiJ9Hh/by09imiZbyhbf8TVF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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Populate the data for the x and y axis\n",
+ "x = []\n",
+ "y = []\n",
+ "for obj in json_data:\n",
+ " inference, timestamp = simple_getter(obj)\n",
+ " \n",
+ " y.append(max(inference))\n",
+ " x.append(timestamp)\n",
+ "\n",
+ "# Todo: here is an visualization example, take some time to build another visual that helps monitor the result\n",
+ "# Plot the data\n",
+ "plt.figure(figsize=(5,5))\n",
+ "plt.scatter(x, y, c=['r' if k<.94 else 'b' for k in y ])\n",
+ "plt.axhline(y=0.94, color='g', linestyle='--')\n",
+ "plt.ylim(bottom=.88)\n",
+ "\n",
+ "# Add labels\n",
+ "plt.ylabel(\"Confidence\")\n",
+ "plt.suptitle(\"Observed Recent Inferences\", size=14)\n",
+ "plt.title(\"Pictured with confidence threshold for production use\", size=10)\n",
+ "\n",
+ "# Give it some pizzaz!\n",
+ "plt.style.use(\"Solarize_Light2\")\n",
+ "plt.gcf().autofmt_xdate()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Congratulations!\n",
+ "\n",
+ "You've reached the end of the project. In this project you created an event-drivent ML workflow that can be incorporated into the Scones Unlimited production architecture. You used the SageMaker Estimator API to deploy your SageMaker Model and Endpoint, and you used AWS Lambda and Step Functions to orchestrate your ML workflow. Using SageMaker Model Monitor, you instrumented and observed your Endpoint, and at the end of the project you built a visualization to help stakeholders understand the performance of the Endpoint over time. If you're up for it, you can even go further with these stretch goals:\n",
+ "\n",
+ "* Extend your workflow to incorporate more classes: the CIFAR dataset includes other vehicles that Scones Unlimited can identify with this model.\n",
+ "* Modify your event driven workflow: can you rewrite your Lambda functions so that the workflow can process multiple image inputs in parallel? Can the Step Function \"fan out\" to accomodate this new workflow?\n",
+ "* Consider the test data generator we provided for you. Can we use it to create a \"dummy data\" generator, to simulate a continuous stream of input data? Or a big paralell load of data?\n",
+ "* What if we want to get notified every time our step function errors out? Can we use the Step Functions visual editor in conjunction with a service like SNS to accomplish this? Try it out!\n",
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "instance_type": "ml.t3.medium",
+ "kernelspec": {
+ "display_name": "Python 3 (Data Science)",
+ "language": "python",
+ "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0"
+ },
+ "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.7.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/project/starter.html b/project/starter.html
new file mode 100644
index 000000000..a90445d1a
--- /dev/null
+++ b/project/starter.html
@@ -0,0 +1,18495 @@
+
+
+
+
+
+starter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Deploy and monitor a machine learning workflow for Image Classification¶
We'll use a sample dataset called CIFAR to simulate the challenges Scones Unlimited are facing in Image Classification. In order to start working with CIFAR we'll need to:
+
+
Extract the data from a hosting service
+
Transform it into a usable shape and format
+
Load it into a production system
+
+
In other words, we're going to do some simple ETL!
In the cell below, define a function extract_cifar_data that extracts python version of the CIFAR-100 dataset. The CIFAR dataaset is open source and generously hosted by the University of Toronto at: https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz
+
+
+
+
+
+
+
+
+
+
In [4]:
+
+
+
importrequests
+
+defextract_cifar_data(url,filename="cifar.tar.gz"):
+ """A function for extracting the CIFAR-100 dataset and storing it as a gzipped file
+
+ Arguments:
+ url -- the URL where the dataset is hosted
+ filename -- the full path where the dataset will be written
+
+ """
+
+ # Todo: request the data from the data url
+ # Hint: use `requests.get` method
+ r=requests.get(url)
+ withopen(filename,"wb")asfile_context:
+ file_context.write(r.content)
+ return
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Let's test it out! Run the following cell and check whether a new file cifar.tar.gz is created in the file explorer.
2. Transform the data into a usable shape and format¶
Clearly, distributing the data as a gzipped archive makes sense for the hosting service! It saves on bandwidth, storage, and it's a widely-used archive format. In fact, it's so widely used that the Python community ships a utility for working with them, tarfile, as part of its Standard Library. Execute the following cell to decompress your extracted dataset:
A new folder cifar-100-python should be created, containing meta, test, and train files. These files are pickles and the CIFAR homepage provides a simple script that can be used to load them. We've adapted the script below for you to run:
As documented on the homepage, b'data' contains rows of 3073 unsigned integers, representing three channels (red, green, and blue) for one 32x32 pixel image per row.
+
+
+
+
+
+
+
+
+
+
In [9]:
+
+
+
32*32*3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Out[9]:
+
+
+
+
+
+
3072
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
For a simple gut-check, let's transform one of our images. Each 1024 items in a row is a channel (red, green, then blue). Each 32 items in the channel are a row in the 32x32 image. Using python, we can stack these channels into a 32x32x3 array, and save it as a PNG file:
+
+
+
+
+
+
+
+
+
+
In [10]:
+
+
+
importnumpyasnp
+
+# Each 1024 in a row is a channel (red, green, then blue)
+row=dataset_train[b'data'][0]
+red,green,blue=row[0:1024],row[1024:2048],row[2048:]
+
+# Each 32 items in the channel are a row in the 32x32 image
+red=red.reshape(32,32)
+green=green.reshape(32,32)
+blue=blue.reshape(32,32)
+
+# Combine the channels into a 32x32x3 image!
+combined=np.dstack((red,green,blue))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
For a more concise version, consider the following:
+
+
+
+
+
+
+
+
+
+
In [11]:
+
+
+
# All in one:
+test_image=np.dstack((
+ row[0:1024].reshape(32,32),
+ row[1024:2048].reshape(32,32),
+ row[2048:].reshape(32,32)
+))
+
Now we know how to check labels, is there a way that we can also check file names? dataset_train also contains a b'filenames' key. Let's see what we have here:
+
+
+
+
+
+
+
+
+
+
In [16]:
+
+
+
print(dataset_train[b'filenames'][0])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
b'bos_taurus_s_000507.png'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
"Taurus" is the name of a subspecies of cattle, so this looks like a pretty reasonable filename. To save an image we can also do:
+
+
+
+
+
+
+
+
+
+
In [17]:
+
+
+
plt.imsave("file.png",test_image)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Your new PNG file should now appear in the file explorer -- go ahead and pop it open to see!
+
Now that you know how to reshape the images, save them as files, and capture their filenames and labels, let's just capture all the bicycles and motorcycles and save them. Scones Unlimited can use a model that tells these apart to route delivery drivers automatically.
+
In the following cell, identify the label numbers for Bicycles and Motorcycles:
importpandasaspd
+
+# Todo: Filter the dataset_train and dataset_meta objects to find the label numbers for Bicycle and Motorcycles
+motor_label=dataset_meta[b'fine_label_names'][48]
+bicycle_label=dataset_meta[b'fine_label_names'][8]
+print('Motorcycle Label 48:',dataset_meta[b'fine_label_names'][48])
+print('Bicycle Label 8:',dataset_meta[b'fine_label_names'][8])
+
Good job! We only need objects with label 8 and 48 -- this drastically simplifies our handling of the data! Below we construct a dataframe for you, and you can safely drop the rows that don't contain observations about bicycles and motorcycles. Fill in the missing lines below to drop all other rows:
+
+
+
+
+
+
+
+
+
+
In [62]:
+
+
+
#Construct the dataframe
+df_train=pd.DataFrame({
+ "filenames":dataset_train[b'filenames'],
+ "labels":dataset_train[b'fine_labels'],
+ "row":range(len(dataset_train[b'filenames']))
+})
+
+# Drop all rows from df_train where label is not 8 or 48
+mask_train=(df_train['labels']==8)|(df_train['labels']==48)
+df_train=df_train[mask_train]
+
+# Decode df_train.filenames so they are regular strings
+df_train["filenames"]=df_train["filenames"].apply(
+ lambdax:x.decode("utf-8")
+)
+
+
+df_test=pd.DataFrame({
+ "filenames":dataset_test[b'filenames'],
+ "labels":dataset_test[b'fine_labels'],
+ "row":range(len(dataset_test[b'filenames']))
+})
+
+# Drop all rows from df_test where label is not 8 or 48
+mask_test=(df_test['labels']==8)|(df_test['labels']==48)
+df_test=df_test[mask_test]
+
+# Decode df_test.filenames so they are regular strings
+df_test["filenames"]=df_test["filenames"].apply(
+ lambdax:x.decode("utf-8")
+)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Now that the data is filtered for just our classes, we can save all our images.
+
+
+
+
+
+
+
+
+
+
In [63]:
+
+
+
!mkdir ./train
+!mkdir ./test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
In the previous sections we introduced you to several key snippets of code:
+
+
Grabbing the image data:
+
+
dataset_train[b'data'][0]
+
+
+
A simple idiom for stacking the image data into the right shape
Compose these together into a function that saves all the images into the ./test and ./train directories. Use the comments in the body of the save_images function below to guide your construction of the function:
defsave_images(data,path,filename):
+ #Grab the image data in row-major form
+ img=data
+
+ # Consolidated stacking/reshaping from earlier
+ target=np.dstack((img[0:1024].reshape(32,32),
+ img[1024:2048].reshape(32,32),
+ img[2048:].reshape(32,32)
+ ))
+
+
+ # Save the image
+ plt.imsave(path+filename,target)
+
+ # Return any signal data you want for debugging
+ returnTrue
+
+## TODO: save ALL images using the save_images function
+forindex,rowindf_train.iterrows():
+ name=row['filenames']
+ path='train/'
+ data=dataset_train[b'data'][row['row']]
+ save_images(data,path,name)
+
+forindex,rowindf_test.iterrows():
+ name=row['filenames']
+ path='test/'
+ data=dataset_train[b'data'][row['row']]
+ save_images(data,path,name)
+
upload: train/bicycle_s_000017.png to s3://udacity-ml-workflow/train/bicycle_s_000017.png
+upload: train/bicycle_s_000124.png to s3://udacity-ml-workflow/train/bicycle_s_000124.png
+upload: train/bicycle_s_000021.png to s3://udacity-ml-workflow/train/bicycle_s_000021.png
+upload: train/bicycle_s_000039.png to s3://udacity-ml-workflow/train/bicycle_s_000039.png
+upload: train/bicycle_s_000043.png to s3://udacity-ml-workflow/train/bicycle_s_000043.png
+upload: train/bicycle_s_000137.png to s3://udacity-ml-workflow/train/bicycle_s_000137.png
+upload: train/bicycle_s_000149.png to s3://udacity-ml-workflow/train/bicycle_s_000149.png
+upload: train/bicycle_s_000038.png to s3://udacity-ml-workflow/train/bicycle_s_000038.png
+upload: train/bicycle_s_000071.png to s3://udacity-ml-workflow/train/bicycle_s_000071.png
+upload: train/bicycle_s_000156.png to s3://udacity-ml-workflow/train/bicycle_s_000156.png
+upload: train/bicycle_s_000147.png to s3://udacity-ml-workflow/train/bicycle_s_000147.png
+upload: train/bicycle_s_000051.png to s3://udacity-ml-workflow/train/bicycle_s_000051.png
+upload: train/bicycle_s_000282.png to s3://udacity-ml-workflow/train/bicycle_s_000282.png
+upload: train/bicycle_s_000180.png to s3://udacity-ml-workflow/train/bicycle_s_000180.png
+upload: train/bicycle_s_000035.png to s3://udacity-ml-workflow/train/bicycle_s_000035.png
+upload: train/bicycle_s_000243.png to s3://udacity-ml-workflow/train/bicycle_s_000243.png
+upload: train/bicycle_s_000235.png to s3://udacity-ml-workflow/train/bicycle_s_000235.png
+upload: train/bicycle_s_000231.png to s3://udacity-ml-workflow/train/bicycle_s_000231.png
+upload: train/bicycle_s_000099.png to s3://udacity-ml-workflow/train/bicycle_s_000099.png
+upload: train/bicycle_s_000437.png to s3://udacity-ml-workflow/train/bicycle_s_000437.png
+upload: train/bicycle_s_000371.png to s3://udacity-ml-workflow/train/bicycle_s_000371.png
+upload: train/bicycle_s_000392.png to s3://udacity-ml-workflow/train/bicycle_s_000392.png
+upload: train/bicycle_s_000314.png to s3://udacity-ml-workflow/train/bicycle_s_000314.png
+upload: train/bicycle_s_000066.png to s3://udacity-ml-workflow/train/bicycle_s_000066.png
+upload: train/bicycle_s_000467.png to s3://udacity-ml-workflow/train/bicycle_s_000467.png
+upload: train/bicycle_s_000159.png to s3://udacity-ml-workflow/train/bicycle_s_000159.png
+upload: train/bicycle_s_000279.png to s3://udacity-ml-workflow/train/bicycle_s_000279.png
+upload: train/bicycle_s_000399.png to s3://udacity-ml-workflow/train/bicycle_s_000399.png
+upload: train/bicycle_s_000491.png to s3://udacity-ml-workflow/train/bicycle_s_000491.png
+upload: train/bicycle_s_000536.png to s3://udacity-ml-workflow/train/bicycle_s_000536.png
+upload: train/bicycle_s_000546.png to s3://udacity-ml-workflow/train/bicycle_s_000546.png
+upload: train/bicycle_s_000369.png to s3://udacity-ml-workflow/train/bicycle_s_000369.png
+upload: train/bicycle_s_000435.png to s3://udacity-ml-workflow/train/bicycle_s_000435.png
+upload: train/bicycle_s_000396.png to s3://udacity-ml-workflow/train/bicycle_s_000396.png
+upload: train/bicycle_s_000537.png to s3://udacity-ml-workflow/train/bicycle_s_000537.png
+upload: train/bicycle_s_000561.png to s3://udacity-ml-workflow/train/bicycle_s_000561.png
+upload: train/bicycle_s_000408.png to s3://udacity-ml-workflow/train/bicycle_s_000408.png
+upload: train/bicycle_s_000667.png to s3://udacity-ml-workflow/train/bicycle_s_000667.png
+upload: train/bicycle_s_000569.png to s3://udacity-ml-workflow/train/bicycle_s_000569.png
+upload: train/bicycle_s_000723.png to s3://udacity-ml-workflow/train/bicycle_s_000723.png
+upload: train/bicycle_s_000759.png to s3://udacity-ml-workflow/train/bicycle_s_000759.png
+upload: train/bicycle_s_000522.png to s3://udacity-ml-workflow/train/bicycle_s_000522.png
+upload: train/bicycle_s_000775.png to s3://udacity-ml-workflow/train/bicycle_s_000775.png
+upload: train/bicycle_s_000753.png to s3://udacity-ml-workflow/train/bicycle_s_000753.png
+upload: train/bicycle_s_000822.png to s3://udacity-ml-workflow/train/bicycle_s_000822.png
+upload: train/bicycle_s_000782.png to s3://udacity-ml-workflow/train/bicycle_s_000782.png
+upload: train/bicycle_s_000785.png to s3://udacity-ml-workflow/train/bicycle_s_000785.png
+upload: train/bicycle_s_000668.png to s3://udacity-ml-workflow/train/bicycle_s_000668.png
+upload: train/bicycle_s_000781.png to s3://udacity-ml-workflow/train/bicycle_s_000781.png
+upload: train/bicycle_s_000463.png to s3://udacity-ml-workflow/train/bicycle_s_000463.png
+upload: train/bicycle_s_000996.png to s3://udacity-ml-workflow/train/bicycle_s_000996.png
+upload: train/bicycle_s_000986.png to s3://udacity-ml-workflow/train/bicycle_s_000986.png
+upload: train/bicycle_s_001111.png to s3://udacity-ml-workflow/train/bicycle_s_001111.png
+upload: train/bicycle_s_000778.png to s3://udacity-ml-workflow/train/bicycle_s_000778.png
+upload: train/bicycle_s_000774.png to s3://udacity-ml-workflow/train/bicycle_s_000774.png
+upload: train/bicycle_s_001168.png to s3://udacity-ml-workflow/train/bicycle_s_001168.png
+upload: train/bicycle_s_000829.png to s3://udacity-ml-workflow/train/bicycle_s_000829.png
+upload: train/bicycle_s_000951.png to s3://udacity-ml-workflow/train/bicycle_s_000951.png
+upload: train/bicycle_s_000861.png to s3://udacity-ml-workflow/train/bicycle_s_000861.png
+upload: train/bicycle_s_001174.png to s3://udacity-ml-workflow/train/bicycle_s_001174.png
+upload: train/bicycle_s_001002.png to s3://udacity-ml-workflow/train/bicycle_s_001002.png
+upload: train/bicycle_s_001205.png to s3://udacity-ml-workflow/train/bicycle_s_001205.png
+upload: train/bicycle_s_001203.png to s3://udacity-ml-workflow/train/bicycle_s_001203.png
+upload: train/bicycle_s_001228.png to s3://udacity-ml-workflow/train/bicycle_s_001228.png
+upload: train/bicycle_s_001245.png to s3://udacity-ml-workflow/train/bicycle_s_001245.png
+upload: train/bicycle_s_001348.png to s3://udacity-ml-workflow/train/bicycle_s_001348.png
+upload: train/bicycle_s_000978.png to s3://udacity-ml-workflow/train/bicycle_s_000978.png
+upload: train/bicycle_s_001411.png to s3://udacity-ml-workflow/train/bicycle_s_001411.png
+upload: train/bicycle_s_001338.png to s3://udacity-ml-workflow/train/bicycle_s_001338.png
+upload: train/bicycle_s_001388.png to s3://udacity-ml-workflow/train/bicycle_s_001388.png
+upload: train/bicycle_s_001448.png to s3://udacity-ml-workflow/train/bicycle_s_001448.png
+upload: train/bicycle_s_001402.png to s3://udacity-ml-workflow/train/bicycle_s_001402.png
+upload: train/bicycle_s_001452.png to s3://udacity-ml-workflow/train/bicycle_s_001452.png
+upload: train/bicycle_s_001247.png to s3://udacity-ml-workflow/train/bicycle_s_001247.png
+upload: train/bicycle_s_001409.png to s3://udacity-ml-workflow/train/bicycle_s_001409.png
+upload: train/bicycle_s_001554.png to s3://udacity-ml-workflow/train/bicycle_s_001554.png
+upload: train/bicycle_s_001569.png to s3://udacity-ml-workflow/train/bicycle_s_001569.png
+upload: train/bicycle_s_001583.png to s3://udacity-ml-workflow/train/bicycle_s_001583.png
+upload: train/bicycle_s_001470.png to s3://udacity-ml-workflow/train/bicycle_s_001470.png
+upload: train/bicycle_s_001663.png to s3://udacity-ml-workflow/train/bicycle_s_001663.png
+upload: train/bicycle_s_001679.png to s3://udacity-ml-workflow/train/bicycle_s_001679.png
+upload: train/bicycle_s_001681.png to s3://udacity-ml-workflow/train/bicycle_s_001681.png
+upload: train/bicycle_s_001688.png to s3://udacity-ml-workflow/train/bicycle_s_001688.png
+upload: train/bicycle_s_001748.png to s3://udacity-ml-workflow/train/bicycle_s_001748.png
+upload: train/bicycle_s_001642.png to s3://udacity-ml-workflow/train/bicycle_s_001642.png
+upload: train/bicycle_s_001687.png to s3://udacity-ml-workflow/train/bicycle_s_001687.png
+upload: train/bicycle_s_001693.png to s3://udacity-ml-workflow/train/bicycle_s_001693.png
+upload: train/bicycle_s_001757.png to s3://udacity-ml-workflow/train/bicycle_s_001757.png
+upload: train/bicycle_s_001814.png to s3://udacity-ml-workflow/train/bicycle_s_001814.png
+upload: train/bicycle_s_001956.png to s3://udacity-ml-workflow/train/bicycle_s_001956.png
+upload: train/bicycle_s_001904.png to s3://udacity-ml-workflow/train/bicycle_s_001904.png
+upload: train/bicycle_s_002012.png to s3://udacity-ml-workflow/train/bicycle_s_002012.png
+upload: train/bicycle_s_002005.png to s3://udacity-ml-workflow/train/bicycle_s_002005.png
+upload: train/bicycle_s_002029.png to s3://udacity-ml-workflow/train/bicycle_s_002029.png
+upload: train/bicycle_s_001673.png to s3://udacity-ml-workflow/train/bicycle_s_001673.png
+upload: train/bicycle_s_001928.png to s3://udacity-ml-workflow/train/bicycle_s_001928.png
+upload: train/bicycle_s_002129.png to s3://udacity-ml-workflow/train/bicycle_s_002129.png
+upload: train/bicycle_s_002132.png to s3://udacity-ml-workflow/train/bicycle_s_002132.png
+upload: train/bicycle_s_002153.png to s3://udacity-ml-workflow/train/bicycle_s_002153.png
+upload: train/bicycle_s_002049.png to s3://udacity-ml-workflow/train/bicycle_s_002049.png
+upload: train/bicycle_s_002222.png to s3://udacity-ml-workflow/train/bicycle_s_002222.png
+upload: train/bicycle_s_002237.png to s3://udacity-ml-workflow/train/bicycle_s_002237.png
+upload: train/bicycle_s_002100.png to s3://udacity-ml-workflow/train/bicycle_s_002100.png
+upload: train/bicycle_s_002218.png to s3://udacity-ml-workflow/train/bicycle_s_002218.png
+upload: train/bicycle_s_002247.png to s3://udacity-ml-workflow/train/bicycle_s_002247.png
+upload: train/bicycle_s_002258.png to s3://udacity-ml-workflow/train/bicycle_s_002258.png
+upload: train/bicycle_s_002374.png to s3://udacity-ml-workflow/train/bicycle_s_002374.png
+upload: train/bicycle_s_002299.png to s3://udacity-ml-workflow/train/bicycle_s_002299.png
+upload: train/bicycle_s_002400.png to s3://udacity-ml-workflow/train/bicycle_s_002400.png
+upload: train/bicycle_s_002410.png to s3://udacity-ml-workflow/train/bicycle_s_002410.png
+upload: train/bicycle_s_002448.png to s3://udacity-ml-workflow/train/bicycle_s_002448.png
+upload: train/bicycle_s_002338.png to s3://udacity-ml-workflow/train/bicycle_s_002338.png
+upload: train/bicycle_s_002521.png to s3://udacity-ml-workflow/train/bicycle_s_002521.png
+upload: train/bicycle_s_002661.png to s3://udacity-ml-workflow/train/bicycle_s_002661.png
+upload: train/bicycle_s_002624.png to s3://udacity-ml-workflow/train/bicycle_s_002624.png
+upload: train/bicycle_s_002475.png to s3://udacity-ml-workflow/train/bicycle_s_002475.png
+upload: train/bicycle_s_002569.png to s3://udacity-ml-workflow/train/bicycle_s_002569.png
+upload: train/bicycle_s_002711.png to s3://udacity-ml-workflow/train/bicycle_s_002711.png
+upload: train/bicycle_s_002550.png to s3://udacity-ml-workflow/train/bicycle_s_002550.png
+upload: train/bicycle_s_002725.png to s3://udacity-ml-workflow/train/bicycle_s_002725.png
+upload: train/bicycle_s_002436.png to s3://udacity-ml-workflow/train/bicycle_s_002436.png
+upload: train/bicycle_s_002759.png to s3://udacity-ml-workflow/train/bicycle_s_002759.png
+upload: train/bicycle_s_002715.png to s3://udacity-ml-workflow/train/bicycle_s_002715.png
+upload: train/bicycle_s_002729.png to s3://udacity-ml-workflow/train/bicycle_s_002729.png
+upload: train/bicycle_s_002728.png to s3://udacity-ml-workflow/train/bicycle_s_002728.png
+upload: train/bicycle_s_002373.png to s3://udacity-ml-workflow/train/bicycle_s_002373.png
+upload: train/bicycle_s_002762.png to s3://udacity-ml-workflow/train/bicycle_s_002762.png
+upload: train/bike_s_000018.png to s3://udacity-ml-workflow/train/bike_s_000018.png
+upload: train/bike_s_000003.png to s3://udacity-ml-workflow/train/bike_s_000003.png
+upload: train/bike_s_000015.png to s3://udacity-ml-workflow/train/bike_s_000015.png
+upload: train/bike_s_000001.png to s3://udacity-ml-workflow/train/bike_s_000001.png
+upload: train/bike_s_000023.png to s3://udacity-ml-workflow/train/bike_s_000023.png
+upload: train/bicycle_s_002669.png to s3://udacity-ml-workflow/train/bicycle_s_002669.png
+upload: train/bike_s_000005.png to s3://udacity-ml-workflow/train/bike_s_000005.png
+upload: train/bike_s_000025.png to s3://udacity-ml-workflow/train/bike_s_000025.png
+upload: train/bike_s_000034.png to s3://udacity-ml-workflow/train/bike_s_000034.png
+upload: train/bike_s_000035.png to s3://udacity-ml-workflow/train/bike_s_000035.png
+upload: train/bike_s_000062.png to s3://udacity-ml-workflow/train/bike_s_000062.png
+upload: train/bike_s_000026.png to s3://udacity-ml-workflow/train/bike_s_000026.png
+upload: train/bike_s_000121.png to s3://udacity-ml-workflow/train/bike_s_000121.png
+upload: train/bike_s_000021.png to s3://udacity-ml-workflow/train/bike_s_000021.png
+upload: train/bike_s_000040.png to s3://udacity-ml-workflow/train/bike_s_000040.png
+upload: train/bike_s_000127.png to s3://udacity-ml-workflow/train/bike_s_000127.png
+upload: train/bike_s_000111.png to s3://udacity-ml-workflow/train/bike_s_000111.png
+upload: train/bike_s_000154.png to s3://udacity-ml-workflow/train/bike_s_000154.png
+upload: train/bike_s_000162.png to s3://udacity-ml-workflow/train/bike_s_000162.png
+upload: train/bike_s_000129.png to s3://udacity-ml-workflow/train/bike_s_000129.png
+upload: train/bike_s_000051.png to s3://udacity-ml-workflow/train/bike_s_000051.png
+upload: train/bike_s_000256.png to s3://udacity-ml-workflow/train/bike_s_000256.png
+upload: train/bike_s_000024.png to s3://udacity-ml-workflow/train/bike_s_000024.png
+upload: train/bike_s_000164.png to s3://udacity-ml-workflow/train/bike_s_000164.png
+upload: train/bike_s_000204.png to s3://udacity-ml-workflow/train/bike_s_000204.png
+upload: train/bike_s_000299.png to s3://udacity-ml-workflow/train/bike_s_000299.png
+upload: train/bike_s_000237.png to s3://udacity-ml-workflow/train/bike_s_000237.png
+upload: train/bike_s_000302.png to s3://udacity-ml-workflow/train/bike_s_000302.png
+upload: train/bike_s_000304.png to s3://udacity-ml-workflow/train/bike_s_000304.png
+upload: train/bike_s_000336.png to s3://udacity-ml-workflow/train/bike_s_000336.png
+upload: train/bike_s_000390.png to s3://udacity-ml-workflow/train/bike_s_000390.png
+upload: train/bike_s_000397.png to s3://udacity-ml-workflow/train/bike_s_000397.png
+upload: train/bike_s_000392.png to s3://udacity-ml-workflow/train/bike_s_000392.png
+upload: train/bike_s_000516.png to s3://udacity-ml-workflow/train/bike_s_000516.png
+upload: train/bike_s_000364.png to s3://udacity-ml-workflow/train/bike_s_000364.png
+upload: train/bike_s_000545.png to s3://udacity-ml-workflow/train/bike_s_000545.png
+upload: train/bike_s_000474.png to s3://udacity-ml-workflow/train/bike_s_000474.png
+upload: train/bike_s_000522.png to s3://udacity-ml-workflow/train/bike_s_000522.png
+upload: train/bike_s_000544.png to s3://udacity-ml-workflow/train/bike_s_000544.png
+upload: train/bike_s_000555.png to s3://udacity-ml-workflow/train/bike_s_000555.png
+upload: train/bike_s_000593.png to s3://udacity-ml-workflow/train/bike_s_000593.png
+upload: train/bike_s_000657.png to s3://udacity-ml-workflow/train/bike_s_000657.png
+upload: train/bike_s_000628.png to s3://udacity-ml-workflow/train/bike_s_000628.png
+upload: train/bike_s_000682.png to s3://udacity-ml-workflow/train/bike_s_000682.png
+upload: train/bike_s_000506.png to s3://udacity-ml-workflow/train/bike_s_000506.png
+upload: train/bike_s_000722.png to s3://udacity-ml-workflow/train/bike_s_000722.png
+upload: train/bike_s_000934.png to s3://udacity-ml-workflow/train/bike_s_000934.png
+upload: train/bike_s_000990.png to s3://udacity-ml-workflow/train/bike_s_000990.png
+upload: train/bike_s_000855.png to s3://udacity-ml-workflow/train/bike_s_000855.png
+upload: train/bike_s_000679.png to s3://udacity-ml-workflow/train/bike_s_000679.png
+upload: train/bike_s_000926.png to s3://udacity-ml-workflow/train/bike_s_000926.png
+upload: train/bike_s_001027.png to s3://udacity-ml-workflow/train/bike_s_001027.png
+upload: train/bike_s_001072.png to s3://udacity-ml-workflow/train/bike_s_001072.png
+upload: train/bike_s_001078.png to s3://udacity-ml-workflow/train/bike_s_001078.png
+upload: train/bike_s_001116.png to s3://udacity-ml-workflow/train/bike_s_001116.png
+upload: train/bike_s_001131.png to s3://udacity-ml-workflow/train/bike_s_001131.png
+upload: train/bike_s_001200.png to s3://udacity-ml-workflow/train/bike_s_001200.png
+upload: train/bike_s_001113.png to s3://udacity-ml-workflow/train/bike_s_001113.png
+upload: train/bike_s_001093.png to s3://udacity-ml-workflow/train/bike_s_001093.png
+upload: train/bike_s_001260.png to s3://udacity-ml-workflow/train/bike_s_001260.png
+upload: train/bike_s_001320.png to s3://udacity-ml-workflow/train/bike_s_001320.png
+upload: train/bike_s_001375.png to s3://udacity-ml-workflow/train/bike_s_001375.png
+upload: train/bike_s_001414.png to s3://udacity-ml-workflow/train/bike_s_001414.png
+upload: train/bike_s_001226.png to s3://udacity-ml-workflow/train/bike_s_001226.png
+upload: train/bike_s_001462.png to s3://udacity-ml-workflow/train/bike_s_001462.png
+upload: train/bike_s_001380.png to s3://udacity-ml-workflow/train/bike_s_001380.png
+upload: train/bike_s_001418.png to s3://udacity-ml-workflow/train/bike_s_001418.png
+upload: train/bike_s_001517.png to s3://udacity-ml-workflow/train/bike_s_001517.png
+upload: train/bike_s_001572.png to s3://udacity-ml-workflow/train/bike_s_001572.png
+upload: train/bike_s_001415.png to s3://udacity-ml-workflow/train/bike_s_001415.png
+upload: train/bike_s_001592.png to s3://udacity-ml-workflow/train/bike_s_001592.png
+upload: train/bike_s_001519.png to s3://udacity-ml-workflow/train/bike_s_001519.png
+upload: train/bike_s_001761.png to s3://udacity-ml-workflow/train/bike_s_001761.png
+upload: train/bike_s_001739.png to s3://udacity-ml-workflow/train/bike_s_001739.png
+upload: train/bike_s_001683.png to s3://udacity-ml-workflow/train/bike_s_001683.png
+upload: train/bike_s_001839.png to s3://udacity-ml-workflow/train/bike_s_001839.png
+upload: train/bike_s_001613.png to s3://udacity-ml-workflow/train/bike_s_001613.png
+upload: train/bike_s_001847.png to s3://udacity-ml-workflow/train/bike_s_001847.png
+upload: train/bike_s_001679.png to s3://udacity-ml-workflow/train/bike_s_001679.png
+upload: train/bike_s_001882.png to s3://udacity-ml-workflow/train/bike_s_001882.png
+upload: train/bike_s_001827.png to s3://udacity-ml-workflow/train/bike_s_001827.png
+upload: train/bike_s_001877.png to s3://udacity-ml-workflow/train/bike_s_001877.png
+upload: train/bike_s_001767.png to s3://udacity-ml-workflow/train/bike_s_001767.png
+upload: train/bike_s_001980.png to s3://udacity-ml-workflow/train/bike_s_001980.png
+upload: train/bike_s_002024.png to s3://udacity-ml-workflow/train/bike_s_002024.png
+upload: train/bike_s_002033.png to s3://udacity-ml-workflow/train/bike_s_002033.png
+upload: train/bike_s_002042.png to s3://udacity-ml-workflow/train/bike_s_002042.png
+upload: train/bike_s_001876.png to s3://udacity-ml-workflow/train/bike_s_001876.png
+upload: train/bike_s_001897.png to s3://udacity-ml-workflow/train/bike_s_001897.png
+upload: train/bike_s_001915.png to s3://udacity-ml-workflow/train/bike_s_001915.png
+upload: train/bike_s_001945.png to s3://udacity-ml-workflow/train/bike_s_001945.png
+upload: train/bike_s_001928.png to s3://udacity-ml-workflow/train/bike_s_001928.png
+upload: train/bike_s_002047.png to s3://udacity-ml-workflow/train/bike_s_002047.png
+upload: train/bike_s_002109.png to s3://udacity-ml-workflow/train/bike_s_002109.png
+upload: train/bike_s_002098.png to s3://udacity-ml-workflow/train/bike_s_002098.png
+upload: train/bike_s_002090.png to s3://udacity-ml-workflow/train/bike_s_002090.png
+upload: train/bike_s_002164.png to s3://udacity-ml-workflow/train/bike_s_002164.png
+upload: train/bike_s_002118.png to s3://udacity-ml-workflow/train/bike_s_002118.png
+upload: train/bike_s_002215.png to s3://udacity-ml-workflow/train/bike_s_002215.png
+upload: train/bike_s_002139.png to s3://udacity-ml-workflow/train/bike_s_002139.png
+upload: train/bike_s_002203.png to s3://udacity-ml-workflow/train/bike_s_002203.png
+upload: train/bike_s_002222.png to s3://udacity-ml-workflow/train/bike_s_002222.png
+upload: train/bike_s_002288.png to s3://udacity-ml-workflow/train/bike_s_002288.png
+upload: train/bike_s_002277.png to s3://udacity-ml-workflow/train/bike_s_002277.png
+upload: train/cycle_s_000463.png to s3://udacity-ml-workflow/train/cycle_s_000463.png
+upload: train/cycle_s_000492.png to s3://udacity-ml-workflow/train/cycle_s_000492.png
+upload: train/bike_s_002292.png to s3://udacity-ml-workflow/train/bike_s_002292.png
+upload: train/cycle_s_000318.png to s3://udacity-ml-workflow/train/cycle_s_000318.png
+upload: train/cycle_s_000042.png to s3://udacity-ml-workflow/train/cycle_s_000042.png
+upload: train/cycle_s_000639.png to s3://udacity-ml-workflow/train/cycle_s_000639.png
+upload: train/bike_s_002283.png to s3://udacity-ml-workflow/train/bike_s_002283.png
+upload: train/cycle_s_000222.png to s3://udacity-ml-workflow/train/cycle_s_000222.png
+upload: train/cycle_s_000718.png to s3://udacity-ml-workflow/train/cycle_s_000718.png
+upload: train/cycle_s_000666.png to s3://udacity-ml-workflow/train/cycle_s_000666.png
+upload: train/cycle_s_001286.png to s3://udacity-ml-workflow/train/cycle_s_001286.png
+upload: train/cycle_s_000871.png to s3://udacity-ml-workflow/train/cycle_s_000871.png
+upload: train/cycle_s_000583.png to s3://udacity-ml-workflow/train/cycle_s_000583.png
+upload: train/cycle_s_001309.png to s3://udacity-ml-workflow/train/cycle_s_001309.png
+upload: train/cycle_s_001413.png to s3://udacity-ml-workflow/train/cycle_s_001413.png
+upload: train/cycle_s_000899.png to s3://udacity-ml-workflow/train/cycle_s_000899.png
+upload: train/cycle_s_001474.png to s3://udacity-ml-workflow/train/cycle_s_001474.png
+upload: train/cycle_s_001412.png to s3://udacity-ml-workflow/train/cycle_s_001412.png
+upload: train/cycle_s_001477.png to s3://udacity-ml-workflow/train/cycle_s_001477.png
+upload: train/cycle_s_001640.png to s3://udacity-ml-workflow/train/cycle_s_001640.png
+upload: train/cycle_s_001875.png to s3://udacity-ml-workflow/train/cycle_s_001875.png
+upload: train/cycle_s_001472.png to s3://udacity-ml-workflow/train/cycle_s_001472.png
+upload: train/cycle_s_001745.png to s3://udacity-ml-workflow/train/cycle_s_001745.png
+upload: train/cycle_s_001735.png to s3://udacity-ml-workflow/train/cycle_s_001735.png
+upload: train/cycle_s_001976.png to s3://udacity-ml-workflow/train/cycle_s_001976.png
+upload: train/cycle_s_001439.png to s3://udacity-ml-workflow/train/cycle_s_001439.png
+upload: train/cycle_s_001374.png to s3://udacity-ml-workflow/train/cycle_s_001374.png
+upload: train/cycle_s_002015.png to s3://udacity-ml-workflow/train/cycle_s_002015.png
+upload: train/cycle_s_002168.png to s3://udacity-ml-workflow/train/cycle_s_002168.png
+upload: train/cycle_s_002092.png to s3://udacity-ml-workflow/train/cycle_s_002092.png
+upload: train/cycle_s_002053.png to s3://udacity-ml-workflow/train/cycle_s_002053.png
+upload: train/cycle_s_002178.png to s3://udacity-ml-workflow/train/cycle_s_002178.png
+upload: train/cycle_s_002093.png to s3://udacity-ml-workflow/train/cycle_s_002093.png
+upload: train/cycle_s_002659.png to s3://udacity-ml-workflow/train/cycle_s_002659.png
+upload: train/cycle_s_002651.png to s3://udacity-ml-workflow/train/cycle_s_002651.png
+upload: train/cycle_s_002090.png to s3://udacity-ml-workflow/train/cycle_s_002090.png
+upload: train/cycle_s_002399.png to s3://udacity-ml-workflow/train/cycle_s_002399.png
+upload: train/cycle_s_002746.png to s3://udacity-ml-workflow/train/cycle_s_002746.png
+upload: train/cycle_s_002779.png to s3://udacity-ml-workflow/train/cycle_s_002779.png
+upload: train/cycle_s_002503.png to s3://udacity-ml-workflow/train/cycle_s_002503.png
+upload: train/cycle_s_002844.png to s3://udacity-ml-workflow/train/cycle_s_002844.png
+upload: train/cycle_s_002598.png to s3://udacity-ml-workflow/train/cycle_s_002598.png
+upload: train/cycle_s_002638.png to s3://udacity-ml-workflow/train/cycle_s_002638.png
+upload: train/cycle_s_002882.png to s3://udacity-ml-workflow/train/cycle_s_002882.png
+upload: train/cycle_s_002666.png to s3://udacity-ml-workflow/train/cycle_s_002666.png
+upload: train/cycle_s_002904.png to s3://udacity-ml-workflow/train/cycle_s_002904.png
+upload: train/cycle_s_002703.png to s3://udacity-ml-workflow/train/cycle_s_002703.png
+upload: train/cycle_s_003026.png to s3://udacity-ml-workflow/train/cycle_s_003026.png
+upload: train/cycle_s_002978.png to s3://udacity-ml-workflow/train/cycle_s_002978.png
+upload: train/cycle_s_003008.png to s3://udacity-ml-workflow/train/cycle_s_003008.png
+upload: train/cycle_s_003147.png to s3://udacity-ml-workflow/train/cycle_s_003147.png
+upload: train/cycle_s_003006.png to s3://udacity-ml-workflow/train/cycle_s_003006.png
+upload: train/dirt_bike_s_000003.png to s3://udacity-ml-workflow/train/dirt_bike_s_000003.png
+upload: train/cycle_s_003122.png to s3://udacity-ml-workflow/train/cycle_s_003122.png
+upload: train/cycle_s_003162.png to s3://udacity-ml-workflow/train/cycle_s_003162.png
+upload: train/cycle_s_003148.png to s3://udacity-ml-workflow/train/cycle_s_003148.png
+upload: train/dirt_bike_s_000005.png to s3://udacity-ml-workflow/train/dirt_bike_s_000005.png
+upload: train/cycle_s_003043.png to s3://udacity-ml-workflow/train/cycle_s_003043.png
+upload: train/dirt_bike_s_000059.png to s3://udacity-ml-workflow/train/dirt_bike_s_000059.png
+upload: train/dirt_bike_s_000017.png to s3://udacity-ml-workflow/train/dirt_bike_s_000017.png
+upload: train/dirt_bike_s_000134.png to s3://udacity-ml-workflow/train/dirt_bike_s_000134.png
+upload: train/dirt_bike_s_000124.png to s3://udacity-ml-workflow/train/dirt_bike_s_000124.png
+upload: train/dirt_bike_s_000119.png to s3://udacity-ml-workflow/train/dirt_bike_s_000119.png
+upload: train/minibike_s_000011.png to s3://udacity-ml-workflow/train/minibike_s_000011.png
+upload: train/dirt_bike_s_000030.png to s3://udacity-ml-workflow/train/dirt_bike_s_000030.png
+upload: train/minibike_s_000010.png to s3://udacity-ml-workflow/train/minibike_s_000010.png
+upload: train/minibike_s_000035.png to s3://udacity-ml-workflow/train/minibike_s_000035.png
+upload: train/minibike_s_000020.png to s3://udacity-ml-workflow/train/minibike_s_000020.png
+upload: train/minibike_s_000022.png to s3://udacity-ml-workflow/train/minibike_s_000022.png
+upload: train/minibike_s_000064.png to s3://udacity-ml-workflow/train/minibike_s_000064.png
+upload: train/minibike_s_000036.png to s3://udacity-ml-workflow/train/minibike_s_000036.png
+upload: train/minibike_s_000099.png to s3://udacity-ml-workflow/train/minibike_s_000099.png
+upload: train/minibike_s_000108.png to s3://udacity-ml-workflow/train/minibike_s_000108.png
+upload: train/minibike_s_000110.png to s3://udacity-ml-workflow/train/minibike_s_000110.png
+upload: train/minibike_s_000116.png to s3://udacity-ml-workflow/train/minibike_s_000116.png
+upload: train/minibike_s_000127.png to s3://udacity-ml-workflow/train/minibike_s_000127.png
+upload: train/minibike_s_000102.png to s3://udacity-ml-workflow/train/minibike_s_000102.png
+upload: train/minibike_s_000130.png to s3://udacity-ml-workflow/train/minibike_s_000130.png
+upload: train/minibike_s_000146.png to s3://udacity-ml-workflow/train/minibike_s_000146.png
+upload: train/minibike_s_000117.png to s3://udacity-ml-workflow/train/minibike_s_000117.png
+upload: train/minibike_s_000165.png to s3://udacity-ml-workflow/train/minibike_s_000165.png
+upload: train/minibike_s_000149.png to s3://udacity-ml-workflow/train/minibike_s_000149.png
+upload: train/minibike_s_000244.png to s3://udacity-ml-workflow/train/minibike_s_000244.png
+upload: train/minibike_s_000121.png to s3://udacity-ml-workflow/train/minibike_s_000121.png
+upload: train/minibike_s_000293.png to s3://udacity-ml-workflow/train/minibike_s_000293.png
+upload: train/minibike_s_000314.png to s3://udacity-ml-workflow/train/minibike_s_000314.png
+upload: train/minibike_s_000324.png to s3://udacity-ml-workflow/train/minibike_s_000324.png
+upload: train/minibike_s_000350.png to s3://udacity-ml-workflow/train/minibike_s_000350.png
+upload: train/minibike_s_000203.png to s3://udacity-ml-workflow/train/minibike_s_000203.png
+upload: train/minibike_s_000335.png to s3://udacity-ml-workflow/train/minibike_s_000335.png
+upload: train/minibike_s_000340.png to s3://udacity-ml-workflow/train/minibike_s_000340.png
+upload: train/minibike_s_000218.png to s3://udacity-ml-workflow/train/minibike_s_000218.png
+upload: train/minibike_s_000408.png to s3://udacity-ml-workflow/train/minibike_s_000408.png
+upload: train/minibike_s_000392.png to s3://udacity-ml-workflow/train/minibike_s_000392.png
+upload: train/minibike_s_000402.png to s3://udacity-ml-workflow/train/minibike_s_000402.png
+upload: train/minibike_s_000401.png to s3://udacity-ml-workflow/train/minibike_s_000401.png
+upload: train/minibike_s_000429.png to s3://udacity-ml-workflow/train/minibike_s_000429.png
+upload: train/minibike_s_000362.png to s3://udacity-ml-workflow/train/minibike_s_000362.png
+upload: train/minibike_s_000435.png to s3://udacity-ml-workflow/train/minibike_s_000435.png
+upload: train/minibike_s_000427.png to s3://udacity-ml-workflow/train/minibike_s_000427.png
+upload: train/minibike_s_000459.png to s3://udacity-ml-workflow/train/minibike_s_000459.png
+upload: train/minibike_s_000451.png to s3://udacity-ml-workflow/train/minibike_s_000451.png
+upload: train/minibike_s_000485.png to s3://udacity-ml-workflow/train/minibike_s_000485.png
+upload: train/minibike_s_000409.png to s3://udacity-ml-workflow/train/minibike_s_000409.png
+upload: train/minibike_s_000498.png to s3://udacity-ml-workflow/train/minibike_s_000498.png
+upload: train/minibike_s_000434.png to s3://udacity-ml-workflow/train/minibike_s_000434.png
+upload: train/minibike_s_000507.png to s3://udacity-ml-workflow/train/minibike_s_000507.png
+upload: train/minibike_s_000519.png to s3://udacity-ml-workflow/train/minibike_s_000519.png
+upload: train/minibike_s_000520.png to s3://udacity-ml-workflow/train/minibike_s_000520.png
+upload: train/minibike_s_000511.png to s3://udacity-ml-workflow/train/minibike_s_000511.png
+upload: train/minibike_s_000491.png to s3://udacity-ml-workflow/train/minibike_s_000491.png
+upload: train/minibike_s_000527.png to s3://udacity-ml-workflow/train/minibike_s_000527.png
+upload: train/minibike_s_000522.png to s3://udacity-ml-workflow/train/minibike_s_000522.png
+upload: train/minibike_s_000565.png to s3://udacity-ml-workflow/train/minibike_s_000565.png
+upload: train/minibike_s_000518.png to s3://udacity-ml-workflow/train/minibike_s_000518.png
+upload: train/minibike_s_000566.png to s3://udacity-ml-workflow/train/minibike_s_000566.png
+upload: train/minibike_s_000569.png to s3://udacity-ml-workflow/train/minibike_s_000569.png
+upload: train/minibike_s_000567.png to s3://udacity-ml-workflow/train/minibike_s_000567.png
+upload: train/minibike_s_000571.png to s3://udacity-ml-workflow/train/minibike_s_000571.png
+upload: train/minibike_s_000613.png to s3://udacity-ml-workflow/train/minibike_s_000613.png
+upload: train/minibike_s_000568.png to s3://udacity-ml-workflow/train/minibike_s_000568.png
+upload: train/minibike_s_000526.png to s3://udacity-ml-workflow/train/minibike_s_000526.png
+upload: train/minibike_s_000690.png to s3://udacity-ml-workflow/train/minibike_s_000690.png
+upload: train/minibike_s_000570.png to s3://udacity-ml-workflow/train/minibike_s_000570.png
+upload: train/minibike_s_000652.png to s3://udacity-ml-workflow/train/minibike_s_000652.png
+upload: train/minibike_s_000701.png to s3://udacity-ml-workflow/train/minibike_s_000701.png
+upload: train/minibike_s_000709.png to s3://udacity-ml-workflow/train/minibike_s_000709.png
+upload: train/minibike_s_000743.png to s3://udacity-ml-workflow/train/minibike_s_000743.png
+upload: train/minibike_s_000800.png to s3://udacity-ml-workflow/train/minibike_s_000800.png
+upload: train/minibike_s_000738.png to s3://udacity-ml-workflow/train/minibike_s_000738.png
+upload: train/minibike_s_000698.png to s3://udacity-ml-workflow/train/minibike_s_000698.png
+upload: train/minibike_s_000813.png to s3://udacity-ml-workflow/train/minibike_s_000813.png
+upload: train/minibike_s_000654.png to s3://udacity-ml-workflow/train/minibike_s_000654.png
+upload: train/minibike_s_000802.png to s3://udacity-ml-workflow/train/minibike_s_000802.png
+upload: train/minibike_s_000741.png to s3://udacity-ml-workflow/train/minibike_s_000741.png
+upload: train/minibike_s_000824.png to s3://udacity-ml-workflow/train/minibike_s_000824.png
+upload: train/minibike_s_000830.png to s3://udacity-ml-workflow/train/minibike_s_000830.png
+upload: train/minibike_s_000820.png to s3://udacity-ml-workflow/train/minibike_s_000820.png
+upload: train/minibike_s_000831.png to s3://udacity-ml-workflow/train/minibike_s_000831.png
+upload: train/minibike_s_000885.png to s3://udacity-ml-workflow/train/minibike_s_000885.png
+upload: train/minibike_s_000886.png to s3://udacity-ml-workflow/train/minibike_s_000886.png
+upload: train/minibike_s_000967.png to s3://udacity-ml-workflow/train/minibike_s_000967.png
+upload: train/minibike_s_000968.png to s3://udacity-ml-workflow/train/minibike_s_000968.png
+upload: train/minibike_s_001017.png to s3://udacity-ml-workflow/train/minibike_s_001017.png
+upload: train/minibike_s_001072.png to s3://udacity-ml-workflow/train/minibike_s_001072.png
+upload: train/minibike_s_000906.png to s3://udacity-ml-workflow/train/minibike_s_000906.png
+upload: train/minibike_s_000855.png to s3://udacity-ml-workflow/train/minibike_s_000855.png
+upload: train/minibike_s_001016.png to s3://udacity-ml-workflow/train/minibike_s_001016.png
+upload: train/minibike_s_000914.png to s3://udacity-ml-workflow/train/minibike_s_000914.png
+upload: train/minibike_s_001079.png to s3://udacity-ml-workflow/train/minibike_s_001079.png
+upload: train/minibike_s_001094.png to s3://udacity-ml-workflow/train/minibike_s_001094.png
+upload: train/minibike_s_001169.png to s3://udacity-ml-workflow/train/minibike_s_001169.png
+upload: train/minibike_s_001185.png to s3://udacity-ml-workflow/train/minibike_s_001185.png
+upload: train/minibike_s_001177.png to s3://udacity-ml-workflow/train/minibike_s_001177.png
+upload: train/minibike_s_001179.png to s3://udacity-ml-workflow/train/minibike_s_001179.png
+upload: train/minibike_s_001193.png to s3://udacity-ml-workflow/train/minibike_s_001193.png
+upload: train/minibike_s_001168.png to s3://udacity-ml-workflow/train/minibike_s_001168.png
+upload: train/minibike_s_001157.png to s3://udacity-ml-workflow/train/minibike_s_001157.png
+upload: train/minibike_s_001250.png to s3://udacity-ml-workflow/train/minibike_s_001250.png
+upload: train/minibike_s_001191.png to s3://udacity-ml-workflow/train/minibike_s_001191.png
+upload: train/minibike_s_001261.png to s3://udacity-ml-workflow/train/minibike_s_001261.png
+upload: train/minibike_s_001249.png to s3://udacity-ml-workflow/train/minibike_s_001249.png
+upload: train/minibike_s_001270.png to s3://udacity-ml-workflow/train/minibike_s_001270.png
+upload: train/minibike_s_001275.png to s3://udacity-ml-workflow/train/minibike_s_001275.png
+upload: train/minibike_s_001344.png to s3://udacity-ml-workflow/train/minibike_s_001344.png
+upload: train/minibike_s_001294.png to s3://udacity-ml-workflow/train/minibike_s_001294.png
+upload: train/minibike_s_001417.png to s3://udacity-ml-workflow/train/minibike_s_001417.png
+upload: train/minibike_s_001458.png to s3://udacity-ml-workflow/train/minibike_s_001458.png
+upload: train/minibike_s_001348.png to s3://udacity-ml-workflow/train/minibike_s_001348.png
+upload: train/minibike_s_001479.png to s3://udacity-ml-workflow/train/minibike_s_001479.png
+upload: train/minibike_s_001450.png to s3://udacity-ml-workflow/train/minibike_s_001450.png
+upload: train/minibike_s_001345.png to s3://udacity-ml-workflow/train/minibike_s_001345.png
+upload: train/minibike_s_001498.png to s3://udacity-ml-workflow/train/minibike_s_001498.png
+upload: train/minibike_s_001511.png to s3://udacity-ml-workflow/train/minibike_s_001511.png
+upload: train/minibike_s_001496.png to s3://udacity-ml-workflow/train/minibike_s_001496.png
+upload: train/minibike_s_001512.png to s3://udacity-ml-workflow/train/minibike_s_001512.png
+upload: train/minibike_s_001279.png to s3://udacity-ml-workflow/train/minibike_s_001279.png
+upload: train/minibike_s_001506.png to s3://udacity-ml-workflow/train/minibike_s_001506.png
+upload: train/minibike_s_001539.png to s3://udacity-ml-workflow/train/minibike_s_001539.png
+upload: train/minibike_s_001540.png to s3://udacity-ml-workflow/train/minibike_s_001540.png
+upload: train/minibike_s_001366.png to s3://udacity-ml-workflow/train/minibike_s_001366.png
+upload: train/minibike_s_001565.png to s3://udacity-ml-workflow/train/minibike_s_001565.png
+upload: train/minibike_s_001491.png to s3://udacity-ml-workflow/train/minibike_s_001491.png
+upload: train/minibike_s_001546.png to s3://udacity-ml-workflow/train/minibike_s_001546.png
+upload: train/minibike_s_001631.png to s3://udacity-ml-workflow/train/minibike_s_001631.png
+upload: train/minibike_s_001558.png to s3://udacity-ml-workflow/train/minibike_s_001558.png
+upload: train/minibike_s_001639.png to s3://udacity-ml-workflow/train/minibike_s_001639.png
+upload: train/minibike_s_001653.png to s3://udacity-ml-workflow/train/minibike_s_001653.png
+upload: train/minibike_s_001573.png to s3://udacity-ml-workflow/train/minibike_s_001573.png
+upload: train/minibike_s_001597.png to s3://udacity-ml-workflow/train/minibike_s_001597.png
+upload: train/minibike_s_001747.png to s3://udacity-ml-workflow/train/minibike_s_001747.png
+upload: train/minibike_s_001689.png to s3://udacity-ml-workflow/train/minibike_s_001689.png
+upload: train/minibike_s_001575.png to s3://udacity-ml-workflow/train/minibike_s_001575.png
+upload: train/minibike_s_001701.png to s3://udacity-ml-workflow/train/minibike_s_001701.png
+upload: train/minibike_s_001734.png to s3://udacity-ml-workflow/train/minibike_s_001734.png
+upload: train/minibike_s_001638.png to s3://udacity-ml-workflow/train/minibike_s_001638.png
+upload: train/minibike_s_001731.png to s3://udacity-ml-workflow/train/minibike_s_001731.png
+upload: train/minibike_s_001771.png to s3://udacity-ml-workflow/train/minibike_s_001771.png
+upload: train/minibike_s_001691.png to s3://udacity-ml-workflow/train/minibike_s_001691.png
+upload: train/minibike_s_001836.png to s3://udacity-ml-workflow/train/minibike_s_001836.png
+upload: train/minibike_s_001789.png to s3://udacity-ml-workflow/train/minibike_s_001789.png
+upload: train/minibike_s_001863.png to s3://udacity-ml-workflow/train/minibike_s_001863.png
+upload: train/minibike_s_001767.png to s3://udacity-ml-workflow/train/minibike_s_001767.png
+upload: train/minibike_s_001865.png to s3://udacity-ml-workflow/train/minibike_s_001865.png
+upload: train/minibike_s_001829.png to s3://udacity-ml-workflow/train/minibike_s_001829.png
+upload: train/minibike_s_001880.png to s3://udacity-ml-workflow/train/minibike_s_001880.png
+upload: train/minibike_s_001838.png to s3://udacity-ml-workflow/train/minibike_s_001838.png
+upload: train/minibike_s_001885.png to s3://udacity-ml-workflow/train/minibike_s_001885.png
+upload: train/minibike_s_001873.png to s3://udacity-ml-workflow/train/minibike_s_001873.png
+upload: train/minibike_s_001827.png to s3://udacity-ml-workflow/train/minibike_s_001827.png
+upload: train/minibike_s_001881.png to s3://udacity-ml-workflow/train/minibike_s_001881.png
+upload: train/minibike_s_001870.png to s3://udacity-ml-workflow/train/minibike_s_001870.png
+upload: train/minibike_s_001972.png to s3://udacity-ml-workflow/train/minibike_s_001972.png
+upload: train/minibike_s_001969.png to s3://udacity-ml-workflow/train/minibike_s_001969.png
+upload: train/minibike_s_001996.png to s3://udacity-ml-workflow/train/minibike_s_001996.png
+upload: train/minibike_s_002030.png to s3://udacity-ml-workflow/train/minibike_s_002030.png
+upload: train/minibike_s_002009.png to s3://udacity-ml-workflow/train/minibike_s_002009.png
+upload: train/minibike_s_001944.png to s3://udacity-ml-workflow/train/minibike_s_001944.png
+upload: train/minibike_s_002048.png to s3://udacity-ml-workflow/train/minibike_s_002048.png
+upload: train/minibike_s_001921.png to s3://udacity-ml-workflow/train/minibike_s_001921.png
+upload: train/minibike_s_002046.png to s3://udacity-ml-workflow/train/minibike_s_002046.png
+upload: train/minibike_s_002038.png to s3://udacity-ml-workflow/train/minibike_s_002038.png
+upload: train/minibike_s_001917.png to s3://udacity-ml-workflow/train/minibike_s_001917.png
+upload: train/minibike_s_002115.png to s3://udacity-ml-workflow/train/minibike_s_002115.png
+upload: train/minibike_s_002124.png to s3://udacity-ml-workflow/train/minibike_s_002124.png
+upload: train/minibike_s_002130.png to s3://udacity-ml-workflow/train/minibike_s_002130.png
+upload: train/minibike_s_002137.png to s3://udacity-ml-workflow/train/minibike_s_002137.png
+upload: train/minibike_s_002146.png to s3://udacity-ml-workflow/train/minibike_s_002146.png
+upload: train/minibike_s_002186.png to s3://udacity-ml-workflow/train/minibike_s_002186.png
+upload: train/minibike_s_002163.png to s3://udacity-ml-workflow/train/minibike_s_002163.png
+upload: train/minibike_s_002196.png to s3://udacity-ml-workflow/train/minibike_s_002196.png
+upload: train/minibike_s_002182.png to s3://udacity-ml-workflow/train/minibike_s_002182.png
+upload: train/minibike_s_002084.png to s3://udacity-ml-workflow/train/minibike_s_002084.png
+upload: train/minibike_s_002198.png to s3://udacity-ml-workflow/train/minibike_s_002198.png
+upload: train/moped_s_000004.png to s3://udacity-ml-workflow/train/moped_s_000004.png
+upload: train/minibike_s_002176.png to s3://udacity-ml-workflow/train/minibike_s_002176.png
+upload: train/moped_s_000021.png to s3://udacity-ml-workflow/train/moped_s_000021.png
+upload: train/moped_s_000030.png to s3://udacity-ml-workflow/train/moped_s_000030.png
+upload: train/moped_s_000009.png to s3://udacity-ml-workflow/train/moped_s_000009.png
+upload: train/minibike_s_002218.png to s3://udacity-ml-workflow/train/minibike_s_002218.png
+upload: train/minibike_s_002194.png to s3://udacity-ml-workflow/train/minibike_s_002194.png
+upload: train/moped_s_000071.png to s3://udacity-ml-workflow/train/moped_s_000071.png
+upload: train/moped_s_000035.png to s3://udacity-ml-workflow/train/moped_s_000035.png
+upload: train/moped_s_000034.png to s3://udacity-ml-workflow/train/moped_s_000034.png
+upload: train/moped_s_000124.png to s3://udacity-ml-workflow/train/moped_s_000124.png
+upload: train/moped_s_000065.png to s3://udacity-ml-workflow/train/moped_s_000065.png
+upload: train/moped_s_000135.png to s3://udacity-ml-workflow/train/moped_s_000135.png
+upload: train/moped_s_000044.png to s3://udacity-ml-workflow/train/moped_s_000044.png
+upload: train/moped_s_000119.png to s3://udacity-ml-workflow/train/moped_s_000119.png
+upload: train/motorbike_s_000009.png to s3://udacity-ml-workflow/train/motorbike_s_000009.png
+upload: train/motorbike_s_000022.png to s3://udacity-ml-workflow/train/motorbike_s_000022.png
+upload: train/moped_s_000168.png to s3://udacity-ml-workflow/train/moped_s_000168.png
+upload: train/moped_s_000169.png to s3://udacity-ml-workflow/train/moped_s_000169.png
+upload: train/moped_s_000237.png to s3://udacity-ml-workflow/train/moped_s_000237.png
+upload: train/motorbike_s_000035.png to s3://udacity-ml-workflow/train/motorbike_s_000035.png
+upload: train/motorbike_s_000021.png to s3://udacity-ml-workflow/train/motorbike_s_000021.png
+upload: train/motorbike_s_000041.png to s3://udacity-ml-workflow/train/motorbike_s_000041.png
+upload: train/motorbike_s_000106.png to s3://udacity-ml-workflow/train/motorbike_s_000106.png
+upload: train/motorbike_s_000060.png to s3://udacity-ml-workflow/train/motorbike_s_000060.png
+upload: train/motorbike_s_000058.png to s3://udacity-ml-workflow/train/motorbike_s_000058.png
+upload: train/motorbike_s_000117.png to s3://udacity-ml-workflow/train/motorbike_s_000117.png
+upload: train/motorbike_s_000124.png to s3://udacity-ml-workflow/train/motorbike_s_000124.png
+upload: train/motorbike_s_000068.png to s3://udacity-ml-workflow/train/motorbike_s_000068.png
+upload: train/motorbike_s_000134.png to s3://udacity-ml-workflow/train/motorbike_s_000134.png
+upload: train/motorbike_s_000115.png to s3://udacity-ml-workflow/train/motorbike_s_000115.png
+upload: train/motorbike_s_000141.png to s3://udacity-ml-workflow/train/motorbike_s_000141.png
+upload: train/moped_s_000236.png to s3://udacity-ml-workflow/train/moped_s_000236.png
+upload: train/motorbike_s_000172.png to s3://udacity-ml-workflow/train/motorbike_s_000172.png
+upload: train/motorbike_s_000308.png to s3://udacity-ml-workflow/train/motorbike_s_000308.png
+upload: train/motorbike_s_000062.png to s3://udacity-ml-workflow/train/motorbike_s_000062.png
+upload: train/motorbike_s_000225.png to s3://udacity-ml-workflow/train/motorbike_s_000225.png
+upload: train/motorbike_s_000254.png to s3://udacity-ml-workflow/train/motorbike_s_000254.png
+upload: train/motorbike_s_000346.png to s3://udacity-ml-workflow/train/motorbike_s_000346.png
+upload: train/motorbike_s_000331.png to s3://udacity-ml-workflow/train/motorbike_s_000331.png
+upload: train/motorbike_s_000119.png to s3://udacity-ml-workflow/train/motorbike_s_000119.png
+upload: train/motorbike_s_000223.png to s3://udacity-ml-workflow/train/motorbike_s_000223.png
+upload: train/motorbike_s_000221.png to s3://udacity-ml-workflow/train/motorbike_s_000221.png
+upload: train/motorbike_s_000361.png to s3://udacity-ml-workflow/train/motorbike_s_000361.png
+upload: train/motorbike_s_000501.png to s3://udacity-ml-workflow/train/motorbike_s_000501.png
+upload: train/motorbike_s_000362.png to s3://udacity-ml-workflow/train/motorbike_s_000362.png
+upload: train/motorbike_s_000449.png to s3://udacity-ml-workflow/train/motorbike_s_000449.png
+upload: train/motorcycle_s_000001.png to s3://udacity-ml-workflow/train/motorcycle_s_000001.png
+upload: train/motorbike_s_000541.png to s3://udacity-ml-workflow/train/motorbike_s_000541.png
+upload: train/motorbike_s_000463.png to s3://udacity-ml-workflow/train/motorbike_s_000463.png
+upload: train/motorbike_s_000578.png to s3://udacity-ml-workflow/train/motorbike_s_000578.png
+upload: train/motorbike_s_000534.png to s3://udacity-ml-workflow/train/motorbike_s_000534.png
+upload: train/motorcycle_s_000003.png to s3://udacity-ml-workflow/train/motorcycle_s_000003.png
+upload: train/motorcycle_s_000009.png to s3://udacity-ml-workflow/train/motorcycle_s_000009.png
+upload: train/motorbike_s_000427.png to s3://udacity-ml-workflow/train/motorbike_s_000427.png
+upload: train/motorcycle_s_000022.png to s3://udacity-ml-workflow/train/motorcycle_s_000022.png
+upload: train/motorcycle_s_000025.png to s3://udacity-ml-workflow/train/motorcycle_s_000025.png
+upload: train/motorcycle_s_000002.png to s3://udacity-ml-workflow/train/motorcycle_s_000002.png
+upload: train/motorcycle_s_000004.png to s3://udacity-ml-workflow/train/motorcycle_s_000004.png
+upload: train/motorcycle_s_000027.png to s3://udacity-ml-workflow/train/motorcycle_s_000027.png
+upload: train/motorcycle_s_000032.png to s3://udacity-ml-workflow/train/motorcycle_s_000032.png
+upload: train/motorcycle_s_000050.png to s3://udacity-ml-workflow/train/motorcycle_s_000050.png
+upload: train/motorcycle_s_000072.png to s3://udacity-ml-workflow/train/motorcycle_s_000072.png
+upload: train/motorcycle_s_000127.png to s3://udacity-ml-workflow/train/motorcycle_s_000127.png
+upload: train/motorcycle_s_000126.png to s3://udacity-ml-workflow/train/motorcycle_s_000126.png
+upload: train/motorcycle_s_000070.png to s3://udacity-ml-workflow/train/motorcycle_s_000070.png
+upload: train/motorcycle_s_000076.png to s3://udacity-ml-workflow/train/motorcycle_s_000076.png
+upload: train/motorcycle_s_000120.png to s3://udacity-ml-workflow/train/motorcycle_s_000120.png
+upload: train/motorcycle_s_000136.png to s3://udacity-ml-workflow/train/motorcycle_s_000136.png
+upload: train/motorcycle_s_000026.png to s3://udacity-ml-workflow/train/motorcycle_s_000026.png
+upload: train/motorcycle_s_000154.png to s3://udacity-ml-workflow/train/motorcycle_s_000154.png
+upload: train/motorcycle_s_000133.png to s3://udacity-ml-workflow/train/motorcycle_s_000133.png
+upload: train/motorcycle_s_000029.png to s3://udacity-ml-workflow/train/motorcycle_s_000029.png
+upload: train/motorcycle_s_000074.png to s3://udacity-ml-workflow/train/motorcycle_s_000074.png
+upload: train/motorcycle_s_000169.png to s3://udacity-ml-workflow/train/motorcycle_s_000169.png
+upload: train/motorcycle_s_000146.png to s3://udacity-ml-workflow/train/motorcycle_s_000146.png
+upload: train/motorcycle_s_000170.png to s3://udacity-ml-workflow/train/motorcycle_s_000170.png
+upload: train/motorcycle_s_000216.png to s3://udacity-ml-workflow/train/motorcycle_s_000216.png
+upload: train/motorcycle_s_000220.png to s3://udacity-ml-workflow/train/motorcycle_s_000220.png
+upload: train/motorcycle_s_000223.png to s3://udacity-ml-workflow/train/motorcycle_s_000223.png
+upload: train/motorcycle_s_000144.png to s3://udacity-ml-workflow/train/motorcycle_s_000144.png
+upload: train/motorcycle_s_000207.png to s3://udacity-ml-workflow/train/motorcycle_s_000207.png
+upload: train/motorcycle_s_000217.png to s3://udacity-ml-workflow/train/motorcycle_s_000217.png
+upload: train/motorcycle_s_000167.png to s3://udacity-ml-workflow/train/motorcycle_s_000167.png
+upload: train/motorcycle_s_000151.png to s3://udacity-ml-workflow/train/motorcycle_s_000151.png
+upload: train/motorcycle_s_000249.png to s3://udacity-ml-workflow/train/motorcycle_s_000249.png
+upload: train/motorcycle_s_000219.png to s3://udacity-ml-workflow/train/motorcycle_s_000219.png
+upload: train/motorcycle_s_000246.png to s3://udacity-ml-workflow/train/motorcycle_s_000246.png
+upload: train/motorcycle_s_000242.png to s3://udacity-ml-workflow/train/motorcycle_s_000242.png
+upload: train/motorcycle_s_000245.png to s3://udacity-ml-workflow/train/motorcycle_s_000245.png
+upload: train/motorcycle_s_000252.png to s3://udacity-ml-workflow/train/motorcycle_s_000252.png
+upload: train/motorcycle_s_000256.png to s3://udacity-ml-workflow/train/motorcycle_s_000256.png
+upload: train/motorcycle_s_000253.png to s3://udacity-ml-workflow/train/motorcycle_s_000253.png
+upload: train/motorcycle_s_000277.png to s3://udacity-ml-workflow/train/motorcycle_s_000277.png
+upload: train/motorcycle_s_000284.png to s3://udacity-ml-workflow/train/motorcycle_s_000284.png
+upload: train/motorcycle_s_000291.png to s3://udacity-ml-workflow/train/motorcycle_s_000291.png
+upload: train/motorcycle_s_000309.png to s3://udacity-ml-workflow/train/motorcycle_s_000309.png
+upload: train/motorcycle_s_000300.png to s3://udacity-ml-workflow/train/motorcycle_s_000300.png
+upload: train/motorcycle_s_000221.png to s3://udacity-ml-workflow/train/motorcycle_s_000221.png
+upload: train/motorcycle_s_000312.png to s3://udacity-ml-workflow/train/motorcycle_s_000312.png
+upload: train/motorcycle_s_000262.png to s3://udacity-ml-workflow/train/motorcycle_s_000262.png
+upload: train/motorcycle_s_000304.png to s3://udacity-ml-workflow/train/motorcycle_s_000304.png
+upload: train/motorcycle_s_000319.png to s3://udacity-ml-workflow/train/motorcycle_s_000319.png
+upload: train/motorcycle_s_000332.png to s3://udacity-ml-workflow/train/motorcycle_s_000332.png
+upload: train/motorcycle_s_000290.png to s3://udacity-ml-workflow/train/motorcycle_s_000290.png
+upload: train/motorcycle_s_000325.png to s3://udacity-ml-workflow/train/motorcycle_s_000325.png
+upload: train/motorcycle_s_000339.png to s3://udacity-ml-workflow/train/motorcycle_s_000339.png
+upload: train/motorcycle_s_000340.png to s3://udacity-ml-workflow/train/motorcycle_s_000340.png
+upload: train/motorcycle_s_000346.png to s3://udacity-ml-workflow/train/motorcycle_s_000346.png
+upload: train/motorcycle_s_000320.png to s3://udacity-ml-workflow/train/motorcycle_s_000320.png
+upload: train/motorcycle_s_000417.png to s3://udacity-ml-workflow/train/motorcycle_s_000417.png
+upload: train/motorcycle_s_000353.png to s3://udacity-ml-workflow/train/motorcycle_s_000353.png
+upload: train/motorcycle_s_000422.png to s3://udacity-ml-workflow/train/motorcycle_s_000422.png
+upload: train/motorcycle_s_000423.png to s3://udacity-ml-workflow/train/motorcycle_s_000423.png
+upload: train/motorcycle_s_000407.png to s3://udacity-ml-workflow/train/motorcycle_s_000407.png
+upload: train/motorcycle_s_000432.png to s3://udacity-ml-workflow/train/motorcycle_s_000432.png
+upload: train/motorcycle_s_000418.png to s3://udacity-ml-workflow/train/motorcycle_s_000418.png
+upload: train/motorcycle_s_000430.png to s3://udacity-ml-workflow/train/motorcycle_s_000430.png
+upload: train/motorcycle_s_000431.png to s3://udacity-ml-workflow/train/motorcycle_s_000431.png
+upload: train/motorcycle_s_000447.png to s3://udacity-ml-workflow/train/motorcycle_s_000447.png
+upload: train/motorcycle_s_000440.png to s3://udacity-ml-workflow/train/motorcycle_s_000440.png
+upload: train/motorcycle_s_000347.png to s3://udacity-ml-workflow/train/motorcycle_s_000347.png
+upload: train/motorcycle_s_000454.png to s3://udacity-ml-workflow/train/motorcycle_s_000454.png
+upload: train/motorcycle_s_000451.png to s3://udacity-ml-workflow/train/motorcycle_s_000451.png
+upload: train/motorcycle_s_000508.png to s3://udacity-ml-workflow/train/motorcycle_s_000508.png
+upload: train/motorcycle_s_000459.png to s3://udacity-ml-workflow/train/motorcycle_s_000459.png
+upload: train/motorcycle_s_000542.png to s3://udacity-ml-workflow/train/motorcycle_s_000542.png
+upload: train/motorcycle_s_000521.png to s3://udacity-ml-workflow/train/motorcycle_s_000521.png
+upload: train/motorcycle_s_000456.png to s3://udacity-ml-workflow/train/motorcycle_s_000456.png
+upload: train/motorcycle_s_000580.png to s3://udacity-ml-workflow/train/motorcycle_s_000580.png
+upload: train/motorcycle_s_000517.png to s3://udacity-ml-workflow/train/motorcycle_s_000517.png
+upload: train/motorcycle_s_000585.png to s3://udacity-ml-workflow/train/motorcycle_s_000585.png
+upload: train/motorcycle_s_000594.png to s3://udacity-ml-workflow/train/motorcycle_s_000594.png
+upload: train/motorcycle_s_000545.png to s3://udacity-ml-workflow/train/motorcycle_s_000545.png
+upload: train/motorcycle_s_000486.png to s3://udacity-ml-workflow/train/motorcycle_s_000486.png
+upload: train/motorcycle_s_000622.png to s3://udacity-ml-workflow/train/motorcycle_s_000622.png
+upload: train/motorcycle_s_000617.png to s3://udacity-ml-workflow/train/motorcycle_s_000617.png
+upload: train/motorcycle_s_000654.png to s3://udacity-ml-workflow/train/motorcycle_s_000654.png
+upload: train/motorcycle_s_000629.png to s3://udacity-ml-workflow/train/motorcycle_s_000629.png
+upload: train/motorcycle_s_000605.png to s3://udacity-ml-workflow/train/motorcycle_s_000605.png
+upload: train/motorcycle_s_000687.png to s3://udacity-ml-workflow/train/motorcycle_s_000687.png
+upload: train/motorcycle_s_000686.png to s3://udacity-ml-workflow/train/motorcycle_s_000686.png
+upload: train/motorcycle_s_000695.png to s3://udacity-ml-workflow/train/motorcycle_s_000695.png
+upload: train/motorcycle_s_000543.png to s3://udacity-ml-workflow/train/motorcycle_s_000543.png
+upload: train/motorcycle_s_000593.png to s3://udacity-ml-workflow/train/motorcycle_s_000593.png
+upload: train/motorcycle_s_000496.png to s3://udacity-ml-workflow/train/motorcycle_s_000496.png
+upload: train/motorcycle_s_000669.png to s3://udacity-ml-workflow/train/motorcycle_s_000669.png
+upload: train/motorcycle_s_000696.png to s3://udacity-ml-workflow/train/motorcycle_s_000696.png
+upload: train/motorcycle_s_000714.png to s3://udacity-ml-workflow/train/motorcycle_s_000714.png
+upload: train/motorcycle_s_000724.png to s3://udacity-ml-workflow/train/motorcycle_s_000724.png
+upload: train/motorcycle_s_000698.png to s3://udacity-ml-workflow/train/motorcycle_s_000698.png
+upload: train/motorcycle_s_000713.png to s3://udacity-ml-workflow/train/motorcycle_s_000713.png
+upload: train/motorcycle_s_000772.png to s3://udacity-ml-workflow/train/motorcycle_s_000772.png
+upload: train/motorcycle_s_000699.png to s3://udacity-ml-workflow/train/motorcycle_s_000699.png
+upload: train/motorcycle_s_000776.png to s3://udacity-ml-workflow/train/motorcycle_s_000776.png
+upload: train/motorcycle_s_000741.png to s3://udacity-ml-workflow/train/motorcycle_s_000741.png
+upload: train/motorcycle_s_000700.png to s3://udacity-ml-workflow/train/motorcycle_s_000700.png
+upload: train/motorcycle_s_000734.png to s3://udacity-ml-workflow/train/motorcycle_s_000734.png
+upload: train/motorcycle_s_000732.png to s3://udacity-ml-workflow/train/motorcycle_s_000732.png
+upload: train/motorcycle_s_000787.png to s3://udacity-ml-workflow/train/motorcycle_s_000787.png
+upload: train/motorcycle_s_000792.png to s3://udacity-ml-workflow/train/motorcycle_s_000792.png
+upload: train/motorcycle_s_000791.png to s3://udacity-ml-workflow/train/motorcycle_s_000791.png
+upload: train/motorcycle_s_000785.png to s3://udacity-ml-workflow/train/motorcycle_s_000785.png
+upload: train/motorcycle_s_000796.png to s3://udacity-ml-workflow/train/motorcycle_s_000796.png
+upload: train/motorcycle_s_000807.png to s3://udacity-ml-workflow/train/motorcycle_s_000807.png
+upload: train/motorcycle_s_000894.png to s3://udacity-ml-workflow/train/motorcycle_s_000894.png
+upload: train/motorcycle_s_000790.png to s3://udacity-ml-workflow/train/motorcycle_s_000790.png
+upload: train/motorcycle_s_000887.png to s3://udacity-ml-workflow/train/motorcycle_s_000887.png
+upload: train/motorcycle_s_000917.png to s3://udacity-ml-workflow/train/motorcycle_s_000917.png
+upload: train/motorcycle_s_000919.png to s3://udacity-ml-workflow/train/motorcycle_s_000919.png
+upload: train/motorcycle_s_000924.png to s3://udacity-ml-workflow/train/motorcycle_s_000924.png
+upload: train/motorcycle_s_000834.png to s3://udacity-ml-workflow/train/motorcycle_s_000834.png
+upload: train/motorcycle_s_000928.png to s3://udacity-ml-workflow/train/motorcycle_s_000928.png
+upload: train/motorcycle_s_000925.png to s3://udacity-ml-workflow/train/motorcycle_s_000925.png
+upload: train/motorcycle_s_000938.png to s3://udacity-ml-workflow/train/motorcycle_s_000938.png
+upload: train/motorcycle_s_000941.png to s3://udacity-ml-workflow/train/motorcycle_s_000941.png
+upload: train/motorcycle_s_000978.png to s3://udacity-ml-workflow/train/motorcycle_s_000978.png
+upload: train/motorcycle_s_000979.png to s3://udacity-ml-workflow/train/motorcycle_s_000979.png
+upload: train/motorcycle_s_000991.png to s3://udacity-ml-workflow/train/motorcycle_s_000991.png
+upload: train/motorcycle_s_001012.png to s3://udacity-ml-workflow/train/motorcycle_s_001012.png
+upload: train/motorcycle_s_001017.png to s3://udacity-ml-workflow/train/motorcycle_s_001017.png
+upload: train/motorcycle_s_000922.png to s3://udacity-ml-workflow/train/motorcycle_s_000922.png
+upload: train/motorcycle_s_001106.png to s3://udacity-ml-workflow/train/motorcycle_s_001106.png
+upload: train/motorcycle_s_000989.png to s3://udacity-ml-workflow/train/motorcycle_s_000989.png
+upload: train/motorcycle_s_001027.png to s3://udacity-ml-workflow/train/motorcycle_s_001027.png
+upload: train/motorcycle_s_001063.png to s3://udacity-ml-workflow/train/motorcycle_s_001063.png
+upload: train/motorcycle_s_000923.png to s3://udacity-ml-workflow/train/motorcycle_s_000923.png
+upload: train/motorcycle_s_001118.png to s3://udacity-ml-workflow/train/motorcycle_s_001118.png
+upload: train/motorcycle_s_000933.png to s3://udacity-ml-workflow/train/motorcycle_s_000933.png
+upload: train/motorcycle_s_001016.png to s3://udacity-ml-workflow/train/motorcycle_s_001016.png
+upload: train/motorcycle_s_001033.png to s3://udacity-ml-workflow/train/motorcycle_s_001033.png
+upload: train/motorcycle_s_001064.png to s3://udacity-ml-workflow/train/motorcycle_s_001064.png
+upload: train/motorcycle_s_001119.png to s3://udacity-ml-workflow/train/motorcycle_s_001119.png
+upload: train/motorcycle_s_001167.png to s3://udacity-ml-workflow/train/motorcycle_s_001167.png
+upload: train/motorcycle_s_001176.png to s3://udacity-ml-workflow/train/motorcycle_s_001176.png
+upload: train/motorcycle_s_001183.png to s3://udacity-ml-workflow/train/motorcycle_s_001183.png
+upload: train/motorcycle_s_001126.png to s3://udacity-ml-workflow/train/motorcycle_s_001126.png
+upload: train/motorcycle_s_001205.png to s3://udacity-ml-workflow/train/motorcycle_s_001205.png
+upload: train/motorcycle_s_001180.png to s3://udacity-ml-workflow/train/motorcycle_s_001180.png
+upload: train/motorcycle_s_001181.png to s3://udacity-ml-workflow/train/motorcycle_s_001181.png
+upload: train/motorcycle_s_001196.png to s3://udacity-ml-workflow/train/motorcycle_s_001196.png
+upload: train/motorcycle_s_001209.png to s3://udacity-ml-workflow/train/motorcycle_s_001209.png
+upload: train/motorcycle_s_001182.png to s3://udacity-ml-workflow/train/motorcycle_s_001182.png
+upload: train/motorcycle_s_001215.png to s3://udacity-ml-workflow/train/motorcycle_s_001215.png
+upload: train/motorcycle_s_001197.png to s3://udacity-ml-workflow/train/motorcycle_s_001197.png
+upload: train/motorcycle_s_001236.png to s3://udacity-ml-workflow/train/motorcycle_s_001236.png
+upload: train/motorcycle_s_001237.png to s3://udacity-ml-workflow/train/motorcycle_s_001237.png
+upload: train/motorcycle_s_001238.png to s3://udacity-ml-workflow/train/motorcycle_s_001238.png
+upload: train/motorcycle_s_001220.png to s3://udacity-ml-workflow/train/motorcycle_s_001220.png
+upload: train/motorcycle_s_001246.png to s3://udacity-ml-workflow/train/motorcycle_s_001246.png
+upload: train/motorcycle_s_001213.png to s3://udacity-ml-workflow/train/motorcycle_s_001213.png
+upload: train/motorcycle_s_001242.png to s3://udacity-ml-workflow/train/motorcycle_s_001242.png
+upload: train/motorcycle_s_001244.png to s3://udacity-ml-workflow/train/motorcycle_s_001244.png
+upload: train/motorcycle_s_001247.png to s3://udacity-ml-workflow/train/motorcycle_s_001247.png
+upload: train/motorcycle_s_001273.png to s3://udacity-ml-workflow/train/motorcycle_s_001273.png
+upload: train/motorcycle_s_001287.png to s3://udacity-ml-workflow/train/motorcycle_s_001287.png
+upload: train/motorcycle_s_001303.png to s3://udacity-ml-workflow/train/motorcycle_s_001303.png
+upload: train/motorcycle_s_001297.png to s3://udacity-ml-workflow/train/motorcycle_s_001297.png
+upload: train/motorcycle_s_001315.png to s3://udacity-ml-workflow/train/motorcycle_s_001315.png
+upload: train/motorcycle_s_001326.png to s3://udacity-ml-workflow/train/motorcycle_s_001326.png
+upload: train/motorcycle_s_001263.png to s3://udacity-ml-workflow/train/motorcycle_s_001263.png
+upload: train/motorcycle_s_001337.png to s3://udacity-ml-workflow/train/motorcycle_s_001337.png
+upload: train/motorcycle_s_001360.png to s3://udacity-ml-workflow/train/motorcycle_s_001360.png
+upload: train/motorcycle_s_001370.png to s3://udacity-ml-workflow/train/motorcycle_s_001370.png
+upload: train/motorcycle_s_001368.png to s3://udacity-ml-workflow/train/motorcycle_s_001368.png
+upload: train/motorcycle_s_001363.png to s3://udacity-ml-workflow/train/motorcycle_s_001363.png
+upload: train/motorcycle_s_001400.png to s3://udacity-ml-workflow/train/motorcycle_s_001400.png
+upload: train/motorcycle_s_001397.png to s3://udacity-ml-workflow/train/motorcycle_s_001397.png
+upload: train/motorcycle_s_001407.png to s3://udacity-ml-workflow/train/motorcycle_s_001407.png
+upload: train/motorcycle_s_001319.png to s3://udacity-ml-workflow/train/motorcycle_s_001319.png
+upload: train/motorcycle_s_001392.png to s3://udacity-ml-workflow/train/motorcycle_s_001392.png
+upload: train/motorcycle_s_001384.png to s3://udacity-ml-workflow/train/motorcycle_s_001384.png
+upload: train/motorcycle_s_001435.png to s3://udacity-ml-workflow/train/motorcycle_s_001435.png
+upload: train/motorcycle_s_001413.png to s3://udacity-ml-workflow/train/motorcycle_s_001413.png
+upload: train/motorcycle_s_001453.png to s3://udacity-ml-workflow/train/motorcycle_s_001453.png
+upload: train/motorcycle_s_001402.png to s3://udacity-ml-workflow/train/motorcycle_s_001402.png
+upload: train/motorcycle_s_001492.png to s3://udacity-ml-workflow/train/motorcycle_s_001492.png
+upload: train/motorcycle_s_001507.png to s3://udacity-ml-workflow/train/motorcycle_s_001507.png
+upload: train/motorcycle_s_001438.png to s3://udacity-ml-workflow/train/motorcycle_s_001438.png
+upload: train/motorcycle_s_001520.png to s3://udacity-ml-workflow/train/motorcycle_s_001520.png
+upload: train/motorcycle_s_001409.png to s3://udacity-ml-workflow/train/motorcycle_s_001409.png
+upload: train/motorcycle_s_001549.png to s3://udacity-ml-workflow/train/motorcycle_s_001549.png
+upload: train/motorcycle_s_001527.png to s3://udacity-ml-workflow/train/motorcycle_s_001527.png
+upload: train/motorcycle_s_001563.png to s3://udacity-ml-workflow/train/motorcycle_s_001563.png
+upload: train/motorcycle_s_001439.png to s3://udacity-ml-workflow/train/motorcycle_s_001439.png
+upload: train/motorcycle_s_001536.png to s3://udacity-ml-workflow/train/motorcycle_s_001536.png
+upload: train/motorcycle_s_001585.png to s3://udacity-ml-workflow/train/motorcycle_s_001585.png
+upload: train/motorcycle_s_001587.png to s3://udacity-ml-workflow/train/motorcycle_s_001587.png
+upload: train/motorcycle_s_001584.png to s3://udacity-ml-workflow/train/motorcycle_s_001584.png
+upload: train/motorcycle_s_001565.png to s3://udacity-ml-workflow/train/motorcycle_s_001565.png
+upload: train/motorcycle_s_001580.png to s3://udacity-ml-workflow/train/motorcycle_s_001580.png
+upload: train/motorcycle_s_001641.png to s3://udacity-ml-workflow/train/motorcycle_s_001641.png
+upload: train/motorcycle_s_001623.png to s3://udacity-ml-workflow/train/motorcycle_s_001623.png
+upload: train/motorcycle_s_001622.png to s3://udacity-ml-workflow/train/motorcycle_s_001622.png
+upload: train/motorcycle_s_001690.png to s3://udacity-ml-workflow/train/motorcycle_s_001690.png
+upload: train/motorcycle_s_001611.png to s3://udacity-ml-workflow/train/motorcycle_s_001611.png
+upload: train/motorcycle_s_001686.png to s3://udacity-ml-workflow/train/motorcycle_s_001686.png
+upload: train/motorcycle_s_001699.png to s3://udacity-ml-workflow/train/motorcycle_s_001699.png
+upload: train/motorcycle_s_001707.png to s3://udacity-ml-workflow/train/motorcycle_s_001707.png
+upload: train/motorcycle_s_001695.png to s3://udacity-ml-workflow/train/motorcycle_s_001695.png
+upload: train/motorcycle_s_001709.png to s3://udacity-ml-workflow/train/motorcycle_s_001709.png
+upload: train/motorcycle_s_001696.png to s3://udacity-ml-workflow/train/motorcycle_s_001696.png
+upload: train/motorcycle_s_001610.png to s3://udacity-ml-workflow/train/motorcycle_s_001610.png
+upload: train/motorcycle_s_001711.png to s3://udacity-ml-workflow/train/motorcycle_s_001711.png
+upload: train/motorcycle_s_001706.png to s3://udacity-ml-workflow/train/motorcycle_s_001706.png
+upload: train/motorcycle_s_001714.png to s3://udacity-ml-workflow/train/motorcycle_s_001714.png
+upload: train/motorcycle_s_001693.png to s3://udacity-ml-workflow/train/motorcycle_s_001693.png
+upload: train/motorcycle_s_001715.png to s3://udacity-ml-workflow/train/motorcycle_s_001715.png
+upload: train/motorcycle_s_001784.png to s3://udacity-ml-workflow/train/motorcycle_s_001784.png
+upload: train/motorcycle_s_001765.png to s3://udacity-ml-workflow/train/motorcycle_s_001765.png
+upload: train/motorcycle_s_001767.png to s3://udacity-ml-workflow/train/motorcycle_s_001767.png
+upload: train/motorcycle_s_001710.png to s3://udacity-ml-workflow/train/motorcycle_s_001710.png
+upload: train/motorcycle_s_001792.png to s3://udacity-ml-workflow/train/motorcycle_s_001792.png
+upload: train/motorcycle_s_001790.png to s3://udacity-ml-workflow/train/motorcycle_s_001790.png
+upload: train/motorcycle_s_001753.png to s3://udacity-ml-workflow/train/motorcycle_s_001753.png
+upload: train/motorcycle_s_001856.png to s3://udacity-ml-workflow/train/motorcycle_s_001856.png
+upload: train/motorcycle_s_001848.png to s3://udacity-ml-workflow/train/motorcycle_s_001848.png
+upload: train/motorcycle_s_001853.png to s3://udacity-ml-workflow/train/motorcycle_s_001853.png
+upload: train/motorcycle_s_001778.png to s3://udacity-ml-workflow/train/motorcycle_s_001778.png
+upload: train/motorcycle_s_001862.png to s3://udacity-ml-workflow/train/motorcycle_s_001862.png
+upload: train/motorcycle_s_001878.png to s3://udacity-ml-workflow/train/motorcycle_s_001878.png
+upload: train/motorcycle_s_001905.png to s3://udacity-ml-workflow/train/motorcycle_s_001905.png
+upload: train/motorcycle_s_002031.png to s3://udacity-ml-workflow/train/motorcycle_s_002031.png
+upload: train/motorcycle_s_001896.png to s3://udacity-ml-workflow/train/motorcycle_s_001896.png
+upload: train/motorcycle_s_001973.png to s3://udacity-ml-workflow/train/motorcycle_s_001973.png
+upload: train/motorcycle_s_001920.png to s3://udacity-ml-workflow/train/motorcycle_s_001920.png
+upload: train/motorcycle_s_002030.png to s3://udacity-ml-workflow/train/motorcycle_s_002030.png
+upload: train/motorcycle_s_002067.png to s3://udacity-ml-workflow/train/motorcycle_s_002067.png
+upload: train/motorcycle_s_002065.png to s3://udacity-ml-workflow/train/motorcycle_s_002065.png
+upload: train/motorcycle_s_002066.png to s3://udacity-ml-workflow/train/motorcycle_s_002066.png
+upload: train/motorcycle_s_002121.png to s3://udacity-ml-workflow/train/motorcycle_s_002121.png
+upload: train/motorcycle_s_002143.png to s3://udacity-ml-workflow/train/motorcycle_s_002143.png
+upload: train/motorcycle_s_002105.png to s3://udacity-ml-workflow/train/motorcycle_s_002105.png
+upload: train/motorcycle_s_002183.png to s3://udacity-ml-workflow/train/motorcycle_s_002183.png
+upload: train/motorcycle_s_002162.png to s3://udacity-ml-workflow/train/motorcycle_s_002162.png
+upload: train/motorcycle_s_002153.png to s3://udacity-ml-workflow/train/motorcycle_s_002153.png
+upload: train/motorcycle_s_002192.png to s3://udacity-ml-workflow/train/motorcycle_s_002192.png
+upload: train/motorcycle_s_002197.png to s3://udacity-ml-workflow/train/motorcycle_s_002197.png
+upload: train/motorcycle_s_002215.png to s3://udacity-ml-workflow/train/motorcycle_s_002215.png
+upload: train/motorcycle_s_002214.png to s3://udacity-ml-workflow/train/motorcycle_s_002214.png
+upload: train/motorcycle_s_002193.png to s3://udacity-ml-workflow/train/motorcycle_s_002193.png
+upload: train/motorcycle_s_002221.png to s3://udacity-ml-workflow/train/motorcycle_s_002221.png
+upload: train/motorcycle_s_002140.png to s3://udacity-ml-workflow/train/motorcycle_s_002140.png
+upload: train/motorcycle_s_002225.png to s3://udacity-ml-workflow/train/motorcycle_s_002225.png
+upload: train/motorcycle_s_002222.png to s3://udacity-ml-workflow/train/motorcycle_s_002222.png
+upload: train/motorcycle_s_002237.png to s3://udacity-ml-workflow/train/motorcycle_s_002237.png
+upload: train/motorcycle_s_002236.png to s3://udacity-ml-workflow/train/motorcycle_s_002236.png
+upload: train/motorcycle_s_002234.png to s3://udacity-ml-workflow/train/motorcycle_s_002234.png
+upload: train/motorcycle_s_002254.png to s3://udacity-ml-workflow/train/motorcycle_s_002254.png
+upload: train/motorcycle_s_002316.png to s3://udacity-ml-workflow/train/motorcycle_s_002316.png
+upload: train/ordinary_bicycle_s_000008.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000008.png
+upload: train/motorcycle_s_002298.png to s3://udacity-ml-workflow/train/motorcycle_s_002298.png
+upload: train/motorcycle_s_002275.png to s3://udacity-ml-workflow/train/motorcycle_s_002275.png
+upload: train/motorcycle_s_002271.png to s3://udacity-ml-workflow/train/motorcycle_s_002271.png
+upload: train/motorcycle_s_002291.png to s3://udacity-ml-workflow/train/motorcycle_s_002291.png
+upload: train/motorcycle_s_002317.png to s3://udacity-ml-workflow/train/motorcycle_s_002317.png
+upload: train/ordinary_bicycle_s_000022.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000022.png
+upload: train/ordinary_bicycle_s_000031.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000031.png
+upload: train/ordinary_bicycle_s_000016.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000016.png
+upload: train/ordinary_bicycle_s_000023.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000023.png
+upload: train/ordinary_bicycle_s_000029.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000029.png
+upload: train/ordinary_bicycle_s_000049.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000049.png
+upload: train/ordinary_bicycle_s_000011.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000011.png
+upload: train/ordinary_bicycle_s_000035.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000035.png
+upload: train/ordinary_bicycle_s_000056.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000056.png
+upload: train/ordinary_bicycle_s_000060.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000060.png
+upload: train/ordinary_bicycle_s_000097.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000097.png
+upload: train/ordinary_bicycle_s_000066.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000066.png
+upload: train/ordinary_bicycle_s_000095.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000095.png
+upload: train/ordinary_bicycle_s_000098.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000098.png
+upload: train/ordinary_bicycle_s_000096.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000096.png
+upload: train/ordinary_bicycle_s_000101.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000101.png
+upload: train/ordinary_bicycle_s_000099.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000099.png
+upload: train/ordinary_bicycle_s_000036.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000036.png
+upload: train/ordinary_bicycle_s_000102.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000102.png
+upload: train/ordinary_bicycle_s_000100.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000100.png
+upload: train/ordinary_bicycle_s_000125.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000125.png
+upload: train/ordinary_bicycle_s_000112.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000112.png
+upload: train/ordinary_bicycle_s_000155.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000155.png
+upload: train/ordinary_bicycle_s_000104.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000104.png
+upload: train/ordinary_bicycle_s_000161.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000161.png
+upload: train/ordinary_bicycle_s_000167.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000167.png
+upload: train/ordinary_bicycle_s_000201.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000201.png
+upload: train/ordinary_bicycle_s_000154.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000154.png
+upload: train/ordinary_bicycle_s_000110.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000110.png
+upload: train/ordinary_bicycle_s_000216.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000216.png
+upload: train/ordinary_bicycle_s_000205.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000205.png
+upload: train/ordinary_bicycle_s_000218.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000218.png
+upload: train/ordinary_bicycle_s_000274.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000274.png
+upload: train/ordinary_bicycle_s_000277.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000277.png
+upload: train/ordinary_bicycle_s_000286.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000286.png
+upload: train/ordinary_bicycle_s_000280.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000280.png
+upload: train/ordinary_bicycle_s_000107.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000107.png
+upload: train/ordinary_bicycle_s_000265.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000265.png
+upload: train/ordinary_bicycle_s_000157.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000157.png
+upload: train/ordinary_bicycle_s_000308.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000308.png
+upload: train/ordinary_bicycle_s_000269.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000269.png
+upload: train/ordinary_bicycle_s_000297.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000297.png
+upload: train/ordinary_bicycle_s_000324.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000324.png
+upload: train/ordinary_bicycle_s_000355.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000355.png
+upload: train/ordinary_bicycle_s_000387.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000387.png
+upload: train/ordinary_bicycle_s_000432.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000432.png
+upload: train/ordinary_bicycle_s_000426.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000426.png
+upload: train/ordinary_bicycle_s_000298.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000298.png
+upload: train/safety_bicycle_s_000019.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000019.png
+upload: train/safety_bicycle_s_000079.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000079.png
+upload: train/ordinary_bicycle_s_000419.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000419.png
+upload: train/ordinary_bicycle_s_000451.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000451.png
+upload: train/ordinary_bicycle_s_000433.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000433.png
+upload: train/ordinary_bicycle_s_000347.png to s3://udacity-ml-workflow/train/ordinary_bicycle_s_000347.png
+upload: train/safety_bicycle_s_000092.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000092.png
+upload: train/safety_bicycle_s_000140.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000140.png
+upload: train/safety_bicycle_s_000162.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000162.png
+upload: train/safety_bicycle_s_000167.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000167.png
+upload: train/safety_bicycle_s_000193.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000193.png
+upload: train/safety_bicycle_s_000207.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000207.png
+upload: train/safety_bicycle_s_000239.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000239.png
+upload: train/safety_bicycle_s_000233.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000233.png
+upload: train/safety_bicycle_s_000261.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000261.png
+upload: train/safety_bicycle_s_000125.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000125.png
+upload: train/safety_bicycle_s_000196.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000196.png
+upload: train/safety_bicycle_s_000296.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000296.png
+upload: train/safety_bicycle_s_000322.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000322.png
+upload: train/safety_bicycle_s_000232.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000232.png
+upload: train/safety_bicycle_s_000373.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000373.png
+upload: train/safety_bicycle_s_000255.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000255.png
+upload: train/safety_bicycle_s_000425.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000425.png
+upload: train/safety_bicycle_s_000303.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000303.png
+upload: train/safety_bicycle_s_000532.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000532.png
+upload: train/safety_bicycle_s_000427.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000427.png
+upload: train/safety_bicycle_s_000533.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000533.png
+upload: train/safety_bicycle_s_000348.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000348.png
+upload: train/safety_bicycle_s_000324.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000324.png
+upload: train/safety_bicycle_s_000500.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000500.png
+upload: train/safety_bicycle_s_000660.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000660.png
+upload: train/safety_bicycle_s_000760.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000760.png
+upload: train/safety_bicycle_s_000789.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000789.png
+upload: train/safety_bicycle_s_001026.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001026.png
+upload: train/safety_bicycle_s_000655.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000655.png
+upload: train/safety_bicycle_s_001028.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001028.png
+upload: train/safety_bicycle_s_000568.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000568.png
+upload: train/safety_bicycle_s_000728.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000728.png
+upload: train/safety_bicycle_s_000860.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000860.png
+upload: train/safety_bicycle_s_000359.png to s3://udacity-ml-workflow/train/safety_bicycle_s_000359.png
+upload: train/safety_bicycle_s_001029.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001029.png
+upload: train/safety_bicycle_s_001049.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001049.png
+upload: train/safety_bicycle_s_001085.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001085.png
+upload: train/safety_bicycle_s_001202.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001202.png
+upload: train/safety_bicycle_s_001063.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001063.png
+upload: train/safety_bicycle_s_001109.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001109.png
+upload: train/safety_bicycle_s_001254.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001254.png
+upload: train/safety_bicycle_s_001320.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001320.png
+upload: train/safety_bicycle_s_001303.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001303.png
+upload: train/safety_bicycle_s_001327.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001327.png
+upload: train/safety_bicycle_s_001381.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001381.png
+upload: train/safety_bicycle_s_001570.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001570.png
+upload: train/safety_bicycle_s_001253.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001253.png
+upload: train/safety_bicycle_s_001639.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001639.png
+upload: train/safety_bicycle_s_001113.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001113.png
+upload: train/safety_bicycle_s_001651.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001651.png
+upload: train/safety_bicycle_s_001243.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001243.png
+upload: train/safety_bicycle_s_001608.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001608.png
+upload: train/safety_bicycle_s_001699.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001699.png
+upload: train/safety_bicycle_s_001705.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001705.png
+upload: train/safety_bicycle_s_001240.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001240.png
+upload: train/safety_bicycle_s_001659.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001659.png
+upload: train/safety_bicycle_s_001706.png to s3://udacity-ml-workflow/train/safety_bicycle_s_001706.png
+upload: train/safety_bike_s_000009.png to s3://udacity-ml-workflow/train/safety_bike_s_000009.png
+upload: train/safety_bike_s_000058.png to s3://udacity-ml-workflow/train/safety_bike_s_000058.png
+upload: train/safety_bike_s_000079.png to s3://udacity-ml-workflow/train/safety_bike_s_000079.png
+upload: train/safety_bike_s_000104.png to s3://udacity-ml-workflow/train/safety_bike_s_000104.png
+upload: train/safety_bike_s_000158.png to s3://udacity-ml-workflow/train/safety_bike_s_000158.png
+upload: train/safety_bike_s_000160.png to s3://udacity-ml-workflow/train/safety_bike_s_000160.png
+upload: train/safety_bike_s_000100.png to s3://udacity-ml-workflow/train/safety_bike_s_000100.png
+upload: train/safety_bike_s_000155.png to s3://udacity-ml-workflow/train/safety_bike_s_000155.png
+upload: train/safety_bike_s_000173.png to s3://udacity-ml-workflow/train/safety_bike_s_000173.png
+upload: train/safety_bike_s_000015.png to s3://udacity-ml-workflow/train/safety_bike_s_000015.png
+upload: train/safety_bike_s_000054.png to s3://udacity-ml-workflow/train/safety_bike_s_000054.png
+upload: train/safety_bike_s_000198.png to s3://udacity-ml-workflow/train/safety_bike_s_000198.png
+upload: train/safety_bike_s_000311.png to s3://udacity-ml-workflow/train/safety_bike_s_000311.png
+upload: train/safety_bike_s_000244.png to s3://udacity-ml-workflow/train/safety_bike_s_000244.png
+upload: train/safety_bike_s_000245.png to s3://udacity-ml-workflow/train/safety_bike_s_000245.png
+upload: train/safety_bike_s_000165.png to s3://udacity-ml-workflow/train/safety_bike_s_000165.png
+upload: train/safety_bike_s_000178.png to s3://udacity-ml-workflow/train/safety_bike_s_000178.png
+upload: train/safety_bike_s_000381.png to s3://udacity-ml-workflow/train/safety_bike_s_000381.png
+upload: train/safety_bike_s_000328.png to s3://udacity-ml-workflow/train/safety_bike_s_000328.png
+upload: train/safety_bike_s_000461.png to s3://udacity-ml-workflow/train/safety_bike_s_000461.png
+upload: train/safety_bike_s_000263.png to s3://udacity-ml-workflow/train/safety_bike_s_000263.png
+upload: train/safety_bike_s_000482.png to s3://udacity-ml-workflow/train/safety_bike_s_000482.png
+upload: train/safety_bike_s_000567.png to s3://udacity-ml-workflow/train/safety_bike_s_000567.png
+upload: train/safety_bike_s_000914.png to s3://udacity-ml-workflow/train/safety_bike_s_000914.png
+upload: train/safety_bike_s_000277.png to s3://udacity-ml-workflow/train/safety_bike_s_000277.png
+upload: train/safety_bike_s_000950.png to s3://udacity-ml-workflow/train/safety_bike_s_000950.png
+upload: train/safety_bike_s_000848.png to s3://udacity-ml-workflow/train/safety_bike_s_000848.png
+upload: train/safety_bike_s_000921.png to s3://udacity-ml-workflow/train/safety_bike_s_000921.png
+upload: train/safety_bike_s_000643.png to s3://udacity-ml-workflow/train/safety_bike_s_000643.png
+upload: train/safety_bike_s_000867.png to s3://udacity-ml-workflow/train/safety_bike_s_000867.png
+upload: train/safety_bike_s_000830.png to s3://udacity-ml-workflow/train/safety_bike_s_000830.png
+upload: train/safety_bike_s_000934.png to s3://udacity-ml-workflow/train/safety_bike_s_000934.png
+upload: train/safety_bike_s_000963.png to s3://udacity-ml-workflow/train/safety_bike_s_000963.png
+upload: train/safety_bike_s_001010.png to s3://udacity-ml-workflow/train/safety_bike_s_001010.png
+upload: train/safety_bike_s_001148.png to s3://udacity-ml-workflow/train/safety_bike_s_001148.png
+upload: train/safety_bike_s_001257.png to s3://udacity-ml-workflow/train/safety_bike_s_001257.png
+upload: train/safety_bike_s_001289.png to s3://udacity-ml-workflow/train/safety_bike_s_001289.png
+upload: train/safety_bike_s_001338.png to s3://udacity-ml-workflow/train/safety_bike_s_001338.png
+upload: train/safety_bike_s_000984.png to s3://udacity-ml-workflow/train/safety_bike_s_000984.png
+upload: train/safety_bike_s_001355.png to s3://udacity-ml-workflow/train/safety_bike_s_001355.png
+upload: train/safety_bike_s_000989.png to s3://udacity-ml-workflow/train/safety_bike_s_000989.png
+upload: train/safety_bike_s_001012.png to s3://udacity-ml-workflow/train/safety_bike_s_001012.png
+upload: train/safety_bike_s_001560.png to s3://udacity-ml-workflow/train/safety_bike_s_001560.png
+upload: train/safety_bike_s_001608.png to s3://udacity-ml-workflow/train/safety_bike_s_001608.png
+upload: train/safety_bike_s_001552.png to s3://udacity-ml-workflow/train/safety_bike_s_001552.png
+upload: train/safety_bike_s_001371.png to s3://udacity-ml-workflow/train/safety_bike_s_001371.png
+upload: train/safety_bike_s_001465.png to s3://udacity-ml-workflow/train/safety_bike_s_001465.png
+upload: train/safety_bike_s_001590.png to s3://udacity-ml-workflow/train/safety_bike_s_001590.png
+upload: train/safety_bike_s_001472.png to s3://udacity-ml-workflow/train/safety_bike_s_001472.png
+upload: train/safety_bike_s_001659.png to s3://udacity-ml-workflow/train/safety_bike_s_001659.png
+upload: train/safety_bike_s_001784.png to s3://udacity-ml-workflow/train/safety_bike_s_001784.png
+upload: train/safety_bike_s_001640.png to s3://udacity-ml-workflow/train/safety_bike_s_001640.png
+upload: train/safety_bike_s_001474.png to s3://udacity-ml-workflow/train/safety_bike_s_001474.png
+upload: train/safety_bike_s_001715.png to s3://udacity-ml-workflow/train/safety_bike_s_001715.png
+upload: train/velocipede_s_000010.png to s3://udacity-ml-workflow/train/velocipede_s_000010.png
+upload: train/velocipede_s_000021.png to s3://udacity-ml-workflow/train/velocipede_s_000021.png
+upload: train/trail_bike_s_000016.png to s3://udacity-ml-workflow/train/trail_bike_s_000016.png
+upload: train/velocipede_s_000265.png to s3://udacity-ml-workflow/train/velocipede_s_000265.png
+upload: train/velocipede_s_000282.png to s3://udacity-ml-workflow/train/velocipede_s_000282.png
+upload: train/velocipede_s_000430.png to s3://udacity-ml-workflow/train/velocipede_s_000430.png
+upload: train/velocipede_s_000139.png to s3://udacity-ml-workflow/train/velocipede_s_000139.png
+upload: train/velocipede_s_000049.png to s3://udacity-ml-workflow/train/velocipede_s_000049.png
+upload: train/velocipede_s_000023.png to s3://udacity-ml-workflow/train/velocipede_s_000023.png
+upload: train/velocipede_s_000012.png to s3://udacity-ml-workflow/train/velocipede_s_000012.png
+upload: train/velocipede_s_000358.png to s3://udacity-ml-workflow/train/velocipede_s_000358.png
+upload: train/velocipede_s_000586.png to s3://udacity-ml-workflow/train/velocipede_s_000586.png
+upload: train/velocipede_s_000330.png to s3://udacity-ml-workflow/train/velocipede_s_000330.png
+upload: train/velocipede_s_000807.png to s3://udacity-ml-workflow/train/velocipede_s_000807.png
+upload: train/velocipede_s_000702.png to s3://udacity-ml-workflow/train/velocipede_s_000702.png
+upload: train/velocipede_s_000825.png to s3://udacity-ml-workflow/train/velocipede_s_000825.png
+upload: train/velocipede_s_000949.png to s3://udacity-ml-workflow/train/velocipede_s_000949.png
+upload: train/velocipede_s_000989.png to s3://udacity-ml-workflow/train/velocipede_s_000989.png
+upload: train/velocipede_s_001056.png to s3://udacity-ml-workflow/train/velocipede_s_001056.png
+upload: train/velocipede_s_000670.png to s3://udacity-ml-workflow/train/velocipede_s_000670.png
+upload: train/velocipede_s_001141.png to s3://udacity-ml-workflow/train/velocipede_s_001141.png
+upload: train/velocipede_s_001210.png to s3://udacity-ml-workflow/train/velocipede_s_001210.png
+upload: train/velocipede_s_000485.png to s3://udacity-ml-workflow/train/velocipede_s_000485.png
+upload: train/velocipede_s_000931.png to s3://udacity-ml-workflow/train/velocipede_s_000931.png
+upload: train/velocipede_s_001158.png to s3://udacity-ml-workflow/train/velocipede_s_001158.png
+upload: train/velocipede_s_000659.png to s3://udacity-ml-workflow/train/velocipede_s_000659.png
+upload: train/velocipede_s_001200.png to s3://udacity-ml-workflow/train/velocipede_s_001200.png
+upload: train/velocipede_s_001225.png to s3://udacity-ml-workflow/train/velocipede_s_001225.png
+upload: train/velocipede_s_001222.png to s3://udacity-ml-workflow/train/velocipede_s_001222.png
+upload: train/velocipede_s_001279.png to s3://udacity-ml-workflow/train/velocipede_s_001279.png
+upload: train/velocipede_s_001244.png to s3://udacity-ml-workflow/train/velocipede_s_001244.png
+upload: train/velocipede_s_001298.png to s3://udacity-ml-workflow/train/velocipede_s_001298.png
+upload: train/velocipede_s_001166.png to s3://udacity-ml-workflow/train/velocipede_s_001166.png
+upload: train/velocipede_s_001142.png to s3://udacity-ml-workflow/train/velocipede_s_001142.png
+upload: train/velocipede_s_001278.png to s3://udacity-ml-workflow/train/velocipede_s_001278.png
+upload: train/velocipede_s_001489.png to s3://udacity-ml-workflow/train/velocipede_s_001489.png
+upload: train/velocipede_s_001299.png to s3://udacity-ml-workflow/train/velocipede_s_001299.png
+upload: train/velocipede_s_001358.png to s3://udacity-ml-workflow/train/velocipede_s_001358.png
+upload: train/velocipede_s_001338.png to s3://udacity-ml-workflow/train/velocipede_s_001338.png
+upload: train/velocipede_s_001637.png to s3://udacity-ml-workflow/train/velocipede_s_001637.png
+upload: train/velocipede_s_001361.png to s3://udacity-ml-workflow/train/velocipede_s_001361.png
+upload: train/velocipede_s_001514.png to s3://udacity-ml-workflow/train/velocipede_s_001514.png
+upload: train/velocipede_s_001874.png to s3://udacity-ml-workflow/train/velocipede_s_001874.png
+upload: train/velocipede_s_001880.png to s3://udacity-ml-workflow/train/velocipede_s_001880.png
+upload: train/velocipede_s_001422.png to s3://udacity-ml-workflow/train/velocipede_s_001422.png
+upload: train/velocipede_s_001883.png to s3://udacity-ml-workflow/train/velocipede_s_001883.png
+upload: train/velocipede_s_001870.png to s3://udacity-ml-workflow/train/velocipede_s_001870.png
+upload: train/velocipede_s_001872.png to s3://udacity-ml-workflow/train/velocipede_s_001872.png
+upload: train/velocipede_s_001882.png to s3://udacity-ml-workflow/train/velocipede_s_001882.png
+upload: train/velocipede_s_001935.png to s3://udacity-ml-workflow/train/velocipede_s_001935.png
+upload: train/velocipede_s_001958.png to s3://udacity-ml-workflow/train/velocipede_s_001958.png
+upload: train/velocipede_s_001585.png to s3://udacity-ml-workflow/train/velocipede_s_001585.png
+upload: train/velocipede_s_001920.png to s3://udacity-ml-workflow/train/velocipede_s_001920.png
+upload: train/velocipede_s_001907.png to s3://udacity-ml-workflow/train/velocipede_s_001907.png
+upload: test/bicycle_s_000030.png to s3://udacity-ml-workflow/test/bicycle_s_000030.png
+upload: test/bicycle_s_000977.png to s3://udacity-ml-workflow/test/bicycle_s_000977.png
+upload: test/bicycle_s_000031.png to s3://udacity-ml-workflow/test/bicycle_s_000031.png
+upload: test/bicycle_s_000513.png to s3://udacity-ml-workflow/test/bicycle_s_000513.png
+upload: test/bicycle_s_001107.png to s3://udacity-ml-workflow/test/bicycle_s_001107.png
+upload: test/bicycle_s_000776.png to s3://udacity-ml-workflow/test/bicycle_s_000776.png
+upload: test/bicycle_s_000059.png to s3://udacity-ml-workflow/test/bicycle_s_000059.png
+upload: test/bicycle_s_000479.png to s3://udacity-ml-workflow/test/bicycle_s_000479.png
+upload: test/bicycle_s_001789.png to s3://udacity-ml-workflow/test/bicycle_s_001789.png
+upload: test/bicycle_s_001047.png to s3://udacity-ml-workflow/test/bicycle_s_001047.png
+upload: test/bicycle_s_001102.png to s3://udacity-ml-workflow/test/bicycle_s_001102.png
+upload: test/bicycle_s_001218.png to s3://udacity-ml-workflow/test/bicycle_s_001218.png
+upload: test/bicycle_s_000779.png to s3://udacity-ml-workflow/test/bicycle_s_000779.png
+upload: test/bicycle_s_001804.png to s3://udacity-ml-workflow/test/bicycle_s_001804.png
+upload: test/bike_s_000163.png to s3://udacity-ml-workflow/test/bike_s_000163.png
+upload: test/bicycle_s_000777.png to s3://udacity-ml-workflow/test/bicycle_s_000777.png
+upload: test/bicycle_s_002458.png to s3://udacity-ml-workflow/test/bicycle_s_002458.png
+upload: test/bicycle_s_002735.png to s3://udacity-ml-workflow/test/bicycle_s_002735.png
+upload: test/bike_s_000131.png to s3://udacity-ml-workflow/test/bike_s_000131.png
+upload: test/bike_s_000041.png to s3://udacity-ml-workflow/test/bike_s_000041.png
+upload: test/bike_s_000330.png to s3://udacity-ml-workflow/test/bike_s_000330.png
+upload: test/bike_s_000071.png to s3://udacity-ml-workflow/test/bike_s_000071.png
+upload: test/bike_s_000487.png to s3://udacity-ml-workflow/test/bike_s_000487.png
+upload: test/bike_s_000643.png to s3://udacity-ml-workflow/test/bike_s_000643.png
+upload: test/bike_s_000658.png to s3://udacity-ml-workflow/test/bike_s_000658.png
+upload: test/bike_s_000457.png to s3://udacity-ml-workflow/test/bike_s_000457.png
+upload: test/bike_s_000694.png to s3://udacity-ml-workflow/test/bike_s_000694.png
+upload: test/bike_s_001073.png to s3://udacity-ml-workflow/test/bike_s_001073.png
+upload: test/bike_s_001068.png to s3://udacity-ml-workflow/test/bike_s_001068.png
+upload: test/bike_s_001159.png to s3://udacity-ml-workflow/test/bike_s_001159.png
+upload: test/bike_s_000801.png to s3://udacity-ml-workflow/test/bike_s_000801.png
+upload: test/bike_s_001738.png to s3://udacity-ml-workflow/test/bike_s_001738.png
+upload: test/bike_s_000941.png to s3://udacity-ml-workflow/test/bike_s_000941.png
+upload: test/bike_s_002116.png to s3://udacity-ml-workflow/test/bike_s_002116.png
+upload: test/bike_s_001342.png to s3://udacity-ml-workflow/test/bike_s_001342.png
+upload: test/bike_s_001852.png to s3://udacity-ml-workflow/test/bike_s_001852.png
+upload: test/bike_s_001216.png to s3://udacity-ml-workflow/test/bike_s_001216.png
+upload: test/bike_s_001784.png to s3://udacity-ml-workflow/test/bike_s_001784.png
+upload: test/bike_s_002208.png to s3://udacity-ml-workflow/test/bike_s_002208.png
+upload: test/cycle_s_001044.png to s3://udacity-ml-workflow/test/cycle_s_001044.png
+upload: test/cycle_s_000010.png to s3://udacity-ml-workflow/test/cycle_s_000010.png
+upload: test/cycle_s_000970.png to s3://udacity-ml-workflow/test/cycle_s_000970.png
+upload: test/cycle_s_001214.png to s3://udacity-ml-workflow/test/cycle_s_001214.png
+upload: test/cycle_s_001297.png to s3://udacity-ml-workflow/test/cycle_s_001297.png
+upload: test/cycle_s_000068.png to s3://udacity-ml-workflow/test/cycle_s_000068.png
+upload: test/cycle_s_001306.png to s3://udacity-ml-workflow/test/cycle_s_001306.png
+upload: test/bike_s_002009.png to s3://udacity-ml-workflow/test/bike_s_002009.png
+upload: test/cycle_s_001648.png to s3://udacity-ml-workflow/test/cycle_s_001648.png
+upload: test/cycle_s_002613.png to s3://udacity-ml-workflow/test/cycle_s_002613.png
+upload: test/cycle_s_001915.png to s3://udacity-ml-workflow/test/cycle_s_001915.png
+upload: test/minibike_s_000052.png to s3://udacity-ml-workflow/test/minibike_s_000052.png
+upload: test/cycle_s_002964.png to s3://udacity-ml-workflow/test/cycle_s_002964.png
+upload: test/minibike_s_000055.png to s3://udacity-ml-workflow/test/minibike_s_000055.png
+upload: test/cycle_s_001953.png to s3://udacity-ml-workflow/test/cycle_s_001953.png
+upload: test/minibike_s_000075.png to s3://udacity-ml-workflow/test/minibike_s_000075.png
+upload: test/cycle_s_002661.png to s3://udacity-ml-workflow/test/cycle_s_002661.png
+upload: test/minibike_s_000288.png to s3://udacity-ml-workflow/test/minibike_s_000288.png
+upload: test/cycle_s_002305.png to s3://udacity-ml-workflow/test/cycle_s_002305.png
+upload: test/minibike_s_000254.png to s3://udacity-ml-workflow/test/minibike_s_000254.png
+upload: test/dirt_bike_s_000001.png to s3://udacity-ml-workflow/test/dirt_bike_s_000001.png
+upload: test/minibike_s_000309.png to s3://udacity-ml-workflow/test/minibike_s_000309.png
+upload: test/minibike_s_000792.png to s3://udacity-ml-workflow/test/minibike_s_000792.png
+upload: test/minibike_s_000573.png to s3://udacity-ml-workflow/test/minibike_s_000573.png
+upload: test/minibike_s_000505.png to s3://udacity-ml-workflow/test/minibike_s_000505.png
+upload: test/minibike_s_000398.png to s3://udacity-ml-workflow/test/minibike_s_000398.png
+upload: test/minibike_s_000290.png to s3://udacity-ml-workflow/test/minibike_s_000290.png
+upload: test/minibike_s_000801.png to s3://udacity-ml-workflow/test/minibike_s_000801.png
+upload: test/minibike_s_000497.png to s3://udacity-ml-workflow/test/minibike_s_000497.png
+upload: test/minibike_s_000880.png to s3://udacity-ml-workflow/test/minibike_s_000880.png
+upload: test/minibike_s_000947.png to s3://udacity-ml-workflow/test/minibike_s_000947.png
+upload: test/minibike_s_000828.png to s3://udacity-ml-workflow/test/minibike_s_000828.png
+upload: test/minibike_s_001089.png to s3://udacity-ml-workflow/test/minibike_s_001089.png
+upload: test/minibike_s_001473.png to s3://udacity-ml-workflow/test/minibike_s_001473.png
+upload: test/minibike_s_001441.png to s3://udacity-ml-workflow/test/minibike_s_001441.png
+upload: test/minibike_s_001732.png to s3://udacity-ml-workflow/test/minibike_s_001732.png
+upload: test/minibike_s_001651.png to s3://udacity-ml-workflow/test/minibike_s_001651.png
+upload: test/minibike_s_000913.png to s3://udacity-ml-workflow/test/minibike_s_000913.png
+upload: test/minibike_s_001893.png to s3://udacity-ml-workflow/test/minibike_s_001893.png
+upload: test/minibike_s_001605.png to s3://udacity-ml-workflow/test/minibike_s_001605.png
+upload: test/minibike_s_002230.png to s3://udacity-ml-workflow/test/minibike_s_002230.png
+upload: test/minibike_s_002173.png to s3://udacity-ml-workflow/test/minibike_s_002173.png
+upload: test/minibike_s_002227.png to s3://udacity-ml-workflow/test/minibike_s_002227.png
+upload: test/minibike_s_001547.png to s3://udacity-ml-workflow/test/minibike_s_001547.png
+upload: test/minibike_s_001867.png to s3://udacity-ml-workflow/test/minibike_s_001867.png
+upload: test/motorbike_s_000121.png to s3://udacity-ml-workflow/test/motorbike_s_000121.png
+upload: test/moped_s_000064.png to s3://udacity-ml-workflow/test/moped_s_000064.png
+upload: test/minibike_s_000960.png to s3://udacity-ml-workflow/test/minibike_s_000960.png
+upload: test/moped_s_000007.png to s3://udacity-ml-workflow/test/moped_s_000007.png
+upload: test/moped_s_000306.png to s3://udacity-ml-workflow/test/moped_s_000306.png
+upload: test/motorbike_s_000005.png to s3://udacity-ml-workflow/test/motorbike_s_000005.png
+upload: test/minibike_s_002051.png to s3://udacity-ml-workflow/test/minibike_s_002051.png
+upload: test/motorbike_s_000126.png to s3://udacity-ml-workflow/test/motorbike_s_000126.png
+upload: test/moped_s_000033.png to s3://udacity-ml-workflow/test/moped_s_000033.png
+upload: test/motorbike_s_000324.png to s3://udacity-ml-workflow/test/motorbike_s_000324.png
+upload: test/motorbike_s_000433.png to s3://udacity-ml-workflow/test/motorbike_s_000433.png
+upload: test/motorbike_s_000465.png to s3://udacity-ml-workflow/test/motorbike_s_000465.png
+upload: test/motorbike_s_000629.png to s3://udacity-ml-workflow/test/motorbike_s_000629.png
+upload: test/motorcycle_s_000040.png to s3://udacity-ml-workflow/test/motorcycle_s_000040.png
+upload: test/motorbike_s_000333.png to s3://udacity-ml-workflow/test/motorbike_s_000333.png
+upload: test/motorcycle_s_000007.png to s3://udacity-ml-workflow/test/motorcycle_s_000007.png
+upload: test/motorbike_s_000135.png to s3://udacity-ml-workflow/test/motorbike_s_000135.png
+upload: test/motorcycle_s_000042.png to s3://udacity-ml-workflow/test/motorcycle_s_000042.png
+upload: test/motorcycle_s_000063.png to s3://udacity-ml-workflow/test/motorcycle_s_000063.png
+upload: test/motorcycle_s_000141.png to s3://udacity-ml-workflow/test/motorcycle_s_000141.png
+upload: test/motorcycle_s_000139.png to s3://udacity-ml-workflow/test/motorcycle_s_000139.png
+upload: test/motorcycle_s_000211.png to s3://udacity-ml-workflow/test/motorcycle_s_000211.png
+upload: test/motorcycle_s_000049.png to s3://udacity-ml-workflow/test/motorcycle_s_000049.png
+upload: test/motorcycle_s_000427.png to s3://udacity-ml-workflow/test/motorcycle_s_000427.png
+upload: test/motorcycle_s_000171.png to s3://udacity-ml-workflow/test/motorcycle_s_000171.png
+upload: test/motorcycle_s_000485.png to s3://udacity-ml-workflow/test/motorcycle_s_000485.png
+upload: test/motorcycle_s_000450.png to s3://udacity-ml-workflow/test/motorcycle_s_000450.png
+upload: test/motorcycle_s_000060.png to s3://udacity-ml-workflow/test/motorcycle_s_000060.png
+upload: test/motorcycle_s_000446.png to s3://udacity-ml-workflow/test/motorcycle_s_000446.png
+upload: test/motorcycle_s_000222.png to s3://udacity-ml-workflow/test/motorcycle_s_000222.png
+upload: test/motorcycle_s_000530.png to s3://udacity-ml-workflow/test/motorcycle_s_000530.png
+upload: test/motorcycle_s_000512.png to s3://udacity-ml-workflow/test/motorcycle_s_000512.png
+upload: test/motorcycle_s_000352.png to s3://udacity-ml-workflow/test/motorcycle_s_000352.png
+upload: test/motorcycle_s_000323.png to s3://udacity-ml-workflow/test/motorcycle_s_000323.png
+upload: test/motorcycle_s_000602.png to s3://udacity-ml-workflow/test/motorcycle_s_000602.png
+upload: test/motorcycle_s_000494.png to s3://udacity-ml-workflow/test/motorcycle_s_000494.png
+upload: test/motorcycle_s_000679.png to s3://udacity-ml-workflow/test/motorcycle_s_000679.png
+upload: test/motorcycle_s_000685.png to s3://udacity-ml-workflow/test/motorcycle_s_000685.png
+upload: test/motorcycle_s_000606.png to s3://udacity-ml-workflow/test/motorcycle_s_000606.png
+upload: test/motorcycle_s_000866.png to s3://udacity-ml-workflow/test/motorcycle_s_000866.png
+upload: test/motorcycle_s_000825.png to s3://udacity-ml-workflow/test/motorcycle_s_000825.png
+upload: test/motorcycle_s_001249.png to s3://udacity-ml-workflow/test/motorcycle_s_001249.png
+upload: test/motorcycle_s_000615.png to s3://udacity-ml-workflow/test/motorcycle_s_000615.png
+upload: test/motorcycle_s_000739.png to s3://udacity-ml-workflow/test/motorcycle_s_000739.png
+upload: test/motorcycle_s_001261.png to s3://udacity-ml-workflow/test/motorcycle_s_001261.png
+upload: test/motorcycle_s_000878.png to s3://udacity-ml-workflow/test/motorcycle_s_000878.png
+upload: test/motorcycle_s_000963.png to s3://udacity-ml-workflow/test/motorcycle_s_000963.png
+upload: test/motorcycle_s_000876.png to s3://udacity-ml-workflow/test/motorcycle_s_000876.png
+upload: test/motorcycle_s_001164.png to s3://udacity-ml-workflow/test/motorcycle_s_001164.png
+upload: test/motorcycle_s_000797.png to s3://udacity-ml-workflow/test/motorcycle_s_000797.png
+upload: test/motorcycle_s_001269.png to s3://udacity-ml-workflow/test/motorcycle_s_001269.png
+upload: test/motorcycle_s_001385.png to s3://udacity-ml-workflow/test/motorcycle_s_001385.png
+upload: test/motorcycle_s_001348.png to s3://udacity-ml-workflow/test/motorcycle_s_001348.png
+upload: test/motorcycle_s_001679.png to s3://udacity-ml-workflow/test/motorcycle_s_001679.png
+upload: test/motorcycle_s_001782.png to s3://udacity-ml-workflow/test/motorcycle_s_001782.png
+upload: test/motorcycle_s_001892.png to s3://udacity-ml-workflow/test/motorcycle_s_001892.png
+upload: test/motorcycle_s_001687.png to s3://udacity-ml-workflow/test/motorcycle_s_001687.png
+upload: test/motorcycle_s_001519.png to s3://udacity-ml-workflow/test/motorcycle_s_001519.png
+upload: test/motorcycle_s_001960.png to s3://udacity-ml-workflow/test/motorcycle_s_001960.png
+upload: test/motorcycle_s_001936.png to s3://udacity-ml-workflow/test/motorcycle_s_001936.png
+upload: test/motorcycle_s_001508.png to s3://udacity-ml-workflow/test/motorcycle_s_001508.png
+upload: test/motorcycle_s_001906.png to s3://udacity-ml-workflow/test/motorcycle_s_001906.png
+upload: test/motorcycle_s_001971.png to s3://udacity-ml-workflow/test/motorcycle_s_001971.png
+upload: test/motorcycle_s_002126.png to s3://udacity-ml-workflow/test/motorcycle_s_002126.png
+upload: test/motorcycle_s_002177.png to s3://udacity-ml-workflow/test/motorcycle_s_002177.png
+upload: test/ordinary_bicycle_s_000158.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000158.png
+upload: test/motorcycle_s_002026.png to s3://udacity-ml-workflow/test/motorcycle_s_002026.png
+upload: test/motorcycle_s_001955.png to s3://udacity-ml-workflow/test/motorcycle_s_001955.png
+upload: test/ordinary_bicycle_s_000431.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000431.png
+upload: test/ordinary_bicycle_s_000113.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000113.png
+upload: test/motorcycle_s_002112.png to s3://udacity-ml-workflow/test/motorcycle_s_002112.png
+upload: test/ordinary_bicycle_s_000350.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000350.png
+upload: test/safety_bicycle_s_000315.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000315.png
+upload: test/safety_bicycle_s_001153.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001153.png
+upload: test/ordinary_bicycle_s_000169.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000169.png
+upload: test/safety_bicycle_s_000280.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000280.png
+upload: test/ordinary_bicycle_s_000284.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000284.png
+upload: test/ordinary_bicycle_s_000105.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000105.png
+upload: test/safety_bicycle_s_000235.png to s3://udacity-ml-workflow/test/safety_bicycle_s_000235.png
+upload: test/safety_bicycle_s_001322.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001322.png
+upload: test/ordinary_bicycle_s_000437.png to s3://udacity-ml-workflow/test/ordinary_bicycle_s_000437.png
+upload: test/safety_bicycle_s_001575.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001575.png
+upload: test/safety_bicycle_s_001286.png to s3://udacity-ml-workflow/test/safety_bicycle_s_001286.png
+upload: test/safety_bike_s_000488.png to s3://udacity-ml-workflow/test/safety_bike_s_000488.png
+upload: test/safety_bike_s_000541.png to s3://udacity-ml-workflow/test/safety_bike_s_000541.png
+upload: test/safety_bike_s_000390.png to s3://udacity-ml-workflow/test/safety_bike_s_000390.png
+upload: test/safety_bike_s_001065.png to s3://udacity-ml-workflow/test/safety_bike_s_001065.png
+upload: test/safety_bike_s_000791.png to s3://udacity-ml-workflow/test/safety_bike_s_000791.png
+upload: test/safety_bike_s_001087.png to s3://udacity-ml-workflow/test/safety_bike_s_001087.png
+upload: test/safety_bike_s_000699.png to s3://udacity-ml-workflow/test/safety_bike_s_000699.png
+upload: test/safety_bike_s_001132.png to s3://udacity-ml-workflow/test/safety_bike_s_001132.png
+upload: test/safety_bike_s_000438.png to s3://udacity-ml-workflow/test/safety_bike_s_000438.png
+upload: test/safety_bike_s_001481.png to s3://udacity-ml-workflow/test/safety_bike_s_001481.png
+upload: test/safety_bike_s_000540.png to s3://udacity-ml-workflow/test/safety_bike_s_000540.png
+upload: test/safety_bike_s_001253.png to s3://udacity-ml-workflow/test/safety_bike_s_001253.png
+upload: test/velocipede_s_000001.png to s3://udacity-ml-workflow/test/velocipede_s_000001.png
+upload: test/safety_bike_s_000192.png to s3://udacity-ml-workflow/test/safety_bike_s_000192.png
+upload: test/safety_bike_s_001088.png to s3://udacity-ml-workflow/test/safety_bike_s_001088.png
+upload: test/velocipede_s_000369.png to s3://udacity-ml-workflow/test/velocipede_s_000369.png
+upload: test/trail_bike_s_000073.png to s3://udacity-ml-workflow/test/trail_bike_s_000073.png
+upload: test/velocipede_s_000106.png to s3://udacity-ml-workflow/test/velocipede_s_000106.png
+upload: test/velocipede_s_000041.png to s3://udacity-ml-workflow/test/velocipede_s_000041.png
+upload: test/velocipede_s_001201.png to s3://udacity-ml-workflow/test/velocipede_s_001201.png
+upload: test/safety_bike_s_001690.png to s3://udacity-ml-workflow/test/safety_bike_s_001690.png
+upload: test/velocipede_s_000863.png to s3://udacity-ml-workflow/test/velocipede_s_000863.png
+upload: test/velocipede_s_001232.png to s3://udacity-ml-workflow/test/velocipede_s_001232.png
+upload: test/velocipede_s_001277.png to s3://udacity-ml-workflow/test/velocipede_s_001277.png
+upload: test/velocipede_s_000292.png to s3://udacity-ml-workflow/test/velocipede_s_000292.png
+upload: test/velocipede_s_001699.png to s3://udacity-ml-workflow/test/velocipede_s_001699.png
+upload: test/velocipede_s_001335.png to s3://udacity-ml-workflow/test/velocipede_s_001335.png
+upload: test/velocipede_s_001633.png to s3://udacity-ml-workflow/test/velocipede_s_001633.png
+upload: test/velocipede_s_001355.png to s3://udacity-ml-workflow/test/velocipede_s_001355.png
+upload: test/velocipede_s_001379.png to s3://udacity-ml-workflow/test/velocipede_s_001379.png
+upload: test/velocipede_s_001790.png to s3://udacity-ml-workflow/test/velocipede_s_001790.png
+upload: test/velocipede_s_001744.png to s3://udacity-ml-workflow/test/velocipede_s_001744.png
+upload: test/velocipede_s_001466.png to s3://udacity-ml-workflow/test/velocipede_s_001466.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
And that's it! You can check the bucket and verify that the items were uploaded.
For Image Classification, Sagemaker also expects metadata e.g. in the form of TSV files with labels and filepaths. We can generate these using our Pandas DataFrames from earlier:
Using the bucket and region info we can get the latest prebuilt container to run our training job, and define an output location on our s3 bucket for the model. Use the image_uris function from the SageMaker SDK to retrieve the latest image-classification image below:
+
+
+
+
+
+
+
+
+
+
In [88]:
+
+
+
# Use the image_uris function to retrieve the latest 'image-classification' image
+algo_image=sagemaker.image_uris.retrieve('image-classification',region=region)
+s3_output_location=f"s3://{bucket}/models/image_model"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
We're ready to create an estimator! Create an estimator img_classifier_model that uses one instance of ml.p3.2xlarge. Ensure that y ou use the output location we defined above - we'll be referring to that later!
We can also set a few key hyperparameters and define the inputs for our model:
+
+
+
+
+
+
+
+
+
+
In [100]:
+
+
+
img_classifier_model.set_hyperparameters(
+ image_shape="3,32,32",# TODO: Fill in
+ num_classes=2,# TODO: Fill in
+ num_training_samples=1000# TODO: fill in
+)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The image-classification image uses four input channels with very specific input parameters. For convenience, we've provided them below:
Great, now we can train the model using the model_inputs. In the cell below, call the fit method on our model,:
+
+
+
+
+
+
+
+
+
+
In [102]:
+
+
+
## TODO: train your model
+img_classifier_model.fit(model_inputs)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
2023-02-14 13:09:33 Starting - Starting the training job...
+2023-02-14 13:09:58 Starting - Preparing the instances for trainingProfilerReport-1676380173: InProgress
+.........
+2023-02-14 13:11:17 Downloading - Downloading input data...
+2023-02-14 13:11:57 Training - Downloading the training image...............
+2023-02-14 13:14:32 Training - Training image download completed. Training in progress....Docker entrypoint called with argument(s): train
+Running default environment configuration script
+Nvidia gpu devices, drivers and cuda toolkit versions (only available on hosts with GPU):
+Tue Feb 14 13:14:59 2023
++-----------------------------------------------------------------------------+
+| NVIDIA-SMI 515.65.07 Driver Version: 515.65.07 CUDA Version: 11.7 |
+|-------------------------------+----------------------+----------------------+
+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
+| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
+| | | MIG M. |
+|===============================+======================+======================|
+| 0 Tesla V100-SXM2... On | 00000000:00:1E.0 Off | 0 |
+| N/A 42C P0 23W / 300W | 0MiB / 16384MiB | 0% Default |
+| | | N/A |
++-------------------------------+----------------------+----------------------+
+
++-----------------------------------------------------------------------------+
+| Processes: |
+| GPU GI CI PID Type Process name GPU Memory |
+| ID ID Usage |
+|=============================================================================|
+| No running processes found |
++-----------------------------------------------------------------------------+
+Checking for nvidia driver and cuda compatibility.
+CUDA Compatibility driver provided.
+Proceeding with compatibility check between driver, cuda-toolkit and cuda-compat.
+Detected cuda-toolkit version: 11.1.
+Detected cuda-compat version: 455.32.00.
+Detected Nvidia driver version: 515.65.07.
+Nvidia driver compatible with cuda-toolkit. Disabling cuda-compat.
+[02/14/2023 13:15:03 INFO 140622489470784] Reading default configuration from /opt/amazon/lib/python3.7/site-packages/image_classification/default-input.json: {'use_pretrained_model': 0, 'num_layers': 152, 'epochs': 30, 'learning_rate': 0.1, 'lr_scheduler_factor': 0.1, 'optimizer': 'sgd', 'momentum': 0, 'weight_decay': 0.0001, 'beta_1': 0.9, 'beta_2': 0.999, 'eps': 1e-08, 'gamma': 0.9, 'mini_batch_size': 32, 'image_shape': '3,224,224', 'precision_dtype': 'float32'}
+[02/14/2023 13:15:03 INFO 140622489470784] Merging with provided configuration from /opt/ml/input/config/hyperparameters.json: {'image_shape': '3,32,32', 'num_classes': '2', 'num_training_samples': '1000'}
+[02/14/2023 13:15:03 INFO 140622489470784] Final configuration: {'use_pretrained_model': 0, 'num_layers': 152, 'epochs': 30, 'learning_rate': 0.1, 'lr_scheduler_factor': 0.1, 'optimizer': 'sgd', 'momentum': 0, 'weight_decay': 0.0001, 'beta_1': 0.9, 'beta_2': 0.999, 'eps': 1e-08, 'gamma': 0.9, 'mini_batch_size': 32, 'image_shape': '3,32,32', 'precision_dtype': 'float32', 'num_classes': '2', 'num_training_samples': '1000'}
+[02/14/2023 13:15:03 INFO 140622489470784] Searching for .lst files in /opt/ml/input/data/train_lst.
+[02/14/2023 13:15:03 INFO 140622489470784] Creating record files for train.lst
+[02/14/2023 13:15:04 INFO 140622489470784] Done creating record files...
+[02/14/2023 13:15:04 INFO 140622489470784] Searching for .lst files in /opt/ml/input/data/validation_lst.
+[02/14/2023 13:15:04 INFO 140622489470784] Creating record files for test.lst
+[02/14/2023 13:15:04 INFO 140622489470784] Done creating record files...
+[02/14/2023 13:15:04 INFO 140622489470784] use_pretrained_model: 0
+[02/14/2023 13:15:04 INFO 140622489470784] multi_label: 0
+[02/14/2023 13:15:04 INFO 140622489470784] Performing random weight initialization
+[02/14/2023 13:15:04 INFO 140622489470784] ---- Parameters ----
+[02/14/2023 13:15:04 INFO 140622489470784] num_layers: 152
+[02/14/2023 13:15:04 INFO 140622489470784] data type: <class 'numpy.float32'>
+[02/14/2023 13:15:04 INFO 140622489470784] epochs: 30
+[02/14/2023 13:15:04 INFO 140622489470784] optimizer: sgd
+[02/14/2023 13:15:04 INFO 140622489470784] momentum: 0.9
+[02/14/2023 13:15:04 INFO 140622489470784] weight_decay: 0.0001
+[02/14/2023 13:15:04 INFO 140622489470784] learning_rate: 0.1
+[02/14/2023 13:15:04 INFO 140622489470784] num_training_samples: 1000
+[02/14/2023 13:15:04 INFO 140622489470784] mini_batch_size: 32
+[02/14/2023 13:15:04 INFO 140622489470784] image_shape: 3,32,32
+[02/14/2023 13:15:04 INFO 140622489470784] num_classes: 2
+[02/14/2023 13:15:04 INFO 140622489470784] augmentation_type: None
+[02/14/2023 13:15:04 INFO 140622489470784] kv_store: device
+[02/14/2023 13:15:04 INFO 140622489470784] checkpoint_frequency not set, will store the best model
+[02/14/2023 13:15:04 INFO 140622489470784] --------------------
+[02/14/2023 13:15:04 INFO 140622489470784] Setting number of threads: 7
+[13:15:08] /opt/brazil-pkg-cache/packages/AIAlgorithmsMXNet/AIAlgorithmsMXNet-1.4.x_ecl_Cuda_11.1.x.38.0/AL2_x86_64/generic-flavor/src/src/operator/nn/./cudnn/./cudnn_algoreg-inl.h:97: Running performance tests to find the best convolution algorithm, this can take a while... (setting env variable MXNET_CUDNN_AUTOTUNE_DEFAULT to 0 to disable)
+[02/14/2023 13:15:13 INFO 140622489470784] Epoch[0] Batch [20]#011Speed: 121.736 samples/sec#011accuracy=0.584821
+[02/14/2023 13:15:15 INFO 140622489470784] Epoch[0] Train-accuracy=0.626008
+[02/14/2023 13:15:15 INFO 140622489470784] Epoch[0] Time cost=6.944
+[02/14/2023 13:15:15 INFO 140622489470784] Epoch[0] Validation-accuracy=0.484375
+[02/14/2023 13:15:15 INFO 140622489470784] Storing the best model with validation accuracy: 0.484375
+[02/14/2023 13:15:16 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0001.params"
+[02/14/2023 13:15:19 INFO 140622489470784] Epoch[1] Batch [20]#011Speed: 184.679 samples/sec#011accuracy=0.630952
+[02/14/2023 13:15:21 INFO 140622489470784] Epoch[1] Train-accuracy=0.623992
+[02/14/2023 13:15:21 INFO 140622489470784] Epoch[1] Time cost=5.127
+[02/14/2023 13:15:21 INFO 140622489470784] Epoch[1] Validation-accuracy=0.510417
+[02/14/2023 13:15:22 INFO 140622489470784] Storing the best model with validation accuracy: 0.510417
+[02/14/2023 13:15:22 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0002.params"
+[02/14/2023 13:15:26 INFO 140622489470784] Epoch[2] Batch [20]#011Speed: 188.476 samples/sec#011accuracy=0.654762
+[02/14/2023 13:15:27 INFO 140622489470784] Epoch[2] Train-accuracy=0.650202
+[02/14/2023 13:15:27 INFO 140622489470784] Epoch[2] Time cost=5.053
+[02/14/2023 13:15:28 INFO 140622489470784] Epoch[2] Validation-accuracy=0.531250
+[02/14/2023 13:15:28 INFO 140622489470784] Storing the best model with validation accuracy: 0.531250
+[02/14/2023 13:15:28 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0003.params"
+[02/14/2023 13:15:32 INFO 140622489470784] Epoch[3] Batch [20]#011Speed: 188.318 samples/sec#011accuracy=0.714286
+[02/14/2023 13:15:33 INFO 140622489470784] Epoch[3] Train-accuracy=0.734879
+[02/14/2023 13:15:33 INFO 140622489470784] Epoch[3] Time cost=5.066
+[02/14/2023 13:15:34 INFO 140622489470784] Epoch[3] Validation-accuracy=0.522321
+[02/14/2023 13:15:38 INFO 140622489470784] Epoch[4] Batch [20]#011Speed: 185.520 samples/sec#011accuracy=0.767857
+[02/14/2023 13:15:40 INFO 140622489470784] Epoch[4] Train-accuracy=0.773185
+[02/14/2023 13:15:40 INFO 140622489470784] Epoch[4] Time cost=5.139
+[02/14/2023 13:15:40 INFO 140622489470784] Epoch[4] Validation-accuracy=0.520833
+[02/14/2023 13:15:44 INFO 140622489470784] Epoch[5] Batch [20]#011Speed: 187.837 samples/sec#011accuracy=0.784226
+[02/14/2023 13:15:46 INFO 140622489470784] Epoch[5] Train-accuracy=0.770161
+[02/14/2023 13:15:46 INFO 140622489470784] Epoch[5] Time cost=5.065
+[02/14/2023 13:15:46 INFO 140622489470784] Epoch[5] Validation-accuracy=0.479167
+[02/14/2023 13:15:50 INFO 140622489470784] Epoch[6] Batch [20]#011Speed: 188.098 samples/sec#011accuracy=0.827381
+[02/14/2023 13:15:52 INFO 140622489470784] Epoch[6] Train-accuracy=0.808468
+[02/14/2023 13:15:52 INFO 140622489470784] Epoch[6] Time cost=5.088
+[02/14/2023 13:15:52 INFO 140622489470784] Epoch[6] Validation-accuracy=0.520833
+[02/14/2023 13:15:56 INFO 140622489470784] Epoch[7] Batch [20]#011Speed: 186.858 samples/sec#011accuracy=0.818452
+[02/14/2023 13:15:58 INFO 140622489470784] Epoch[7] Train-accuracy=0.807460
+[02/14/2023 13:15:58 INFO 140622489470784] Epoch[7] Time cost=5.106
+[02/14/2023 13:15:58 INFO 140622489470784] Epoch[7] Validation-accuracy=0.513393
+[02/14/2023 13:16:02 INFO 140622489470784] Epoch[8] Batch [20]#011Speed: 184.425 samples/sec#011accuracy=0.824405
+[02/14/2023 13:16:04 INFO 140622489470784] Epoch[8] Train-accuracy=0.824597
+[02/14/2023 13:16:04 INFO 140622489470784] Epoch[8] Time cost=5.189
+[02/14/2023 13:16:04 INFO 140622489470784] Epoch[8] Validation-accuracy=0.526042
+[02/14/2023 13:16:08 INFO 140622489470784] Epoch[9] Batch [20]#011Speed: 188.382 samples/sec#011accuracy=0.839286
+[02/14/2023 13:16:10 INFO 140622489470784] Epoch[9] Train-accuracy=0.832661
+[02/14/2023 13:16:10 INFO 140622489470784] Epoch[9] Time cost=5.085
+[02/14/2023 13:16:10 INFO 140622489470784] Epoch[9] Validation-accuracy=0.536458
+[02/14/2023 13:16:11 INFO 140622489470784] Storing the best model with validation accuracy: 0.536458
+[02/14/2023 13:16:11 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0010.params"
+[02/14/2023 13:16:14 INFO 140622489470784] Epoch[10] Batch [20]#011Speed: 188.170 samples/sec#011accuracy=0.831845
+[02/14/2023 13:16:16 INFO 140622489470784] Epoch[10] Train-accuracy=0.825605
+[02/14/2023 13:16:16 INFO 140622489470784] Epoch[10] Time cost=5.084
+[02/14/2023 13:16:17 INFO 140622489470784] Epoch[10] Validation-accuracy=0.541667
+[02/14/2023 13:16:17 INFO 140622489470784] Storing the best model with validation accuracy: 0.541667
+[02/14/2023 13:16:17 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0011.params"
+[02/14/2023 13:16:21 INFO 140622489470784] Epoch[11] Batch [20]#011Speed: 188.872 samples/sec#011accuracy=0.840774
+[02/14/2023 13:16:22 INFO 140622489470784] Epoch[11] Train-accuracy=0.833669
+[02/14/2023 13:16:22 INFO 140622489470784] Epoch[11] Time cost=5.063
+[02/14/2023 13:16:23 INFO 140622489470784] Epoch[11] Validation-accuracy=0.549107
+[02/14/2023 13:16:23 INFO 140622489470784] Storing the best model with validation accuracy: 0.549107
+[02/14/2023 13:16:24 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0012.params"
+[02/14/2023 13:16:27 INFO 140622489470784] Epoch[12] Batch [20]#011Speed: 186.059 samples/sec#011accuracy=0.869048
+[02/14/2023 13:16:29 INFO 140622489470784] Epoch[12] Train-accuracy=0.868952
+[02/14/2023 13:16:29 INFO 140622489470784] Epoch[12] Time cost=5.105
+[02/14/2023 13:16:29 INFO 140622489470784] Epoch[12] Validation-accuracy=0.557292
+[02/14/2023 13:16:29 INFO 140622489470784] Storing the best model with validation accuracy: 0.557292
+[02/14/2023 13:16:30 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0013.params"
+[02/14/2023 13:16:33 INFO 140622489470784] Epoch[13] Batch [20]#011Speed: 187.817 samples/sec#011accuracy=0.858631
+[02/14/2023 13:16:35 INFO 140622489470784] Epoch[13] Train-accuracy=0.866935
+[02/14/2023 13:16:35 INFO 140622489470784] Epoch[13] Time cost=5.072
+[02/14/2023 13:16:35 INFO 140622489470784] Epoch[13] Validation-accuracy=0.494792
+[02/14/2023 13:16:39 INFO 140622489470784] Epoch[14] Batch [20]#011Speed: 188.960 samples/sec#011accuracy=0.882440
+[02/14/2023 13:16:41 INFO 140622489470784] Epoch[14] Train-accuracy=0.886089
+[02/14/2023 13:16:41 INFO 140622489470784] Epoch[14] Time cost=5.070
+[02/14/2023 13:16:41 INFO 140622489470784] Epoch[14] Validation-accuracy=0.531250
+[02/14/2023 13:16:45 INFO 140622489470784] Epoch[15] Batch [20]#011Speed: 188.289 samples/sec#011accuracy=0.909226
+[02/14/2023 13:16:47 INFO 140622489470784] Epoch[15] Train-accuracy=0.900202
+[02/14/2023 13:16:47 INFO 140622489470784] Epoch[15] Time cost=5.058
+[02/14/2023 13:16:47 INFO 140622489470784] Epoch[15] Validation-accuracy=0.562500
+[02/14/2023 13:16:48 INFO 140622489470784] Storing the best model with validation accuracy: 0.562500
+[02/14/2023 13:16:48 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0016.params"
+[02/14/2023 13:16:52 INFO 140622489470784] Epoch[16] Batch [20]#011Speed: 188.204 samples/sec#011accuracy=0.901786
+[02/14/2023 13:16:53 INFO 140622489470784] Epoch[16] Train-accuracy=0.883065
+[02/14/2023 13:16:53 INFO 140622489470784] Epoch[16] Time cost=5.065
+[02/14/2023 13:16:54 INFO 140622489470784] Epoch[16] Validation-accuracy=0.541667
+[02/14/2023 13:16:58 INFO 140622489470784] Epoch[17] Batch [20]#011Speed: 188.836 samples/sec#011accuracy=0.925595
+[02/14/2023 13:16:59 INFO 140622489470784] Epoch[17] Train-accuracy=0.924395
+[02/14/2023 13:16:59 INFO 140622489470784] Epoch[17] Time cost=5.067
+[02/14/2023 13:17:00 INFO 140622489470784] Epoch[17] Validation-accuracy=0.494792
+[02/14/2023 13:17:04 INFO 140622489470784] Epoch[18] Batch [20]#011Speed: 182.995 samples/sec#011accuracy=0.858631
+[02/14/2023 13:17:05 INFO 140622489470784] Epoch[18] Train-accuracy=0.871976
+[02/14/2023 13:17:05 INFO 140622489470784] Epoch[18] Time cost=5.178
+[02/14/2023 13:17:06 INFO 140622489470784] Epoch[18] Validation-accuracy=0.552083
+[02/14/2023 13:17:10 INFO 140622489470784] Epoch[19] Batch [20]#011Speed: 189.019 samples/sec#011accuracy=0.936012
+[02/14/2023 13:17:11 INFO 140622489470784] Epoch[19] Train-accuracy=0.927419
+[02/14/2023 13:17:11 INFO 140622489470784] Epoch[19] Time cost=5.053
+[02/14/2023 13:17:12 INFO 140622489470784] Epoch[19] Validation-accuracy=0.558036
+[02/14/2023 13:17:16 INFO 140622489470784] Epoch[20] Batch [20]#011Speed: 188.366 samples/sec#011accuracy=0.924107
+[02/14/2023 13:17:17 INFO 140622489470784] Epoch[20] Train-accuracy=0.919355
+[02/14/2023 13:17:17 INFO 140622489470784] Epoch[20] Time cost=5.073
+[02/14/2023 13:17:18 INFO 140622489470784] Epoch[20] Validation-accuracy=0.536458
+[02/14/2023 13:17:22 INFO 140622489470784] Epoch[21] Batch [20]#011Speed: 188.032 samples/sec#011accuracy=0.952381
+[02/14/2023 13:17:23 INFO 140622489470784] Epoch[21] Train-accuracy=0.947581
+[02/14/2023 13:17:23 INFO 140622489470784] Epoch[21] Time cost=5.079
+[02/14/2023 13:17:24 INFO 140622489470784] Epoch[21] Validation-accuracy=0.541667
+[02/14/2023 13:17:28 INFO 140622489470784] Epoch[22] Batch [20]#011Speed: 185.304 samples/sec#011accuracy=0.927083
+[02/14/2023 13:17:30 INFO 140622489470784] Epoch[22] Train-accuracy=0.920363
+[02/14/2023 13:17:30 INFO 140622489470784] Epoch[22] Time cost=5.122
+[02/14/2023 13:17:30 INFO 140622489470784] Epoch[22] Validation-accuracy=0.567708
+[02/14/2023 13:17:30 INFO 140622489470784] Storing the best model with validation accuracy: 0.567708
+[02/14/2023 13:17:31 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0023.params"
+[02/14/2023 13:17:34 INFO 140622489470784] Epoch[23] Batch [20]#011Speed: 189.240 samples/sec#011accuracy=0.953869
+[02/14/2023 13:17:36 INFO 140622489470784] Epoch[23] Train-accuracy=0.943548
+[02/14/2023 13:17:36 INFO 140622489470784] Epoch[23] Time cost=5.045
+[02/14/2023 13:17:36 INFO 140622489470784] Epoch[23] Validation-accuracy=0.571429
+[02/14/2023 13:17:37 INFO 140622489470784] Storing the best model with validation accuracy: 0.571429
+[02/14/2023 13:17:37 INFO 140622489470784] Saved checkpoint to "/opt/ml/model/image-classification-0024.params"
+[02/14/2023 13:17:40 INFO 140622489470784] Epoch[24] Batch [20]#011Speed: 189.041 samples/sec#011accuracy=0.925595
+[02/14/2023 13:17:42 INFO 140622489470784] Epoch[24] Train-accuracy=0.924395
+[02/14/2023 13:17:42 INFO 140622489470784] Epoch[24] Time cost=5.054
+[02/14/2023 13:17:42 INFO 140622489470784] Epoch[24] Validation-accuracy=0.520833
+[02/14/2023 13:17:46 INFO 140622489470784] Epoch[25] Batch [20]#011Speed: 189.755 samples/sec#011accuracy=0.953869
+[02/14/2023 13:17:48 INFO 140622489470784] Epoch[25] Train-accuracy=0.955645
+[02/14/2023 13:17:48 INFO 140622489470784] Epoch[25] Time cost=5.045
+[02/14/2023 13:17:49 INFO 140622489470784] Epoch[25] Validation-accuracy=0.531250
+[02/14/2023 13:17:52 INFO 140622489470784] Epoch[26] Batch [20]#011Speed: 187.638 samples/sec#011accuracy=0.931548
+[02/14/2023 13:17:54 INFO 140622489470784] Epoch[26] Train-accuracy=0.945565
+[02/14/2023 13:17:54 INFO 140622489470784] Epoch[26] Time cost=5.087
+[02/14/2023 13:17:55 INFO 140622489470784] Epoch[26] Validation-accuracy=0.531250
+[02/14/2023 13:17:58 INFO 140622489470784] Epoch[27] Batch [20]#011Speed: 187.239 samples/sec#011accuracy=0.976190
+[02/14/2023 13:18:00 INFO 140622489470784] Epoch[27] Train-accuracy=0.969758
+[02/14/2023 13:18:00 INFO 140622489470784] Epoch[27] Time cost=5.104
+[02/14/2023 13:18:01 INFO 140622489470784] Epoch[27] Validation-accuracy=0.553571
+[02/14/2023 13:18:05 INFO 140622489470784] Epoch[28] Batch [20]#011Speed: 182.670 samples/sec#011accuracy=0.968750
+[02/14/2023 13:18:06 INFO 140622489470784] Epoch[28] Train-accuracy=0.965726
+[02/14/2023 13:18:06 INFO 140622489470784] Epoch[28] Time cost=5.176
+[02/14/2023 13:18:07 INFO 140622489470784] Epoch[28] Validation-accuracy=0.562500
+
+2023-02-14 13:18:19 Uploading - Uploading generated training model[02/14/2023 13:18:11 INFO 140622489470784] Epoch[29] Batch [20]#011Speed: 189.095 samples/sec#011accuracy=0.979167
+[02/14/2023 13:18:12 INFO 140622489470784] Epoch[29] Train-accuracy=0.974798
+[02/14/2023 13:18:12 INFO 140622489470784] Epoch[29] Time cost=5.050
+[02/14/2023 13:18:13 INFO 140622489470784] Epoch[29] Validation-accuracy=0.531250
+
+2023-02-14 13:18:54 Completed - Training job completed
+Training seconds: 458
+Billable seconds: 458
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
If all goes well, you'll end up with a model topping out above .8 validation accuracy. With only 1000 training samples in the CIFAR dataset, that's pretty good. We could definitely pursue data augmentation & gathering more samples to help us improve further, but for now let's proceed to deploy our model.
Note the destination_s3_uri parameter: At the end of the project, we can explore the data_capture directory in S3 to find crucial data about the inputs and outputs Model Monitor has observed on our model endpoint over time.
+
With that done, deploy your model on a single ml.m5.xlarge instance with the data capture config attached:
fromsagemaker.predictorimportPredictor
+predictor=Predictor('image-classification-2023-02-14-13-25-18-287')## TODO: fill in
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
In the code snippet below we are going to prepare one of your saved images for prediction. Use the predictor to process the payload.
+
+
+
+
+
+
+
+
+
+
In [108]:
+
+
+
fromsagemaker.serializersimportIdentitySerializer
+importbase64
+importjson
+predictor.serializer=IdentitySerializer("image/png")
+withopen("./test/bicycle_s_001789.png","rb")asf:
+ payload=f.read()
+
+
+inference=predictor.predict(payload)## TODO: Process the payload with your predictor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Your inference object is an array of two values, the predicted probability value for each of your classes (bicycle and motorcycle respectively.) So, for example, a value of b'[0.91, 0.09]' indicates the probability of being a bike is 91% and being a motorcycle is 9%.
Your operations team uses Step Functions to orchestrate serverless workflows. One of the nice things about Step Functions is that workflows can call other workflows, so the team can easily plug your workflow into the broader production architecture for Scones Unlimited.
+
In this next stage you're going to write and deploy three Lambda functions, and then use the Step Functions visual editor to chain them together! Our functions are going to work with a simple data object:
+
{
+ "inferences":[],# Output of predictor.predict
+ "s3_key":"",# Source data S3 key
+ "s3_bucket":"",# Source data S3 bucket
+ "image_data":""# base64 encoded string containing the image data
+}
+
+
A good test object that you can use for Lambda tests and Step Function executions, throughout the next section, might look like this:
+
{
+ "image_data":"",
+ "s3_bucket":MY_BUCKET_NAME,# Fill in with your bucket
+ "s3_key":"test/bicycle_s_000513.png"
+}
+
+
Using these fields, your functions can read and write the necessary data to execute your workflow. Let's start with the first function. Your first Lambda function will copy an object from S3, base64 encode it, and then return it to the step function as image_data in an event.
+
Go to the Lambda dashboard and create a new Lambda function with a descriptive name like "serializeImageData" and select thr 'Python 3.8' runtime. Add the same permissions as the SageMaker role you created earlier. (Reminder: you do this in the Configuration tab under "Permissions"). Once you're ready, use the starter code below to craft your Lambda handler:
+
importjson
+importboto3
+importbase64
+
+s3=boto3.client('s3')
+
+deflambda_handler(event,context):
+ """A function to serialize target data from S3"""
+
+ # Get the s3 address from the Step Function event input
+ key=## TODO: fill in
+ bucket=## TODO: fill in
+
+ # Download the data from s3 to /tmp/image.png
+ ## TODO: fill in
+
+ # We read the data from a file
+ withopen("/tmp/image.png","rb")asf:
+ image_data=base64.b64encode(f.read())
+
+ # Pass the data back to the Step Function
+ print("Event:",event.keys())
+ return{
+ 'statusCode':200,
+ 'body':{
+ "image_data":image_data,
+ "s3_bucket":bucket,
+ "s3_key":key,
+ "inferences":[]
+ }
+ }
+
+
The next function is responsible for the classification part - we're going to take the image output from the previous function, decode it, and then pass inferences back to the the Step Function.
Create a new Lambda function with the same rights and a descriptive name, then fill in the starter code below for your classifier Lambda.
+
importjson
+importsagemaker
+importbase64
+fromsagemaker.serializersimportIdentitySerializer
+
+# Fill this in with the name of your deployed model
+ENDPOINT=## TODO: fill in
+
+deflambda_handler(event,context):
+
+ # Decode the image data
+ image=base64.b64decode(## TODO: fill in)
+
+ # Instantiate a Predictor
+ predictor=## TODO: fill in
+
+ # For this model the IdentitySerializer needs to be "image/png"
+ predictor.serializer=IdentitySerializer("image/png")
+
+ # Make a prediction:
+ inferences=## TODO: fill in
+
+ # We return the data back to the Step Function
+ event["inferences"]=inferences.decode('utf-8')
+ return{
+ 'statusCode':200,
+ 'body':json.dumps(event)
+ }
+
+
Finally, we need to filter low-confidence inferences. Define a threshold between 1.00 and 0.000 for your model: what is reasonble for you? If the model predicts at .70 for it's highest confidence label, do we want to pass that inference along to downstream systems? Make one last Lambda function and tee up the same permissions:
+
importjson
+
+
+THRESHOLD=.93
+
+
+deflambda_handler(event,context):
+
+ # Grab the inferences from the event
+ inferences=## TODO: fill in
+
+ # Check if any values in our inferences are above THRESHOLD
+ meets_threshold=## TODO: fill in
+
+ # If our threshold is met, pass our data back out of the
+ # Step Function, else, end the Step Function with an error
+ ifmeets_threshold:
+ pass
+ else:
+ raise("THRESHOLD_CONFIDENCE_NOT_MET")
+
+ return{
+ 'statusCode':200,
+ 'body':json.dumps(event)
+ }
+
+
Once you have tested the lambda functions, save the code for each lambda function in a python script called 'lambda.py'.
+
With your lambdas in place, you can use the Step Functions visual editor to construct a workflow that chains them together. In the Step Functions console you'll have the option to author a Standard step function Visually.
+
When the visual editor opens, you'll have many options to add transitions in your workflow. We're going to keep it simple and have just one: to inbc83d5eb0be10e316708b03ecf7fcc5fvoke Lambda functions. Add three of them chained together. For each one, you'll be able to select the Lambda functions you just created in the proper order, filter inputs and outputs, and give them descriptive names.
+
Make sure that you:
+
+
Are properly filtering the inputs and outputs of your invokations (e.g. $.body)
+
Take care to remove the error handling from the last function - it's supposed to "fail loudly" for your operations colleagues!
+
+
Take a screenshot of your working step function in action and export the step function as JSON for your submission package.
+
+
+
+
+
+
+
+
+
+
+
+
Great! Now you can use the files in ./test as test files for our workflow. Depending on our threshold, our workflow should reliably pass predictions about images from ./test on to downstream systems, while erroring out for inferences below our confidence threshold!
Do several step function invokations using data from the ./test folder. This process should give you confidence that the workflow both succeeds AND fails as expected. In addition, SageMaker Model Monitor will generate recordings of your data and inferences which we can visualize.
+
Here's a function that can help you generate test inputs for your invokations:
+
+
+
+
+
+
+
+
+
+
In [132]:
+
+
+
importrandom
+importboto3
+importjson
+
+
+defgenerate_test_case():
+ # Setup s3 in boto3
+ s3=boto3.resource('s3')
+
+ # Randomly pick from sfn or test folders in our bucket
+ objects=s3.Bucket(bucket).objects.filter(Prefix="test")
+
+ # Grab any random object key from that folder!
+ obj=random.choice([x.keyforxinobjects])
+
+ returnjson.dumps({
+ "image_data":"",
+ "s3_bucket":bucket,
+ "s3_key":obj
+ })
+generate_test_case()
+
In the Step Function dashboard for your new function, you can create new executions and copy in the generated test cases. Do several executions so that you can generate data you can evaluate and visualize.
+
Once you've done several executions, let's visualize the record of our inferences. Pull in the JSONLines data from your inferences like so:
+
+
+
+
+
+
+
+
+
+
In [135]:
+
+
+
fromsagemaker.s3importS3Downloader
+
+# In S3 your data will be saved to a datetime-aware path
+# Find a path related to a datetime you're interested in
+data_path="s3://udacity-ml-workflow/data_capture/image-classification-2023-02-14-13-25-18-287/AllTraffic/2023/02/14/13/42-58-655-83d904b7-a5b0-4a0f-93d7-60d194497d27.jsonl"## TODO: fill in the path to your captured data
+
+S3Downloader.download(data_path,"captured_data")
+
+# Feel free to repeat this multiple times and pull in more data
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The data are in JSONLines format, where multiple valid JSON objects are stacked on top of eachother in a single jsonl file. We'll import an open-source library, jsonlines that was purpose built for parsing this format.
+
+
+
+
+
+
+
+
+
+
In [136]:
+
+
+
!pip install jsonlines
+importjsonlines
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Keyring is skipped due to an exception: 'keyring.backends'
+Requirement already satisfied: jsonlines in /opt/conda/lib/python3.7/site-packages (3.1.0)
+Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.7/site-packages (from jsonlines) (4.4.0)
+Requirement already satisfied: attrs>=19.2.0 in /opt/conda/lib/python3.7/site-packages (from jsonlines) (22.1.0)
+WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
+
+[notice] A new release of pip available: 22.3.1 -> 23.0
+[notice] To update, run: pip install --upgrade pip
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Now we can extract the data from each of the source files:
+
+
+
+
+
+
+
+
+
+
In [137]:
+
+
+
importos
+
+# List the file names we downloaded
+file_handles=os.listdir("./captured_data")
+
+# Dump all the data into an array
+json_data=[]
+forjsonlinfile_handles:
+ withjsonlines.open(f"./captured_data/{jsonl}")asf:
+ json_data.append(f.read())
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The data should now be a list of dictionaries, with significant nesting. We'll give you an example of some code that grabs data out of the objects and visualizes it:
+
+
+
+
+
+
+
+
+
+
In [138]:
+
+
+
# Define how we'll get our data
+defsimple_getter(obj):
+ inferences=obj["captureData"]["endpointOutput"]["data"]
+ timestamp=obj["eventMetadata"]["inferenceTime"]
+ returnjson.loads(inferences),timestamp
+
+simple_getter(json_data[0])
+
Finally, here's an example of a visualization you can build with this data. In this last part, you will take some time and build your own - the captured data has the input images, the resulting inferences, and the timestamps.
# Populate the data for the x and y axis
+x=[]
+y=[]
+forobjinjson_data:
+ inference,timestamp=simple_getter(obj)
+
+ y.append(max(inference))
+ x.append(timestamp)
+
+# Todo: here is an visualization example, take some time to build another visual that helps monitor the result
+# Plot the data
+plt.figure(figsize=(5,5))
+plt.scatter(x,y,c=['r'ifk<.94else'b'forkiny])
+plt.axhline(y=0.94,color='g',linestyle='--')
+plt.ylim(bottom=.88)
+
+# Add labels
+plt.ylabel("Confidence")
+plt.suptitle("Observed Recent Inferences",size=14)
+plt.title("Pictured with confidence threshold for production use",size=10)
+
+# Give it some pizzaz!
+plt.style.use("Solarize_Light2")
+plt.gcf().autofmt_xdate()
+plt.show()
+
You've reached the end of the project. In this project you created an event-drivent ML workflow that can be incorporated into the Scones Unlimited production architecture. You used the SageMaker Estimator API to deploy your SageMaker Model and Endpoint, and you used AWS Lambda and Step Functions to orchestrate your ML workflow. Using SageMaker Model Monitor, you instrumented and observed your Endpoint, and at the end of the project you built a visualization to help stakeholders understand the performance of the Endpoint over time. If you're up for it, you can even go further with these stretch goals:
+
+
Extend your workflow to incorporate more classes: the CIFAR dataset includes other vehicles that Scones Unlimited can identify with this model.
+
Modify your event driven workflow: can you rewrite your Lambda functions so that the workflow can process multiple image inputs in parallel? Can the Step Function "fan out" to accomodate this new workflow?
+
Consider the test data generator we provided for you. Can we use it to create a "dummy data" generator, to simulate a continuous stream of input data? Or a big paralell load of data?
+
What if we want to get notified every time our step function errors out? Can we use the Step Functions visual editor in conjunction with a service like SNS to accomplish this? Try it out!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/project/starter.ipynb b/project/starter.ipynb
deleted file mode 100644
index c782396b9..000000000
--- a/project/starter.ipynb
+++ /dev/null
@@ -1,1106 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Deploy and monitor a machine learning workflow for Image Classification"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Setting up this notebook\n",
- "\n",
- "Notes about the instance size and kernel setup: this notebook has been tested on\n",
- "\n",
- "1. The `Python 3 (Data Science)` kernel\n",
- "2. The `ml.t3.medium` Sagemaker notebook instance\n",
- "\n",
- "## Data Staging\n",
- "\n",
- "We'll use a sample dataset called CIFAR to simulate the challenges Scones Unlimited are facing in Image Classification. In order to start working with CIFAR we'll need to:\n",
- "\n",
- "1. Extract the data from a hosting service\n",
- "2. Transform it into a usable shape and format\n",
- "3. Load it into a production system\n",
- "\n",
- "In other words, we're going to do some simple ETL!\n",
- "\n",
- "### 1. Extract the data from the hosting service\n",
- "\n",
- "In the cell below, define a function `extract_cifar_data` that extracts python version of the CIFAR-100 dataset. The CIFAR dataaset is open source and generously hosted by the University of Toronto at: https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import requests\n",
- "\n",
- "def extract_cifar_data(url, filename=\"cifar.tar.gz\"):\n",
- " \"\"\"A function for extracting the CIFAR-100 dataset and storing it as a gzipped file\n",
- " \n",
- " Arguments:\n",
- " url -- the URL where the dataset is hosted\n",
- " filename -- the full path where the dataset will be written\n",
- " \n",
- " \"\"\"\n",
- " \n",
- " # Todo: request the data from the data url\n",
- " # Hint: use `requests.get` method\n",
- " r = \n",
- " with open(filename, \"wb\") as file_context:\n",
- " file_context.write(r.content)\n",
- " return"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let's test it out! Run the following cell and check whether a new file `cifar.tar.gz` is created in the file explorer."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "extract_cifar_data(\"https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz\") "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 2. Transform the data into a usable shape and format\n",
- "\n",
- "Clearly, distributing the data as a gzipped archive makes sense for the hosting service! It saves on bandwidth, storage, and it's a widely-used archive format. In fact, it's so widely used that the Python community ships a utility for working with them, `tarfile`, as part of its Standard Library. Execute the following cell to decompress your extracted dataset:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import tarfile\n",
- "\n",
- "with tarfile.open(\"cifar.tar.gz\", \"r:gz\") as tar:\n",
- " tar.extractall()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "A new folder `cifar-100-python` should be created, containing `meta`, `test`, and `train` files. These files are `pickles` and the [CIFAR homepage](https://www.cs.toronto.edu/~kriz/cifar.html) provides a simple script that can be used to load them. We've adapted the script below for you to run:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pickle\n",
- "\n",
- "with open(\"./cifar-100-python/meta\", \"rb\") as f:\n",
- " dataset_meta = pickle.load(f, encoding='bytes')\n",
- "\n",
- "with open(\"./cifar-100-python/test\", \"rb\") as f:\n",
- " dataset_test = pickle.load(f, encoding='bytes')\n",
- "\n",
- "with open(\"./cifar-100-python/train\", \"rb\") as f:\n",
- " dataset_train = pickle.load(f, encoding='bytes')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Feel free to explore the datasets\n",
- "\n",
- "dataset_train.keys()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "As documented on the homepage, `b'data'` contains rows of 3073 unsigned integers, representing three channels (red, green, and blue) for one 32x32 pixel image per row."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "32*32*3"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "For a simple gut-check, let's transform one of our images. Each 1024 items in a row is a channel (red, green, then blue). Each 32 items in the channel are a row in the 32x32 image. Using python, we can stack these channels into a 32x32x3 array, and save it as a PNG file:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import numpy as np\n",
- "\n",
- "# Each 1024 in a row is a channel (red, green, then blue)\n",
- "row = dataset_train[b'data'][0]\n",
- "red, green, blue = row[0:1024], row[1024:2048], row[2048:]\n",
- "\n",
- "# Each 32 items in the channel are a row in the 32x32 image\n",
- "red = red.reshape(32,32)\n",
- "green = green.reshape(32,32)\n",
- "blue = blue.reshape(32,32)\n",
- "\n",
- "# Combine the channels into a 32x32x3 image!\n",
- "combined = np.dstack((red,green,blue))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "For a more concise version, consider the following:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# All in one:\n",
- "test_image = np.dstack((\n",
- " row[0:1024].reshape(32,32),\n",
- " row[1024:2048].reshape(32,32),\n",
- " row[2048:].reshape(32,32)\n",
- "))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import matplotlib.pyplot as plt\n",
- "plt.imshow(test_image);"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Looks like a cow! Let's check the label. `dataset_meta` contains label names in order, and `dataset_train` has a list of labels for each row."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "dataset_train[b'fine_labels'][0]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Our image has a label of `19`, so let's see what the 19th item is in the list of label names."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print(dataset_meta[b'fine_label_names'][19])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Ok! 'cattle' sounds about right. By the way, using the previous two lines we can do:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "n = 0\n",
- "print(dataset_meta[b'fine_label_names'][dataset_train[b'fine_labels'][n]])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now we know how to check labels, is there a way that we can also check file names? `dataset_train` also contains a `b'filenames'` key. Let's see what we have here:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print(dataset_train[b'filenames'][0])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\"Taurus\" is the name of a subspecies of cattle, so this looks like a pretty reasonable filename. To save an image we can also do:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "plt.imsave(\"file.png\", test_image)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Your new PNG file should now appear in the file explorer -- go ahead and pop it open to see!\n",
- "\n",
- "Now that you know how to reshape the images, save them as files, and capture their filenames and labels, let's just capture all the bicycles and motorcycles and save them. Scones Unlimited can use a model that tells these apart to route delivery drivers automatically.\n",
- "\n",
- "In the following cell, identify the label numbers for Bicycles and Motorcycles:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "\n",
- "# Todo: Filter the dataset_train and dataset_meta objects to find the label numbers for Bicycle and Motorcycles\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Good job! We only need objects with label 8 and 48 -- this drastically simplifies our handling of the data! Below we construct a dataframe for you, and you can safely drop the rows that don't contain observations about bicycles and motorcycles. Fill in the missing lines below to drop all other rows:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "#Construct the dataframe\n",
- "df_train = pd.DataFrame({\n",
- " \"filenames\": dataset_train[b'filenames'],\n",
- " \"labels\": dataset_train[b'fine_labels'],\n",
- " \"row\": range(len(dataset_train[b'filenames']))\n",
- "})\n",
- "\n",
- "# Drop all rows from df_train where label is not 8 or 48\n",
- "df_train = #TODO: Fill in\n",
- "\n",
- "# Decode df_train.filenames so they are regular strings\n",
- "df_train[\"filenames\"] = df_train[\"filenames\"].apply(\n",
- " lambda x: x.decode(\"utf-8\")\n",
- ")\n",
- "\n",
- "\n",
- "df_test = pd.DataFrame({\n",
- " \"filenames\": dataset_test[b'filenames'],\n",
- " \"labels\": dataset_test[b'fine_labels'],\n",
- " \"row\": range(len(dataset_test[b'filenames']))\n",
- "})\n",
- "\n",
- "# Drop all rows from df_test where label is not 8 or 48\n",
- "df_test = #TODO: Fill in\n",
- "\n",
- "# Decode df_test.filenames so they are regular strings\n",
- "df_test[\"filenames\"] = df_test[\"filenames\"].apply(\n",
- " lambda x: x.decode(\"utf-8\")\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now that the data is filtered for just our classes, we can save all our images."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!mkdir ./train\n",
- "!mkdir ./test"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In the previous sections we introduced you to several key snippets of code:\n",
- "\n",
- "1. Grabbing the image data:\n",
- "\n",
- "```python\n",
- "dataset_train[b'data'][0]\n",
- "```\n",
- "\n",
- "2. A simple idiom for stacking the image data into the right shape\n",
- "\n",
- "```python\n",
- "import numpy as np\n",
- "np.dstack((\n",
- " row[0:1024].reshape(32,32),\n",
- " row[1024:2048].reshape(32,32),\n",
- " row[2048:].reshape(32,32)\n",
- "))\n",
- "```\n",
- "\n",
- "3. A simple `matplotlib` utility for saving images\n",
- "\n",
- "```python\n",
- "plt.imsave(path+row['filenames'], target)\n",
- "```\n",
- "\n",
- "Compose these together into a function that saves all the images into the `./test` and `./train` directories. Use the comments in the body of the `save_images` function below to guide your construction of the function:\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "def save_images():\n",
- " #Grab the image data in row-major form\n",
- " img = \n",
- " \n",
- " # Consolidated stacking/reshaping from earlier\n",
- " target = \n",
- " \n",
- " # Save the image\n",
- " \n",
- " \n",
- " # Return any signal data you want for debugging\n",
- " return\n",
- "\n",
- "## TODO: save ALL images using the save_images function"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 3. Load the data\n",
- "\n",
- "Now we can load the data into S3.\n",
- "\n",
- "Using the sagemaker SDK grab the current region, execution role, and bucket."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import sagemaker\n",
- "\n",
- "\n",
- "bucket= ## TODO: fill in\n",
- "print(\"Default Bucket: {}\".format(bucket))\n",
- "\n",
- "region = ## TODO: fill in\n",
- "print(\"AWS Region: {}\".format(region))\n",
- "\n",
- "role = ## TODO: fill in\n",
- "print(\"RoleArn: {}\".format(role))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "With this data we can easily sync your data up into S3!"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "\n",
- "os.environ[\"DEFAULT_S3_BUCKET\"] = bucket\n",
- "!aws s3 sync ./train s3://${DEFAULT_S3_BUCKET}/train/\n",
- "!aws s3 sync ./test s3://${DEFAULT_S3_BUCKET}/test/"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "And that's it! You can check the bucket and verify that the items were uploaded.\n",
- "\n",
- "## Model Training\n",
- "\n",
- "For Image Classification, Sagemaker [also expects metadata](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) e.g. in the form of TSV files with labels and filepaths. We can generate these using our Pandas DataFrames from earlier:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "def to_metadata_file(df, prefix):\n",
- " df[\"s3_path\"] = df[\"filenames\"]\n",
- " df[\"labels\"] = df[\"labels\"].apply(lambda x: 0 if x==8 else 1)\n",
- " return df[[\"row\", \"labels\", \"s3_path\"]].to_csv(\n",
- " f\"{prefix}.lst\", sep=\"\\t\", index=False, header=False\n",
- " )\n",
- " \n",
- "to_metadata_file(df_train.copy(), \"train\")\n",
- "to_metadata_file(df_test.copy(), \"test\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We can also upload our manifest files:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import boto3\n",
- "\n",
- "# Upload files\n",
- "boto3.Session().resource('s3').Bucket(\n",
- " bucket).Object('train.lst').upload_file('./train.lst')\n",
- "boto3.Session().resource('s3').Bucket(\n",
- " bucket).Object('test.lst').upload_file('./test.lst')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Using the `bucket` and `region` info we can get the latest prebuilt container to run our training job, and define an output location on our s3 bucket for the model. Use the `image_uris` function from the SageMaker SDK to retrieve the latest `image-classification` image below:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Use the image_uris function to retrieve the latest 'image-classification' image \n",
- "algo_image = ## TODO: fill in\n",
- "s3_output_location = f\"s3://{bucket}/models/image_model\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We're ready to create an estimator! Create an estimator `img_classifier_model` that uses one instance of `ml.p3.2xlarge`. Ensure that y ou use the output location we defined above - we'll be referring to that later!"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "img_classifier_model=sagemaker.estimator.Estimator(\n",
- " ## TODO: define your estimator options \n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We can also set a few key hyperparameters and define the inputs for our model:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "img_classifier_model.set_hyperparameters(\n",
- " image_shape=, # TODO: Fill in\n",
- " num_classes=, # TODO: Fill in\n",
- " num_training_samples= # TODO: fill in\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The `image-classification` image uses four input channels with very specific input parameters. For convenience, we've provided them below:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sagemaker.debugger import Rule, rule_configs\n",
- "from sagemaker.session import TrainingInput\n",
- "model_inputs = {\n",
- " \"train\": sagemaker.inputs.TrainingInput(\n",
- " s3_data=f\"s3://{bucket}/train/\",\n",
- " content_type=\"application/x-image\"\n",
- " ),\n",
- " \"validation\": sagemaker.inputs.TrainingInput(\n",
- " s3_data=f\"s3://{bucket}/test/\",\n",
- " content_type=\"application/x-image\"\n",
- " ),\n",
- " \"train_lst\": sagemaker.inputs.TrainingInput(\n",
- " s3_data=f\"s3://{bucket}/train.lst\",\n",
- " content_type=\"application/x-image\"\n",
- " ),\n",
- " \"validation_lst\": sagemaker.inputs.TrainingInput(\n",
- " s3_data=f\"s3://{bucket}/test.lst\",\n",
- " content_type=\"application/x-image\"\n",
- " )\n",
- "}"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Great, now we can train the model using the model_inputs. In the cell below, call the `fit` method on our model,:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "## TODO: train your model"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "If all goes well, you'll end up with a model topping out above `.8` validation accuracy. With only 1000 training samples in the CIFAR dataset, that's pretty good. We could definitely pursue data augmentation & gathering more samples to help us improve further, but for now let's proceed to deploy our model.\n",
- "\n",
- "### Getting ready to deploy\n",
- "\n",
- "To begin with, let's configure Model Monitor to track our deployment. We'll define a `DataCaptureConfig` below:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sagemaker.model_monitor import DataCaptureConfig\n",
- "\n",
- "data_capture_config = DataCaptureConfig(\n",
- " ## TODO: Set config options\n",
- " destination_s3_uri=f\"s3://{bucket}/data_capture\"\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Note the `destination_s3_uri` parameter: At the end of the project, we can explore the `data_capture` directory in S3 to find crucial data about the inputs and outputs Model Monitor has observed on our model endpoint over time.\n",
- "\n",
- "With that done, deploy your model on a single `ml.m5.xlarge` instance with the data capture config attached:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "deployment = img_classifier_model.deploy(\n",
- " ## TODO: fill in deployment options\n",
- " data_capture_config=data_capture_config\n",
- " )\n",
- "\n",
- "endpoint = deployment.endpoint_name\n",
- "print(endpoint)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Note the endpoint name for later as well.\n",
- "\n",
- "Next, instantiate a Predictor:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "predictor = ## TODO: fill in"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In the code snippet below we are going to prepare one of your saved images for prediction. Use the predictor to process the `payload`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sagemaker.serializers import IdentitySerializer\n",
- "import base64\n",
- "\n",
- "predictor.serializer = IdentitySerializer(\"image/png\")\n",
- "with open(\"./test/bicycle_s_001789.png\", \"rb\") as f:\n",
- " payload = f.read()\n",
- "\n",
- " \n",
- "inference = ## TODO: Process the payload with your predictor"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Your `inference` object is an array of two values, the predicted probability value for each of your classes (bicycle and motorcycle respectively.) So, for example, a value of `b'[0.91, 0.09]'` indicates the probability of being a bike is 91% and being a motorcycle is 9%."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "print(inference)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Draft Lambdas and Step Function Workflow\n",
- "\n",
- "Your operations team uses Step Functions to orchestrate serverless workflows. One of the nice things about Step Functions is that [workflows can call other workflows](https://docs.aws.amazon.com/step-functions/latest/dg/connect-stepfunctions.html), so the team can easily plug your workflow into the broader production architecture for Scones Unlimited.\n",
- "\n",
- "In this next stage you're going to write and deploy three Lambda functions, and then use the Step Functions visual editor to chain them together! Our functions are going to work with a simple data object:\n",
- "\n",
- "```python\n",
- "{\n",
- " \"inferences\": [], # Output of predictor.predict\n",
- " \"s3_key\": \"\", # Source data S3 key\n",
- " \"s3_bucket\": \"\", # Source data S3 bucket\n",
- " \"image_data\": \"\" # base64 encoded string containing the image data\n",
- "}\n",
- "```\n",
- "\n",
- "A good test object that you can use for Lambda tests and Step Function executions, throughout the next section, might look like this:\n",
- "\n",
- "```python\n",
- "{\n",
- " \"image_data\": \"\",\n",
- " \"s3_bucket\": MY_BUCKET_NAME, # Fill in with your bucket\n",
- " \"s3_key\": \"test/bicycle_s_000513.png\"\n",
- "}\n",
- "```\n",
- "\n",
- "Using these fields, your functions can read and write the necessary data to execute your workflow. Let's start with the first function. Your first Lambda function will copy an object from S3, base64 encode it, and then return it to the step function as `image_data` in an event.\n",
- "\n",
- "Go to the Lambda dashboard and create a new Lambda function with a descriptive name like \"serializeImageData\" and select thr 'Python 3.8' runtime. Add the same permissions as the SageMaker role you created earlier. (Reminder: you do this in the Configuration tab under \"Permissions\"). Once you're ready, use the starter code below to craft your Lambda handler:\n",
- "\n",
- "```python\n",
- "import json\n",
- "import boto3\n",
- "import base64\n",
- "\n",
- "s3 = boto3.client('s3')\n",
- "\n",
- "def lambda_handler(event, context):\n",
- " \"\"\"A function to serialize target data from S3\"\"\"\n",
- " \n",
- " # Get the s3 address from the Step Function event input\n",
- " key = ## TODO: fill in\n",
- " bucket = ## TODO: fill in\n",
- " \n",
- " # Download the data from s3 to /tmp/image.png\n",
- " ## TODO: fill in\n",
- " \n",
- " # We read the data from a file\n",
- " with open(\"/tmp/image.png\", \"rb\") as f:\n",
- " image_data = base64.b64encode(f.read())\n",
- "\n",
- " # Pass the data back to the Step Function\n",
- " print(\"Event:\", event.keys())\n",
- " return {\n",
- " 'statusCode': 200,\n",
- " 'body': {\n",
- " \"image_data\": image_data,\n",
- " \"s3_bucket\": bucket,\n",
- " \"s3_key\": key,\n",
- " \"inferences\": []\n",
- " }\n",
- " }\n",
- "```\n",
- "\n",
- "The next function is responsible for the classification part - we're going to take the image output from the previous function, decode it, and then pass inferences back to the the Step Function.\n",
- "\n",
- "Because this Lambda will have runtime dependencies (i.e. the SageMaker SDK) you'll need to package them in your function. *Key reading:* https://docs.aws.amazon.com/lambda/latest/dg/python-package-create.html#python-package-create-with-dependency\n",
- "\n",
- "Create a new Lambda function with the same rights and a descriptive name, then fill in the starter code below for your classifier Lambda.\n",
- "\n",
- "```python\n",
- "import json\n",
- "import sagemaker\n",
- "import base64\n",
- "from sagemaker.serializers import IdentitySerializer\n",
- "\n",
- "# Fill this in with the name of your deployed model\n",
- "ENDPOINT = ## TODO: fill in\n",
- "\n",
- "def lambda_handler(event, context):\n",
- "\n",
- " # Decode the image data\n",
- " image = base64.b64decode(## TODO: fill in)\n",
- "\n",
- " # Instantiate a Predictor\n",
- " predictor = ## TODO: fill in\n",
- "\n",
- " # For this model the IdentitySerializer needs to be \"image/png\"\n",
- " predictor.serializer = IdentitySerializer(\"image/png\")\n",
- " \n",
- " # Make a prediction:\n",
- " inferences = ## TODO: fill in\n",
- " \n",
- " # We return the data back to the Step Function \n",
- " event[\"inferences\"] = inferences.decode('utf-8')\n",
- " return {\n",
- " 'statusCode': 200,\n",
- " 'body': json.dumps(event)\n",
- " }\n",
- "```\n",
- "\n",
- "Finally, we need to filter low-confidence inferences. Define a threshold between 1.00 and 0.000 for your model: what is reasonble for you? If the model predicts at `.70` for it's highest confidence label, do we want to pass that inference along to downstream systems? Make one last Lambda function and tee up the same permissions:\n",
- "\n",
- "```python\n",
- "import json\n",
- "\n",
- "\n",
- "THRESHOLD = .93\n",
- "\n",
- "\n",
- "def lambda_handler(event, context):\n",
- " \n",
- " # Grab the inferences from the event\n",
- " inferences = ## TODO: fill in\n",
- " \n",
- " # Check if any values in our inferences are above THRESHOLD\n",
- " meets_threshold = ## TODO: fill in\n",
- " \n",
- " # If our threshold is met, pass our data back out of the\n",
- " # Step Function, else, end the Step Function with an error\n",
- " if meets_threshold:\n",
- " pass\n",
- " else:\n",
- " raise(\"THRESHOLD_CONFIDENCE_NOT_MET\")\n",
- "\n",
- " return {\n",
- " 'statusCode': 200,\n",
- " 'body': json.dumps(event)\n",
- " }\n",
- "```\n",
- "Once you have tested the lambda functions, save the code for each lambda function in a python script called 'lambda.py'.\n",
- "\n",
- "With your lambdas in place, you can use the Step Functions visual editor to construct a workflow that chains them together. In the Step Functions console you'll have the option to author a Standard step function *Visually*.\n",
- "\n",
- "When the visual editor opens, you'll have many options to add transitions in your workflow. We're going to keep it simple and have just one: to invoke Lambda functions. Add three of them chained together. For each one, you'll be able to select the Lambda functions you just created in the proper order, filter inputs and outputs, and give them descriptive names.\n",
- "\n",
- "Make sure that you:\n",
- "\n",
- "1. Are properly filtering the inputs and outputs of your invokations (e.g. `$.body`)\n",
- "2. Take care to remove the error handling from the last function - it's supposed to \"fail loudly\" for your operations colleagues!\n",
- "\n",
- "Take a screenshot of your working step function in action and export the step function as JSON for your submission package."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "Great! Now you can use the files in `./test` as test files for our workflow. Depending on our threshold, our workflow should reliably pass predictions about images from `./test` on to downstream systems, while erroring out for inferences below our confidence threshold!\n",
- "\n",
- "### Testing and Evaluation\n",
- "\n",
- "Do several step function invokations using data from the `./test` folder. This process should give you confidence that the workflow both *succeeds* AND *fails* as expected. In addition, SageMaker Model Monitor will generate recordings of your data and inferences which we can visualize.\n",
- "\n",
- "Here's a function that can help you generate test inputs for your invokations:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import random\n",
- "import boto3\n",
- "import json\n",
- "\n",
- "\n",
- "def generate_test_case():\n",
- " # Setup s3 in boto3\n",
- " s3 = boto3.resource('s3')\n",
- " \n",
- " # Randomly pick from sfn or test folders in our bucket\n",
- " objects = s3.Bucket(bucket).objects.filter(\"test\")\n",
- " \n",
- " # Grab any random object key from that folder!\n",
- " obj = random.choice([x.key for x in objects])\n",
- " \n",
- " return json.dumps({\n",
- " \"image_data\": \"\",\n",
- " \"s3_bucket\": bucket,\n",
- " \"s3_key\": obj\n",
- " })\n",
- "generate_test_case()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In the Step Function dashboard for your new function, you can create new executions and copy in the generated test cases. Do several executions so that you can generate data you can evaluate and visualize.\n",
- "\n",
- "Once you've done several executions, let's visualize the record of our inferences. Pull in the JSONLines data from your inferences like so:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sagemaker.s3 import S3Downloader\n",
- "\n",
- "# In S3 your data will be saved to a datetime-aware path\n",
- "# Find a path related to a datetime you're interested in\n",
- "data_path = ## TODO: fill in the path to your captured data\n",
- "\n",
- "S3Downloader.download(data_path, \"captured_data\")\n",
- "\n",
- "# Feel free to repeat this multiple times and pull in more data"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The data are in JSONLines format, where multiple valid JSON objects are stacked on top of eachother in a single `jsonl` file. We'll import an open-source library, `jsonlines` that was purpose built for parsing this format."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!pip install jsonlines\n",
- "import jsonlines"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now we can extract the data from each of the source files:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "\n",
- "# List the file names we downloaded\n",
- "file_handles = os.listdir(\"./captured_data\")\n",
- "\n",
- "# Dump all the data into an array\n",
- "json_data = []\n",
- "for jsonl in file_handles:\n",
- " with jsonlines.open(f\"./captured_data/{jsonl}\") as f:\n",
- " json_data.append(f.read())"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The data should now be a list of dictionaries, with significant nesting. We'll give you an example of some code that grabs data out of the objects and visualizes it:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Define how we'll get our data\n",
- "def simple_getter(obj):\n",
- " inferences = obj[\"captureData\"][\"endpointOutput\"][\"data\"]\n",
- " timestamp = obj[\"eventMetadata\"][\"inferenceTime\"]\n",
- " return json.loads(inferences), timestamp\n",
- "\n",
- "simple_getter(json_data[0])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Finally, here's an example of a visualization you can build with this data. In this last part, you will take some time and build your own - the captured data has the input images, the resulting inferences, and the timestamps."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Populate the data for the x and y axis\n",
- "x = []\n",
- "y = []\n",
- "for obj in json_data:\n",
- " inference, timestamp = simple_getter(obj)\n",
- " \n",
- " y.append(max(inference))\n",
- " x.append(timestamp)\n",
- "\n",
- "# Todo: here is an visualization example, take some time to build another visual that helps monitor the result\n",
- "# Plot the data\n",
- "plt.scatter(x, y, c=['r' if k<.94 else 'b' for k in y ])\n",
- "plt.axhline(y=0.94, color='g', linestyle='--')\n",
- "plt.ylim(bottom=.88)\n",
- "\n",
- "# Add labels\n",
- "plt.ylabel(\"Confidence\")\n",
- "plt.suptitle(\"Observed Recent Inferences\", size=14)\n",
- "plt.title(\"Pictured with confidence threshold for production use\", size=10)\n",
- "\n",
- "# Give it some pizzaz!\n",
- "plt.style.use(\"Solarize_Light2\")\n",
- "plt.gcf().autofmt_xdate()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Todo: build your own visualization\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Congratulations!\n",
- "\n",
- "You've reached the end of the project. In this project you created an event-drivent ML workflow that can be incorporated into the Scones Unlimited production architecture. You used the SageMaker Estimator API to deploy your SageMaker Model and Endpoint, and you used AWS Lambda and Step Functions to orchestrate your ML workflow. Using SageMaker Model Monitor, you instrumented and observed your Endpoint, and at the end of the project you built a visualization to help stakeholders understand the performance of the Endpoint over time. If you're up for it, you can even go further with these stretch goals:\n",
- "\n",
- "* Extend your workflow to incorporate more classes: the CIFAR dataset includes other vehicles that Scones Unlimited can identify with this model.\n",
- "* Modify your event driven workflow: can you rewrite your Lambda functions so that the workflow can process multiple image inputs in parallel? Can the Step Function \"fan out\" to accomodate this new workflow?\n",
- "* Consider the test data generator we provided for you. Can we use it to create a \"dummy data\" generator, to simulate a continuous stream of input data? Or a big paralell load of data?\n",
- "* What if we want to get notified every time our step function errors out? Can we use the Step Functions visual editor in conjunction with a service like SNS to accomplish this? Try it out!\n",
- "\n",
- "\n"
- ]
- }
- ],
- "metadata": {
- "instance_type": "ml.t3.medium",
- "kernelspec": {
- "display_name": "Python 3 (Data Science)",
- "language": "python",
- "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0"
- },
- "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.7.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/project/step function (json & screenshot)/project-2-aws-step-function-exe.JPG b/project/step function (json & screenshot)/project-2-aws-step-function-exe.JPG
new file mode 100644
index 000000000..445ff89ec
Binary files /dev/null and b/project/step function (json & screenshot)/project-2-aws-step-function-exe.JPG differ
diff --git a/project/step function (json & screenshot)/project.json b/project/step function (json & screenshot)/project.json
new file mode 100644
index 000000000..a4a40ece7
--- /dev/null
+++ b/project/step function (json & screenshot)/project.json
@@ -0,0 +1,75 @@
+{
+ "Comment": "A description of my state machine",
+ "StartAt": "Lambda-1-data-serialize",
+ "States": {
+ "Lambda-1-data-serialize": {
+ "Type": "Task",
+ "Resource": "arn:aws:states:::lambda:invoke",
+ "OutputPath": "$.Payload",
+ "Parameters": {
+ "Payload.$": "$",
+ "FunctionName": "arn:aws:lambda:us-east-1:683237399578:function:serializeImageData:$LATEST"
+ },
+ "Retry": [
+ {
+ "ErrorEquals": [
+ "Lambda.ServiceException",
+ "Lambda.AWSLambdaException",
+ "Lambda.SdkClientException",
+ "Lambda.TooManyRequestsException"
+ ],
+ "IntervalSeconds": 2,
+ "MaxAttempts": 6,
+ "BackoffRate": 2
+ }
+ ],
+ "Next": "Lambda -2-classify"
+ },
+ "Lambda -2-classify": {
+ "Type": "Task",
+ "Resource": "arn:aws:states:::lambda:invoke",
+ "OutputPath": "$.Payload",
+ "Parameters": {
+ "Payload.$": "$",
+ "FunctionName": "arn:aws:lambda:us-east-1:683237399578:function:classification:$LATEST"
+ },
+ "Retry": [
+ {
+ "ErrorEquals": [
+ "Lambda.ServiceException",
+ "Lambda.AWSLambdaException",
+ "Lambda.SdkClientException",
+ "Lambda.TooManyRequestsException"
+ ],
+ "IntervalSeconds": 2,
+ "MaxAttempts": 6,
+ "BackoffRate": 2
+ }
+ ],
+ "Next": "Lambda-3-filter"
+ },
+ "Lambda-3-filter": {
+ "Type": "Task",
+ "Resource": "arn:aws:states:::lambda:invoke",
+ "OutputPath": "$.Payload",
+ "Parameters": {
+ "Payload.$": "$",
+ "FunctionName": "arn:aws:lambda:us-east-1:683237399578:function:low-confidence-filter:$LATEST"
+ },
+ "Retry": [
+ {
+ "ErrorEquals": [
+ "Lambda.ServiceException",
+ "Lambda.AWSLambdaException",
+ "Lambda.SdkClientException",
+ "Lambda.TooManyRequestsException"
+ ],
+ "IntervalSeconds": 2,
+ "MaxAttempts": 6,
+ "BackoffRate": 2
+ }
+ ],
+ "End": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/project/step function (json & screenshot)/step function multiple execution history.JPG b/project/step function (json & screenshot)/step function multiple execution history.JPG
new file mode 100644
index 000000000..b2cff066b
Binary files /dev/null and b/project/step function (json & screenshot)/step function multiple execution history.JPG differ
diff --git a/project/step function (json & screenshot)/stepfunctions_graph.png b/project/step function (json & screenshot)/stepfunctions_graph.png
new file mode 100644
index 000000000..9a338c1e7
Binary files /dev/null and b/project/step function (json & screenshot)/stepfunctions_graph.png differ
diff --git a/project/test.lst b/project/test.lst
new file mode 100644
index 000000000..21363aefe
--- /dev/null
+++ b/project/test.lst
@@ -0,0 +1,200 @@
+27 0 safety_bike_s_000390.png
+28 0 bike_s_000658.png
+116 0 velocipede_s_001744.png
+161 0 bike_s_000643.png
+319 0 ordinary_bicycle_s_000437.png
+354 1 motorcycle_s_000323.png
+417 0 safety_bike_s_001253.png
+476 0 cycle_s_001306.png
+532 0 velocipede_s_000863.png
+554 0 bicycle_s_000479.png
+615 1 minibike_s_002173.png
+626 1 motorcycle_s_000352.png
+644 0 bike_s_000801.png
+752 1 motorbike_s_000433.png
+756 0 bike_s_001068.png
+790 1 motorcycle_s_000963.png
+912 0 bike_s_001852.png
+923 1 motorcycle_s_000139.png
+1023 1 motorbike_s_000465.png
+1043 0 bicycle_s_000513.png
+1094 0 cycle_s_002305.png
+1096 1 motorcycle_s_000615.png
+1218 1 moped_s_000306.png
+1321 1 minibike_s_000052.png
+1382 0 bike_s_001342.png
+1398 0 cycle_s_001297.png
+1404 1 motorcycle_s_001955.png
+1408 0 cycle_s_001953.png
+1463 1 motorcycle_s_000494.png
+1464 1 motorcycle_s_001249.png
+1469 0 velocipede_s_000292.png
+1671 1 minibike_s_001651.png
+1675 0 bicycle_s_001102.png
+1775 0 safety_bike_s_001132.png
+1812 1 moped_s_000007.png
+1829 1 motorcycle_s_000211.png
+1999 0 cycle_s_000970.png
+2033 1 motorcycle_s_002126.png
+2066 1 minibike_s_001732.png
+2072 1 minibike_s_001867.png
+2082 1 minibike_s_002227.png
+2147 0 cycle_s_000068.png
+2148 1 minibike_s_000880.png
+2242 1 moped_s_000033.png
+2477 0 bicycle_s_001107.png
+2499 0 bike_s_002116.png
+2520 0 bike_s_001738.png
+2885 0 bike_s_002009.png
+3027 1 minibike_s_000947.png
+3035 0 bike_s_001159.png
+3044 0 safety_bike_s_001065.png
+3054 1 motorbike_s_000005.png
+3111 1 minibike_s_000075.png
+3240 1 motorcycle_s_001164.png
+3256 1 motorcycle_s_000679.png
+3376 1 motorcycle_s_001892.png
+3407 0 bike_s_000694.png
+3467 0 velocipede_s_000106.png
+3477 0 velocipede_s_000001.png
+3525 1 motorcycle_s_002177.png
+3558 1 motorbike_s_000126.png
+3591 0 safety_bicycle_s_001286.png
+3606 1 motorcycle_s_001936.png
+3682 0 safety_bike_s_001087.png
+3698 0 cycle_s_001648.png
+3715 1 minibike_s_000801.png
+3732 1 motorcycle_s_000427.png
+3748 1 minibike_s_001089.png
+3857 1 motorcycle_s_000530.png
+3873 0 velocipede_s_001232.png
+3893 1 motorcycle_s_001261.png
+3935 0 velocipede_s_001466.png
+4028 1 motorcycle_s_001269.png
+4106 0 bicycle_s_000776.png
+4128 1 motorcycle_s_001348.png
+4147 1 motorcycle_s_002026.png
+4211 0 safety_bike_s_000540.png
+4239 0 safety_bicycle_s_000280.png
+4251 0 bike_s_000131.png
+4329 0 cycle_s_000010.png
+4461 1 minibike_s_000828.png
+4487 1 minibike_s_000288.png
+4561 0 velocipede_s_001355.png
+4646 0 safety_bicycle_s_001575.png
+4765 0 safety_bike_s_001690.png
+4888 0 cycle_s_001044.png
+4892 1 motorcycle_s_000063.png
+4908 0 velocipede_s_001379.png
+4927 1 minibike_s_001441.png
+4960 1 motorcycle_s_000797.png
+4980 0 velocipede_s_001790.png
+5003 1 motorbike_s_000135.png
+5063 0 cycle_s_002613.png
+5112 1 motorcycle_s_001960.png
+5114 1 minibike_s_000913.png
+5162 1 motorcycle_s_000685.png
+5171 0 ordinary_bicycle_s_000431.png
+5175 1 minibike_s_002051.png
+5216 1 motorcycle_s_000446.png
+5304 0 velocipede_s_001699.png
+5311 1 minibike_s_000792.png
+5337 0 bicycle_s_002458.png
+5342 1 minibike_s_000505.png
+5350 1 minibike_s_000573.png
+5362 0 velocipede_s_000369.png
+5430 1 moped_s_000064.png
+5460 1 minibike_s_001893.png
+5469 1 motorcycle_s_000878.png
+5486 1 motorcycle_s_000042.png
+5572 1 motorcycle_s_000606.png
+5612 1 minibike_s_002230.png
+5650 1 motorcycle_s_001519.png
+5691 1 motorcycle_s_000512.png
+5855 0 cycle_s_001915.png
+5877 0 safety_bike_s_000541.png
+5895 0 safety_bike_s_000192.png
+5994 0 bicycle_s_000030.png
+6022 1 motorcycle_s_001385.png
+6144 1 minibike_s_000960.png
+6210 0 safety_bike_s_000791.png
+6226 0 bike_s_000071.png
+6279 1 motorcycle_s_000876.png
+6280 0 ordinary_bicycle_s_000350.png
+6343 1 motorcycle_s_000602.png
+6382 1 motorcycle_s_000222.png
+6416 1 minibike_s_000309.png
+6449 1 motorcycle_s_001679.png
+6547 1 minibike_s_001473.png
+6553 0 velocipede_s_001633.png
+6713 0 safety_bike_s_000438.png
+6720 0 safety_bicycle_s_000315.png
+6730 1 motorcycle_s_002112.png
+6799 0 bike_s_000163.png
+6837 0 bicycle_s_000059.png
+6848 0 bicycle_s_001789.png
+6865 0 safety_bike_s_000699.png
+6914 1 motorbike_s_000324.png
+6954 1 motorcycle_s_000485.png
+7109 1 motorcycle_s_001687.png
+7110 1 minibike_s_000497.png
+7160 1 minibike_s_001547.png
+7209 1 minibike_s_000055.png
+7242 0 ordinary_bicycle_s_000169.png
+7249 1 minibike_s_000290.png
+7262 0 velocipede_s_001335.png
+7266 0 bicycle_s_001804.png
+7281 0 safety_bike_s_000488.png
+7282 0 bike_s_001216.png
+7289 1 motorbike_s_000121.png
+7378 0 bike_s_001073.png
+7385 0 safety_bicycle_s_001153.png
+7471 1 motorcycle_s_000171.png
+7484 0 velocipede_s_000041.png
+7489 1 motorcycle_s_001782.png
+7569 1 motorbike_s_000629.png
+7584 0 bicycle_s_000977.png
+7640 1 motorcycle_s_001906.png
+7648 0 bike_s_002208.png
+7806 1 minibike_s_000254.png
+7862 0 safety_bicycle_s_001322.png
+7871 1 bike_s_000041.png
+7947 0 bicycle_s_000031.png
+7949 0 bicycle_s_000779.png
+8056 0 velocipede_s_001277.png
+8065 0 safety_bike_s_001088.png
+8183 1 motorcycle_s_001971.png
+8191 0 bike_s_001784.png
+8257 1 motorcycle_s_000825.png
+8300 1 dirt_bike_s_000001.png
+8326 0 cycle_s_001214.png
+8390 0 cycle_s_002964.png
+8402 0 ordinary_bicycle_s_000284.png
+8419 0 bicycle_s_002735.png
+8457 1 motorcycle_s_000450.png
+8460 1 motorcycle_s_000049.png
+8627 1 motorcycle_s_000866.png
+8661 0 velocipede_s_001201.png
+8739 0 bike_s_000457.png
+8744 0 bike_s_000330.png
+8763 1 minibike_s_001605.png
+8929 1 minibike_s_000398.png
+8981 1 motorcycle_s_000007.png
+9007 1 motorcycle_s_000040.png
+9017 1 motorcycle_s_000739.png
+9205 1 motorbike_s_000333.png
+9236 0 safety_bike_s_001481.png
+9253 0 ordinary_bicycle_s_000158.png
+9276 1 motorcycle_s_001508.png
+9345 1 motorcycle_s_000060.png
+9380 0 cycle_s_002661.png
+9425 0 bicycle_s_001047.png
+9486 0 bicycle_s_000777.png
+9556 0 safety_bicycle_s_000235.png
+9615 0 bike_s_000487.png
+9646 0 ordinary_bicycle_s_000113.png
+9654 1 trail_bike_s_000073.png
+9692 0 bike_s_000941.png
+9833 1 motorcycle_s_000141.png
+9928 0 ordinary_bicycle_s_000105.png
+9939 0 bicycle_s_001218.png
diff --git a/project/train.lst b/project/train.lst
new file mode 100644
index 000000000..fcf936c0a
--- /dev/null
+++ b/project/train.lst
@@ -0,0 +1,1000 @@
+16 0 bike_s_000682.png
+30 0 bike_s_000127.png
+130 0 cycle_s_002598.png
+152 1 minibike_s_000824.png
+195 1 motorcycle_s_001856.png
+219 0 bicycle_s_000537.png
+251 1 moped_s_000169.png
+252 1 motorcycle_s_001453.png
+298 0 safety_bike_s_000482.png
+370 1 dirt_bike_s_000124.png
+390 1 minibike_s_001863.png
+392 1 minibike_s_001177.png
+408 1 motorcycle_s_001792.png
+560 1 minibike_s_001969.png
+575 0 velocipede_s_001585.png
+576 1 moped_s_000035.png
+663 0 bike_s_000256.png
+682 1 minibike_s_000571.png
+785 1 motorcycle_s_001119.png
+839 1 moped_s_000009.png
+921 0 ordinary_bicycle_s_000023.png
+922 1 motorcycle_s_001693.png
+964 0 safety_bicycle_s_001570.png
+984 0 safety_bike_s_000989.png
+996 0 bicycle_s_001673.png
+1023 0 ordinary_bicycle_s_000100.png
+1114 0 bike_s_000544.png
+1132 1 motorcycle_s_001368.png
+1158 0 bicycle_s_000392.png
+1170 1 motorbike_s_000221.png
+1255 0 safety_bike_s_000311.png
+1290 0 cycle_s_001745.png
+1334 1 motorcycle_s_002030.png
+1357 1 motorcycle_s_000074.png
+1362 0 cycle_s_002978.png
+1457 0 bike_s_001679.png
+1555 0 bicycle_s_000536.png
+1564 0 bike_s_000926.png
+1644 1 motorcycle_s_000070.png
+1747 0 safety_bicycle_s_000655.png
+1818 0 safety_bicycle_s_000427.png
+1841 1 minibike_s_000324.png
+1885 1 minibike_s_001631.png
+1942 1 motorcycle_s_000629.png
+1964 1 motorcycle_s_000605.png
+1965 1 motorcycle_s_001973.png
+2010 0 bike_s_000555.png
+2079 0 bicycle_s_002762.png
+2105 0 bicycle_s_000778.png
+2163 0 bike_s_001613.png
+2296 1 motorcycle_s_001180.png
+2319 1 minibike_s_001279.png
+2499 1 minibike_s_000451.png
+2525 1 motorbike_s_000346.png
+2598 1 minibike_s_000117.png
+2599 0 bicycle_s_001448.png
+2790 1 motorcycle_s_000790.png
+2838 0 bicycle_s_002373.png
+2852 0 safety_bicycle_s_001202.png
+2952 1 motorcycle_s_000001.png
+2973 0 bike_s_001882.png
+3053 0 bike_s_001113.png
+3162 1 minibike_s_000362.png
+3228 0 cycle_s_000718.png
+3286 0 velocipede_s_001338.png
+3464 1 minibike_s_001972.png
+3566 0 ordinary_bicycle_s_000107.png
+3574 1 motorcycle_s_000776.png
+3584 0 safety_bike_s_000934.png
+3597 0 bicycle_s_002218.png
+3616 0 safety_bicycle_s_001240.png
+3653 0 ordinary_bicycle_s_000355.png
+3676 1 motorcycle_s_000454.png
+3817 1 motorcycle_s_000245.png
+3923 1 minibike_s_000743.png
+3954 0 safety_bike_s_000830.png
+4027 1 minibike_s_001573.png
+4036 1 motorbike_s_000141.png
+4097 1 minibike_s_000652.png
+4197 1 motorbike_s_000058.png
+4207 0 bicycle_s_000279.png
+4212 0 safety_bike_s_001608.png
+4221 0 bicycle_s_000522.png
+4291 0 bicycle_s_002569.png
+4320 0 bicycle_s_000829.png
+4367 0 velocipede_s_000586.png
+4416 1 dirt_bike_s_000017.png
+4437 0 cycle_s_001640.png
+4448 0 bicycle_s_000282.png
+4478 1 motorcycle_s_000713.png
+4509 1 bike_s_000035.png
+4600 0 bike_s_000299.png
+4654 1 minibike_s_002198.png
+4690 0 safety_bicycle_s_001253.png
+4693 1 minibike_s_000110.png
+4779 1 motorcycle_s_001370.png
+4803 1 motorcycle_s_001363.png
+4838 0 ordinary_bicycle_s_000060.png
+4880 1 minibike_s_001653.png
+4900 0 bicycle_s_001338.png
+4911 0 cycle_s_002053.png
+4921 0 velocipede_s_001056.png
+4957 1 minibike_s_000402.png
+4997 1 motorbike_s_000124.png
+5001 0 cycle_s_002638.png
+5033 0 velocipede_s_000949.png
+5152 0 safety_bike_s_000921.png
+5213 0 ordinary_bicycle_s_000297.png
+5312 1 motorcycle_s_001580.png
+5352 0 velocipede_s_000139.png
+5375 0 bicycle_s_000561.png
+5386 0 ordinary_bicycle_s_000161.png
+5403 1 minibike_s_000518.png
+5551 1 motorcycle_s_000167.png
+5566 0 cycle_s_000318.png
+5588 0 velocipede_s_001958.png
+5640 0 ordinary_bicycle_s_000201.png
+5757 0 bike_s_001462.png
+5759 0 bicycle_s_000437.png
+5830 0 velocipede_s_000825.png
+5866 0 safety_bike_s_000100.png
+5882 1 minibike_s_000654.png
+5886 0 bicycle_s_000021.png
+5975 1 moped_s_000030.png
+6070 0 velocipede_s_001142.png
+6084 1 motorbike_s_000117.png
+6092 0 ordinary_bicycle_s_000036.png
+6123 1 motorcycle_s_000787.png
+6222 0 bike_s_000516.png
+6252 1 motorcycle_s_000256.png
+6293 0 bicycle_s_002299.png
+6330 0 velocipede_s_001883.png
+6333 1 motorcycle_s_002143.png
+6386 0 cycle_s_000899.png
+6519 0 bicycle_s_002436.png
+6540 0 safety_bicycle_s_000255.png
+6687 1 minibike_s_000565.png
+6701 0 bike_s_000034.png
+6710 1 motorcycle_s_001064.png
+6718 1 minibike_s_001017.png
+6733 1 motorbike_s_000172.png
+6741 1 motorcycle_s_000923.png
+6832 0 cycle_s_000583.png
+6853 1 motorcycle_s_000991.png
+6870 1 motorbike_s_000541.png
+6895 1 motorcycle_s_001303.png
+6903 0 safety_bike_s_000567.png
+7026 1 minibike_s_000350.png
+7070 1 motorcycle_s_001905.png
+7101 0 bicycle_s_001247.png
+7105 0 bicycle_s_001693.png
+7119 0 bicycle_s_002258.png
+7120 0 safety_bike_s_001552.png
+7137 0 cycle_s_002651.png
+7161 0 bicycle_s_000759.png
+7185 1 motorcycle_s_001176.png
+7229 0 ordinary_bicycle_s_000432.png
+7253 1 minibike_s_000526.png
+7255 0 safety_bicycle_s_001049.png
+7282 1 minibike_s_001827.png
+7286 0 bike_s_001072.png
+7362 0 bike_s_001876.png
+7505 1 minibike_s_001511.png
+7517 0 bike_s_000237.png
+7650 1 motorbike_s_000254.png
+7699 0 bicycle_s_000180.png
+7715 0 safety_bicycle_s_000359.png
+7719 1 motorcycle_s_000220.png
+7732 1 motorcycle_s_002225.png
+7896 1 minibike_s_001185.png
+7943 1 motorcycle_s_000025.png
+7946 0 safety_bike_s_000058.png
+7976 1 dirt_bike_s_000030.png
+8138 1 minibike_s_002009.png
+8153 0 bicycle_s_000753.png
+8191 0 safety_bicycle_s_001320.png
+8209 1 motorcycle_s_001287.png
+8222 0 ordinary_bicycle_s_000451.png
+8247 1 minibike_s_000885.png
+8322 1 motorcycle_s_000418.png
+8355 0 velocipede_s_000282.png
+8408 0 cycle_s_001474.png
+8509 0 bicycle_s_000667.png
+8533 1 minibike_s_001546.png
+8545 0 bicycle_s_001452.png
+8579 1 motorcycle_s_000978.png
+8585 1 motorcycle_s_000447.png
+8595 1 minibike_s_000146.png
+8657 1 motorcycle_s_000300.png
+8674 0 safety_bicycle_s_001381.png
+8715 0 bike_s_001519.png
+8740 1 minibike_s_001689.png
+8744 0 bike_s_001320.png
+8780 0 bike_s_000722.png
+8797 1 motorcycle_s_000508.png
+8868 1 motorcycle_s_002105.png
+8885 1 minibike_s_000165.png
+8933 0 cycle_s_002703.png
+9006 0 ordinary_bicycle_s_000216.png
+9035 1 motorcycle_s_001610.png
+9066 0 cycle_s_002779.png
+9074 0 bicycle_s_000668.png
+9089 1 minibike_s_002186.png
+9094 0 bike_s_002118.png
+9101 0 safety_bike_s_001472.png
+9132 0 ordinary_bicycle_s_000016.png
+9137 1 motorcycle_s_001384.png
+9199 1 motorcycle_s_000431.png
+9230 0 bike_s_000302.png
+9317 0 velocipede_s_000659.png
+9328 1 motorcycle_s_001585.png
+9356 0 bike_s_001027.png
+9439 0 bicycle_s_000396.png
+9455 1 minibike_s_000149.png
+9518 0 velocipede_s_000702.png
+9534 0 ordinary_bicycle_s_000155.png
+9572 0 cycle_s_003122.png
+9601 1 motorbike_s_000021.png
+9614 0 safety_bicycle_s_001026.png
+9615 0 bike_s_001375.png
+9650 0 safety_bicycle_s_000533.png
+9657 0 bike_s_000021.png
+9743 1 minibike_s_000968.png
+9797 1 minibike_s_001873.png
+9827 0 bicycle_s_000463.png
+9972 0 bike_s_001839.png
+10000 1 minibike_s_000340.png
+10050 1 minibike_s_000831.png
+10083 1 motorcycle_s_001273.png
+10091 1 motorcycle_s_000807.png
+10098 0 bicycle_s_000156.png
+10129 1 motorcycle_s_000732.png
+10377 1 dirt_bike_s_000119.png
+10468 0 bicycle_s_000231.png
+10477 0 ordinary_bicycle_s_000056.png
+10504 0 ordinary_bicycle_s_000022.png
+10523 0 safety_bicycle_s_001243.png
+10557 1 motorcycle_s_000894.png
+10571 1 motorcycle_s_001397.png
+10608 1 motorcycle_s_000542.png
+10620 1 motorcycle_s_000834.png
+10632 1 motorcycle_s_001238.png
+10665 1 minibike_s_000567.png
+10741 1 minibike_s_001512.png
+10762 0 bike_s_001945.png
+10794 0 cycle_s_003148.png
+10798 0 safety_bicycle_s_000019.png
+10951 0 safety_bicycle_s_000167.png
+11080 1 motorcycle_s_001407.png
+11106 0 velocipede_s_001225.png
+11174 1 moped_s_000168.png
+11229 0 bicycle_s_000071.png
+11262 1 minibike_s_002030.png
+11307 1 minibike_s_001294.png
+11311 1 minibike_s_001767.png
+11381 0 safety_bike_s_000984.png
+11383 0 bicycle_s_000782.png
+11388 0 ordinary_bicycle_s_000095.png
+11451 0 cycle_s_001286.png
+11617 0 bike_s_001116.png
+11625 1 motorcycle_s_002065.png
+11653 0 ordinary_bicycle_s_000433.png
+11708 1 motorcycle_s_002221.png
+11717 0 safety_bike_s_000054.png
+11751 0 bicycle_s_001174.png
+11789 0 bicycle_s_002222.png
+11819 0 velocipede_s_001361.png
+11955 0 safety_bike_s_001012.png
+11975 1 minibike_s_000244.png
+12023 0 bicycle_s_000861.png
+12058 1 minibike_s_000566.png
+12130 1 motorcycle_s_001244.png
+12188 0 bicycle_s_002715.png
+12231 0 safety_bike_s_000963.png
+12265 1 motorcycle_s_001765.png
+12296 0 velocipede_s_000021.png
+12633 1 motorcycle_s_000580.png
+12767 0 bike_s_001226.png
+12822 1 motorcycle_s_000440.png
+12845 1 motorcycle_s_000144.png
+12964 0 cycle_s_002844.png
+13009 1 minibike_s_000485.png
+13089 0 ordinary_bicycle_s_000426.png
+13279 1 minibike_s_002196.png
+13295 0 bike_s_001897.png
+13298 0 cycle_s_001374.png
+13322 1 motorcycle_s_000585.png
+13327 0 bike_s_000026.png
+13482 0 bicycle_s_000235.png
+13520 1 minibike_s_000108.png
+13532 1 motorcycle_s_000072.png
+13576 1 motorcycle_s_002234.png
+13582 0 bicycle_s_000785.png
+13642 1 motorcycle_s_000669.png
+13684 0 bicycle_s_000051.png
+13692 0 bike_s_001093.png
+13716 0 velocipede_s_000049.png
+13740 1 bike_s_000023.png
+13762 1 motorcycle_s_001696.png
+13772 0 safety_bicycle_s_001113.png
+13786 1 motorcycle_s_000451.png
+13809 0 velocipede_s_000485.png
+13860 1 motorcycle_s_001753.png
+13879 0 cycle_s_001439.png
+13997 1 minibike_s_002038.png
+14027 0 bicycle_s_000147.png
+14067 0 cycle_s_002399.png
+14197 1 motorcycle_s_001565.png
+14254 0 bicycle_s_000159.png
+14306 1 minibike_s_000035.png
+14312 0 safety_bicycle_s_000239.png
+14369 0 safety_bike_s_001640.png
+14418 1 minibike_s_000698.png
+14437 1 minibike_s_000967.png
+14485 0 safety_bike_s_000381.png
+14504 1 motorcycle_s_000216.png
+14551 0 bike_s_000855.png
+14679 1 motorcycle_s_001715.png
+14715 1 motorcycle_s_002275.png
+14783 0 safety_bike_s_001338.png
+14786 0 safety_bicycle_s_001705.png
+15007 1 minibike_s_000855.png
+15036 0 bicycle_s_002132.png
+15083 1 minibike_s_000218.png
+15108 0 safety_bike_s_000178.png
+15130 1 motorcycle_s_001584.png
+15177 0 safety_bicycle_s_000162.png
+15193 1 motorcycle_s_001392.png
+15267 0 bicycle_s_001814.png
+15312 1 motorbike_s_000362.png
+15335 1 minibike_s_000519.png
+15352 1 minibike_s_001417.png
+15361 0 safety_bike_s_000277.png
+15385 0 cycle_s_002090.png
+15444 0 bicycle_s_001168.png
+15447 1 minibike_s_000498.png
+15535 1 motorcycle_s_001400.png
+15564 1 motorcycle_s_000320.png
+15569 1 minibike_s_001734.png
+15600 0 cycle_s_002659.png
+15641 0 bike_s_000990.png
+15733 0 velocipede_s_000358.png
+15756 0 safety_bicycle_s_000568.png
+15830 1 motorcycle_s_000312.png
+15851 1 motorcycle_s_001686.png
+15867 0 cycle_s_001472.png
+15888 1 minibike_s_000064.png
+16015 0 safety_bike_s_001784.png
+16093 1 motorcycle_s_002236.png
+16124 1 minibike_s_000020.png
+16150 1 motorcycle_s_001182.png
+16185 0 bicycle_s_000781.png
+16271 0 ordinary_bicycle_s_000167.png
+16285 0 cycle_s_002666.png
+16380 1 dirt_bike_s_000134.png
+16402 0 bike_s_000015.png
+16416 0 bike_s_001767.png
+16417 1 motorcycle_s_001790.png
+16448 0 bike_s_001915.png
+16479 0 bike_s_001415.png
+16497 1 motorbike_s_000578.png
+16565 0 safety_bicycle_s_000532.png
+16568 0 ordinary_bicycle_s_000049.png
+16574 1 minibike_s_001639.png
+16606 0 bike_s_000129.png
+16609 1 minibike_s_001565.png
+16660 0 bike_s_002203.png
+16701 1 minibike_s_000401.png
+16800 0 safety_bicycle_s_001608.png
+16839 0 velocipede_s_000670.png
+17049 0 safety_bicycle_s_000207.png
+17073 1 motorcycle_s_001853.png
+17125 0 bike_s_002222.png
+17160 1 motorcycle_s_000004.png
+17165 1 motorcycle_s_000496.png
+17220 1 motorcycle_s_001492.png
+17250 0 bike_s_001761.png
+17257 0 velocipede_s_001299.png
+17310 0 bike_s_000040.png
+17373 0 cycle_s_003162.png
+17379 0 velocipede_s_001880.png
+17471 0 bike_s_002139.png
+17481 0 bicycle_s_001583.png
+17517 0 safety_bicycle_s_001706.png
+17540 0 bike_s_001200.png
+17648 1 motorcycle_s_000699.png
+17730 0 cycle_s_000492.png
+17971 0 cycle_s_000222.png
+17988 1 motorcycle_s_002162.png
+18020 1 minibike_s_000409.png
+18164 0 cycle_s_001735.png
+18232 0 bike_s_000657.png
+18322 0 safety_bike_s_000643.png
+18327 0 bike_s_000506.png
+18462 1 minibike_s_001348.png
+18518 1 moped_s_000065.png
+18556 0 bicycle_s_002729.png
+18664 0 bicycle_s_001687.png
+18671 0 bicycle_s_002338.png
+18787 1 motorcycle_s_000459.png
+18794 0 bike_s_000593.png
+18796 0 velocipede_s_001422.png
+18831 0 ordinary_bicycle_s_000347.png
+18892 1 minibike_s_001870.png
+18951 0 bicycle_s_001757.png
+18995 1 motorcycle_s_001016.png
+19015 1 motorbike_s_000041.png
+19021 0 bike_s_000522.png
+19152 0 ordinary_bicycle_s_000104.png
+19154 0 bike_s_000397.png
+19336 1 minibike_s_000802.png
+19343 1 trail_bike_s_000016.png
+19351 1 motorcycle_s_000686.png
+19511 0 velocipede_s_001935.png
+19518 0 safety_bike_s_000165.png
+19532 1 motorbike_s_000308.png
+19628 0 bike_s_000018.png
+19675 0 cycle_s_001976.png
+19701 1 minibike_s_000741.png
+19743 1 motorcycle_s_001236.png
+19849 1 moped_s_000071.png
+19925 0 bike_s_000164.png
+19933 0 bike_s_001739.png
+19941 0 bicycle_s_001388.png
+19958 0 bicycle_s_000149.png
+19972 1 motorcycle_s_002197.png
+20177 1 motorcycle_s_000277.png
+20221 1 motorcycle_s_001690.png
+20237 1 minibike_s_002048.png
+20267 1 motorcycle_s_000253.png
+20397 0 safety_bike_s_001010.png
+20498 1 motorcycle_s_000785.png
+20548 0 ordinary_bicycle_s_000387.png
+20580 0 cycle_s_001309.png
+20601 1 motorcycle_s_002316.png
+20647 1 motorcycle_s_000340.png
+20684 1 moped_s_000124.png
+20712 1 minibike_s_001917.png
+20733 0 bicycle_s_000951.png
+20806 1 motorcycle_s_000002.png
+20842 1 motorcycle_s_001063.png
+20870 1 motorcycle_s_001641.png
+20982 0 bicycle_s_002129.png
+20985 1 minibike_s_002182.png
+21067 1 minibike_s_000427.png
+21077 1 motorcycle_s_001438.png
+21309 1 motorcycle_s_000126.png
+21584 1 minibike_s_001865.png
+21687 1 motorcycle_s_000456.png
+21730 1 motorcycle_s_000252.png
+21945 0 bicycle_s_000043.png
+21956 0 bicycle_s_001928.png
+21959 0 safety_bike_s_000173.png
+22003 1 motorcycle_s_000696.png
+22004 1 motorcycle_s_001413.png
+22005 0 safety_bicycle_s_001303.png
+22026 1 motorcycle_s_001220.png
+22028 0 safety_bicycle_s_000079.png
+22116 0 bicycle_s_001681.png
+22173 0 cycle_s_002015.png
+22237 0 cycle_s_002746.png
+22275 1 minibike_s_001250.png
+22303 0 safety_bicycle_s_000303.png
+22304 0 bike_s_000392.png
+22355 1 minibike_s_000408.png
+22403 0 safety_bike_s_001355.png
+22480 1 motorcycle_s_000076.png
+22516 0 safety_bicycle_s_000322.png
+22535 0 bike_s_002090.png
+22564 1 motorcycle_s_000796.png
+22565 1 motorbike_s_000225.png
+22581 1 motorcycle_s_000050.png
+22661 0 bike_s_000474.png
+22673 1 motorcycle_s_000127.png
+22699 1 motorcycle_s_002193.png
+22748 0 bicycle_s_002374.png
+22760 1 minibike_s_001558.png
+22793 0 velocipede_s_001279.png
+22807 1 minibike_s_001496.png
+22811 0 bicycle_s_001411.png
+22816 1 minibike_s_001072.png
+22852 0 bicycle_s_001688.png
+22862 0 safety_bike_s_000160.png
+22947 1 minibike_s_000820.png
+22948 0 ordinary_bicycle_s_000298.png
+22967 0 bicycle_s_000314.png
+22983 1 motorcycle_s_001862.png
+23228 1 minibike_s_001575.png
+23274 1 minibike_s_000709.png
+23335 0 velocipede_s_000931.png
+23351 0 safety_bike_s_000104.png
+23537 1 motorcycle_s_001197.png
+23587 1 motorbike_s_000115.png
+23603 0 bicycle_s_002728.png
+23616 0 safety_bike_s_001474.png
+23669 0 bike_s_002024.png
+23715 0 cycle_s_000666.png
+23744 1 motorcycle_s_000617.png
+23763 0 safety_bike_s_000461.png
+23888 0 bike_s_001572.png
+23908 1 motorcycle_s_000003.png
+23986 0 bicycle_s_002029.png
+24103 1 minibike_s_000701.png
+24124 1 motorbike_s_000009.png
+24130 1 minibike_s_001789.png
+24170 1 motorcycle_s_000417.png
+24182 1 motorcycle_s_000246.png
+24246 1 minibike_s_000886.png
+24284 1 motorcycle_s_000154.png
+24343 1 minibike_s_001169.png
+24411 0 cycle_s_002904.png
+24461 1 motorcycle_s_000772.png
+24467 0 velocipede_s_001158.png
+24501 0 bicycle_s_002521.png
+24505 1 minibike_s_001179.png
+24570 0 bicycle_s_001111.png
+24655 0 bicycle_s_001205.png
+24723 0 bicycle_s_000435.png
+24804 1 minibike_s_001771.png
+24813 1 motorcycle_s_000545.png
+25033 1 moped_s_000004.png
+25035 0 velocipede_s_001358.png
+25230 1 motorcycle_s_001402.png
+25319 1 minibike_s_001836.png
+25320 1 motorcycle_s_002067.png
+25326 0 bicycle_s_002012.png
+25346 1 motorcycle_s_000517.png
+25349 1 minibike_s_001345.png
+25350 1 minibike_s_000522.png
+25371 1 motorcycle_s_000700.png
+25476 1 motorcycle_s_001183.png
+25509 0 velocipede_s_001874.png
+25568 0 cycle_s_003006.png
+25584 1 motorcycle_s_000170.png
+25640 0 ordinary_bicycle_s_000419.png
+25645 1 motorcycle_s_000284.png
+25734 1 motorbike_s_000035.png
+25863 1 dirt_bike_s_000005.png
+25866 1 motorcycle_s_001784.png
+25871 1 motorcycle_s_001848.png
+26026 1 minibike_s_002046.png
+26050 1 motorcycle_s_002317.png
+26060 0 bike_s_001980.png
+26108 0 safety_bike_s_000950.png
+26114 0 bicycle_s_002237.png
+26173 0 cycle_s_000042.png
+26185 0 bike_s_000628.png
+26216 0 bike_s_000005.png
+26228 0 ordinary_bicycle_s_000324.png
+26326 1 motorcycle_s_000346.png
+26371 0 safety_bicycle_s_000789.png
+26468 0 ordinary_bicycle_s_000011.png
+26486 1 minibike_s_001157.png
+26487 0 bike_s_000051.png
+26491 1 motorcycle_s_000919.png
+26529 0 velocipede_s_001514.png
+26549 0 bike_s_001592.png
+26635 0 ordinary_bicycle_s_000066.png
+26648 0 bicycle_s_001470.png
+26890 1 motorcycle_s_001695.png
+26944 1 motorcycle_s_001215.png
+26948 0 bike_s_002098.png
+26971 0 bike_s_001928.png
+27008 0 bicycle_s_001748.png
+27125 1 motorcycle_s_001520.png
+27134 0 safety_bicycle_s_000728.png
+27154 1 motorcycle_s_000925.png
+27198 0 safety_bike_s_000914.png
+27219 0 safety_bike_s_001659.png
+27233 0 safety_bike_s_000155.png
+27274 0 bicycle_s_002153.png
+27301 0 safety_bike_s_001715.png
+27306 0 bicycle_s_000035.png
+27326 0 bicycle_s_002669.png
+27345 0 bike_s_002277.png
+27375 0 ordinary_bicycle_s_000265.png
+27425 0 bicycle_s_000369.png
+27526 0 velocipede_s_001298.png
+27614 1 minibike_s_001944.png
+27656 1 motorcycle_s_002215.png
+27691 0 ordinary_bicycle_s_000008.png
+27747 0 bicycle_s_000491.png
+27777 1 motorcycle_s_000146.png
+27788 1 minibike_s_001261.png
+27808 0 safety_bicycle_s_000140.png
+27920 1 motorcycle_s_000407.png
+27961 1 minibike_s_000099.png
+27963 1 motorcycle_s_001767.png
+28014 0 safety_bike_s_000263.png
+28051 1 motorcycle_s_001205.png
+28062 1 motorbike_s_000134.png
+28067 0 safety_bike_s_000245.png
+28073 1 motorcycle_s_000422.png
+28147 1 minibike_s_000800.png
+28259 1 minibike_s_001829.png
+28295 1 minibike_s_002124.png
+28311 0 bike_s_001414.png
+28368 1 motorcycle_s_000423.png
+28396 1 motorcycle_s_001435.png
+28421 1 motorcycle_s_001237.png
+28424 1 motorcycle_s_001878.png
+28500 0 cycle_s_002093.png
+28530 0 velocipede_s_000265.png
+28559 0 bike_s_001847.png
+28698 0 cycle_s_000463.png
+28879 1 motorcycle_s_002140.png
+28898 1 motorcycle_s_001246.png
+29044 0 bike_s_001517.png
+29119 1 motorcycle_s_000219.png
+29180 1 motorbike_s_000501.png
+29185 0 velocipede_s_001872.png
+29236 1 motorcycle_s_001337.png
+29237 1 motorcycle_s_000169.png
+29245 1 motorcycle_s_000347.png
+29351 0 ordinary_bicycle_s_000274.png
+29430 0 safety_bicycle_s_000196.png
+29550 0 bicycle_s_002049.png
+29553 1 minibike_s_000010.png
+29586 1 motorcycle_s_002121.png
+29825 1 motorbike_s_000060.png
+29857 1 motorbike_s_000534.png
+29923 0 ordinary_bicycle_s_000286.png
+29966 0 bicycle_s_000723.png
+29988 0 bicycle_s_000066.png
+30008 1 motorcycle_s_000741.png
+30247 1 minibike_s_001168.png
+30293 1 bike_s_000001.png
+30301 1 minibike_s_001491.png
+30395 1 motorcycle_s_000430.png
+30497 1 motorcycle_s_000026.png
+30526 0 bicycle_s_002448.png
+30584 0 cycle_s_001412.png
+30611 1 motorcycle_s_000714.png
+30959 1 motorcycle_s_000319.png
+30971 0 safety_bicycle_s_001254.png
+31026 0 ordinary_bicycle_s_000205.png
+31105 0 bicycle_s_002400.png
+31164 1 motorcycle_s_001126.png
+31181 0 bike_s_000364.png
+31209 0 ordinary_bicycle_s_000096.png
+31230 0 bike_s_000204.png
+31243 1 motorcycle_s_001181.png
+31260 1 minibike_s_001450.png
+31319 1 minibike_s_000130.png
+31343 1 motorcycle_s_002214.png
+31370 1 motorcycle_s_001263.png
+31378 1 minibike_s_000568.png
+31381 0 bicycle_s_000774.png
+31476 0 ordinary_bicycle_s_000125.png
+31518 1 minibike_s_001731.png
+31528 0 bicycle_s_000243.png
+31601 1 motorcycle_s_000029.png
+31654 0 velocipede_s_000023.png
+31706 1 minibike_s_001701.png
+31779 0 ordinary_bicycle_s_000035.png
+31882 0 safety_bike_s_000244.png
+31889 0 bicycle_s_000137.png
+31900 1 motorbike_s_000331.png
+31954 1 motorcycle_s_000120.png
+32023 0 velocipede_s_000989.png
+32078 1 moped_s_000135.png
+32143 0 bicycle_s_000569.png
+32183 0 safety_bicycle_s_001699.png
+32320 0 bicycle_s_000399.png
+32321 0 bike_s_002033.png
+32392 0 ordinary_bicycle_s_000280.png
+32551 0 bike_s_002283.png
+32573 0 cycle_s_001413.png
+32652 1 dirt_bike_s_000059.png
+32674 1 motorcycle_s_001699.png
+32677 1 motorcycle_s_000687.png
+32713 0 bike_s_000304.png
+32746 1 motorcycle_s_002192.png
+32788 1 motorcycle_s_000887.png
+32842 0 bike_s_002042.png
+32849 0 bicycle_s_000467.png
+32868 1 motorcycle_s_001706.png
+32974 1 minibike_s_002176.png
+32999 0 safety_bicycle_s_000760.png
+33025 0 bicycle_s_000546.png
+33075 0 safety_bike_s_000158.png
+33078 0 bicycle_s_001679.png
+33128 1 motorcycle_s_000924.png
+33226 0 bicycle_s_000996.png
+33274 1 motorcycle_s_000432.png
+33385 0 ordinary_bicycle_s_000277.png
+33388 0 bike_s_002164.png
+33413 1 minibike_s_000036.png
+33457 1 motorbike_s_000062.png
+33501 1 motorcycle_s_000133.png
+33544 0 safety_bike_s_000328.png
+33548 0 safety_bicycle_s_001028.png
+33569 1 minibike_s_001506.png
+33570 1 motorcycle_s_001549.png
+33609 0 bike_s_002292.png
+33668 1 bike_s_000121.png
+33856 1 motorcycle_s_001167.png
+33858 0 bicycle_s_000124.png
+33870 1 motorcycle_s_002237.png
+33948 0 velocipede_s_001870.png
+34039 1 moped_s_000119.png
+34076 1 minibike_s_000121.png
+34145 1 motorcycle_s_000928.png
+34150 1 minibike_s_001881.png
+34172 0 bike_s_000679.png
+34221 1 motorcycle_s_002183.png
+34346 0 bike_s_000111.png
+34354 0 bike_s_001260.png
+34391 0 safety_bicycle_s_000660.png
+34397 1 motorcycle_s_000695.png
+34413 0 safety_bicycle_s_000233.png
+34434 1 motorcycle_s_000792.png
+34468 1 motorcycle_s_000922.png
+34500 0 bicycle_s_002711.png
+34563 0 bike_s_000390.png
+34614 1 minibike_s_001094.png
+34616 1 minibike_s_000507.png
+34627 1 motorcycle_s_001213.png
+34644 0 bike_s_000154.png
+34685 1 motorcycle_s_000223.png
+34717 0 bicycle_s_002661.png
+34719 0 safety_bicycle_s_000232.png
+34794 0 bicycle_s_001663.png
+34826 1 motorbike_s_000463.png
+34861 1 minibike_s_002137.png
+34882 0 safety_bicycle_s_001651.png
+34903 1 motorcycle_s_000151.png
+34916 1 motorcycle_s_000217.png
+34945 0 bike_s_001877.png
+35094 0 velocipede_s_001278.png
+35095 1 minibike_s_001540.png
+35206 1 minibike_s_001885.png
+35210 0 velocipede_s_000012.png
+35211 0 bicycle_s_001956.png
+35212 0 ordinary_bicycle_s_000098.png
+35238 0 bicycle_s_002725.png
+35252 0 velocipede_s_001210.png
+35368 0 bicycle_s_000039.png
+35481 1 motorcycle_s_000654.png
+35552 0 safety_bike_s_000079.png
+35589 1 motorcycle_s_002291.png
+35617 0 cycle_s_002168.png
+35695 0 bike_s_001078.png
+35716 1 motorbike_s_000427.png
+35747 1 minibike_s_001921.png
+35760 1 motorcycle_s_000917.png
+35813 0 velocipede_s_001920.png
+35817 0 cycle_s_003026.png
+35876 1 motorcycle_s_000543.png
+35988 1 minibike_s_000491.png
+36091 1 motorcycle_s_001439.png
+36150 1 minibike_s_002084.png
+36188 0 bicycle_s_000775.png
+36200 1 motorcycle_s_000262.png
+36253 1 moped_s_000237.png
+36269 0 bicycle_s_000978.png
+36286 0 bike_s_000162.png
+36302 1 motorbike_s_000106.png
+36333 1 motorcycle_s_000136.png
+36476 1 motorcycle_s_001319.png
+36493 0 safety_bicycle_s_000125.png
+36512 0 bicycle_s_001402.png
+36530 1 minibike_s_000511.png
+36614 1 motorcycle_s_000332.png
+36650 1 motorcycle_s_001315.png
+36744 0 ordinary_bicycle_s_000031.png
+36907 1 motorcycle_s_000353.png
+36957 1 motorcycle_s_000521.png
+36996 0 safety_bicycle_s_000860.png
+37008 1 motorcycle_s_002153.png
+37024 0 safety_bicycle_s_000324.png
+37081 0 ordinary_bicycle_s_000112.png
+37096 1 motorbike_s_000068.png
+37180 1 motorcycle_s_002254.png
+37256 1 motorcycle_s_000989.png
+37435 1 motorcycle_s_000622.png
+37439 0 bike_s_000545.png
+37469 0 ordinary_bicycle_s_000099.png
+37517 0 safety_bike_s_001257.png
+37539 0 bicycle_s_001203.png
+37560 0 safety_bicycle_s_001085.png
+37568 1 motorcycle_s_002222.png
+37594 0 safety_bicycle_s_001639.png
+37733 0 velocipede_s_001222.png
+37790 1 minibike_s_000392.png
+37814 0 ordinary_bicycle_s_000308.png
+37853 1 motorcycle_s_001896.png
+37872 1 motorcycle_s_000325.png
+37912 0 bicycle_s_000986.png
+37918 0 safety_bicycle_s_000373.png
+37958 0 safety_bicycle_s_000348.png
+38017 0 bicycle_s_002005.png
+38021 1 minibike_s_002130.png
+38126 0 safety_bike_s_000867.png
+38229 0 bicycle_s_002475.png
+38230 1 minibike_s_001193.png
+38322 1 minibike_s_001366.png
+38367 1 motorcycle_s_001711.png
+38382 1 minibike_s_001275.png
+38391 0 velocipede_s_001907.png
+38573 1 motorcycle_s_000207.png
+38752 1 motorcycle_s_001409.png
+38915 0 safety_bicycle_s_000261.png
+38936 1 minibike_s_000738.png
+38973 1 motorcycle_s_001106.png
+39117 0 safety_bike_s_000198.png
+39131 1 minibike_s_001479.png
+39157 0 velocipede_s_000430.png
+39276 0 bicycle_s_001409.png
+39282 1 motorcycle_s_000938.png
+39287 1 motorcycle_s_000941.png
+39380 0 bicycle_s_000038.png
+39397 1 minibike_s_001016.png
+39445 0 velocipede_s_001200.png
+39632 0 bike_s_002109.png
+39754 0 cycle_s_002092.png
+39781 1 motorcycle_s_002066.png
+39848 1 motorcycle_s_001920.png
+39915 1 minibike_s_000459.png
+39967 0 bicycle_s_001904.png
+39972 1 minibike_s_001996.png
+39990 1 motorcycle_s_001611.png
+40041 0 velocipede_s_001141.png
+40050 1 minibike_s_001747.png
+40081 0 safety_bicycle_s_001029.png
+40156 0 ordinary_bicycle_s_000029.png
+40171 1 minibike_s_002163.png
+40189 0 safety_bike_s_001148.png
+40248 0 cycle_s_003008.png
+40455 0 bicycle_s_000099.png
+40496 1 minibike_s_000429.png
+40537 0 bike_s_000003.png
+40561 0 cycle_s_002178.png
+40686 0 cycle_s_000639.png
+40797 1 motorcycle_s_000734.png
+40892 1 motorcycle_s_000309.png
+40951 0 bicycle_s_000371.png
+41043 1 minibike_s_001270.png
+41044 1 minibike_s_000914.png
+41086 1 moped_s_000021.png
+41144 1 motorcycle_s_000242.png
+41180 1 minibike_s_000314.png
+41294 1 motorcycle_s_000698.png
+41306 1 motorcycle_s_001360.png
+41343 0 ordinary_bicycle_s_000157.png
+41439 1 minibike_s_001838.png
+41548 0 bicycle_s_002247.png
+41612 1 motorcycle_s_000027.png
+41694 1 minibike_s_000906.png
+41735 0 safety_bicycle_s_000500.png
+41800 1 minibike_s_002146.png
+41848 1 motorcycle_s_001242.png
+41982 1 motorcycle_s_001707.png
+42056 0 cycle_s_003043.png
+42107 0 safety_bicycle_s_001109.png
+42154 0 bike_s_001131.png
+42193 1 motorcycle_s_001118.png
+42315 0 bike_s_001418.png
+42499 0 bicycle_s_002550.png
+42539 0 bicycle_s_002100.png
+42543 1 motorcycle_s_000933.png
+42570 0 bicycle_s_002624.png
+42613 0 safety_bicycle_s_001063.png
+42732 1 motorbike_s_000361.png
+42768 0 safety_bicycle_s_000193.png
+42856 0 safety_bicycle_s_000092.png
+42861 1 motorcycle_s_000009.png
+42892 0 bicycle_s_001554.png
+42995 1 motorcycle_s_001297.png
+43033 0 safety_bicycle_s_000296.png
+43052 0 safety_bike_s_001371.png
+43316 0 bicycle_s_001569.png
+43338 1 motorcycle_s_001536.png
+43343 0 safety_bicycle_s_001659.png
+43412 0 ordinary_bicycle_s_000102.png
+43422 0 bike_s_002215.png
+43434 0 bicycle_s_002410.png
+43464 0 cycle_s_003147.png
+43468 0 bicycle_s_002759.png
+43481 1 minibike_s_000335.png
+43550 0 safety_bike_s_000848.png
+43559 0 velocipede_s_000807.png
+43573 0 bike_s_000024.png
+43593 1 minibike_s_000435.png
+43594 1 minibike_s_001498.png
+43688 0 velocipede_s_001166.png
+43762 1 motorcycle_s_001012.png
+43847 0 velocipede_s_000330.png
+43895 1 motorcycle_s_000032.png
+43981 1 minibike_s_001597.png
+44000 1 motorcycle_s_002298.png
+44015 1 minibike_s_000102.png
+44142 1 motorcycle_s_001507.png
+44291 1 motorbike_s_000022.png
+44300 1 motorcycle_s_000594.png
+44351 1 minibike_s_001539.png
+44423 0 bicycle_s_001228.png
+44464 1 minibike_s_001344.png
+44468 1 motorcycle_s_002271.png
+44506 1 motorcycle_s_000791.png
+44543 0 ordinary_bicycle_s_000218.png
+44551 1 motorcycle_s_000221.png
+44553 1 minibike_s_001691.png
+44635 1 motorcycle_s_001209.png
+44666 0 ordinary_bicycle_s_000101.png
+44678 1 motorcycle_s_001326.png
+44702 1 minibike_s_001249.png
+44709 0 bicycle_s_000408.png
+44862 1 minibike_s_000520.png
+44863 1 minibike_s_002218.png
+44927 1 minibike_s_001458.png
+44967 1 moped_s_000034.png
+45046 1 motorbike_s_000119.png
+45191 1 motorcycle_s_001027.png
+45233 0 cycle_s_001477.png
+45336 1 motorcycle_s_001710.png
+45393 1 minibike_s_000434.png
+45442 1 motorcycle_s_000979.png
+45449 0 safety_bike_s_001289.png
+45461 0 safety_bike_s_001560.png
+45483 1 minibike_s_000011.png
+45489 0 bicycle_s_001642.png
+45529 1 minibike_s_000527.png
+45605 0 bicycle_s_001245.png
+45638 0 bike_s_000934.png
+45673 0 velocipede_s_001244.png
+45676 0 velocipede_s_001882.png
+45692 0 bike_s_001683.png
+45763 1 minibike_s_000127.png
+45769 0 bicycle_s_001002.png
+45807 1 moped_s_000044.png
+45847 1 bike_s_000025.png
+45859 1 minibike_s_000690.png
+45950 1 minibike_s_000022.png
+46022 1 motorcycle_s_001196.png
+46106 0 ordinary_bicycle_s_000269.png
+46157 0 cycle_s_002503.png
+46161 0 ordinary_bicycle_s_000097.png
+46186 0 safety_bike_s_000009.png
+46203 0 safety_bike_s_000015.png
+46288 1 minibike_s_000613.png
+46316 1 motorcycle_s_001017.png
+46363 1 minibike_s_000203.png
+46389 0 velocipede_s_001489.png
+46515 1 minibike_s_000813.png
+46570 0 safety_bicycle_s_000425.png
+46667 1 motorcycle_s_001622.png
+46675 1 motorcycle_s_000593.png
+46724 1 minibike_s_000116.png
+46785 1 motorcycle_s_001563.png
+46899 0 cycle_s_001875.png
+46922 0 safety_bike_s_001590.png
+46955 1 minibike_s_000830.png
+46996 1 minibike_s_000570.png
+47175 0 bike_s_001380.png
+47180 1 moped_s_000236.png
+47302 1 motorcycle_s_000339.png
+47344 0 safety_bike_s_001465.png
+47374 1 motorcycle_s_001714.png
+47466 1 minibike_s_001191.png
+47469 0 cycle_s_002882.png
+47510 0 bicycle_s_000822.png
+47519 0 bike_s_001827.png
+47567 0 ordinary_bicycle_s_000110.png
+47721 1 minibike_s_000293.png
+47772 1 motorcycle_s_000249.png
+47792 0 ordinary_bicycle_s_000154.png
+47888 1 motorcycle_s_001527.png
+48028 1 motorcycle_s_001033.png
+48044 1 motorcycle_s_001709.png
+48045 0 bicycle_s_001348.png
+48089 1 minibike_s_002194.png
+48112 1 minibike_s_001079.png
+48198 0 bicycle_s_000017.png
+48220 1 minibike_s_001638.png
+48271 1 motorcycle_s_001587.png
+48295 1 motorcycle_s_000486.png
+48375 1 minibike_s_001880.png
+48546 1 dirt_bike_s_000003.png
+48553 0 bike_s_000336.png
+48575 1 minibike_s_002115.png
+48760 1 motorbike_s_000449.png
+48837 1 motorcycle_s_000304.png
+48887 1 motorcycle_s_000022.png
+48941 1 motorcycle_s_001623.png
+48958 1 motorbike_s_000223.png
+48980 1 motorcycle_s_000290.png
+49151 0 safety_bicycle_s_001327.png
+49172 0 bike_s_002288.png
+49176 1 minibike_s_000569.png
+49192 0 bike_s_002047.png
+49249 1 motorcycle_s_002031.png
+49452 1 bike_s_000062.png
+49485 0 cycle_s_000871.png
+49492 1 motorcycle_s_001778.png
+49578 0 velocipede_s_000010.png
+49588 1 motorcycle_s_001247.png
+49882 1 motorcycle_s_000724.png
+49962 0 velocipede_s_001637.png
+49985 1 motorcycle_s_000291.png