File size: 52,540 Bytes
d577657
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "nwaAZRu1NTiI"
      },
      "source": [
        "# Test custom loss in Keras\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "LNXxxKojNTiL"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "2023-02-06 12:11:59.127639: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA\n",
            "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
          ]
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "2.11.0\n"
          ]
        }
      ],
      "source": [
        "import tensorflow as tf\n",
        "from tensorflow.keras import layers, Model, Input\n",
        "from tensorflow.keras.utils import to_categorical\n",
        "import tensorflow.keras.backend as K\n",
        "\n",
        "from matplotlib import pyplot as plt\n",
        "import numpy as np\n",
        "\n",
        "print(tf.__version__)\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 184,
      "metadata": {},
      "outputs": [],
      "source": [
        "class CustomModel(tf.keras.Model):\n",
        "    def train_step(self, data):\n",
        "        # Unpack the data. Its structure depends on your model and\n",
        "        # on what you pass to `fit()`.\n",
        "        if len(data) == 3:\n",
        "            x, y, sample_weight = data\n",
        "        else:\n",
        "            sample_weight = None\n",
        "            x, y = data\n",
        "\n",
        "        # check if we passed the d_return\n",
        "        if isinstance(x, tuple):\n",
        "            x = x[0]\n",
        "            d_return = x[1]\n",
        "\n",
        "\n",
        "        with tf.GradientTape() as tape:\n",
        "            y_pred = self(x, training=True)  # Forward pass\n",
        "            # Compute the loss value.\n",
        "            # The loss function is configured in `compile()`.\n",
        "            # loss = self.compiled_loss(\n",
        "            #     y,\n",
        "            #     y_pred,\n",
        "            #     sample_weight=sample_weight,\n",
        "            #     regularization_losses=self.losses,\n",
        "            # )\n",
        "            y = tf.cast(y, tf.float32)\n",
        "            loss = K.mean(K.square(y_pred - y), axis=-1)\n",
        "\n",
        "        # Compute gradients\n",
        "        trainable_vars = self.trainable_variables\n",
        "        gradients = tape.gradient(loss, trainable_vars)\n",
        "\n",
        "        # Update weights\n",
        "        self.optimizer.apply_gradients(zip(gradients, trainable_vars))\n",
        "\n",
        "        # Update the metrics.\n",
        "        # Metrics are configured in `compile()`.\n",
        "        self.compiled_metrics.update_state(y, y_pred, sample_weight=sample_weight)\n",
        "\n",
        "        # Return a dict mapping metric names to current value.\n",
        "        # Note that it will include the loss (tracked in self.metrics).\n",
        "        return {m.name: m.result() for m in self.metrics}"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 185,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Model: \"train_only\"\n",
            "_________________________________________________________________\n",
            " Layer (type)                Output Shape              Param #   \n",
            "=================================================================\n",
            " x_input (InputLayer)        [(None, 1)]               0         \n",
            "                                                                 \n",
            " dense_47 (Dense)            (None, 1)                 2         \n",
            "                                                                 \n",
            "=================================================================\n",
            "Total params: 2\n",
            "Trainable params: 2\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ]
        }
      ],
      "source": [
        "# Simplest NN without custom loss\n",
        "\n",
        "x_input = Input(shape=(1,), name='x_input')\n",
        "output = layers.Dense(1, activation=None)(x_input)\n",
        "\n",
        "model = CustomModel(inputs=x_input, outputs=output, name='train_only')\n",
        "model.compile(loss=None, optimizer=tf.keras.optimizers.Adam(learning_rate=0.1))\n",
        "\n",
        "model.summary()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 186,
      "metadata": {},
      "outputs": [],
      "source": [
        "x = np.array([ [i] for i in range(1,100) ])\n",
        "y = np.array([ [i] for i in range(1,100) ])\n",
        "\n",
        "history = model.train_on_batch(x=(x,x),y=y)\n",
        "# history = model.fit([x,x], y, epochs=700, verbose=0)\n",
        "# history = model.fit(x, y, validation_split=0.2, epochs=500, verbose=0)\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 147,
      "metadata": {},
      "outputs": [
        {
          "ename": "AttributeError",
          "evalue": "'float' object has no attribute 'history'",
          "output_type": "error",
          "traceback": [
            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
            "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
            "Cell \u001b[0;32mIn[147], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m plt\u001b[38;5;241m.\u001b[39mplot(\u001b[43mhistory\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhistory\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mloss\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m      2\u001b[0m \u001b[38;5;66;03m# plt.plot(history.history['val_loss'])\u001b[39;00m\n\u001b[1;32m      3\u001b[0m plt\u001b[38;5;241m.\u001b[39mtitle(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmodel loss\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
            "\u001b[0;31mAttributeError\u001b[0m: 'float' object has no attribute 'history'"
          ]
        }
      ],
      "source": [
        "plt.plot(history.history['loss'])\n",
        "# plt.plot(history.history['val_loss'])\n",
        "plt.title('model loss')\n",
        "plt.ylim(-0.1, 1)\n",
        "plt.ylabel('loss')\n",
        "plt.xlabel('epoch')\n",
        "plt.legend(['train', 'test'], loc='upper left')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 97,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "0.0"
            ]
          },
          "execution_count": 97,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "history.history['loss'][-1]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "pred = model.predict(x)\n",
        "pred"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 99,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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//DrJtljNXz4cAoKCrw/W7du9fk/o1s3+OUX+PRTmDrV/J+bNyuciIiI+INfxoxPOukkIiMjycvLs7yel5dHamqq7frY2FhiY2Mr/b4iI819JiIiIuJffvkEJSYmhlatWpGTk+N9zePxkJOTQ2Zmpj9uSURERAKI3w5qGzp0KH379qV169ace+65PP300+zfv5+bb77ZX7ckIiIiAcJvAaVXr17s2rWLUaNGkZuby9lnn82CBQtsG2dFREQk/PjtHJSK8OU5KCIiIlI1Av4cFBEREZG/ooAiIiIiAUcBRURERAKOAoqIiIgEHAUUERERCTh+GzOuiLLBI19+aaCIiIhUrrK/28cyQByUAWXv3r0APv/SQBEREal8e/fuJTEx8S+vCcpzUDweD9u3b6dmzZq4XK4Tfp/CwkLS09PZunWrzlOpAnreVUvPu2rpeVctPe+q5avnbRgGe/fuJS0tjYiIv95lEpSfoERERNCgQQOfvV9CQoL+H3gV0vOuWnreVUvPu2rpeVctXzzv//XJSRltkhUREZGAo4AiIiIiASesA0psbCwPPvggsbGx/r6VsKDnXbX0vKuWnnfV0vOuWv543kG5SVZERERCW1h/giIiIiKBSQFFREREAo4CioiIiAQcBRQREREJOGEdUJ5//nkaN25MXFwcbdu2ZcWKFf6+paA3btw42rRpQ82aNalbty5du3Zlw4YNlmsOHTrEgAEDqF27NjVq1KB79+7k5eX56Y5Dy2OPPYbL5WLw4MHe1/S8fWvbtm3ccMMN1K5dm/j4eFq0aMGqVau8vzcMg1GjRlGvXj3i4+PJyspi06ZNfrzj4OV2uxk5ciQZGRnEx8dzyimn8Mgjj1i+x0XPu2KWLFlCly5dSEtLw+VyMXfuXMvvj+X57tmzhz59+pCQkEBSUhL9+vVj3759Fb85I0xNmzbNiImJMV599VXju+++M/r3728kJSUZeXl5/r61oNapUyfjtddeM9atW2esXbvWuOKKK4yGDRsa+/bt815z++23G+np6UZOTo6xatUq47zzzjPatWvnx7sODStWrDAaN25snHnmmcbdd9/tfV3P23f27NljNGrUyLjpppuM5cuXGz///LPx4YcfGj/++KP3mscee8xITEw05s6da3z99dfGVVddZWRkZBgHDx70450Hp7Fjxxq1a9c25s+fb2zevNmY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",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "\n",
        "plt.scatter(x, y, c='blue')\n",
        "plt.plot(x, pred, color='g')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "for i in np.arange(1.5,100.5, 1):\n",
        "    print(i)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3.9.16 ('rl3')",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.16"
    },
    "orig_nbformat": 4,
    "vscode": {
      "interpreter": {
        "hash": "9070e15ca35f8308b0c5d51e893fc04d77e428fe4d803a6d9ae4f68a65d8ce17"
      }
    },
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "01a2dbcb714e40148b41c761fcf43147": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "20b0f38ec3234ff28a62a286cd57b933": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "PasswordModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "PasswordModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "PasswordView",
            "continuous_update": true,
            "description": "Token:",
            "description_tooltip": null,
            "disabled": false,
            "layout": "IPY_MODEL_01a2dbcb714e40148b41c761fcf43147",
            "placeholder": "​",
            "style": "IPY_MODEL_90c874e91b304ee1a7ef147767ac00ce",
            "value": ""
          }
        },
        "270cbb5d6e9c4b1e9e2f39c8b3b0c15f": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "VBoxModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "VBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "VBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_a02224a43d8d4af3bd31d326540d25da",
              "IPY_MODEL_20b0f38ec3234ff28a62a286cd57b933",
              "IPY_MODEL_f6c845330d6743c0b35c2c7ad834de77",
              "IPY_MODEL_f1675c09d16a4251b403f9c56255f168",
              "IPY_MODEL_c1a82965ae26479a98e4fdbde1e64ec2"
            ],
            "layout": "IPY_MODEL_3fa248114ac24656ba74923936a94d2d"
          }
        },
        "2dc5fa9aa3334dfcbdee9c238f2ef60b": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "3e753b0212644990b558c68853ff2041": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "3fa248114ac24656ba74923936a94d2d": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": "center",
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "flex",
            "flex": null,
            "flex_flow": "column",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": "50%"
          }
        },
        "42d140b838b844819bc127afc1b7bc84": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "90c874e91b304ee1a7ef147767ac00ce": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "9d847f9a7d47458d8cd57d9b599e47c6": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "a02224a43d8d4af3bd31d326540d25da": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HTMLModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_caef095934ec47bbb8b64eab22049284",
            "placeholder": "​",
            "style": "IPY_MODEL_2dc5fa9aa3334dfcbdee9c238f2ef60b",
            "value": "<center> <img\nsrc=https://huggingface.co/front/assets/huggingface_logo-noborder.svg\nalt='Hugging Face'> <br> Copy a token from <a\nhref=\"https://huggingface.co/settings/tokens\" target=\"_blank\">your Hugging Face\ntokens page</a> and paste it below. <br> Immediately click login after copying\nyour token or it might be stored in plain text in this notebook file. </center>"
          }
        },
        "a2cfb91cf66447d7899292854bd64a07": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c1a82965ae26479a98e4fdbde1e64ec2": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HTMLModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_9d847f9a7d47458d8cd57d9b599e47c6",
            "placeholder": "​",
            "style": "IPY_MODEL_42d140b838b844819bc127afc1b7bc84",
            "value": "\n<b>Pro Tip:</b> If you don't already have one, you can create a dedicated\n'notebooks' token with 'write' access, that you can then easily reuse for all\nnotebooks. </center>"
          }
        },
        "caef095934ec47bbb8b64eab22049284": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "eaba3f1de4444aabadfea2a3dadb1d80": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "ee4a21bedc504171ad09d205d634b528": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "ButtonStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ButtonStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "button_color": null,
            "font_weight": ""
          }
        },
        "f1675c09d16a4251b403f9c56255f168": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "ButtonModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ButtonModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ButtonView",
            "button_style": "",
            "description": "Login",
            "disabled": false,
            "icon": "",
            "layout": "IPY_MODEL_a2cfb91cf66447d7899292854bd64a07",
            "style": "IPY_MODEL_ee4a21bedc504171ad09d205d634b528",
            "tooltip": ""
          }
        },
        "f6c845330d6743c0b35c2c7ad834de77": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "CheckboxModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "CheckboxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "CheckboxView",
            "description": "Add token as git credential?",
            "description_tooltip": null,
            "disabled": false,
            "indent": true,
            "layout": "IPY_MODEL_3e753b0212644990b558c68853ff2041",
            "style": "IPY_MODEL_eaba3f1de4444aabadfea2a3dadb1d80",
            "value": true
          }
        }
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}