From bc3a446c51d4054dc9fe6b04315290a8efe13483 Mon Sep 17 00:00:00 2001 From: Sebastian Raschka Date: Mon, 28 Oct 2019 22:05:06 -0500 Subject: [PATCH] some progress --- .gitignore | 3 + ch14/ch14-notebook.ipynb | 1046 +++++++++++++++++++++++++++++++------- 2 files changed, 872 insertions(+), 177 deletions(-) diff --git a/.gitignore b/.gitignore index 8aa0cb9b..90f99d48 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Ch14 data files +ch14/models/ + # Ch13 data files ch13/iris-classifier.h5 diff --git a/ch14/ch14-notebook.ipynb b/ch14/ch14-notebook.ipynb index 60e36b51..26e91815 100644 --- a/ch14/ch14-notebook.ipynb +++ b/ch14/ch14-notebook.ipynb @@ -275,11 +275,10 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ + "```python\n", "## we expect this to result in an error\n", "tf.print('Rank 2 Inputs:', compute_z([[1], [2]], [[2], [4]], [[3], [6]]))\n", "\n", @@ -289,7 +288,8 @@ "#inputs (([[1], [2]], [[2], [4]], [[3], [6]])), input_signature \n", "#((TensorSpec(shape=(None,), dtype=tf.int32, name=None), \n", "# TensorSpec(shape=(None,), dtype=tf.int32, name=None), \n", - "# TensorSpec(shape=(None,), dtype=tf.int32, name=None)))" + "# TensorSpec(shape=(None,), dtype=tf.int32, name=None)))\n", + "```" ] }, { @@ -482,11 +482,11 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ + "```python\n", + "\n", "## this will produce an error\n", "## ==> you cannot create a varibale inside a\n", "## decorated function\n", @@ -498,12 +498,14 @@ "f([1])\n", "\n", "## ==> results in error\n", - "## ValueError: tf.function-decorated function tried to create variables on non-first call." + "## ValueError: tf.function-decorated function tried to create variables on non-first call.\n", + "\n", + "```" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -546,7 +548,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -579,7 +581,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -606,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -630,7 +632,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -657,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -690,7 +692,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -721,7 +723,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -755,7 +757,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -788,7 +790,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -845,7 +847,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -866,7 +868,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -907,7 +909,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -938,7 +940,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -949,7 +951,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -960,7 +962,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -1006,7 +1008,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -1058,7 +1060,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -1108,7 +1110,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -1158,7 +1160,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -1225,7 +1227,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -1251,39 +1253,16 @@ ] }, { - "ename": "TypeError", - "evalue": "'list' object is not callable", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 29\u001b[0m hist = model.fit(x_train, y_train, \n\u001b[1;32m 30\u001b[0m \u001b[0mvalidation_data\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_valid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_valid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 31\u001b[0;31m epochs=200, batch_size=2, verbose=0)\n\u001b[0m\u001b[1;32m 32\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0;31m## Plotting\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)\u001b[0m\n\u001b[1;32m 726\u001b[0m \u001b[0mmax_queue_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmax_queue_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 727\u001b[0m \u001b[0mworkers\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mworkers\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 728\u001b[0;31m use_multiprocessing=use_multiprocessing)\n\u001b[0m\u001b[1;32m 729\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 730\u001b[0m def evaluate(self,\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mModeKeys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTRAIN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 323\u001b[0m \u001b[0mtraining_context\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining_context\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 324\u001b[0;31m total_epochs=epochs)\n\u001b[0m\u001b[1;32m 325\u001b[0m \u001b[0mcbks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmake_logs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepoch_logs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining_result\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mModeKeys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTRAIN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 326\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py\u001b[0m in \u001b[0;36mrun_one_epoch\u001b[0;34m(model, iterator, execution_function, dataset_size, batch_size, strategy, steps_per_epoch, num_samples, mode, training_context, total_epochs)\u001b[0m\n\u001b[1;32m 121\u001b[0m step=step, mode=mode, size=current_batch_size) as batch_logs:\n\u001b[1;32m 122\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 123\u001b[0;31m \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexecution_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 124\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mStopIteration\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mOutOfRangeError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[0;31m# TODO(kaftan): File bug about tf function and errors.OutOfRangeError?\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2_utils.py\u001b[0m in \u001b[0;36mexecution_function\u001b[0;34m(input_fn)\u001b[0m\n\u001b[1;32m 84\u001b[0m \u001b[0;31m# `numpy` translates Tensors to values in Eager mode.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 85\u001b[0m return nest.map_structure(_non_none_constant_value,\n\u001b[0;32m---> 86\u001b[0;31m distributed_function(input_fn))\n\u001b[0m\u001b[1;32m 87\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 88\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexecution_function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/eager/def_function.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 455\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 456\u001b[0m \u001b[0mtracing_count\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tracing_count\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 457\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 458\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtracing_count\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tracing_count\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 459\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_counter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcalled_without_tracing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/eager/def_function.py\u001b[0m in \u001b[0;36m_call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 501\u001b[0m \u001b[0;31m# This is the first call of __call__, so we have to initialize.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 502\u001b[0m \u001b[0minitializer_map\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobject_identity\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mObjectIdentityDictionary\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 503\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_initialize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madd_initializers_to\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minitializer_map\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 504\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 505\u001b[0m \u001b[0;31m# At this point we know that the initialization is complete (or less\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/eager/def_function.py\u001b[0m in \u001b[0;36m_initialize\u001b[0;34m(self, args, kwds, add_initializers_to)\u001b[0m\n\u001b[1;32m 406\u001b[0m self._concrete_stateful_fn = (\n\u001b[1;32m 407\u001b[0m self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access\n\u001b[0;32m--> 408\u001b[0;31m *args, **kwds))\n\u001b[0m\u001b[1;32m 409\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minvalid_creator_scope\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0munused_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0munused_kwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py\u001b[0m in \u001b[0;36m_get_concrete_function_internal_garbage_collected\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1846\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minput_signature\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1847\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1848\u001b[0;31m \u001b[0mgraph_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_define_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1849\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mgraph_function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1850\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py\u001b[0m in \u001b[0;36m_maybe_define_function\u001b[0;34m(self, args, kwargs)\u001b[0m\n\u001b[1;32m 2148\u001b[0m \u001b[0mgraph_function\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_function_cache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprimary\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcache_key\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2149\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgraph_function\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2150\u001b[0;31m \u001b[0mgraph_function\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_create_graph_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2151\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_function_cache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprimary\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcache_key\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgraph_function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2152\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mgraph_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py\u001b[0m in \u001b[0;36m_create_graph_function\u001b[0;34m(self, args, kwargs, override_flat_arg_shapes)\u001b[0m\n\u001b[1;32m 2039\u001b[0m \u001b[0marg_names\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0marg_names\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2040\u001b[0m \u001b[0moverride_flat_arg_shapes\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moverride_flat_arg_shapes\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2041\u001b[0;31m capture_by_value=self._capture_by_value),\n\u001b[0m\u001b[1;32m 2042\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_function_attributes\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2043\u001b[0m \u001b[0;31m# Tell the ConcreteFunction to clean up its graph once it goes out of\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/func_graph.py\u001b[0m in \u001b[0;36mfunc_graph_from_py_func\u001b[0;34m(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes)\u001b[0m\n\u001b[1;32m 913\u001b[0m converted_func)\n\u001b[1;32m 914\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 915\u001b[0;31m \u001b[0mfunc_outputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpython_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mfunc_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfunc_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 916\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 917\u001b[0m \u001b[0;31m# invariant: `func_outputs` contains only Tensors, CompositeTensors,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/eager/def_function.py\u001b[0m in \u001b[0;36mwrapped_fn\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m 356\u001b[0m \u001b[0;31m# __wrapped__ allows AutoGraph to swap in a converted function. We give\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 357\u001b[0m \u001b[0;31m# the function a weak reference to itself to avoid a reference cycle.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 358\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mweak_wrapped_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__wrapped__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 359\u001b[0m \u001b[0mweak_wrapped_fn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mweakref\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mref\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwrapped_fn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 360\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2_utils.py\u001b[0m in \u001b[0;36mdistributed_function\u001b[0;34m(input_iterator)\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0mstrategy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdistribution_strategy_context\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_strategy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 72\u001b[0m outputs = strategy.experimental_run_v2(\n\u001b[0;32m---> 73\u001b[0;31m per_replica_function, args=(model, x, y, sample_weights))\n\u001b[0m\u001b[1;32m 74\u001b[0m \u001b[0;31m# Out of PerReplica outputs reduce or pick values to return.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 75\u001b[0m all_outputs = dist_utils.unwrap_output_dict(\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/distribute/distribute_lib.py\u001b[0m in \u001b[0;36mexperimental_run_v2\u001b[0;34m(self, fn, args, kwargs)\u001b[0m\n\u001b[1;32m 758\u001b[0m fn = autograph.tf_convert(fn, ag_ctx.control_status_ctx(),\n\u001b[1;32m 759\u001b[0m convert_by_default=False)\n\u001b[0;32m--> 760\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_extended\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcall_for_each_replica\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 761\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 762\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreduce_op\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/distribute/distribute_lib.py\u001b[0m in \u001b[0;36mcall_for_each_replica\u001b[0;34m(self, fn, args, kwargs)\u001b[0m\n\u001b[1;32m 1785\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1786\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_container_strategy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscope\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1787\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_for_each_replica\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1788\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1789\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_for_each_replica\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/distribute/distribute_lib.py\u001b[0m in \u001b[0;36m_call_for_each_replica\u001b[0;34m(self, fn, args, kwargs)\u001b[0m\n\u001b[1;32m 2130\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_container_strategy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2131\u001b[0m replica_id_in_sync_group=constant_op.constant(0, dtypes.int32)):\n\u001b[0;32m-> 2132\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2133\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2134\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_reduce_to\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreduce_op\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdestinations\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/autograph/impl/api.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mag_ctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mControlStatusCtx\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstatus\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mag_ctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mStatus\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDISABLED\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 292\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 293\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 294\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mismethod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2_utils.py\u001b[0m in \u001b[0;36mtrain_on_batch\u001b[0;34m(model, x, y, sample_weight, class_weight, reset_metrics)\u001b[0m\n\u001b[1;32m 262\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 263\u001b[0m \u001b[0msample_weights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msample_weights\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 264\u001b[0;31m output_loss_metrics=model._output_loss_metrics)\n\u001b[0m\u001b[1;32m 265\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreset_metrics\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_eager.py\u001b[0m in \u001b[0;36mtrain_on_batch\u001b[0;34m(model, inputs, targets, sample_weights, output_loss_metrics)\u001b[0m\n\u001b[1;32m 309\u001b[0m \u001b[0msample_weights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msample_weights\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 310\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 311\u001b[0;31m output_loss_metrics=output_loss_metrics))\n\u001b[0m\u001b[1;32m 312\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mouts\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 313\u001b[0m \u001b[0mouts\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mouts\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_eager.py\u001b[0m in \u001b[0;36m_process_single_batch\u001b[0;34m(model, inputs, targets, output_loss_metrics, sample_weights, training)\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0moutput_loss_metrics\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moutput_loss_metrics\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[0msample_weights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msample_weights\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 252\u001b[0;31m training=training))\n\u001b[0m\u001b[1;32m 253\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtotal_loss\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 254\u001b[0m raise ValueError('The model cannot be run '\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_eager.py\u001b[0m in \u001b[0;36m_model_loss\u001b[0;34m(model, inputs, targets, output_loss_metrics, sample_weights, training)\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[0minputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap_structure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconvert_to_tensor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 127\u001b[0;31m \u001b[0mouts\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 128\u001b[0m \u001b[0mouts\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflatten\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mouts\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 129\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, inputs, *args, **kwargs)\u001b[0m\n\u001b[1;32m 845\u001b[0m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbase_layer_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmark_as_return\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0macd\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 846\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 847\u001b[0;31m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcall_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcast_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 848\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 849\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mOperatorNotAllowedInGraphError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/autograph/impl/api.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mag_ctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mControlStatusCtx\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstatus\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mag_ctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mStatus\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDISABLED\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 292\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 293\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 294\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mismethod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhidden_2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhidden_3\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_seed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: 'list' object is not callable" - ] + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ @@ -1293,13 +1272,13 @@ " self.hidden_1 = tf.keras.layers.Dense(units=4, activation='relu')\n", " self.hidden_2 = tf.keras.layers.Dense(units=4, activation='relu')\n", " self.hidden_3 = tf.keras.layers.Dense(units=4, activation='relu')\n", - " self.outputs = tf.keras.layers.Dense(units=1, activation='sigmoid')\n", + " self.output_layer = tf.keras.layers.Dense(units=1, activation='sigmoid')\n", " \n", " def call(self, inputs):\n", " h = self.hidden_1(inputs)\n", " h = self.hidden_2(h)\n", " h = self.hidden_3(h)\n", - " return self.outputs(h)\n", + " return self.output_layer(h)\n", " \n", "tf.random.set_seed(1)\n", "\n", @@ -1345,15 +1324,6 @@ "plt.show()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.get_config()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1370,9 +1340,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0 0.00821428 0 0]]\n", + "[[0 0.0108502861 0 0]]\n" + ] + } + ], "source": [ "class NoisyLinear(tf.keras.layers.Layer):\n", " def __init__(self, output_dim, noise_stddev=0.1, **kwargs):\n", @@ -1429,9 +1408,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential_4\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "noisy_linear_1 (NoisyLinear) multiple 12 \n", + "_________________________________________________________________\n", + "dense_17 (Dense) multiple 20 \n", + "_________________________________________________________________\n", + "dense_18 (Dense) multiple 20 \n", + "_________________________________________________________________\n", + "dense_19 (Dense) multiple 5 \n", + "=================================================================\n", + "Total params: 57\n", + "Trainable params: 57\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "tf.random.set_seed(1)\n", "\n", @@ -1508,23 +1522,131 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ - "import tensorflow as tf\n", - "import pandas as pd\n", - "import numpy as np\n", - "\n", "tf.random.set_seed(1)\n", "np.random.seed(1)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
MPGCylindersDisplacementHorsepowerWeightAccelerationModelYearOrigin
39327.04140.086.02790.015.6821
39444.0497.052.02130.024.6822
39532.04135.084.02295.011.6821
39628.04120.079.02625.018.6821
39731.04119.082.02720.019.4821
\n", + "
" + ], + "text/plain": [ + " MPG Cylinders Displacement Horsepower Weight Acceleration \\\n", + "393 27.0 4 140.0 86.0 2790.0 15.6 \n", + "394 44.0 4 97.0 52.0 2130.0 24.6 \n", + "395 32.0 4 135.0 84.0 2295.0 11.6 \n", + "396 28.0 4 120.0 79.0 2625.0 18.6 \n", + "397 31.0 4 119.0 82.0 2720.0 19.4 \n", + "\n", + " ModelYear Origin \n", + "393 82 1 \n", + "394 82 2 \n", + "395 82 1 \n", + "396 82 1 \n", + "397 82 1 " + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "dataset_path = tf.keras.utils.get_file(\"auto-mpg.data\", \n", " (\"http://archive.ics.uci.edu/ml/machine-learning-databases\"\n", @@ -1542,41 +1664,427 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MPG 0\n", + "Cylinders 0\n", + "Displacement 0\n", + "Horsepower 6\n", + "Weight 0\n", + "Acceleration 0\n", + "ModelYear 0\n", + "Origin 0\n", + "dtype: int64\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
MPGCylindersDisplacementHorsepowerWeightAccelerationModelYearOrigin
38727.04140.086.02790.015.6821
38844.0497.052.02130.024.6822
38932.04135.084.02295.011.6821
39028.04120.079.02625.018.6821
39131.04119.082.02720.019.4821
\n", + "
" + ], + "text/plain": [ + " MPG Cylinders Displacement Horsepower Weight Acceleration \\\n", + "387 27.0 4 140.0 86.0 2790.0 15.6 \n", + "388 44.0 4 97.0 52.0 2130.0 24.6 \n", + "389 32.0 4 135.0 84.0 2295.0 11.6 \n", + "390 28.0 4 120.0 79.0 2625.0 18.6 \n", + "391 31.0 4 119.0 82.0 2720.0 19.4 \n", + "\n", + " ModelYear Origin \n", + "387 82 1 \n", + "388 82 2 \n", + "389 82 1 \n", + "390 82 1 \n", + "391 82 1 " + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "print(df.isna().sum())\n", "\n", "df = df.dropna()\n", - "\n", "df = df.reset_index(drop=True)\n", - "\n", "df.tail()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countmeanstdmin25%50%75%max
MPG313.023.4041537.6669099.017.523.029.046.6
Cylinders313.05.4025561.7015063.04.04.08.08.0
Displacement313.0189.512780102.67564668.0104.0140.0260.0455.0
Horsepower313.0102.92971237.91904646.075.092.0120.0230.0
Weight313.02961.198083848.6021461613.02219.02755.03574.05140.0
Acceleration313.015.7044732.7253998.514.015.517.324.8
ModelYear313.075.9297123.67530570.073.076.079.082.0
Origin313.01.5910540.8079231.01.01.02.03.0
\n", + "
" + ], + "text/plain": [ + " count mean std min 25% 50% 75% \\\n", + "MPG 313.0 23.404153 7.666909 9.0 17.5 23.0 29.0 \n", + "Cylinders 313.0 5.402556 1.701506 3.0 4.0 4.0 8.0 \n", + "Displacement 313.0 189.512780 102.675646 68.0 104.0 140.0 260.0 \n", + "Horsepower 313.0 102.929712 37.919046 46.0 75.0 92.0 120.0 \n", + "Weight 313.0 2961.198083 848.602146 1613.0 2219.0 2755.0 3574.0 \n", + "Acceleration 313.0 15.704473 2.725399 8.5 14.0 15.5 17.3 \n", + "ModelYear 313.0 75.929712 3.675305 70.0 73.0 76.0 79.0 \n", + "Origin 313.0 1.591054 0.807923 1.0 1.0 1.0 2.0 \n", + "\n", + " max \n", + "MPG 46.6 \n", + "Cylinders 8.0 \n", + "Displacement 455.0 \n", + "Horsepower 230.0 \n", + "Weight 5140.0 \n", + "Acceleration 24.8 \n", + "ModelYear 82.0 \n", + "Origin 3.0 " + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import sklearn\n", "import sklearn.model_selection\n", "\n", - "df_train, df_test = sklearn.model_selection.train_test_split(df, train_size=0.8)\n", - "\n", "\n", + "df_train, df_test = sklearn.model_selection.train_test_split(df, train_size=0.8)\n", "train_stats = df_train.describe().transpose()\n", - "\n", "train_stats" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
MPGCylindersDisplacementHorsepowerWeightAccelerationModelYearOrigin
20328.0-0.824303-0.901020-0.736562-0.9500310.255202763
25519.40.3511270.413800-0.3409820.2931900.548737781
7213.01.5265561.1442560.7138971.339617-0.625403721
23530.5-0.824303-0.891280-1.053025-1.0725850.475353771
3714.01.5265561.5630511.6369161.470420-1.359240711
\n", + "
" + ], + "text/plain": [ + " MPG Cylinders Displacement Horsepower Weight Acceleration \\\n", + "203 28.0 -0.824303 -0.901020 -0.736562 -0.950031 0.255202 \n", + "255 19.4 0.351127 0.413800 -0.340982 0.293190 0.548737 \n", + "72 13.0 1.526556 1.144256 0.713897 1.339617 -0.625403 \n", + "235 30.5 -0.824303 -0.891280 -1.053025 -1.072585 0.475353 \n", + "37 14.0 1.526556 1.563051 1.636916 1.470420 -1.359240 \n", + "\n", + " ModelYear Origin \n", + "203 76 3 \n", + "255 78 1 \n", + "72 72 1 \n", + "235 77 1 \n", + "37 71 1 " + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "numeric_column_names = ['Cylinders', 'Displacement', 'Horsepower', 'Weight', 'Acceleration']\n", "\n", @@ -1600,11 +2108,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[NumericColumn(key='Cylinders', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),\n", + " NumericColumn(key='Displacement', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),\n", + " NumericColumn(key='Horsepower', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),\n", + " NumericColumn(key='Weight', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),\n", + " NumericColumn(key='Acceleration', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None)]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "\n", "numeric_features = []\n", "\n", "for col_name in numeric_column_names:\n", @@ -1615,9 +2137,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[BucketizedColumn(source_column=NumericColumn(key='ModelYear', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None), boundaries=(73, 76, 79))]\n" + ] + } + ], "source": [ "feature_year = tf.feature_column.numeric_column(key=\"ModelYear\")\n", "\n", @@ -1632,16 +2162,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='Origin', vocabulary_list=(1, 2, 3), dtype=tf.int64, default_value=-1, num_oov_buckets=0))]\n" + ] + } + ], "source": [ - "\n", "feature_origin = tf.feature_column.categorical_column_with_vocabulary_list(\n", " key='Origin',\n", " vocabulary_list=[1, 2, 3])\n", "\n", - "\n", "categorical_indicator_features = []\n", "categorical_indicator_features.append(tf.feature_column.indicator_column(feature_origin))\n", "\n", @@ -1657,30 +2193,47 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Keys: dict_keys(['Cylinders', 'Displacement', 'Horsepower', 'Weight', 'Acceleration', 'ModelYear', 'Origin'])\n", + "Batch Model Years: tf.Tensor([82 78 76 72 78 73 70 78], shape=(8,), dtype=int32)\n" + ] + } + ], "source": [ "def train_input_fn(df_train, batch_size=8):\n", " df = df_train.copy()\n", " train_x, train_y = df, df.pop('MPG')\n", " dataset = tf.data.Dataset.from_tensor_slices((dict(train_x), train_y))\n", "\n", - " # Shuffle, repeat, and batch the examples.\n", + " # shuffle, repeat, and batch the examples\n", " return dataset.shuffle(1000).repeat().batch(batch_size)\n", "\n", - "## inspection:\n", + "## inspection\n", "ds = train_input_fn(df_train_norm)\n", "batch = next(iter(ds))\n", - "print('Keys :: ', batch[0].keys())\n", - "print('Batch Model Years :: ', batch[0]['ModelYear'])" + "print('Keys:', batch[0].keys())\n", + "print('Batch Model Years:', batch[0]['ModelYear'])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[NumericColumn(key='Cylinders', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None), NumericColumn(key='Displacement', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None), NumericColumn(key='Horsepower', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None), NumericColumn(key='Weight', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None), NumericColumn(key='Acceleration', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None), BucketizedColumn(source_column=NumericColumn(key='ModelYear', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None), boundaries=(73, 76, 79)), IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='Origin', vocabulary_list=(1, 2, 3), dtype=tf.int64, default_value=-1, num_oov_buckets=0))]\n" + ] + } + ], "source": [ "all_feature_columns = (numeric_features + \n", " bucketized_features + \n", @@ -1691,38 +2244,95 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ - "\n", "regressor = tf.estimator.DNNRegressor(\n", " feature_columns=all_feature_columns,\n", " hidden_units=[32, 10],\n", - " model_dir='models/autompg-dnnregressor/')\n" + " model_dir='models/autompg-dnnregressor/')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Logging before flag parsing goes to stderr.\n", + "W1028 21:55:19.801316 140518915589952 deprecation.py:506] From /home/raschka/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "If using Keras pass *_constraint arguments to layers.\n", + "W1028 21:55:19.802436 140518915589952 deprecation.py:323] From /home/raschka/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.\n", + "W1028 21:55:19.848029 140518915589952 base_layer.py:1814] Layer dnn is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2. The layer has dtype float32 because it's dtype defaults to floatx.\n", + "\n", + "If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.\n", + "\n", + "To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Steps: 40000\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W1028 21:55:20.137931 140518915589952 deprecation.py:323] From /home/raschka/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/feature_column/feature_column_v2.py:4276: IndicatorColumn._variable_shape (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "The old _FeatureColumn APIs are being deprecated. Please use the new FeatureColumn APIs instead.\n", + "W1028 21:55:20.138836 140518915589952 deprecation.py:323] From /home/raschka/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/feature_column/feature_column_v2.py:4331: VocabularyListCategoricalColumn._num_buckets (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "The old _FeatureColumn APIs are being deprecated. Please use the new FeatureColumn APIs instead.\n", + "W1028 21:55:20.356903 140518915589952 deprecation.py:323] From /home/raschka/miniconda3/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/head/regression_head.py:156: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use `tf.cast` instead.\n", + "W1028 21:55:20.426345 140518915589952 deprecation.py:506] From /home/raschka/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/optimizer_v2/adagrad.py:108: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Call initializer instance with the dtype argument instead of passing it to the constructor\n", + "W1028 21:55:20.734878 140518915589952 deprecation.py:323] From /home/raschka/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/training/saver.py:1069: get_checkpoint_mtimes (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use standard file utilities to get mtimes.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "EPOCHS = 1000\n", "BATCH_SIZE = 8\n", "total_steps = EPOCHS * int(np.ceil(len(df_train) / BATCH_SIZE))\n", - "print('Training Steps: ', total_steps)\n", + "print('Training Steps:', total_steps)\n", "\n", "regressor.train(\n", " input_fn=lambda:train_input_fn(df_train_norm, batch_size=BATCH_SIZE),\n", - " steps=total_steps)\n" + " steps=total_steps)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ @@ -1735,9 +2345,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W1028 21:57:22.122777 140518915589952 base_layer.py:1814] Layer dnn is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2. The layer has dtype float32 because it's dtype defaults to floatx.\n", + "\n", + "If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.\n", + "\n", + "To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "average_loss 9.862378120422363\n", + "label/mean 23.611391067504883\n", + "loss 9.785608291625977\n", + "prediction/mean 22.654829025268555\n", + "global_step 120000\n", + "Average-Loss 9.8624\n" + ] + } + ], "source": [ "def eval_input_fn(df_test, batch_size=8):\n", " df = df_test.copy()\n", @@ -1757,12 +2392,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W1028 21:57:23.219257 140518915589952 base_layer.py:1814] Layer dnn is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2. The layer has dtype float32 because it's dtype defaults to floatx.\n", + "\n", + "If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.\n", + "\n", + "To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'predictions': array([22.410456], dtype=float32)}\n" + ] + } + ], "source": [ - "\n", - "\n", "pred_res = regressor.predict(input_fn=lambda: eval_input_fn(df_test_norm, batch_size=8))\n", "\n", "print(next(iter(pred_res)))" @@ -1777,11 +2430,49 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W1028 21:57:23.698664 140518915589952 estimator.py:1821] Using temporary folder as model directory: /tmp/tmpkv7xvqim\n", + "W1028 21:57:23.790039 140518915589952 deprecation.py:323] From /home/raschka/miniconda3/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/canned/boosted_trees.py:214: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use `tf.cast` instead.\n", + "W1028 21:57:24.227786 140518915589952 meta_graph.py:448] Issue encountered when serializing resources.\n", + "Type is unsupported, or the types of the items don't match field type in CollectionDef. Note this is a warning and probably safe to ignore.\n", + "'_Resource' object has no attribute 'name'\n", + "W1028 21:57:24.690357 140518915589952 meta_graph.py:448] Issue encountered when serializing resources.\n", + "Type is unsupported, or the types of the items don't match field type in CollectionDef. Note this is a warning and probably safe to ignore.\n", + "'_Resource' object has no attribute 'name'\n", + "W1028 21:57:24.782712 140518915589952 meta_graph.py:448] Issue encountered when serializing resources.\n", + "Type is unsupported, or the types of the items don't match field type in CollectionDef. Note this is a warning and probably safe to ignore.\n", + "'_Resource' object has no attribute 'name'\n", + "W1028 21:57:25.210658 140518915589952 basic_session_run_hooks.py:724] It seems that global step (tf.train.get_global_step) has not been increased. Current value (could be stable): 0 vs previous value: 0. You could increase the global step by passing tf.train.get_global_step() to Optimizer.apply_gradients or Optimizer.minimize.\n", + "W1028 21:57:25.215990 140518915589952 basic_session_run_hooks.py:724] It seems that global step (tf.train.get_global_step) has not been increased. Current value (could be stable): 0 vs previous value: 0. You could increase the global step by passing tf.train.get_global_step() to Optimizer.apply_gradients or Optimizer.minimize.\n", + "W1028 21:57:25.220885 140518915589952 basic_session_run_hooks.py:724] It seems that global step (tf.train.get_global_step) has not been increased. Current value (could be stable): 0 vs previous value: 0. You could increase the global step by passing tf.train.get_global_step() to Optimizer.apply_gradients or Optimizer.minimize.\n", + "W1028 21:57:25.226009 140518915589952 basic_session_run_hooks.py:724] It seems that global step (tf.train.get_global_step) has not been increased. Current value (could be stable): 0 vs previous value: 0. You could increase the global step by passing tf.train.get_global_step() to Optimizer.apply_gradients or Optimizer.minimize.\n", + "W1028 21:57:25.231439 140518915589952 basic_session_run_hooks.py:724] It seems that global step (tf.train.get_global_step) has not been increased. Current value (could be stable): 0 vs previous value: 0. You could increase the global step by passing tf.train.get_global_step() to Optimizer.apply_gradients or Optimizer.minimize.\n", + "W1028 21:59:39.779802 140518915589952 meta_graph.py:448] Issue encountered when serializing resources.\n", + "Type is unsupported, or the types of the items don't match field type in CollectionDef. Note this is a warning and probably safe to ignore.\n", + "'_Resource' object has no attribute 'name'\n", + "W1028 21:59:40.567891 140518915589952 meta_graph.py:448] Issue encountered when serializing resources.\n", + "Type is unsupported, or the types of the items don't match field type in CollectionDef. Note this is a warning and probably safe to ignore.\n", + "'_Resource' object has no attribute 'name'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'average_loss': 13.779975, 'label/mean': 23.611391, 'loss': 13.623233, 'prediction/mean': 22.544218, 'global_step': 24000}\n", + "Average-Loss 13.7800\n" + ] + } + ], "source": [ - "\n", "boosted_tree = tf.estimator.BoostedTreesRegressor(\n", " feature_columns=all_feature_columns,\n", " n_batches_per_layer=20,\n", @@ -1807,18 +2498,7 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "import tensorflow_datasets as tfds\n", - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ @@ -1830,7 +2510,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ @@ -1864,7 +2544,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -1875,9 +2555,50 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "metadata": {}, "outputs": [], + "source": [ + "import os\n", + "\n", + "if not os.path.exists('models'):\n", + " os.mkdir('models')\n", + "\n", + "if not os.path.exists(os.path.join('models', 'mnist-dnn')):\n", + " os.mkdir(os.path.join('models', 'mnist-dnn')) " + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "ename": "RuntimeError", + "evalue": "Graph is finalized and cannot be modified.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mhidden_units\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m32\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m16\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mn_classes\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m model_dir='models/mnist-dnn/')\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/canned/dnn.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, hidden_units, feature_columns, model_dir, n_classes, weight_column, label_vocabulary, optimizer, activation_fn, dropout, config, warm_start_from, loss_reduction, batch_norm)\u001b[0m\n\u001b[1;32m 747\u001b[0m \u001b[0mn_classes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight_column\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mweight_column\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 748\u001b[0m \u001b[0mlabel_vocabulary\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlabel_vocabulary\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 749\u001b[0;31m loss_reduction=loss_reduction)\n\u001b[0m\u001b[1;32m 750\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 751\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_model_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfeatures\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/head/head_utils.py\u001b[0m in \u001b[0;36mbinary_or_multi_class_head\u001b[0;34m(n_classes, weight_column, label_vocabulary, loss_reduction)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0mn_classes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight_column\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mweight_column\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0mlabel_vocabulary\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlabel_vocabulary\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 64\u001b[0;31m loss_reduction=loss_reduction)\n\u001b[0m\u001b[1;32m 65\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mhead\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/head/multi_class_head.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, n_classes, weight_column, label_vocabulary, loss_reduction, loss_fn, name)\u001b[0m\n\u001b[1;32m 137\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mloss_fn\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0mbase_head\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidate_loss_fn_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss_fn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 139\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_n_classes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbase_head\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidate_n_classes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_classes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 140\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_weight_column\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mweight_column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_label_vocabulary\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlabel_vocabulary\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/head/base_head.py\u001b[0m in \u001b[0;36mvalidate_n_classes\u001b[0;34m(n_classes)\u001b[0m\n\u001b[1;32m 655\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'n_classes must be > 2: %s.'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mn_classes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 656\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 657\u001b[0;31m \u001b[0mn_classes_as_tensor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconvert_to_tensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_classes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 658\u001b[0m assert_n_classes = check_ops.assert_greater(\n\u001b[1;32m 659\u001b[0m n_classes_as_tensor, 2, message='n_classes must be greater than 2')\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36mconvert_to_tensor\u001b[0;34m(value, dtype, name, preferred_dtype, dtype_hint)\u001b[0m\n\u001b[1;32m 1182\u001b[0m preferred_dtype = deprecation.deprecated_argument_lookup(\n\u001b[1;32m 1183\u001b[0m \"dtype_hint\", dtype_hint, \"preferred_dtype\", preferred_dtype)\n\u001b[0;32m-> 1184\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mconvert_to_tensor_v2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpreferred_dtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1185\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1186\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36mconvert_to_tensor_v2\u001b[0;34m(value, dtype, dtype_hint, name)\u001b[0m\n\u001b[1;32m 1240\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1241\u001b[0m \u001b[0mpreferred_dtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype_hint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1242\u001b[0;31m as_ref=False)\n\u001b[0m\u001b[1;32m 1243\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1244\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36minternal_convert_to_tensor\u001b[0;34m(value, dtype, name, as_ref, preferred_dtype, ctx, accept_composite_tensors)\u001b[0m\n\u001b[1;32m 1294\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1295\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mret\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1296\u001b[0;31m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconversion_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mas_ref\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mas_ref\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1297\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1298\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mret\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNotImplemented\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/tensor_conversion_registry.py\u001b[0m in \u001b[0;36m_default_conversion_function\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_default_conversion_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mas_ref\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0mas_ref\u001b[0m \u001b[0;31m# Unused.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 52\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mconstant_op\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconstant\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 53\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/constant_op.py\u001b[0m in \u001b[0;36mconstant\u001b[0;34m(value, dtype, shape, name)\u001b[0m\n\u001b[1;32m 225\u001b[0m \"\"\"\n\u001b[1;32m 226\u001b[0m return _constant_impl(value, dtype, shape, name, verify_shape=False,\n\u001b[0;32m--> 227\u001b[0;31m allow_broadcast=True)\n\u001b[0m\u001b[1;32m 228\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 229\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/constant_op.py\u001b[0m in \u001b[0;36m_constant_impl\u001b[0;34m(value, dtype, shape, name, verify_shape, allow_broadcast)\u001b[0m\n\u001b[1;32m 269\u001b[0m attrs={\"value\": tensor_value,\n\u001b[1;32m 270\u001b[0m \"dtype\": dtype_value},\n\u001b[0;32m--> 271\u001b[0;31m name=name).outputs[0]\n\u001b[0m\u001b[1;32m 272\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mconst_tensor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 273\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/util/deprecation.py\u001b[0m in \u001b[0;36mnew_func\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 505\u001b[0m \u001b[0;34m'in a future version'\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdate\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'after %s'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mdate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 506\u001b[0m instructions)\n\u001b[0;32m--> 507\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 508\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 509\u001b[0m doc = _add_deprecated_arg_notice_to_docstring(\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36mcreate_op\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 3358\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Input #%d is not a tensor: %s\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3359\u001b[0m return self._create_op_internal(op_type, inputs, dtypes, input_types, name,\n\u001b[0;32m-> 3360\u001b[0;31m attrs, op_def, compute_device)\n\u001b[0m\u001b[1;32m 3361\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3362\u001b[0m def _create_op_internal(\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36m_create_op_internal\u001b[0;34m(self, op_type, inputs, dtypes, input_types, name, attrs, op_def, compute_device)\u001b[0m\n\u001b[1;32m 3402\u001b[0m \u001b[0mAn\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mOperation\u001b[0m\u001b[0;31m`\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3403\u001b[0m \"\"\"\n\u001b[0;32m-> 3404\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_check_not_finalized\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3405\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3406\u001b[0m \u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mop_type\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36m_check_not_finalized\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2999\u001b[0m \"\"\"\n\u001b[1;32m 3000\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_finalized\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3001\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mRuntimeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Graph is finalized and cannot be modified.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3002\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3003\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_add_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mRuntimeError\u001b[0m: Graph is finalized and cannot be modified." + ] + } + ], "source": [ "## Step 3: instantiate the estimator\n", "dnn_classifier = tf.estimator.DNNClassifier(\n", @@ -1890,16 +2611,9 @@ "## Step 4: train\n", "dnn_classifier.train(\n", " input_fn=train_input_fn,\n", - " steps=NUM_EPOCHS * steps_per_epoch)\n" + " steps=NUM_EPOCHS * steps_per_epoch)" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, @@ -1925,19 +2639,6 @@ "metadata": {}, "outputs": [], "source": [ - "import tensorflow as tf\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", "## Set random seeds for reproducibility\n", "tf.random.set_seed(1)\n", "np.random.seed(1)\n", @@ -1977,7 +2678,7 @@ "\n", "\n", " # Shuffle, repeat, and batch the examples.\n", - " return dataset.batch(batch_size)\n" + " return dataset.batch(batch_size)" ] }, { @@ -2018,9 +2719,7 @@ "\n", "my_estimator = tf.keras.estimator.model_to_estimator(\n", " keras_model=model,\n", - " model_dir='models/estimator-for-XOR/')\n", - "\n", - "#help(tf.keras.estimator.model_to_estimator)" + " model_dir='models/estimator-for-XOR/')" ] }, { @@ -2050,13 +2749,6 @@ " input_fn=lambda: eval_input_fn(x_valid, y_valid, batch_size))" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -2093,7 +2785,7 @@ "metadata": {}, "outputs": [], "source": [ - "! python ../.convert_notebook_to_script.py --input ch14.ipynb --output ch14.py" + "# ! python ../.convert_notebook_to_script.py --input ch14-notebook.ipynb --output ch14.py" ] } ],