Update ch. 10 code to latest TF nightly version, eg. default SGD learning rate is now 0.001

main
Aurélien Geron 2019-06-08 11:43:48 +08:00
parent 0615a6f0a1
commit b6306b7d48
1 changed files with 121 additions and 186 deletions

View File

@ -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",
"<img src=\"my_mnist_model.png\" />"
]
},
{
"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": [