Skip to content

Commit f69c912

Browse files
committedMay 26, 2021
Train network edited to be just like the Chollet model
1 parent 1bb3475 commit f69c912

8 files changed

+1425
-198
lines changed
 

‎.ipynb_checkpoints/FindingMino_Baseling-checkpoint.ipynb

+547
Large diffs are not rendered by default.

‎.ipynb_checkpoints/FindingMino_Test-checkpoint.ipynb

+24-82
Large diffs are not rendered by default.

‎.ipynb_checkpoints/FindingMino_Train-checkpoint.ipynb

+89-68
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"cells": [],
3+
"metadata": {},
4+
"nbformat": 4,
5+
"nbformat_minor": 4
6+
}

‎FindingMino_Baseling.ipynb

+539
Large diffs are not rendered by default.

‎FindingMino_Test.ipynb

+1-8
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
"name": "stdout",
121121
"output_type": "stream",
122122
"text": [
123-
"accuracy: 98.76%\n"
123+
"accuracy: 98.71%\n"
124124
]
125125
}
126126
],
@@ -170,13 +170,6 @@
170170
"print(\"Predicted: \" + str(np.argmax(y_predict[check_index])))\n",
171171
"print(\"True: \" + str(np.argmax(test_labels[check_index])))"
172172
]
173-
},
174-
{
175-
"cell_type": "code",
176-
"execution_count": null,
177-
"metadata": {},
178-
"outputs": [],
179-
"source": []
180173
}
181174
],
182175
"metadata": {

‎FindingMino_Train.ipynb

+61-40
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@
2525
"from tensorflow.keras.models import Sequential, load_model\n",
2626
"from keras.datasets import mnist\n",
2727
"import itertools\n",
28-
"import random\n",
29-
"random.seed(42)"
28+
"import random"
3029
]
3130
},
3231
{
@@ -37,7 +36,7 @@
3736
"\n",
3837
"- **Task**: take as input two MNIST images and through a neural network return the value of the minimum digit\n",
3938
"\n",
40-
"- **Parameters**: no intermediate values can be used, ie a classifier that reveals what digits the images represent cannot be followed by logic to choose the lowest value\n",
39+
"- **Restrictions**: no intermediate labels can be used, ie a classifier that reveals what digits the images represent cannot be followed by logic to choose the minimum value\n",
4140
"\n",
4241
"- **Approach**: as a variation of Gonzalo's proposed method, place images side-by-side and then make the label of that combined image be the minimum value\n",
4342
"\n",
@@ -46,16 +45,17 @@
4645
},
4746
{
4847
"cell_type": "code",
49-
"execution_count": 3,
48+
"execution_count": 2,
5049
"metadata": {},
5150
"outputs": [],
5251
"source": [
52+
"# Load data and split into training and test\n",
5353
"(train_images, train_labels), (test_images, test_labels) = mnist.load_data()"
5454
]
5555
},
5656
{
5757
"cell_type": "code",
58-
"execution_count": 4,
58+
"execution_count": 3,
5959
"metadata": {},
6060
"outputs": [
6161
{
@@ -68,10 +68,10 @@
6868
{
6969
"data": {
7070
"text/plain": [
71-
"<matplotlib.image.AxesImage at 0x103f4a940>"
71+
"<matplotlib.image.AxesImage at 0x10fb346d0>"
7272
]
7373
},
74-
"execution_count": 4,
74+
"execution_count": 3,
7575
"metadata": {},
7676
"output_type": "execute_result"
7777
},
@@ -96,16 +96,16 @@
9696
},
9797
{
9898
"cell_type": "code",
99-
"execution_count": 5,
99+
"execution_count": 4,
100100
"metadata": {},
101101
"outputs": [
102102
{
103103
"data": {
104104
"text/plain": [
105-
"<matplotlib.image.AxesImage at 0x1136994f0>"
105+
"<matplotlib.image.AxesImage at 0x11f2e14f0>"
106106
]
107107
},
108-
"execution_count": 5,
108+
"execution_count": 4,
109109
"metadata": {},
110110
"output_type": "execute_result"
111111
},
@@ -129,16 +129,16 @@
129129
},
130130
{
131131
"cell_type": "code",
132-
"execution_count": 6,
132+
"execution_count": 5,
133133
"metadata": {},
134134
"outputs": [
135135
{
136136
"data": {
137137
"text/plain": [
138-
"<matplotlib.image.AxesImage at 0x1136f8460>"
138+
"<matplotlib.image.AxesImage at 0x11f34d6a0>"
139139
]
140140
},
141-
"execution_count": 6,
141+
"execution_count": 5,
142142
"metadata": {},
143143
"output_type": "execute_result"
144144
},
@@ -162,7 +162,7 @@
162162
},
163163
{
164164
"cell_type": "code",
165-
"execution_count": 7,
165+
"execution_count": 6,
166166
"metadata": {},
167167
"outputs": [],
168168
"source": [
@@ -180,7 +180,7 @@
180180
},
181181
{
182182
"cell_type": "code",
183-
"execution_count": 14,
183+
"execution_count": 7,
184184
"metadata": {},
185185
"outputs": [],
186186
"source": [
@@ -219,7 +219,7 @@
219219
},
220220
{
221221
"cell_type": "code",
222-
"execution_count": 15,
222+
"execution_count": 8,
223223
"metadata": {},
224224
"outputs": [],
225225
"source": [
@@ -257,25 +257,45 @@
257257
},
258258
{
259259
"cell_type": "code",
260-
"execution_count": 16,
260+
"execution_count": 9,
261+
"metadata": {},
262+
"outputs": [
263+
{
264+
"data": {
265+
"text/plain": [
266+
"(400000, 28, 56)"
267+
]
268+
},
269+
"execution_count": 9,
270+
"metadata": {},
271+
"output_type": "execute_result"
272+
}
273+
],
274+
"source": [
275+
"combo_train_X.shape"
276+
]
277+
},
278+
{
279+
"cell_type": "code",
280+
"execution_count": 10,
261281
"metadata": {},
262282
"outputs": [],
263283
"source": [
264284
"# Reshape the data so they can be fed into the network, one-hot-encode the labels\n",
265285
"\n",
266286
"train_images = combo_train_X.reshape((combo_train_X.shape[0], 28, 56, 1))\n",
267-
"train_images = train_images.astype('float32')/ 255\n",
287+
"train_images = train_images/ 255\n",
268288
"\n",
269289
"val_images = combo_val_X.reshape((combo_val_X.shape[0], 28, 56, 1))\n",
270-
"val_images = val_images.astype('float32')/255\n",
290+
"val_images = val_images/255\n",
271291
"\n",
272292
"train_labels = to_categorical(combo_train_y)\n",
273293
"val_labels = to_categorical(combo_val_y)"
274294
]
275295
},
276296
{
277297
"cell_type": "code",
278-
"execution_count": 19,
298+
"execution_count": 11,
279299
"metadata": {},
280300
"outputs": [
281301
{
@@ -323,7 +343,6 @@
323343
"model.add(layers.Conv2D(64, (3,3), activation = 'relu'))\n",
324344
"# Adding a NN Classifier\n",
325345
"model.add(layers.Flatten())\n",
326-
"model.add(layers.Dropout(0.5))\n",
327346
"model.add(layers.Dense(64, activation = 'relu'))\n",
328347
"model.add(layers.Dense(10, activation = 'softmax'))\n",
329348
"\n",
@@ -332,7 +351,7 @@
332351
},
333352
{
334353
"cell_type": "code",
335-
"execution_count": 33,
354+
"execution_count": 12,
336355
"metadata": {},
337356
"outputs": [],
338357
"source": [
@@ -345,32 +364,34 @@
345364
},
346365
{
347366
"cell_type": "code",
348-
"execution_count": 14,
367+
"execution_count": 13,
349368
"metadata": {},
350369
"outputs": [
351370
{
352371
"name": "stdout",
353372
"output_type": "stream",
354373
"text": [
355-
"Epoch 1/4\n",
356-
"4688/4688 [==============================] - 255s 54ms/step - loss: 0.3645 - mae: 0.0359 - accuracy: 0.8823\n",
357-
"Epoch 2/4\n",
358-
"4688/4688 [==============================] - 251s 54ms/step - loss: 0.1282 - mae: 0.0127 - accuracy: 0.9599\n",
359-
"Epoch 3/4\n",
360-
"4688/4688 [==============================] - 257s 55ms/step - loss: 0.0884 - mae: 0.0086 - accuracy: 0.9722\n",
361-
"Epoch 4/4\n",
362-
"4688/4688 [==============================] - 257s 55ms/step - loss: 0.0697 - mae: 0.0067 - accuracy: 0.9779\n"
374+
"Epoch 1/8\n",
375+
"2734/6250 [============>.................] - ETA: 3:43 - loss: 0.5052 - mae: 0.0491 - accuracy: 0.8365"
363376
]
364377
},
365378
{
366-
"data": {
367-
"text/plain": [
368-
"<tensorflow.python.keras.callbacks.History at 0x11ca224c0>"
369-
]
370-
},
371-
"execution_count": 14,
372-
"metadata": {},
373-
"output_type": "execute_result"
379+
"ename": "KeyboardInterrupt",
380+
"evalue": "",
381+
"output_type": "error",
382+
"traceback": [
383+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
384+
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
385+
"\u001b[0;32m<ipython-input-13-203dbf38761e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Fit model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m model.fit(train_images, \n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mtrain_labels\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mepochs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m8\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 batch_size = 64)\n",
386+
"\u001b[0;32m/usr/local/lib/python3.9/site-packages/tensorflow/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_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m 1181\u001b[0m _r=1):\n\u001b[1;32m 1182\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_train_batch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1183\u001b[0;31m \u001b[0mtmp_logs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_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 1184\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdata_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshould_sync\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1185\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masync_wait\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",
387+
"\u001b[0;32m/usr/local/lib/python3.9/site-packages/tensorflow/python/eager/def_function.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 887\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 888\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mOptionalXlaContext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_jit_compile\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--> 889\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 890\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 891\u001b[0m \u001b[0mnew_tracing_count\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexperimental_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",
388+
"\u001b[0;32m/usr/local/lib/python3.9/site-packages/tensorflow/python/eager/def_function.py\u001b[0m in \u001b[0;36m_call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 915\u001b[0m \u001b[0;31m# In this case we have created variables on the first call, so we run the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 916\u001b[0m \u001b[0;31m# defunned version which is guaranteed to never create variables.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 917\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_stateless_fn\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;31m# pylint: disable=not-callable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 918\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_stateful_fn\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\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 919\u001b[0m \u001b[0;31m# Release the lock early so that multiple threads can perform the call\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
389+
"\u001b[0;32m/usr/local/lib/python3.9/site-packages/tensorflow/python/eager/function.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 3021\u001b[0m (graph_function,\n\u001b[1;32m 3022\u001b[0m filtered_flat_args) = self._maybe_define_function(args, kwargs)\n\u001b[0;32m-> 3023\u001b[0;31m return graph_function._call_flat(\n\u001b[0m\u001b[1;32m 3024\u001b[0m filtered_flat_args, captured_inputs=graph_function.captured_inputs) # pylint: disable=protected-access\n\u001b[1;32m 3025\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
390+
"\u001b[0;32m/usr/local/lib/python3.9/site-packages/tensorflow/python/eager/function.py\u001b[0m in \u001b[0;36m_call_flat\u001b[0;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[1;32m 1958\u001b[0m and executing_eagerly):\n\u001b[1;32m 1959\u001b[0m \u001b[0;31m# No tape is watching; skip to running the function.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1960\u001b[0;31m return self._build_call_outputs(self._inference_function.call(\n\u001b[0m\u001b[1;32m 1961\u001b[0m ctx, args, cancellation_manager=cancellation_manager))\n\u001b[1;32m 1962\u001b[0m forward_backward = self._select_forward_and_backward_functions(\n",
391+
"\u001b[0;32m/usr/local/lib/python3.9/site-packages/tensorflow/python/eager/function.py\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[1;32m 589\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0m_InterpolateFunctionError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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 590\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcancellation_manager\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--> 591\u001b[0;31m outputs = execute.execute(\n\u001b[0m\u001b[1;32m 592\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msignature\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[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 593\u001b[0m \u001b[0mnum_outputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_num_outputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
392+
"\u001b[0;32m/usr/local/lib/python3.9/site-packages/tensorflow/python/eager/execute.py\u001b[0m in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 57\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[1;32m 58\u001b[0m \u001b[0mctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mensure_initialized\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---> 59\u001b[0;31m tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,\n\u001b[0m\u001b[1;32m 60\u001b[0m inputs, attrs, num_outputs)\n\u001b[1;32m 61\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_NotOkStatusException\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",
393+
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
394+
]
374395
}
375396
],
376397
"source": [
@@ -383,7 +404,7 @@
383404
},
384405
{
385406
"cell_type": "code",
386-
"execution_count": 20,
407+
"execution_count": null,
387408
"metadata": {},
388409
"outputs": [],
389410
"source": [

‎combos.ipynb

+158
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 3,
6+
"metadata": {},
7+
"outputs": [],
8+
"source": [
9+
"from itertools import combinations_with_replacement\n",
10+
"import numpy as np"
11+
]
12+
},
13+
{
14+
"cell_type": "code",
15+
"execution_count": 4,
16+
"metadata": {},
17+
"outputs": [
18+
{
19+
"data": {
20+
"text/plain": [
21+
"array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])"
22+
]
23+
},
24+
"execution_count": 4,
25+
"metadata": {},
26+
"output_type": "execute_result"
27+
}
28+
],
29+
"source": [
30+
"list_size = 10\n",
31+
"numlist = np.linspace(0,list_size,list_size+1)\n",
32+
"numlist"
33+
]
34+
},
35+
{
36+
"cell_type": "code",
37+
"execution_count": 5,
38+
"metadata": {},
39+
"outputs": [],
40+
"source": [
41+
"combo_list = (list(combinations_with_replacement(numlist,2)))"
42+
]
43+
},
44+
{
45+
"cell_type": "code",
46+
"execution_count": 8,
47+
"metadata": {},
48+
"outputs": [
49+
{
50+
"data": {
51+
"text/plain": [
52+
"[(0.0, 0.0),\n",
53+
" (0.0, 1.0),\n",
54+
" (0.0, 2.0),\n",
55+
" (0.0, 3.0),\n",
56+
" (0.0, 4.0),\n",
57+
" (0.0, 5.0),\n",
58+
" (0.0, 6.0),\n",
59+
" (0.0, 7.0),\n",
60+
" (0.0, 8.0),\n",
61+
" (0.0, 9.0),\n",
62+
" (0.0, 10.0),\n",
63+
" (1.0, 1.0),\n",
64+
" (1.0, 2.0),\n",
65+
" (1.0, 3.0),\n",
66+
" (1.0, 4.0),\n",
67+
" (1.0, 5.0),\n",
68+
" (1.0, 6.0),\n",
69+
" (1.0, 7.0),\n",
70+
" (1.0, 8.0),\n",
71+
" (1.0, 9.0),\n",
72+
" (1.0, 10.0),\n",
73+
" (2.0, 2.0),\n",
74+
" (2.0, 3.0),\n",
75+
" (2.0, 4.0),\n",
76+
" (2.0, 5.0),\n",
77+
" (2.0, 6.0),\n",
78+
" (2.0, 7.0),\n",
79+
" (2.0, 8.0),\n",
80+
" (2.0, 9.0),\n",
81+
" (2.0, 10.0),\n",
82+
" (3.0, 3.0),\n",
83+
" (3.0, 4.0),\n",
84+
" (3.0, 5.0),\n",
85+
" (3.0, 6.0),\n",
86+
" (3.0, 7.0),\n",
87+
" (3.0, 8.0),\n",
88+
" (3.0, 9.0),\n",
89+
" (3.0, 10.0),\n",
90+
" (4.0, 4.0),\n",
91+
" (4.0, 5.0),\n",
92+
" (4.0, 6.0),\n",
93+
" (4.0, 7.0),\n",
94+
" (4.0, 8.0),\n",
95+
" (4.0, 9.0),\n",
96+
" (4.0, 10.0),\n",
97+
" (5.0, 5.0),\n",
98+
" (5.0, 6.0),\n",
99+
" (5.0, 7.0),\n",
100+
" (5.0, 8.0),\n",
101+
" (5.0, 9.0),\n",
102+
" (5.0, 10.0),\n",
103+
" (6.0, 6.0),\n",
104+
" (6.0, 7.0),\n",
105+
" (6.0, 8.0),\n",
106+
" (6.0, 9.0),\n",
107+
" (6.0, 10.0),\n",
108+
" (7.0, 7.0),\n",
109+
" (7.0, 8.0),\n",
110+
" (7.0, 9.0),\n",
111+
" (7.0, 10.0),\n",
112+
" (8.0, 8.0),\n",
113+
" (8.0, 9.0),\n",
114+
" (8.0, 10.0),\n",
115+
" (9.0, 9.0),\n",
116+
" (9.0, 10.0),\n",
117+
" (10.0, 10.0)]"
118+
]
119+
},
120+
"execution_count": 8,
121+
"metadata": {},
122+
"output_type": "execute_result"
123+
}
124+
],
125+
"source": [
126+
"combo_list"
127+
]
128+
},
129+
{
130+
"cell_type": "code",
131+
"execution_count": null,
132+
"metadata": {},
133+
"outputs": [],
134+
"source": []
135+
}
136+
],
137+
"metadata": {
138+
"kernelspec": {
139+
"display_name": "Python 3",
140+
"language": "python",
141+
"name": "python3"
142+
},
143+
"language_info": {
144+
"codemirror_mode": {
145+
"name": "ipython",
146+
"version": 3
147+
},
148+
"file_extension": ".py",
149+
"mimetype": "text/x-python",
150+
"name": "python",
151+
"nbconvert_exporter": "python",
152+
"pygments_lexer": "ipython3",
153+
"version": "3.8.6"
154+
}
155+
},
156+
"nbformat": 4,
157+
"nbformat_minor": 4
158+
}

0 commit comments

Comments
 (0)
Please sign in to comment.