diff --git a/10_neural_nets_with_keras.ipynb b/10_neural_nets_with_keras.ipynb index 7ddf933..215853c 100644 --- a/10_neural_nets_with_keras.ipynb +++ b/10_neural_nets_with_keras.ipynb @@ -507,6 +507,7 @@ "metadata": {}, "outputs": [], "source": [ + "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] @@ -543,21 +544,13 @@ "model.summary()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Warning**: the following 2 cells do not work yet due to [TensorFlow issue 24622](https://github.com/tensorflow/tensorflow/issues/24622) (you are using a preview version of TensorFlow, hence there are still a few issues).\n", - "You can work around this issue by applying [PR 24626](https://github.com/tensorflow/tensorflow/pull/24625/files) to your copy of `tensorflow/python/keras/utils/vis_utils.py`." - ] - }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ - "#keras.utils.plot_model(model, \"my_mnist_model.png\", show_shapes=True)" + "keras.utils.plot_model(model, \"my_mnist_model.png\", show_shapes=True)" ] }, { @@ -565,34 +558,6 @@ "execution_count": 29, "metadata": {}, "outputs": [], - "source": [ - "%%html\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Warning**: the following cell does not work yet due to [TensorFlow issue 24622](https://github.com/tensorflow/tensorflow/issues/24622) and [TensorFlow issue 24639](https://github.com/tensorflow/tensorflow/issues/24639).\n", - "You can work around issue 24639 by writing `from tensorflow.keras.utils.vis_utils import model_to_dot`." - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import SVG\n", - "#SVG(keras.utils.model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], "source": [ "hidden1 = model.layers[1]\n", "hidden1.name" @@ -600,16 +565,16 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ - "model.get_layer(hidden1.name).name" + "model.get_layer(hidden1.name) is hidden1" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -618,7 +583,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -627,7 +592,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -636,7 +601,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -645,7 +610,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -654,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -671,29 +636,29 @@ ] }, { - "cell_type": "code", - "execution_count": 39, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ + "```python\n", "model.compile(loss=keras.losses.sparse_categorical_crossentropy,\n", " optimizer=keras.optimizers.SGD(),\n", - " metrics=[keras.metrics.sparse_categorical_accuracy])" + " metrics=[keras.metrics.sparse_categorical_accuracy])\n", + "```" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ - "history = model.fit(X_train, y_train, epochs=50,\n", + "history = model.fit(X_train, y_train, epochs=30,\n", " validation_data=(X_valid, y_valid))" ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -702,7 +667,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -711,7 +676,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ @@ -720,7 +685,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ @@ -735,7 +700,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -744,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ @@ -755,7 +720,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 44, "metadata": {}, "outputs": [], "source": [ @@ -765,7 +730,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ @@ -774,7 +739,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -798,7 +763,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -819,7 +784,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ @@ -829,7 +794,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -837,7 +802,7 @@ " keras.layers.Dense(30, activation=\"relu\", input_shape=X_train.shape[1:]),\n", " keras.layers.Dense(1)\n", "])\n", - "model.compile(loss=\"mean_squared_error\", optimizer=\"sgd\")\n", + "model.compile(loss=\"mean_squared_error\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", "history = model.fit(X_train, y_train, epochs=20, validation_data=(X_valid, y_valid))\n", "mse_test = model.evaluate(X_test, y_test)\n", "X_new = X_test[:3]\n", @@ -846,7 +811,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ @@ -858,7 +823,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -881,7 +846,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ @@ -891,21 +856,21 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 53, "metadata": {}, "outputs": [], "source": [ - "input = keras.layers.Input(shape=X_train.shape[1:])\n", - "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input)\n", + "input_ = keras.layers.Input(shape=X_train.shape[1:])\n", + "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_)\n", "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", - "concat = keras.layers.concatenate([input, hidden2])\n", + "concat = keras.layers.concatenate([input_, hidden2])\n", "output = keras.layers.Dense(1)(concat)\n", - "model = keras.models.Model(inputs=[input], outputs=[output])" + "model = keras.models.Model(inputs=[input_], outputs=[output])" ] }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 54, "metadata": {}, "outputs": [], "source": [ @@ -914,11 +879,11 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ - "model.compile(loss=\"mean_squared_error\", optimizer=\"sgd\")\n", + "model.compile(loss=\"mean_squared_error\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", "history = model.fit(X_train, y_train, epochs=20,\n", " validation_data=(X_valid, y_valid))\n", "mse_test = model.evaluate(X_test, y_test)\n", @@ -934,7 +899,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ @@ -944,26 +909,26 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ - "input_A = keras.layers.Input(shape=[5])\n", - "input_B = keras.layers.Input(shape=[6])\n", + "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", + "input_B = keras.layers.Input(shape=[6], name=\"deep_input\")\n", "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", "concat = keras.layers.concatenate([input_A, hidden2])\n", - "output = keras.layers.Dense(1)(concat)\n", + "output = keras.layers.Dense(1, name=\"output\")(concat)\n", "model = keras.models.Model(inputs=[input_A, input_B], outputs=[output])" ] }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ - "model.compile(loss=\"mse\", optimizer=\"sgd\")\n", + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", "\n", "X_train_A, X_train_B = X_train[:, :5], X_train[:, 2:]\n", "X_valid_A, X_valid_B = X_valid[:, :5], X_valid[:, 2:]\n", @@ -985,7 +950,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ @@ -995,33 +960,33 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 60, "metadata": {}, "outputs": [], "source": [ - "input_A = keras.layers.Input(shape=[5])\n", - "input_B = keras.layers.Input(shape=[6])\n", + "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", + "input_B = keras.layers.Input(shape=[6], name=\"deep_input\")\n", "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", "concat = keras.layers.concatenate([input_A, hidden2])\n", - "output = keras.layers.Dense(1)(concat)\n", - "aux_output = keras.layers.Dense(1)(hidden2)\n", + "output = keras.layers.Dense(1, name=\"main_output\")(concat)\n", + "aux_output = keras.layers.Dense(1, name=\"aux_output\")(hidden2)\n", "model = keras.models.Model(inputs=[input_A, input_B],\n", " outputs=[output, aux_output])" ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 61, "metadata": {}, "outputs": [], "source": [ - "model.compile(loss=[\"mse\", \"mse\"], loss_weights=[0.9, 0.1], optimizer=\"sgd\")" + "model.compile(loss=[\"mse\", \"mse\"], loss_weights=[0.9, 0.1], optimizer=keras.optimizers.SGD(lr=1e-3))" ] }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ @@ -1031,7 +996,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 63, "metadata": {}, "outputs": [], "source": [ @@ -1049,7 +1014,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ @@ -1075,11 +1040,11 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ - "model.compile(loss=\"mse\", loss_weights=[0.9, 0.1], optimizer=\"sgd\")\n", + "model.compile(loss=\"mse\", loss_weights=[0.9, 0.1], optimizer=keras.optimizers.SGD(lr=1e-3))\n", "history = model.fit((X_train_A, X_train_B), (y_train, y_train), epochs=10,\n", " validation_data=((X_valid_A, X_valid_B), (y_valid, y_valid)))\n", "total_loss, main_loss, aux_loss = model.evaluate((X_test_A, X_test_B), (y_test, y_test))\n", @@ -1088,7 +1053,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 66, "metadata": {}, "outputs": [], "source": [ @@ -1104,7 +1069,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ @@ -1114,7 +1079,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 68, "metadata": {}, "outputs": [], "source": [ @@ -1127,18 +1092,18 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ - "model.compile(loss=\"mse\", optimizer=\"sgd\")\n", + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", "history = model.fit(X_train, y_train, epochs=10, validation_data=(X_valid, y_valid))\n", "mse_test = model.evaluate(X_test, y_test)" ] }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ @@ -1147,7 +1112,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ @@ -1156,7 +1121,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ @@ -1165,7 +1130,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 73, "metadata": {}, "outputs": [], "source": [ @@ -1174,7 +1139,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ @@ -1190,17 +1155,18 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 75, "metadata": {}, "outputs": [], "source": [ + "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 76, "metadata": {}, "outputs": [], "source": [ @@ -1213,11 +1179,11 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 77, "metadata": {}, "outputs": [], "source": [ - "model.compile(loss=\"mse\", optimizer=\"sgd\")\n", + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", "checkpoint_cb = keras.callbacks.ModelCheckpoint(\"my_keras_model.h5\", save_best_only=True)\n", "history = model.fit(X_train, y_train, epochs=10,\n", " validation_data=(X_valid, y_valid),\n", @@ -1228,11 +1194,11 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 78, "metadata": {}, "outputs": [], "source": [ - "model.compile(loss=\"mse\", optimizer=\"sgd\")\n", + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", "early_stopping_cb = keras.callbacks.EarlyStopping(patience=10,\n", " restore_best_weights=True)\n", "history = model.fit(X_train, y_train, epochs=100,\n", @@ -1243,7 +1209,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 79, "metadata": {}, "outputs": [], "source": [ @@ -1254,7 +1220,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 80, "metadata": {}, "outputs": [], "source": [ @@ -1273,7 +1239,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 81, "metadata": {}, "outputs": [], "source": [ @@ -1282,7 +1248,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ @@ -1297,17 +1263,18 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 83, "metadata": {}, "outputs": [], "source": [ + "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 84, "metadata": {}, "outputs": [], "source": [ @@ -1316,14 +1283,12 @@ " keras.layers.Dense(30, activation=\"relu\"),\n", " keras.layers.Dense(1)\n", "]) \n", - "#model.compile(loss=\"mse\", optimizer=\"sgd\")\n", - "# or try another learning rate:\n", - "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=0.05))" + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))" ] }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 85, "metadata": {}, "outputs": [], "source": [ @@ -1337,7 +1302,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To start the TensorBoard server, one option is to open a terminal, if needed activate the virtualenv where you installed TensorBoard, then type:\n", + "To start the TensorBoard server, one option is to open a terminal, if needed activate the virtualenv where you installed TensorBoard, go to this notebook's directory, then type:\n", "\n", "```bash\n", "$ tensorboard --logdir=./my_logs --port=6006\n", @@ -1345,51 +1310,22 @@ "\n", "You can then open your web browser to [localhost:6006](http://localhost:6006) and use TensorBoard. Once you are done, press Ctrl-C in the terminal window, this will shutdown the TensorBoard server.\n", "\n", - "Alternatively, you can create a Jupyter cell with this code:\n", - "\n", - "```bash\n", - "%%bash\n", - "tensorboard --logdir={run_logdir} --port=6006\n", - "```\n", - "\n", - "When you run this cell, the TensorBoard server will start and you can use it at [localhost:6006](http://localhost:6006), but Jupyter will be blocked until you interrupt this cell, which will shutdown the server.\n", - "\n", - "Lastly, you can use the following `tb()` function that starts the TensorBoard server in a way that does not block Jupyter, and directly opens a new browser tab for you. It returns a handle on the server's process, so you can call `server.kill()` when you want to shutdown the server. Note that interrupting this notebook will shutdown all TensorBoard servers that you started this way.\n", - "\n", - "You may also want to install the jupyter-tensorboard extension which integrates nicely into Jupyter to start/stop TensorBoard servers." + "Alternatively, you can load TensorBoard's Jupyter extension and run it like this:" ] }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 86, "metadata": {}, "outputs": [], "source": [ - "def tb(logdir=root_logdir, port=6006, open_tab=True, sleep=3):\n", - " import subprocess\n", - " proc = subprocess.Popen(\n", - " \"tensorboard --logdir={0} --port={1}\".format(logdir, port), shell=True)\n", - " if open_tab:\n", - " import time\n", - " print(\"Waiting a few seconds for the TensorBoard Server to start...\")\n", - " time.sleep(sleep)\n", - " import webbrowser\n", - " webbrowser.open(\"http://127.0.0.1:{}/\".format(port))\n", - " return proc" + "%load_ext tensorboard\n", + "%tensorboard --logdir=./my_logs --port=6006" ] }, { "cell_type": "code", - "execution_count": 90, - "metadata": {}, - "outputs": [], - "source": [ - "server = tb()" - ] - }, - { - "cell_type": "code", - "execution_count": 91, + "execution_count": 87, "metadata": {}, "outputs": [], "source": [ @@ -1399,17 +1335,18 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 88, "metadata": {}, "outputs": [], "source": [ + "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 89, "metadata": {}, "outputs": [], "source": [ @@ -1418,17 +1355,17 @@ " keras.layers.Dense(30, activation=\"relu\"),\n", " keras.layers.Dense(1)\n", "]) \n", - "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=0.015))" + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=0.05))" ] }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 90, "metadata": {}, "outputs": [], "source": [ "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir2)\n", - "history = model.fit(X_train, y_train, epochs=10,\n", + "history = model.fit(X_train, y_train, epochs=30,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[checkpoint_cb, tensorboard_cb])" ] @@ -1441,21 +1378,19 @@ ] }, { - "cell_type": "code", - "execution_count": 95, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "help(keras.callbacks.TensorBoard.__init__)" + "Check out the other available logging options:" ] }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 91, "metadata": {}, "outputs": [], "source": [ - "#server.kill() # uncomment and run this to stop the TensorBoard server" + "help(keras.callbacks.TensorBoard.__init__)" ] }, { @@ -1467,35 +1402,35 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 92, "metadata": {}, "outputs": [], "source": [ + "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "def build_model(n_hidden=1, n_neurons=30, learning_rate=3e-3, input_shape=[8]):\n", " model = keras.models.Sequential()\n", - " options = {\"input_shape\": input_shape}\n", + " model.add(keras.layers.InputLayer(input_shape=input_shape))\n", " for layer in range(n_hidden):\n", - " model.add(keras.layers.Dense(n_neurons, activation=\"relu\", **options))\n", - " options = {}\n", - " model.add(keras.layers.Dense(1, **options))\n", - " optimizer = keras.optimizers.SGD(learning_rate)\n", + " model.add(keras.layers.Dense(n_neurons, activation=\"relu\"))\n", + " model.add(keras.layers.Dense(1))\n", + " optimizer = keras.optimizers.SGD(lr=learning_rate)\n", " model.compile(loss=\"mse\", optimizer=optimizer)\n", " return model" ] }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 94, "metadata": {}, "outputs": [], "source": [ @@ -1504,7 +1439,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 95, "metadata": {}, "outputs": [], "source": [ @@ -1515,7 +1450,7 @@ }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 96, "metadata": {}, "outputs": [], "source": [ @@ -1524,7 +1459,7 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 97, "metadata": {}, "outputs": [], "source": [ @@ -1533,7 +1468,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 98, "metadata": {}, "outputs": [], "source": [ @@ -1543,7 +1478,7 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 99, "metadata": {}, "outputs": [], "source": [ @@ -1564,7 +1499,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 100, "metadata": {}, "outputs": [], "source": [ @@ -1573,7 +1508,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 101, "metadata": {}, "outputs": [], "source": [ @@ -1582,7 +1517,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 102, "metadata": {}, "outputs": [], "source": [ @@ -1591,7 +1526,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 103, "metadata": {}, "outputs": [], "source": [ @@ -1600,7 +1535,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 104, "metadata": {}, "outputs": [], "source": [ @@ -1610,7 +1545,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 105, "metadata": {}, "outputs": [], "source": [