diff --git a/hyperparameter_tuning/tensorflow_mnist/hpo_tensorflow_mnist.ipynb b/hyperparameter_tuning/tensorflow_mnist/hpo_tensorflow_mnist.ipynb index 49ed204808..482046003b 100644 --- a/hyperparameter_tuning/tensorflow_mnist/hpo_tensorflow_mnist.ipynb +++ b/hyperparameter_tuning/tensorflow_mnist/hpo_tensorflow_mnist.ipynb @@ -176,7 +176,7 @@ "source": [ "estimator = TensorFlow(entry_point='mnist.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " training_steps=1000, \n", " evaluation_steps=100,\n", " train_instance_count=1,\n", diff --git a/sagemaker-python-sdk/tensorflow_abalone_age_predictor_using_keras/tensorflow_abalone_age_predictor_using_keras.ipynb b/sagemaker-python-sdk/tensorflow_abalone_age_predictor_using_keras/tensorflow_abalone_age_predictor_using_keras.ipynb index 7fe551c331..3f23264934 100644 --- a/sagemaker-python-sdk/tensorflow_abalone_age_predictor_using_keras/tensorflow_abalone_age_predictor_using_keras.ipynb +++ b/sagemaker-python-sdk/tensorflow_abalone_age_predictor_using_keras/tensorflow_abalone_age_predictor_using_keras.ipynb @@ -461,7 +461,7 @@ "\n", "abalone_estimator = TensorFlow(entry_point='abalone.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " training_steps= 100, \n", " evaluation_steps= 100,\n", " hyperparameters={'learning_rate': 0.001},\n", diff --git a/sagemaker-python-sdk/tensorflow_abalone_age_predictor_using_layers/tensorflow_abalone_age_predictor_using_layers.ipynb b/sagemaker-python-sdk/tensorflow_abalone_age_predictor_using_layers/tensorflow_abalone_age_predictor_using_layers.ipynb index 4b0c5ac589..4157da371d 100644 --- a/sagemaker-python-sdk/tensorflow_abalone_age_predictor_using_layers/tensorflow_abalone_age_predictor_using_layers.ipynb +++ b/sagemaker-python-sdk/tensorflow_abalone_age_predictor_using_layers/tensorflow_abalone_age_predictor_using_layers.ipynb @@ -506,7 +506,7 @@ "\n", "abalone_estimator = TensorFlow(entry_point='abalone.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " training_steps= 100, \n", " evaluation_steps= 100,\n", " hyperparameters={'learning_rate': 0.001},\n", diff --git a/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_batch_transform_mnist.ipynb b/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_batch_transform_mnist.ipynb index 4418abfeb1..4a046bcb3e 100644 --- a/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_batch_transform_mnist.ipynb +++ b/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_batch_transform_mnist.ipynb @@ -117,7 +117,7 @@ "\n", "mnist_estimator = TensorFlow(entry_point='mnist.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " training_steps=1000, \n", " evaluation_steps=100,\n", " train_instance_count=2,\n", @@ -233,11 +233,11 @@ "outputs": [], "source": [ "import json\n", - "from urllib.parse import urlparse\n", + "from six.moves.urllib import parse\n", "\n", "import boto3\n", "\n", - "parsed_url = urlparse(transformer.output_path)\n", + "parsed_url = parse.urlparse(transformer.output_path)\n", "bucket_name = parsed_url.netloc\n", "prefix = parsed_url.path[1:]\n", "\n", diff --git a/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_distributed_mnist.ipynb b/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_distributed_mnist.ipynb index 90285e4f7a..ec2f6c6a62 100644 --- a/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_distributed_mnist.ipynb +++ b/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_distributed_mnist.ipynb @@ -149,7 +149,7 @@ "\n", "mnist_estimator = TensorFlow(entry_point='mnist.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " training_steps=1000, \n", " evaluation_steps=100,\n", " train_instance_count=2,\n", diff --git a/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_local_mode_mnist.ipynb b/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_local_mode_mnist.ipynb index bf3be2b44d..66c50978e4 100644 --- a/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_local_mode_mnist.ipynb +++ b/sagemaker-python-sdk/tensorflow_distributed_mnist/tensorflow_local_mode_mnist.ipynb @@ -165,7 +165,7 @@ "\n", "mnist_estimator = TensorFlow(entry_point='mnist.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " training_steps=10, \n", " evaluation_steps=10,\n", " train_instance_count=2,\n", diff --git a/sagemaker-python-sdk/tensorflow_iris_dnn_classifier_using_estimators/tensorflow_iris_dnn_classifier_using_estimators.ipynb b/sagemaker-python-sdk/tensorflow_iris_dnn_classifier_using_estimators/tensorflow_iris_dnn_classifier_using_estimators.ipynb index 5b89429efe..b5f99c2fba 100644 --- a/sagemaker-python-sdk/tensorflow_iris_dnn_classifier_using_estimators/tensorflow_iris_dnn_classifier_using_estimators.ipynb +++ b/sagemaker-python-sdk/tensorflow_iris_dnn_classifier_using_estimators/tensorflow_iris_dnn_classifier_using_estimators.ipynb @@ -305,7 +305,7 @@ "\n", "iris_estimator = TensorFlow(entry_point='iris_dnn_classifier.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " output_path=model_artifacts_location,\n", " code_location=custom_code_upload_location,\n", " train_instance_count=1,\n", diff --git a/sagemaker-python-sdk/tensorflow_keras_cifar10/cifar10_cnn.py b/sagemaker-python-sdk/tensorflow_keras_cifar10/cifar10_cnn.py index 87e0f079be..9304971f1c 100644 --- a/sagemaker-python-sdk/tensorflow_keras_cifar10/cifar10_cnn.py +++ b/sagemaker-python-sdk/tensorflow_keras_cifar10/cifar10_cnn.py @@ -18,10 +18,10 @@ import os import tensorflow as tf -from tensorflow.python.keras.layers import InputLayer, Conv2D, Activation, MaxPooling2D, Dropout, Flatten, Dense +from tensorflow.python.keras.layers import Activation, Conv2D, Dense, Dropout, Flatten, MaxPooling2D from tensorflow.python.keras.models import Sequential -from tensorflow.python.keras.optimizers import RMSprop from tensorflow.python.saved_model.signature_constants import PREDICT_INPUTS +from tensorflow.python.training.rmsprop import RMSPropOptimizer HEIGHT = 32 WIDTH = 32 @@ -30,6 +30,7 @@ NUM_DATA_BATCHES = 5 NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN = 10000 * NUM_DATA_BATCHES BATCH_SIZE = 128 +INPUT_TENSOR_NAME = 'inputs_input' # needs to match the name of the first layer + "_input" def keras_model_fn(hyperparameters): @@ -44,10 +45,7 @@ def keras_model_fn(hyperparameters): """ model = Sequential() - # TensorFlow Serving default prediction input tensor name is PREDICT_INPUTS. - # We must conform to this naming scheme. - model.add(InputLayer(input_shape=(HEIGHT, WIDTH, DEPTH), name=PREDICT_INPUTS)) - model.add(Conv2D(32, (3, 3), padding='same')) + model.add(Conv2D(32, (3, 3), padding='same', name='inputs', input_shape=(HEIGHT, WIDTH, DEPTH))) model.add(Activation('relu')) model.add(Conv2D(32, (3, 3))) model.add(Activation('relu')) @@ -68,15 +66,13 @@ def keras_model_fn(hyperparameters): model.add(Dense(NUM_CLASSES)) model.add(Activation('softmax')) - _model = tf.keras.Model(inputs=model.input, outputs=model.output) + opt = RMSPropOptimizer(learning_rate=hyperparameters['learning_rate'], decay=hyperparameters['decay']) - opt = RMSprop(lr=hyperparameters['learning_rate'], decay=hyperparameters['decay']) - - _model.compile(loss='categorical_crossentropy', + model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) - return _model + return model def serving_input_fn(hyperparameters): @@ -147,7 +143,7 @@ def _input(mode, batch_size, data_dir): images, labels = iterator.get_next() # We must use the default input tensor name PREDICT_INPUTS - return {PREDICT_INPUTS: images}, labels + return {INPUT_TENSOR_NAME: images}, labels def _train_preprocess_fn(image, label): diff --git a/sagemaker-python-sdk/tensorflow_keras_cifar10/tensorflow_keras_CIFAR10.ipynb b/sagemaker-python-sdk/tensorflow_keras_cifar10/tensorflow_keras_CIFAR10.ipynb index 2cd6346401..571ea488af 100644 --- a/sagemaker-python-sdk/tensorflow_keras_cifar10/tensorflow_keras_CIFAR10.ipynb +++ b/sagemaker-python-sdk/tensorflow_keras_cifar10/tensorflow_keras_CIFAR10.ipynb @@ -123,10 +123,18 @@ "outputs": [], "source": [ "def keras_model_fn(hyperparameters):\n", + " \"\"\"keras_model_fn receives hyperparameters from the training job and returns a compiled keras model.\n", + " The model will be transformed into a TensorFlow Estimator before training and it will be saved in a \n", + " TensorFlow Serving SavedModel at the end of training.\n", + "\n", + " Args:\n", + " hyperparameters: The hyperparameters passed to the SageMaker TrainingJob that runs your TensorFlow \n", + " training script.\n", + " Returns: A compiled Keras model\n", + " \"\"\"\n", " model = Sequential()\n", "\n", - " model.add(InputLayer(input_shape=(HEIGHT, WIDTH, DEPTH), name=PREDICT_INPUTS))\n", - " model.add(Conv2D(32, (3, 3), padding='same'))\n", + " model.add(Conv2D(32, (3, 3), padding='same', name='inputs', input_shape=(HEIGHT, WIDTH, DEPTH)))\n", " model.add(Activation('relu'))\n", " model.add(Conv2D(32, (3, 3)))\n", " model.add(Activation('relu'))\n", @@ -147,15 +155,13 @@ " model.add(Dense(NUM_CLASSES))\n", " model.add(Activation('softmax'))\n", " \n", - " _model = tf.keras.Model(inputs=model.input, outputs=model.output)\n", - "\n", - " opt = RMSprop(lr=hyperparameters['learning_rate'], decay=hyperparameters['decay'])\n", + " opt = RMSPropOptimizer(learning_rate=hyperparameters['learning_rate'], decay=hyperparameters['decay'])\n", "\n", - " _model.compile(loss='categorical_crossentropy',\n", + " model.compile(loss='categorical_crossentropy',\n", " optimizer=opt,\n", " metrics=['accuracy'])\n", "\n", - " return _model" + " return model" ] }, { @@ -216,7 +222,7 @@ "\n", "estimator = TensorFlow(entry_point='cifar10_cnn.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " hyperparameters={'learning_rate': 1e-4, 'decay':1e-6},\n", " training_steps=1000, evaluation_steps=100,\n", " train_instance_count=1, train_instance_type='ml.c4.xlarge')\n", diff --git a/sagemaker-python-sdk/tensorflow_pipemode_example/tensorflow_pipemode_example.ipynb b/sagemaker-python-sdk/tensorflow_pipemode_example/tensorflow_pipemode_example.ipynb index d7d9a88d7a..1d68abb1cb 100644 --- a/sagemaker-python-sdk/tensorflow_pipemode_example/tensorflow_pipemode_example.ipynb +++ b/sagemaker-python-sdk/tensorflow_pipemode_example/tensorflow_pipemode_example.ipynb @@ -139,7 +139,7 @@ "\n", "tensorflow = TensorFlow(entry_point='pipemode.py',\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " input_mode='Pipe',\n", " output_path=model_artifacts_location,\n", " code_location=custom_code_upload_location,\n", diff --git a/sagemaker-python-sdk/tensorflow_resnet_cifar10_with_tensorboard/tensorflow_resnet_cifar10_with_tensorboard.ipynb b/sagemaker-python-sdk/tensorflow_resnet_cifar10_with_tensorboard/tensorflow_resnet_cifar10_with_tensorboard.ipynb index 62bb5ceeef..835d7f6faf 100644 --- a/sagemaker-python-sdk/tensorflow_resnet_cifar10_with_tensorboard/tensorflow_resnet_cifar10_with_tensorboard.ipynb +++ b/sagemaker-python-sdk/tensorflow_resnet_cifar10_with_tensorboard/tensorflow_resnet_cifar10_with_tensorboard.ipynb @@ -118,7 +118,7 @@ "estimator = TensorFlow(entry_point='resnet_cifar_10.py',\n", " source_dir=source_dir,\n", " role=role,\n", - " framework_version='1.10.0',\n", + " framework_version='1.11.0',\n", " hyperparameters={'throttle_secs': 30},\n", " training_steps=1000, evaluation_steps=100,\n", " train_instance_count=2, train_instance_type='ml.c4.xlarge', \n",