diff --git a/notebooks/023_train_prob.ipynb b/notebooks/023_train_prob.ipynb index edfa098..77a0859 100644 --- a/notebooks/023_train_prob.ipynb +++ b/notebooks/023_train_prob.ipynb @@ -30,18 +30,9 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "# import your package\n", "%load_ext autoreload\n", @@ -50,20 +41,9 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'4.30.1'" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "\n", "import numpy as np\n", @@ -109,23 +89,9 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Dataset({\n", - " features: ['hs0', 'scores0', 'hs1', 'scores1', 'true', 'index', 'label', 'prompt', 'lie', 'prompt_truncated', 'choice_probs0', 'ans0', 'choice_probs1', 'ans1', 'txt_ans0', 'txt_ans1'],\n", - " num_rows: 8000\n", - "})" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from datasets import load_from_disk, concatenate_datasets\n", "fs = [\n", @@ -140,7 +106,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -156,336 +122,9 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
trueindexlabelpromptlieprompt_truncatedchoice_probs0ans0choice_probs1ans1txt_ans0txt_ans1dir_trueconfllm_probllm_ansdesired_ans
0101<|system|>You are about to immerse yourself in...Truea logical and acting challenge with the user....[0.22739114, 0.32173195]0.585891[0.18396124, 0.32755876]0.640351FalseFalse0.0544600.0544600.613121TrueFalse
1111<|system|>You are about to immerse yourself in...Trueimmerse yourself into a logical and acting ch...[0.25901857, 0.4212554]0.619235[0.47956395, 0.23963346]0.333191FalseFalse-0.2860440.2860440.476213FalseFalse
2120<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.0715705, 0.18076265]0.716337[0.13181257, 0.2730088]0.674377TrueTrue-0.0419600.0419600.695357TrueTrue
3131<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.30210826, 0.5331971]0.638318[0.23405011, 0.6686262]0.740707TrueTrue0.1023890.1023890.689513TrueFalse
4141<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.10550346, 0.068647005]0.394160[0.37910712, 0.10449116]0.216066FalseFalse-0.1780940.1780940.305113FalseFalse
......................................................
7995079951<|system|>You are about to immerse yourself in...True. Once you have determined if you are the lyin...[0.3253376, 0.13291252]0.290037[0.33912086, 0.11056756]0.245870FalseFalse-0.0441670.0441670.267954FalseFalse
7996179961<|system|>You are about to immerse yourself in...Truedetermined if you are the lying Guard or the ...[0.18918358, 0.28532732]0.601296[0.4284532, 0.30026284]0.412038FalseFalse-0.1892580.1892580.506667TrueFalse
7997079970<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.28222632, 0.304502]0.518974[0.13210776, 0.19038554]0.590337TrueTrue0.0713630.0713630.554655TrueTrue
7998079981<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.24055526, 0.41276416]0.631786[0.35980803, 0.38881692]0.519368TrueTrue-0.1124180.1124180.575577TrueFalse
7999179991<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.5347394, 0.29575846]0.356118[0.41391683, 0.46787095]0.530588FalseTrue0.1744700.1744700.443353FalseFalse
\n", - "

8000 rows × 17 columns

\n", - "
" - ], - "text/plain": [ - " true index label prompt \n", - "0 1 0 1 <|system|>You are about to immerse yourself in... \\\n", - "1 1 1 1 <|system|>You are about to immerse yourself in... \n", - "2 1 2 0 <|system|>You are about to immerse yourself in... \n", - "3 1 3 1 <|system|>You are about to immerse yourself in... \n", - "4 1 4 1 <|system|>You are about to immerse yourself in... \n", - "... ... ... ... ... \n", - "7995 0 7995 1 <|system|>You are about to immerse yourself in... \n", - "7996 1 7996 1 <|system|>You are about to immerse yourself in... \n", - "7997 0 7997 0 <|system|>You are about to immerse yourself in... \n", - "7998 0 7998 1 <|system|>You are about to immerse yourself in... \n", - "7999 1 7999 1 <|system|>You are about to immerse yourself in... \n", - "\n", - " lie prompt_truncated \n", - "0 True a logical and acting challenge with the user.... \\\n", - "1 True immerse yourself into a logical and acting ch... \n", - "2 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "3 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "4 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "... ... ... \n", - "7995 True . Once you have determined if you are the lyin... \n", - "7996 True determined if you are the lying Guard or the ... \n", - "7997 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "7998 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "7999 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "\n", - " choice_probs0 ans0 choice_probs1 ans1 \n", - "0 [0.22739114, 0.32173195] 0.585891 [0.18396124, 0.32755876] 0.640351 \\\n", - "1 [0.25901857, 0.4212554] 0.619235 [0.47956395, 0.23963346] 0.333191 \n", - "2 [0.0715705, 0.18076265] 0.716337 [0.13181257, 0.2730088] 0.674377 \n", - "3 [0.30210826, 0.5331971] 0.638318 [0.23405011, 0.6686262] 0.740707 \n", - "4 [0.10550346, 0.068647005] 0.394160 [0.37910712, 0.10449116] 0.216066 \n", - "... ... ... ... ... \n", - "7995 [0.3253376, 0.13291252] 0.290037 [0.33912086, 0.11056756] 0.245870 \n", - "7996 [0.18918358, 0.28532732] 0.601296 [0.4284532, 0.30026284] 0.412038 \n", - "7997 [0.28222632, 0.304502] 0.518974 [0.13210776, 0.19038554] 0.590337 \n", - "7998 [0.24055526, 0.41276416] 0.631786 [0.35980803, 0.38881692] 0.519368 \n", - "7999 [0.5347394, 0.29575846] 0.356118 [0.41391683, 0.46787095] 0.530588 \n", - "\n", - " txt_ans0 txt_ans1 dir_true conf llm_prob llm_ans desired_ans \n", - "0 False False 0.054460 0.054460 0.613121 True False \n", - "1 False False -0.286044 0.286044 0.476213 False False \n", - "2 True True -0.041960 0.041960 0.695357 True True \n", - "3 True True 0.102389 0.102389 0.689513 True False \n", - "4 False False -0.178094 0.178094 0.305113 False False \n", - "... ... ... ... ... ... ... ... \n", - "7995 False False -0.044167 0.044167 0.267954 False False \n", - "7996 False False -0.189258 0.189258 0.506667 True False \n", - "7997 True True 0.071363 0.071363 0.554655 True True \n", - "7998 True True -0.112418 0.112418 0.575577 True False \n", - "7999 False True 0.174470 0.174470 0.443353 False False \n", - "\n", - "[8000 rows x 17 columns]" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# lets select only the ones where\n", "df = ds2df(ds1)\n", @@ -494,30 +133,9 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "selected rows are 39.62%\n" - ] - }, - { - "data": { - "text/plain": [ - "Dataset({\n", - " features: ['hs0', 'scores0', 'hs1', 'scores1', 'true', 'index', 'label', 'prompt', 'lie', 'prompt_truncated', 'choice_probs0', 'ans0', 'choice_probs1', 'ans1', 'txt_ans0', 'txt_ans1'],\n", - " num_rows: 3170\n", - "})" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# # just select the question where the model knows the answer. \n", "# d = df.query('version==\"truth\"').set_index(\"index\")\n", @@ -548,7 +166,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -592,165 +210,9 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
trueindexlabelpromptlieprompt_truncatedchoice_probs0ans0choice_probs1ans1txt_ans0txt_ans1dir_trueconfllm_probllm_ansdesired_ans
0111<|system|>You are about to immerse yourself in...Trueimmerse yourself into a logical and acting ch...[0.25901857, 0.4212554]0.619235[0.47956395, 0.23963346]0.333191FalseFalse-0.2860440.2860440.476213FalseFalse
1131<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.30210826, 0.5331971]0.638318[0.23405011, 0.6686262]0.740707TrueTrue0.1023890.1023890.689513TrueFalse
2141<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.10550346, 0.068647005]0.394160[0.37910712, 0.10449116]0.216066FalseFalse-0.1780940.1780940.305113FalseFalse
3050<|system|>You are about to immerse yourself in...Truechallenge with the user. You take a role from...[0.38293982, 0.24977545]0.394761[0.30316868, 0.10313009]0.253822FalseFalse-0.1409390.1409390.324292FalseTrue
\n", - "
" - ], - "text/plain": [ - " true index label prompt \n", - "0 1 1 1 <|system|>You are about to immerse yourself in... \\\n", - "1 1 3 1 <|system|>You are about to immerse yourself in... \n", - "2 1 4 1 <|system|>You are about to immerse yourself in... \n", - "3 0 5 0 <|system|>You are about to immerse yourself in... \n", - "\n", - " lie prompt_truncated \n", - "0 True immerse yourself into a logical and acting ch... \\\n", - "1 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "2 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "3 True challenge with the user. You take a role from... \n", - "\n", - " choice_probs0 ans0 choice_probs1 ans1 \n", - "0 [0.25901857, 0.4212554] 0.619235 [0.47956395, 0.23963346] 0.333191 \\\n", - "1 [0.30210826, 0.5331971] 0.638318 [0.23405011, 0.6686262] 0.740707 \n", - "2 [0.10550346, 0.068647005] 0.394160 [0.37910712, 0.10449116] 0.216066 \n", - "3 [0.38293982, 0.24977545] 0.394761 [0.30316868, 0.10313009] 0.253822 \n", - "\n", - " txt_ans0 txt_ans1 dir_true conf llm_prob llm_ans desired_ans \n", - "0 False False -0.286044 0.286044 0.476213 False False \n", - "1 True True 0.102389 0.102389 0.689513 True False \n", - "2 False False -0.178094 0.178094 0.305113 False False \n", - "3 False False -0.140939 0.140939 0.324292 False True " - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df = ds2df(ds)\n", "df.head(4)" @@ -758,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -780,7 +242,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -790,20 +252,9 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(13, 6)" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "batch_size = 120\n", "# test and cache\n", @@ -817,20 +268,9 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "torch.Size([120, 6144, 37])" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "b = next(iter(dl_train))\n", "x0, x1, y = b\n", @@ -883,7 +323,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -892,31 +332,9 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "split size 1585\n", - "lr\n" - ] - }, - { - "data": { - "text/html": [ - "
LogisticRegression(class_weight='balanced')
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" - ], - "text/plain": [ - "LogisticRegression(class_weight='balanced')" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "n = len(df)\n", "\n", @@ -948,7 +366,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -957,30 +375,9 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logistic cls acc: 100.00% [TRAIN]\n", - "Logistic cls acc: 57.67% [TEST]\n", - "test acc w lie 57.67%\n", - "test acc wo lie nan%\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_143152/3214049281.py:7: RuntimeWarning: Mean of empty slice.\n", - " acc_wo_lie = ((y_test_pred[~m]>0)==(y_test[~m]>0)).mean()\n", - "/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/numpy/core/_methods.py:129: RuntimeWarning: invalid value encountered in scalar divide\n", - " ret = ret.dtype.type(ret / rcount)\n" - ] - } - ], + "outputs": [], "source": [ "print(\"Logistic cls acc: {:2.2%} [TRAIN]\".format(lr.score(X_train2, y_train>0)))\n", "print(\"Logistic cls acc: {:2.2%} [TEST]\".format(lr.score(X_test2, y_test>0)))\n", @@ -995,7 +392,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1013,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1030,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1052,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1064,59 +461,15 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "torch.Size([120, 6144, 37])\n" - ] - }, - { - "data": { - "text/plain": [ - "PLConvProbe(\n", - " (probe): ConvProbe(\n", - " (net): Sequential(\n", - " (0): BatchNorm1d(6144, eps=1e-05, momentum=0.1, affine=False, track_running_stats=True)\n", - " (1): Dropout1d(p=0, inplace=False)\n", - " (2): Conv1d(6144, 48, kernel_size=(2,), stride=(1,))\n", - " (3): ReLU()\n", - " (4): BatchNorm1d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (5): Conv1d(48, 36, kernel_size=(2,), stride=(1,))\n", - " (6): ReLU()\n", - " (7): BatchNorm1d(36, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (8): Conv1d(36, 24, kernel_size=(2,), stride=(1,))\n", - " (9): ReLU()\n", - " (10): BatchNorm1d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (11): Conv1d(24, 12, kernel_size=(2,), stride=(1,))\n", - " (12): ReLU()\n", - " (13): BatchNorm1d(12, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (14): AdaptiveAvgPool1d(output_size=1)\n", - " )\n", - " (head): Sequential(\n", - " (0): Linear(in_features=12, out_features=12, bias=True)\n", - " (1): ReLU()\n", - " (2): Dropout(p=0, inplace=False)\n", - " (3): Linear(in_features=12, out_features=1, bias=True)\n", - " )\n", - " )\n", - ")" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# init the model\n", "max_epochs = 42\n", "c_in = b[0].shape[1]\n", "print(b[0].shape)\n", - "net = PLConvProbe(c_in=c_in, total_steps=max_epochs*len(dl_train), depth=3, hs=12, lr=3e-3, \n", + "net = PLConvProbe(c_in=c_in, total_steps=max_epochs*len(dl_train), depth=5, hs=42, lr=3e-3, \n", " # weight_decay=1e-4, \n", " # dropout=0.2,\n", " )\n", @@ -1125,20 +478,9 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(torch.Size([120]), torch.Size([120]))" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# DEBUG\n", "with torch.no_grad():\n", @@ -1150,7 +492,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1161,62 +503,13 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 90, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Using bfloat16 Automatic Mixed Precision (AMP)\n", - "GPU available: True (cuda), used: True\n", - "TPU available: False, using: 0 TPU cores\n", - "IPU available: False, using: 0 IPUs\n", - "HPU available: False, using: 0 HPUs\n", - "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n", - "\n", - " | Name | Type | Params\n", - "------------------------------------\n", - "0 | probe | ConvProbe | 596 K \n", - "------------------------------------\n", - "596 K Trainable params\n", - "0 Non-trainable params\n", - "596 K Total params\n", - "2.384 Total estimated model params size (MB)\n" - ] - }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b6e1b07fdd8a4720b7240a287702ec34", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Sanity Checking: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3f3b4b2e7da04d6b8eaf56a098fe00ac", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Training: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1052481803624e318f9060f30fa27a5b", + "model_id": "0611e9a170c1439383d4061e812ff420", "version_major": 2, "version_minor": 0 }, @@ -1230,7 +523,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5bd7829619fd423987d70165f396c9c8", + "model_id": "82d1074681ad4a22a739a58a2d8f43da", "version_major": 2, "version_minor": 0 }, @@ -1244,7 +537,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2f68782c88bc4b46a6da4e5ea5fbd28e", + "model_id": "e664be49b39e4349b4c4bad96202cb86", "version_major": 2, "version_minor": 0 }, @@ -1258,7 +551,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3905cb827ed84448bda1aaff3d8ed569", + "model_id": "3039ddc7f140455bb490d88ee34cfdb8", "version_major": 2, "version_minor": 0 }, @@ -1272,7 +565,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e927ad17ed30482b9c14135890e0850c", + "model_id": "514d11cdbc224d758f38bec7f378807a", "version_major": 2, "version_minor": 0 }, @@ -1282,531 +575,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6cab9b49c75145799632428e60a73c71", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "dbd29abf884c48148bc72f4de3d51106", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "5b99331bb5f34dc2a2f19de6e3a76924", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "db2fb2cd40a84f428a23607ba53c2db2", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8781d48d5a6e4049a4f61518e2012d42", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3f42661c2c614f108a224856e6557abc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f92aecc2c74d41d58677fd14b0087046", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "92446bff22734a3da0c01e32a13e9051", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "35ec6c603bea40d2b2611eb81567c0ab", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3287f50bccce40b8a0c0a59ea00cc0cd", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8efd98f3c2184d8bbcd68261c40738bc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d746a54ffd424233ab16206f494e5f52", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "64a1c6c769e242a8b8073eaaa3ae2e78", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ce0e5cf635b446b68b9d931425134bc6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e346af73146548c997881c7ad9645a80", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "0677a37fdc9c441f84155f426f0de75a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2ac4d94201fa455681ba7d7c37e5b2ef", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4e49dded3bc0435190355aa5260692e8", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a81ff957e66c4532b281b11602b68548", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "740f9b3abb3d4b7f87394b21bde8489b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3da379fb3ea9492490344c9d26096aa9", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c69aa4b03ba44f90ac8f028f9c70a8ee", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "5cfeb9eca6844951aa64eb65d31b8e92", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "69c91d16c4434586afa8e6844199ce9e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6c22639d144c46d69e6181eb87920bcc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "550a5488f5524a7ea3b1e52948038d12", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4b8b7ebfeb0849e9a60c96f9aabba024", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1a10648e30c14c1db16fa208c754a4fb", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "61dec5469a9d412bad77f0c3201ddaab", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "acadb6bf3eef48f38c30a8acf62cac47", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c7ef60827b3d4b91932ccdba0558187f", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6b6d02b47716437093cecd3795c24a0c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c8924735cc9d44978d3787d78a1f986d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1b57b24e97ff4c889a79196eaa3cd72b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "85bb6351b4d5448cb785f347ecbbc15d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c967f43c4ea94558a99f47f2992d8f45", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4817f7bfe9ae48ffa2e243f7fc470e98", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "`Trainer.fit` stopped: `max_epochs=42` reached.\n" - ] } ], "source": [ @@ -1827,438 +595,9 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
val/accval/losssteptrain/acctrain/loss
epoch
00.5347220.01674612.00.5346150.018464
10.6097220.01599825.00.7115380.012263
20.7722220.01206638.00.7948720.009732
30.6736110.01396451.00.8429490.007803
40.7861110.01028864.00.8801280.006537
50.6847220.01403677.00.8923080.005901
60.5597220.01886190.00.9224360.005012
70.7277780.012232103.00.9423080.004662
80.8180560.009594116.00.9237180.005102
90.8291670.009574129.00.9237180.004989
100.7708330.010423142.00.9403850.004112
110.7958330.010255155.00.9750000.003363
120.8555560.007453168.00.9730770.002933
130.8555560.007326181.00.9685900.003108
140.8486110.007553194.00.9743590.002627
150.7763890.011073207.00.9737180.002688
160.8013890.009632220.00.9903850.002391
170.8194440.010600233.00.9903850.002235
180.8680560.006916246.00.9903850.001960
190.8638890.007188259.00.9961540.001801
200.8472220.007674272.01.0000000.001812
210.8569440.008530285.01.0000000.001717
220.8000000.009698298.00.9980770.001618
230.8597220.007133311.00.9961540.001561
240.8625000.006956324.00.9980770.001457
250.8319440.008480337.00.9967950.001651
260.8333330.010075350.00.9967950.001557
270.8763890.007030363.00.9948720.001549
280.8722220.006981376.00.9980770.001133
290.8513890.006884389.00.9961540.001255
300.8500000.008781402.00.9993590.001194
310.8388890.008438415.00.9993590.000940
320.8569440.006885428.01.0000000.000828
330.8513890.007073441.00.9993590.000678
340.8569440.007002454.01.0000000.000600
350.8527780.007076467.01.0000000.000506
360.8527780.007642480.01.0000000.000409
370.8625000.006794493.01.0000000.000289
380.8513890.006919506.01.0000000.000217
390.8541670.006855519.01.0000000.000194
400.8527780.006956532.01.0000000.000219
410.8555560.006868545.01.0000000.000207
\n", - "
" - ], - "text/plain": [ - " val/acc val/loss step train/acc train/loss\n", - "epoch \n", - "0 0.534722 0.016746 12.0 0.534615 0.018464\n", - "1 0.609722 0.015998 25.0 0.711538 0.012263\n", - "2 0.772222 0.012066 38.0 0.794872 0.009732\n", - "3 0.673611 0.013964 51.0 0.842949 0.007803\n", - "4 0.786111 0.010288 64.0 0.880128 0.006537\n", - "5 0.684722 0.014036 77.0 0.892308 0.005901\n", - "6 0.559722 0.018861 90.0 0.922436 0.005012\n", - "7 0.727778 0.012232 103.0 0.942308 0.004662\n", - "8 0.818056 0.009594 116.0 0.923718 0.005102\n", - "9 0.829167 0.009574 129.0 0.923718 0.004989\n", - "10 0.770833 0.010423 142.0 0.940385 0.004112\n", - "11 0.795833 0.010255 155.0 0.975000 0.003363\n", - "12 0.855556 0.007453 168.0 0.973077 0.002933\n", - "13 0.855556 0.007326 181.0 0.968590 0.003108\n", - "14 0.848611 0.007553 194.0 0.974359 0.002627\n", - "15 0.776389 0.011073 207.0 0.973718 0.002688\n", - "16 0.801389 0.009632 220.0 0.990385 0.002391\n", - "17 0.819444 0.010600 233.0 0.990385 0.002235\n", - "18 0.868056 0.006916 246.0 0.990385 0.001960\n", - "19 0.863889 0.007188 259.0 0.996154 0.001801\n", - "20 0.847222 0.007674 272.0 1.000000 0.001812\n", - "21 0.856944 0.008530 285.0 1.000000 0.001717\n", - "22 0.800000 0.009698 298.0 0.998077 0.001618\n", - "23 0.859722 0.007133 311.0 0.996154 0.001561\n", - "24 0.862500 0.006956 324.0 0.998077 0.001457\n", - "25 0.831944 0.008480 337.0 0.996795 0.001651\n", - "26 0.833333 0.010075 350.0 0.996795 0.001557\n", - "27 0.876389 0.007030 363.0 0.994872 0.001549\n", - "28 0.872222 0.006981 376.0 0.998077 0.001133\n", - "29 0.851389 0.006884 389.0 0.996154 0.001255\n", - "30 0.850000 0.008781 402.0 0.999359 0.001194\n", - "31 0.838889 0.008438 415.0 0.999359 0.000940\n", - "32 0.856944 0.006885 428.0 1.000000 0.000828\n", - "33 0.851389 0.007073 441.0 0.999359 0.000678\n", - "34 0.856944 0.007002 454.0 1.000000 0.000600\n", - "35 0.852778 0.007076 467.0 1.000000 0.000506\n", - "36 0.852778 0.007642 480.0 1.000000 0.000409\n", - "37 0.862500 0.006794 493.0 1.000000 0.000289\n", - "38 0.851389 0.006919 506.0 1.000000 0.000217\n", - "39 0.854167 0.006855 519.0 1.000000 0.000194\n", - "40 0.852778 0.006956 532.0 1.000000 0.000219\n", - "41 0.855556 0.006868 545.0 1.000000 0.000207" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from src.helpers.lightning import read_metrics_csv\n", "\n", @@ -2268,20 +607,9 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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DaB2801qN9+kdvM9vthmCi8NYFkWu3fvRp1VvkXt5pvUbr5J7eZ7fLHNFF5ERETEpyi8iIiIiE9ReGkAp9PJZZddhtPp9HYp0gBqN9+kdvNNajff44ttptlGIiIi4lPU8yIiIiI+ReFFREREfIrCi4iIiPgUhRcRERHxKdp8op5SUlL4/PPPKSgooGPHjlx//fV07drV22XJQVu3buWzzz5j9+7d5Ofnc9dddzFo0KC65y3LYubMmSxatIjS0lJ69uzJjTfeSHx8vBerlo8//pi1a9eSnp6On58f3bt35+qrr6Zdu3Z1x1RVVTFjxgxWrlxJdXU1/fr148YbbyQiIsJ7hbdy8+fPZ/78+eTk5ACQmJjIZZddxoABAwC1mS/45JNPeO+99zj33HO59tprAd9qN/W81MPKlSuZMWMGl112Gc888wwdO3bkiSeeoLCw0NulyUGVlZUkJSVxww03HPX5Tz/9lLlz53LTTTfx5JNP4u/vzxNPPEFVVVUTVyo/t3XrViZOnMgTTzzBAw88QG1tLY8//jgVFRV1x/z3v/9lw4YN/PnPf+aRRx4hPz+f6dOne7FqiYqK4sorr+Tpp5/mqaeeok+fPjz77LPs27cPUJs1dzt27GDBggV07NjxsMd9qt0sOaG//OUv1htvvFH3cW1trXXzzTdbH3/8sfeKkmO6/PLLrTVr1tR97HK5rJtuusn69NNP6x4rLS21rrzySuurr77yRolyDIWFhdbll19ubdmyxbIsdztdccUV1qpVq+qOSUtLsy6//HJr27Zt3ipTjuLaa6+1Fi1apDZr5srLy60//vGP1jfffGM99NBD1r///W/Lsnzva009LydQU1PDrl276Nu3b91jNpuNvn378uOPP3qxMqmv7OxsCgoKOP300+seCwoKomvXrmrDZqasrAyAkJAQAHbt2kVtbe1hX38JCQlER0er7ZoJl8vFihUrqKyspHv37mqzZu6NN95gwIABh30/BN/7WtOYlxMoKirC5XIdcc8vIiKCjIwM7xQlDVJQUABAeHj4YY+Hh4fXPSfe53K5+M9//kOPHj3o0KED4G47h8NBcHDwYceq7bxv79693H///VRXVxMQEMBdd91FYmIiqamparNmasWKFezevZunnnrqiOd87WtNPS8i0iy8+eab7Nu3j9tvv93bpUg9tGvXjmnTpvHkk08y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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "for key in ['loss']:\n", " df_hist[[c for c in df_hist.columns if key in c]].plot(logy=True)" @@ -2289,20 +617,9 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAG0CAYAAADgoSfXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABzS0lEQVR4nO3deXyU1b348c95MpN9mewJARJ2UBBQEXdBKi6lVVq1det1w9prF29/1lZt61LRqvW2t9XWe6u10haX2uKGVRSwbogLKJtssoYkJCGZyZ7MzHN+fzwzkwQSkklmTb7v18sXme15TuYxmW++53u+R2mtNUIIIYQQUWJEewBCCCGEGN4kGBFCCCFEVEkwIoQQQoiokmBECCGEEFElwYgQQgghokqCESGEEEJElQQjQgghhIgqCUaEEEIIEVUSjAghhBAiqmzRHkAw6uvr8Xg8IT1mfn4+NTU1IT2mCD+5bvFJrlt8kusWn2LhutlsNrKzs/t+XgTGEjIejwe32x2y4ymlAseVrvjxQ65bfJLrFp/kusWneLtuMk0jhBBCiKiSYEQIIYQQUSXBiBBCCCGiSoIRIYQQQkRVXBWwHk1zczMejydQtNNfra2tdHR0hGlU4mhSU1Ox2YbM/4JCCCEGaEh8ErS3t6OUIisrK+jX2u32kK7QEf1jmiaNjY2kpaVJQCKEEMPckJimaW9vJyUlJdrDEEEwDIOMjAxaWlqiPRQhhBBRNiSCESDo6RkRfYYxZP73E0IIMQjyaSCEEEKIqJJgRAghhBBRFXTl4JYtW3jppZfYvXs39fX13HLLLZx00klHfc3mzZtZsmQJ+/fvJzc3l69//evMmTNnoGMWQgghxBASdGakvb2dsrIyrrvuun49v7q6ml/+8pcce+yxPPjgg3z5y1/mscce49NPPw321OIws2fP5o9//GO0hyGEEEIMStCZkZkzZzJz5sx+P3/FihUUFBTwrW99C4CRI0eydetWli9fzowZM4I9veiHk08+mQcffJAzzzwz2kMRIsBjaipdrVQ3ufu1cVdigiIrOUGK04cYr6lp95q0ezRerUlKMEi2KWyGGtS19h+3zaPxeGN/Y7hwU0pBED9vANkpCdgTolO9EfYGDzt27GDatGnd7ps+fTp//vOfe32N2+3u1vtDKRVYuiu/mI5uy5YtuFwuTjnllGgPpd+Cvab+58v/C7HNa2p21rWxsaqZjQdb+LymhTZPcB8SiQmKgjQ7Bel2CtLsFKYnUuj7uiDdTlaSBCvhoLWmtsXDjkOt7DjURsPHh2hrbevXa71a0+YxafNYAYf1b+fXbrPn/wcMBck2g6QERZLNINn3n/W1IsFQAzru8LYzqGc/eG4Zk/Oj0yYj7MGI0+k8ohlZVlZWoPNpYmLiEa9ZtmwZzz//fOD2mDFjeOCBB8jPz+/xHK2trdjtdsD6IaKjvd/j0+3e0L0JiUn9/sW4ZMkSHnroIT777LNuS1y/9a1vkZ2dzc0338ydd97Jxx9/TEtLCxMnTuSOO+7grLPOCjxXKUVCQkLgewd48803Ofvss0lNTaWuro7bbruNNWvW4HK5KCsr4wc/+AFf+9rXAs83TZNHH32Uv/zlL1RUVJCfn8+3vvUt/uu//guAiooK7r77blavXk1HRwcTJkzgl7/8JSeccMJg3y0AEhMTKS4uHtBri4qKQjIGERoe02TbwSbW7a/n431OPi130uL2dnuOzbA+VPqjw2PS4dWUN3RQ3tBzl+Rku0FxZgojspIZkZUc+Lo4K5kRWSlkJdv69TPZ4TGpbGij0tVKRUMbla42KlytNHd4caTYyU5NJDvFTnaa79/URLJT7eSkJpJsT+jX9xMOHtNkV20zmysb2FzVQF2zm6LMJIozUyjxvQ/F/XgfGtrcfF7VGDjO5soGDjWHtzO1AgxD4fUFEaaGFrdJixvAe7SX9nlce4KBxKjBy8/Lpbg4+OahoRCTrS8XLlzIggULArf9P0Q1NTV4PJ4jnt/R0RHIpOj2NszvXhqZgR7GeOQ5VFJyv557/vnnc/vtt/PWW29xxhlnAFBfX8+qVatYsmQJLpeLOXPm8KMf/YjExESef/55rrrqKt5++21KSkoAK/Dyer3dskivvfYaN9xwA263m6amJqZOncqNN95IRkYGK1eu5KabbmLkyJGBqbbFixezdOlS7rzzTk466SSqq6vZuXMnbreb5uZmLrzwQoqKinjyySfJz89n48aN3d7vwero6KCysjKo1yilKCoqoqqqqt/pRxEeFQ0drC1vZOPBFrZUt9DiNrs9np5oMLUwlWmFaUwrSmP25FKqDx7s13VzezWHWtwcbHZzsMlNdVMH1c1uqpus++paPLS5TXYfamb3oeYej5FiMyhIt1PYJbuSYjeo8R3zoO94da1H/l7pr6QERVayjbREg/5+/iUmGOT7xlR42Ph6S5NrrTnY5Gb7oVZ21Lax/VArX9S10dGPKYkUu2FlltKs8xWk21FKsaPWynxUNB4ZeBgKyhxJTMxLZcrIPJqbGqEf181QBDIb/qxG4HZC5+3EBGtaxmMemeVo85iBqRz/Y15TH5YxOfpxh7uB/Z5sobIytI0obTZbr4mEbs8L6Vl74HA4cLlc3e5zuVykpKT0mBUBq0V717/2uxoqHz4Oh4O5c+fywgsvBIKR5cuXk5OTw2mnnYZhGBx77LGB599666289tprrFixgmuuuabHY1ZWVvL5558zd+5cAIqLi7nxxhsDj1977bW89dZbvPzyy8ycOZOmpiaeeOIJ7r33Xi691ArgysrKAqujli1bxqFDh1i+fDnZ2dmAlaUKtYFeU631kPn/IZ60uL28t7eRlbtcfF7T2u2xNLvBMQWpTCu0/ivLTsLoMq1mKNXv62YzsD6o0+1QeOTjbq9JbYvHCiqa3N0CleqmDurbvLR6TPY629nr7DtbmpSguk0BFabbSbMn0NDupaHdi7PNQ0ObF1e7B1ebF1ebF7epafdqqpvd0HM81Kutta093p+TYvNNSVljUQp2HmpjR10bje1HZgxS7Qbjc5OZmJtCXqqN2haP733ooLrJbb0P7r7fh+IMOxNyU5iQm8yE3GTGZieTZDNQSlFcXExlZWXIf9601iQo6/+bNHvoahXk90KnePk9GfZgZMKECaxfv77bfRs2bGDixInhOWFiEsYjz/X76SHdmyYxKainL1y4kFtvvZX77ruPpKQkli1bxle/+lUMw6C5uZmHH36YlStXUl1djcfjoa2tjQMHDvR6vBUrVjBr1qzAtJjX6+W3v/0tr7zyClVVVXR0dNDR0RGov9mxYwft7e2cfvrpPR5v8+bNTJ06NRCIiOHL1JrN1S2s/MLF+/saaff9NW4oOK4wlRnFaUwrTGNMdlK/p2EGy55gUJyRSHFGz3/UtHtMalp8AYovWDnY5KbNY1oBR5egoyDNTmaQ9Sdaa1o9Jq42K1hp7uj/1EKbx6Sm2cPBQLbHw8HmDto8mrpWD3Wtnh6DFZuhGJOdxMTcZCtwyEtmREZiIODr9X1o7vz+/f96TM24HCvwGJ+bQmZS9KabhAg6GGlra6Oqqipwu7q6mj179pCenk5eXh5Lly6lrq6O7373uwDMnz+f119/nb/+9a/MnTuXTZs2sWbNGn7yk5+E7rvoQikF/ZwqAVB2O8qIzg/hOeecg9aalStXMn36dNauXctdd90FwD333MM777zDz372M8rKykhOTuaGG2446g7Db7zxBvPnzw/c/sMf/sATTzzB3XffzeTJk0lNTeXOO+8MBF/JyUd/n/p6XAx91U1uVu12sWqXi4NNnUH7iIxE5o3LYu6YTHJTe85iRluSzWBkZhIjM4P7I6G/lFKk2hNItSdQnDH442mtaWz3WpmdwNSUG3eXoKHMkRT0aockm8HIrCRGZoXnfRAiFIIORr744gvuvvvuwO0lS5YAcNZZZ3HTTTdRX19PbW1t4PGCggJ+8pOf8NRTT/Hqq6+Sm5vLjTfeKMt6sT7szz//fJYtW8aePXsYN25cYOXRxx9/zCWXXML5558PQHNzM+Xl5b0eq7m5mffff5/7778/cN9HH33Eueeey9e//nXAKlbdtWtXICs1ZswYkpOTeffdd7n88suPOOaUKVN4+umnqa+vl+xIDDK1ptzVgRmGFOweZzsrd7nYWNWC/+gpNoMzyjI4e2wWk/NSZF4+xJRSZCbbyEy2MSFXNv4Uw0vQwcixxx7Lc8/1Pg1y00039fiaBx98MNhTDQsLFy7k6quvZtu2bd1WuYwZM4Z//etfnHPOOSileOihhzBNs9fjrF69mrFjxzJq1Khux1i+fDkfffQRDoeD//u//6O2tjYQjCQnJ3PTTTexePFi7HY7s2bN4tChQ2zfvp3LLruMiy66iN/97ndcd9113HbbbRQUFLBp0yYKCws58cQTw/emiD61uL3cuXI/2w/1b7nlYBxXmMq8cVmcMiqDJJvsICGECL2YXE0znJx++uk4HA6++OILFi5cGLj/zjvv5Ic//CEXXnghOTk53HTTTTQ1NfV6nNdff51zzjmn230/+MEP2LdvH1dccQUpKSlcccUVnHvuuTQ2Ngaec/PNN5OQkMCvfvUrDh48SEFBAVdddRVgLbt9+umnufvuu7nqqqvweDxMnDiRxYsXh/hdEMFwe03u//cBth9qw24o0hJDHyCkJyZwRmkmc8dmUpjec02GEEKEitLxUGbrU1NT02OxaUNDA5mZmQM6ZkgLWKPE4/Ewffp0/vrXvwbVHTcWDOTahbO6P9Z5Tc2v3qvg/X2NJNsM7v3SqLhJ6Q/n6xbP5LrFp1i5bna7vV9LeyXnOgQ4nU4WLVokdThDnNaa//3oIO/va8RmKG4/qyRuAhEhhDgamaYZAvLy8rj55pujPQwRZk9vrOX1nU4U8MNTi5lelBbtIQkhREhIZkSIOLB8Wz3PbjwEwLdnFXJa6cCmJYUQIhZJMCJEjHt7TwN//PggAJcdl8f5E2WZtRBiaJFgRIgYtr6ymf9ZU4EGLpjo4BtTc6M9JCGECDkJRoSIUdtrW/nl2+V4TDi9NINFJxZKozEhxJAkwYgQMajc1c49b5XT5tHMKErl5lNGHHX/ESGEiGcSjIghz+3tvXNtLKptcXPnqv00tnuZkJvMj88swZ4ggYgQYuiSpb1iSPvdB5W8+YWLjKSEbtuyB7723U4OU5vzpg4v7+5tYHd9O/YERXKCQbLNIMmmSLJ1+dp3f4IBv3m/ktoWDyWZifxszkhS7bKbqhBiaJNgZAiYPXs2119/PYsWLYr2UGJKZWMHK79wAdDY7qWx3csXdT3v5ZKVbAUrJZmJzCxO4/jiNDKTB/bjYWrNhqoWVn7h4oPyRjq8wXc/zE2xcdfcUWQNcAxCCBFP5DddlFx88cUcc8wx3HPPPYM+1quvvkpqamrQrysvL+ess85iw4YNpKUNvQZaL2+rRwMzi9O4ema+tTV7kzvwb7Xv32a3iavNi6vNy45Dbby1uwFDwcTcFE4sSWNWSTqljqQ+i0crGztYtcvFql0uals8gftHZyVy0sgMTK1p92raPSZtHpN2j0m7R/u+1rR5rftyU23cfMoICtLtYX6HhBAiNkgwEqO01ni9Xmy2vi9Rbu7Alnu+/vrrnHrqqUMyEGnq8LLyCycAF03JoSw7mbLs5F6f6w9Sdh5q4+MDTexxtrO1tpWtta389bNaclNtnDginVkl6RxXlBrYvbbVbfL+vgZW7nKxubo1cMy0RIMzSzOZNy6L8TnJsgpGCCGOYsgVsGpt/aXZ7//cQTy3j//6uxnRzTffzJo1a3jiiScoKSmhpKSEZ599lpKSElatWsV5553HmDFj+PDDD9mzZw/XXHMN06dPZ8KECVxwwQW8/fbb3Y43e/Zs/vjHPwZul5SUsHTpUq677jrGjRvHaaedxooVK44YR9edfj/99FO++c1vMnXqVCZPnszXv/51Nm7c2O35LpeLW2+9lenTpzN27FjOPvts3njjjcDjH330ERdffDHjxo3jmGOO4fLLL8fpdPb30oXUGzudtHk0pVlJTC86etYoPTGBsTnJnDIqg6tm5PM/Xx7D4xeN48ZZhcwqSSMxQXGoxcPrO53c++9yrnx+B/es3s9v3q/g6n/u4LcfVLG5uhWFlYW55bQR/Plr47nxpCIm5KZIICKEEH0YcpmRdq/mG89uj8q5n/3GRJJtfX/w3HPPPezatYvJkydzyy23ALBt2zYA7rvvPn7+858zevRosrKyqKio4Oyzz+bHP/4xiYmJPP/881xzzTW8/fbblJSU9HqO//7v/+anP/0pP/3pT3nyySf57ne/y9q1a8nOtrp3ulwuPvroI377298C0NTUxCWXXMK9995rbcj2v//LVVddxbvvvkt6ejqmaXLllVfS3NzM7373O0pLS9m+fTsJCVZx5aZNm/jGN77BN77xDe6++25sNhvvv/8+phn5lSxeU7N8Wz0AX5mcPaBgID/NzvkTszl/YjbtHpONB1v4+EATHx9ooqbFwycVzYHnFmfYmTc2i7ljs8hLlakVIYQI1pALRuJBZmYmiYmJJCcnU1BQAMDOnTsB+NGPfsSZZ54ZeG52djbHHnts4Patt97Ka6+9xooVK7jmmmt6Pcell17KRRddBMBPfvITnnjiCT799FPmzp0LwKpVq5gyZQpFRUUAnH766d1e/+CDDzJlyhTWrFnDOeecwzvvvMOnn37KW2+9xbhx4wAoLS0NPP8Pf/gDxx13HPfff3/gvkmTJgX93oTCB/sbqWnxkJmUwFljBr+HS5LN4MSSdE4sSUdrzT5XBx8faMLZ5uHkURkcky/ZDyGEGIwhF4wkJSie/cbEfj/fbrPj9rhDdu7BOu6447rdbm5u5uGHH2blypVUV1fj8Xhoa2vjwIEDRz3OlClTAl+npqaSkZFBbW1t4L6uUzQANTU1PPjgg7z//vscOnQIr9dLa2tr4DybN2+muLg4EIgcbvPmzSxYsCDo7zccXtxqZUXOm+AgMSG0M5FKKUodSZQ6kkJ6XCGEGM6GXDCilOrXVImf3W6QEEOlM4evirnnnnt45513+NnPfkZZWRnJycnccMMNdHR0HPU4dnv36QKlVGDKpKOjg7feeovvfe97gcdvvvlm6uvrueeeexg5ciSJiYl89atfxe22ArXk5J6LP/36ejxSttW2sq22FZuhuEA2lBNCiLgQO5/Cw4zdbu9XPcXHH3/MJZdcwvnnn8+UKVMoKCigvLx8UOdes2YNWVlZ3aZ/PvroI6699lrmzZvHpEmTSExMpK6uLvD4lClTqKys5IsvvujxmFOmTOHdd98d1LhC4eWt1pjPLMsgO2XIxdpCCDEkSTASJaNGjWL9+vXs37+furq6XgOTMWPG8K9//YtNmzaxefNmbrrppkEXha5YsYL58+cfcZ5//OMf7Nixg3Xr1vG9732vW7bjlFNOYfbs2dxwww28/fbb7Nu3j1WrVrF69WoAvvvd7/LZZ59x2223sWXLFnbu3MlTTz3VLaAJt5pmN+/tawTgK5NyInZeIYQQgyPBSJR8+9vfxjAM5syZw7Rp03qtAbnzzjvJysriwgsv5Oqrrw48fzBWrFjRrV4E4OGHH8blcnHeeefx/e9/n2uvvZa8vLxuz/njH//I9OnT+c///E/mzp3L4sWL8Xq9AIwbN46lS5eyZcsWFixYwFe/+lVWrFgRWG0TCa9ur8fUMLUwlbE5sTFtJIQQom9K97c5RgyoqakJ1DB01dDQQGbmwFZN2O32Ho85VG3cuJFLL72UDRs2HFFXEg0DuXZKKYqLi6msrAz0dmnzmFy3bCdNHSa3n1nC7FEZ4RiuGISerpuIfXLd4lOsXDe73U5+fn6fz5PMyDDj8Xj4xS9+EROBSCit2uWiqcOkKN3OiSXp0R6OEEKIIEiF3zAzc+ZMZs6cGe1hhJSpNS9v7WxylmBIzw8hhIgnkhkRcW9dRTMVjR2k2g3OHpsV7eEIIYQIkgQjIu696FvOO3+8g1R75ApmhRBChMaQCUaksCr+hGLfmj31bWyoasFQ8GVpciaEEHFpSAQjSUlJtLa29v1EETNM06SxsfGIjrPBetm3Id7JozIoSB9aRblCCDFcDIkC1qSkJJqbm3G5XEFvWJaYmNhna3URHmlpadhsA/9f0Nnm4d+7GwD46mTJigghRLwaEsEIWB9swYqVddhiYF7bXo/b1EzITWZyXkq0hyOEEGKAhsQ0jRh+Ojwmr263pmi+Ojkn6IyYEEKI2CHBiIhLr289iLPNS26KjVNHS7dVIYSIZxKMiKBUN7lZs68Rrxm9aS2tNU9/vB+ACyZlY5MmZ0IIEdeGTM2ICL9DLW5ueX0PrjYvC6fkcPXxBVEZx8aDLeyoaSIpQXHueEdUxiCEECJ0JDMi+sVjan71bgWuNmuX3mWf1/HWblfEx+H2apZ+VgPA2eOyyEiSJmdCCBHvJBgR/fLXT2vYUtNKis3gS+OsluuPfFDF9trI9XcxteY3ayrYUtNKst3gwim5ETu3EEKI8JFgRPTpg/2NLPvcarn+/VOKuGl2EbNHpuM2Nfe9fYBDLe6wj0FrzeMfH+TdvY0kKHjwwmmMyEgM+3mFEEKEnwQj4qgqGzv47ZpKwGosduroTAyluPnUYkZnJVLf6uH+tw/Q4R18a/ejeW7TIZZvdwJw86kjOGWMZEWEEGKokGBE9KrdY/LAOwdodptMzkvhP2Z2Fqym2hO4/ayRZCQa7DjUxqNrq8LWOO5f2+tZuqEWgOtPKOCsMbIzrxBCDCUSjIhe/fHjg+yubyczKYEfnTHiiCW0xRmJ3HpGCYaCt3Y38IJvKieU3tvXwP9+dBCAS6fm8pXJOSE/hxBCiOiSYET0aOUXTt74woUC/t9pI8hL7XkTuuOK0rj+hEIAnlpfw8cHmkI2hs+qmvnv9yrRwLnjHVx+XF7Iji2EECJ2SDAijrCnvo3HfNmIy47LY0bx0ff9uWCig/njs9DAw+9VUO5qH/QYdh5q475/H8Bjak4ZlcG3ZxVKy3chhBiiJBgR3TR3eHngnQN0eDUzi9O4ZGrfhaJKKW44sYhj8lNocZss/vcBmtq9Ax7DgYYO7lm9nzaPyXGFqfy/04pJkC6rQggxZEkwIgK01vzugyoqGt3kpdr44anFGP3MRtgTFD8+s4T8VBsVjR386r2KAbWMP9Ti5q5V+3C1exmXk8RtZ5VgT5D/TYUQYiiT3/Ii4OVt9azZ34jNgFvPKCEzObjdAhzJNm4/ayRJCYr1lc08tb46qNc3tXu5e1U51c0eijPs/HzuKFLt0mFVCCGGOglGBACf17Tw53VW8HDt8YVMyksZ0HHG5iTzg1OKAXhxaz1v7HTS6jb7/K+h3cu9/y5nr6ud7BQbd589CkeQwZAQQoj4JL/tBc42Dw+9U4FXw+mlGVww0TGo451Wmsk3XO08u/EQj6yt4pG1Vf1+bVqiwV1zR1KYLt1VhRBiuJDMiOD3a6s41OqhJDORm2YXhWTVyjen5QX2sOmv7OQEfnrWSMqykwd9fiGEEPFDMiPD3PbaVtaWN2EouPX0ESGr0TCU4nsnF/PtWYX0tzGrzVCyakYIIYYhCUaGuad9bdbnjMkMS0YiUVbCCCGE6IN8UgxjW2taWVfZjKHg0qnS3VQIIUR0SDAyjD29oQaAs8dmUZwhBaNCCCGiQ4KRYerz6hY+rWohQVkb0AkhhBDRIsHIMLV0o1UrMm9cliyjFUIIEVUSjAxDmw+2sKGqBZsBlxwrtSJCCCGiS4KRYcifFfnSOAcF6fYoj0YIIcRwJ8HIMLOhqplNB1uwGYqLj5VaESGEENEnwcgworUO9BWZPz6L/DTJigghhIg+CUaGkQ0HW9hS04pdsiJCCCFiiAQjw4TWmqWf+bIiExzkpkpWRAghRGwYUDv41157jZdffhmn00lpaSnXXnst48eP7/G5Ho+HF154gX//+9/U1dUxYsQIrrjiCmbMmDGYcYsgfVrVwtbaVhITFF8/JifawxFCCCECgs6MvP/++yxZsoSLL76YBx54gNLSUhYvXozL5erx+c888wxvvPEG11xzDf/93//NOeecw0MPPcTu3bsHPXjRP1ZWxOq2eq5kRYQQQsSYoIORV155hXnz5jF37lxGjhzJokWLSExMZPXq1T0+/5133mHhwoUcf/zxFBYWMn/+fGbOnMnLL7886MGL/llX0cz2Q22+rIjUigghhIgtQU3TeDwedu3axUUXXRS4zzAMpk2bxvbt23t8jdvtJjGxe4fPxMREtm3b1ut53G43brc7cFspRUpKSuDrUPEfK5THjDVaa5b6VtBcMDGbnCGQFRkO120okusWn+S6xad4u25BBSMNDQ2YponD4eh2v8PhoKKiosfXTJ8+nVdeeYUpU6ZQWFjIpk2b+PDDDzFNs9fzLFu2jOeffz5we8yYMTzwwAPk5+cHM9x+KyoqCstxY8E7X9Sys66NZLvBd+YeQ07a0Gn9PpSv21Am1y0+yXWLT/Fy3QZUwBqMa665hscee4ybb74ZpRSFhYXMmTOn12kdgIULF7JgwYLAbX9kV1NTg8fjCdnYlFIUFRVRVVWF1jpkx40VWmsefWsPABdMyKa94RCVDdEdUygM9es2VMl1i09y3eJTrFw3m83Wr0RCUMFIZmYmhmHgdDq73e90Oo/IlnR9za233kpHRwdNTU1kZ2fzt7/9jcLCwl7PY7fbsdt7nk4Ix5uqtR6SP2Rr9zfyRV0byTaDhVOyh9z3OFSv21An1y0+yXWLT/Fy3YIqYLXZbIwdO5ZNmzYF7jNNk02bNjFx4sSjvjYxMZGcnBy8Xi9r167lxBNPHNiIRb+YWvO0bw+aBZOyyUwOexJMCCGEGJCgP6EWLFjAo48+ytixYxk/fjyvvvoq7e3tzJkzB4BHHnmEnJwcLr/8cgB27NhBXV0dZWVl1NXV8fe//x2tNRdeeGFIvxHR3dr9TeyubyfFZnDhFOkrIoQQInYFHYyceuqpNDQ08Nxzz+F0OikrK+P2228PTNPU1tZ2q951u90888wzVFdXk5yczMyZM/nud79LWlpayL4J0d2nlc08urYSgK9MziYzKSHKIxJCCCF6p3Q8TCb51NTUdFvyO1hKKYqLi6msrIyLObW+aK1ZtqWOv3xWg6lhQm4y98wbRap9aAUjQ+26DRdy3eKTXLf4FCvXzW63h76AVcSuNo/J7z6o5N29jQB8aVwW355VSGKCbD8khBAitkkwMgRUNXZw/9sH2ONsJ0HBohMLOW+CI26a3QghhBjeJBiJc+srm/nVuwdo6jBxJCfw4zNKOKYgNdrDEkIIIfpNgpE4dXh9yMTcZH5yZolsgieEECLuSDASh9o8Jr9dU8l7+zrrQ26cVYhd6kOEEELEIQlG4kylrz5kr9SHCCGEGCIkGIkjmw62cP/b5VIfIoQQYkiRYCROeE3N/6ypoKnDlPoQIYQQQ4oEI3FifWUz1c0e0hMNfvGl0STbpD5ECCHE0CDBSJz41/Z6AOaNzZJARIhhwnx9Gfrjd1Hjp6COmQkTj0UlJUd7WEKEnAQjceBgUwefVDQDcO6E7CiPRggRCbq1Bf3i38Ddgd6zA/3mS2CzwfhjUMfMRB07A0aOQRnyx4mIfxKMxIEVO11o4LiiVEoyE6M9HCFEBOj1a8DdAXmFqGNmoDevh0PVsHUDeusG9D+fgows1JQZcOwM1DEzUI7caA9biAGRYCTGub2aN75wAnD+BEdUxyKEiBy99t8AqNO+hLHgG9ZmZ9WV6C3rrcBk60ZodKE//Dd8+G80wLjJGN+5DZUlGVQRXyQYiXFr9jfiavOSnWLjpJEZ0R6OECICtKsePt8AgDrpTOtfpaBwBKpwBMz9Mtrjhl3b0Js/RW9ZD3t3whdbMf/0a4wf3CXTNyKuyP+tMe61HVbh6vzxWdgMaWwmxHCgP3oHtAljJ6EKint8jrLZUROnYiy8koQ7Hsa487eQmAhbPkW/vizCIxZicCQYiWH7XO1srm7FUDB/vCPawxHDhLnqFbz3/wjzuSfQm9ahO9qjPaRhR3/4NgDqpLP6/RpVUor65g3W61/8K3rXtrCMTYhwkGmaGPbaDicAs0rSyZMGZyICtNuNXvYXaGtF79qGfuNFsNmtJaX+FRwlZbL9QBjpgxWwezsYBmrWaUG9Vp1+jpUZ+fhdzP97COPn/4NKTQvTSIUIHQlGYlSbx2T1LhcA50+UYjQRIds2QlurtUpj+klWoWR9rfUBt+VT9PNApsPqeXHsDNSUGVIsGWL+rAhTpqMyg3tvlVJw1U3o3dvhUDX6r7+HRbdI8ChingQjMertPQ20uE2K0u1ML5L9Z0Rk6PUfAKBmnoJx1X9aKziqDnSu4Ni2ERqc6A9WwwerO1dwLPoRKjc/qmMfCrTWnatoZs8Z0DFUahrGolswH7rNqj2ZMh11xvwQjlKI0JNgJAZprQOFq+dOcGDIXzUiArRpoj9bC4CaebL1r1JQPBJVPBLmfQXtdsOurejN69FbPu1cwfGbn2Pc+gAqIzOK38HgaLcbKvejy3fD/j3oA3vAMDAW3YJKi9BKtr074eABSExEzZw94MOocZNRF16J/udT6Gf+Dz1+Cqp4VAgHKnqjm5vQL/wVffAAxqXXoUaWRXtIcUGCkRi041AbX9S1YzcUXxqbFe3hiOFi93Zw1UNKKkye1uNTlN0Ok6ahJk2Dr30LXVOF+avboeoA5m/vxvh/96KSUyI88OBora3vs3yPFXiU70GX74GqcvB6j3z+a/9Eff0/IjO2tb7C1emzUcmDy4iqcxeit34GWz7F/N8HMW7/FSoxKRTDFD3QWsMn72E+/X/Q4ATAvO8W1KXXos46X6bK+iDBSAz6l69w9bTRGWQmyyUSkaE/9WVFpp6AsvWvYFrlF2HcfA/mgz+GPTsw/3A/xvd+1u/XR5r55kvoV/8Oja6en5CaDqPGWH/N2hPRr/0DvXo5ev7CsGd9tOm1plUANbv/q2h6owwD49r/wrz7+3BgL/rvT6KuuHHQxxVH0nW1mEsfg88+tO4oGgk5eVat1d8eQ2/5FOM/vhe5DFsckk+6GNPY7uXdvQ0AnDfREd3BiGFFf2rVi+CboukvVTwS4/t3Yj78U+uX759+A9f/v5hruqVNL/rlZ6ClCZQBhcWokWNgZJn176gyyM4L/AWrtbamovZ9gX5jGeprYc6ObNsErjpIy4BjZ4bkkCor2wpI/ucu9FuvoqdMRx1/SkiOLXxTm//+F/qfS6zC7wQb6vyLURdcAgkJ6Ddfsh5b/wHm3p0Y19+CmnBMtIcdkyQYiTGrd7vo8GrKHElMzovtdLcYOnTlfqg6ADYbauoJQb9ejZmI8Z3bMH/3C+uv+/RMuOyGAaWmdVsL+qWn0ZX7MW64FZUSogLu/XusQCQ5BeOhP/c5naSUwvjqZZiP3ItetRx9TnizI3rtW9Z5TzgtpJklNfV4a8rm9WWYT/0Oo3R8TBQbm688i966ATXzZNSsM1CZjkEdT3u9sGU9+oO30PW1qAlTraXoYyeFJVOnK/ZhLnkEvthq3TF2Esa3vocqGR14jpp/EXrisZh//BVUV2I+dDvqK99EffkSlJEQ8jENhtYaIGrTSRKMxBCrcNUJwHkTHDLHGGHm26+jV70Cptm/F6RnoM441/pFaovvHyX/KhomTx/wh786dibqmh+gn/hv9OrlkJmFWvDN4Mbx2UeYf/uDtZwY0OvWoE6bN6DxHHHsbVZ7dSYc2/+6luNmwehxvuzIC6ivfSskYzlibO4O9Lo1AKjZZ4b8+OqiK9HbNllTaY8/jHHLYlRC9D4MzdXLrR2JAb1tI/q5J+DY41GnnI2aPqvftS1aa9i3C/3BamsVUpfpN71jC/rV5yApBSZPszYSPGam1VJ/EL9btduN/tff0a8+D14PJKWgvnYVas75PQYYqmwCxs9+bU3XfPAW+qWl6K0bMK77ISonb8DjGAztcUNlOXr/bjiwx/q3fA/Gz34D2dHZbDG+f4MOMRsPtnCgoYNkm8FZY+J3VUI80lqjX/hr77UEvb1uxxb0sr+g5n0Fdea5ofsrPsIC9SKDWMEBYMw+C7Op0VrB8eJSzPQsjDnn933+hnr0039Ef/yudUdCglVMuuVTCFUwsnUjAKqX4tyeKKUwvvJNzEcX+7IjF4UnO7LhY2htseoMxoc+ja9sdowbfoR5zw9g5xb0K8+iLrw85OfpD71pHfqZP1rjOnkOuuoA7NkBGz9Gb/wYnZKKOvF01MlzYPwxPU736bpa9Np/o9esgsr9nQ9kZFl7+ZSUwraN1jRbows++xD92YfWUvTcAiswOXYmTD4uqDoOvWML5l8e7TzncbMwrrgRlXP0TJNKTkVd90PMY2ai//YYbN+Eec8PMK7+PmpG7z9z2uOGqnKrwHq/r+C6qdEK9DMckOmArGyr90+mAzKtr0lLDwSb2lWPLt+N3r8HyndbgUcvxdqU75FgRHQWrs4dk0mqPbZSeENexX7rl5Y9EeN7P4N+1DvoL7ZamZT6WvTzT6KXP2sFJGd/JWp/8QyErj9kraRRCjV9cMEIgDFvAWajE738OfTSx9AZmagTeu4kqrVGv/cm+u9PWlMohoE65yLUpGmYv70b/fmnaK0HnSXUXi/s2AyAmnRccC+efhKMHmv9BR6m7Ijpn6KZdWbYam1UfhHqyv9EP/4wevmz6Mm+VVERpCv2Yf7fg2CaqFPnoa7+PoZS6MpyK7vxwVtQV4N+ZwX6nRVW4HDyHNTJc8GRjV63xnrO1g3gm1bAZkfNmI06ZS4cM7MzS3nGfLRpWqultviWou/YbDWD8x/fVztEf6ZMtO4MQjKyUJd9G3XiaUH9v2mcMhc9dpI1bbN3J+aji1Fzv4y65Bqr5mT/7s6l5eV7rPN5PT0P52i3ExIw07M4oMB01vU8mJQ0GFXWvW6qyxRTpEkwEiPqWj2s3d8IWFM0IrICKfzxU1BTpvfrNWrSNPQ5F1m/RFe8YP0F8/oy9JsvoU46EzV/YVz0GPBnRRg7KWTdVNWFV1jb27/9ujUtkJqOOmZG9/NWV2D+5ffWBwvA6HEY//Fd1OhxVs+PxCQrQDywB0aOGdyA9u60ftmnWr+Ag/peAtmR+6zsyPyLUOmhy47olibY+LF1rpMHv4rmaIzZZ2F+/hn6vTcxf38/jJ1odXnNdAT+U13+2iYtI2TTxbrRhfm7X1gZoInHoq76z8CxVfFI1MKr0BdeATs2o9esRn/ynhU4LH8Ovfw5sNnA0+WDeeKxqJPnWjU2vbS8V4YBo8eiRo+F876Obm+HHZusnY43r7M+7KsOBPV9qNO+hLrkmgGvjFGFIzB+8gD6n0vQb7xordZ67w3o6Oj5BSmpncHCyDJUVg66yWUtH/b9p1311teNTitz4vWCqw4TQCkoGAEjS1Ejx6BGjbF+nnLyYqoUQIKRGPHGTideDZPzUijLTo72cIYdvc2Xwg/yL0Vlt6POmI8+7Uuw8RPMFf+E7b5fpmtWw9TjMeYvtNLBMfSD35V/FY0KchXN0Sil4Iob0U0NsG4N5qP3oX50HxQXoz0ezBXLrJUt7g6rwdeFV6DmfTWQWlZ2O0ycCps+QW/5zPpFPAj+68vEqQMrHJw+G0aNsf5yfeNF1MKrBjWebmP75H3rQ7akdNDfZ3+oy25A79kBB/bCpnV9/4Wd6aBmzAT0RVfBABunabcb8/f3Qe1ByC/CuPG2HotKlWEE+tjoy76N/mytlQnZvM56jwpLfJmSOai8wqDHoZKSYOoJviLt69B1tVaTuf5y5FoNAAdJ2eyoS69DT5mB+eRvrKBbKcgvtgKOLhkLcguO+N1xtN8k2uOBRheq0UluTg6HElOtwD7GSTASA7ym5vWdTgDOl+W8EadN01pWCajJQabwfZRhwPRZJEyfhd69HfP1f8K6D2DTOsxN62DMRIwf3BlzfQZ0S5PV4h1QM0IXjAAoIwHj+v+H+T93w7aNeP/nLlo8t+H92//C/t3Wk46ZgXHlf6Lyi458/ZTp6E2foD//FOZfNKixdNaLDPD6KoXxlcswf38feuUr6HMuDFl2JND+/aTQF672RCUlY9z+K6umosFpNYDz/4Xd5a9tmn1/Ydcfoq3+EGxah/rGItQZ84MKrLXW6CWPwM7PISUN43s/71fdjUpKst6Tk860xtXcCEUjQxrUq5w8q04nStS0EzDu+1+oroSCESFpGKhsNsjOReXkkVRcjKqsDKyUiWUSjMSAjyuaONTiISMpgVNHx9aH1bBQvsf6RZeUAqXjB304NWYiCTf+BF1diX7zRfR7b8Lu7egNH1vz2jFEb/zE+sApHoUqHBHy4yt7IsZNd1hdWvft4tAvf2I9kJaBuvQ61Clze/1wUcfMsP5K374Z7XZb2ZIB0B437NxiHXMwNRIzumZHXkItvHLgx/KPrf4QbPcFwhEKRgBrtcq0E/v4C9sNDS6Uqx77a3+nbd0H6L88ahUVf+smVGp6v86lX/27tZeRYWDc+OMBZRaUfxppCFLJqdaKrWEutroSDVOvbXcC8KWxWSQmyCWJtEAKf8IxIV2iqwqKMS6/EXXGudYde3aE7Nihotf7lpOGcIrmcColFeMHd4Iv2FGz52D84vcYp5599L9yS0qtD6COdti1deAD2L3DOkZ6JowYeIGePzsCoFe9jG5uHPiYfPRHb1uFkeOnDGjaIZyUzY7KyUONnUje3b/FuPgaq5HXJ+9h3nMz+ou+r4n+5D1rlRpYBZ+H1Q0J4SeffFFW1djB+spmwNoUT0Se9hVQBrPkMyhjJlrn2b09PMcfIO3ugE3rgPAGIwAqM5uEn/2GoseeJ2HR/0Nl9L3nklIqUEyst3w24HP7i5PVpGmDX6kyY7ZV/NfWin7jxcEdiy570YSg/Xs4KcPAOO9rGD9+EPKL4FA15oM/wVz+HNrsYYkooHfvwPzTr63Xz/tKv5Z4i+FLgpEoe32nEw3MLE6jOCMx2sMZdrov+QxPMKLGTLC+2L/LSn3His8/g/Y2cOSGZHqqLyo5BXuQK1mYMgPAqhsZIH+9SG+b/wXDv7IGQK8cXHZEV5bDvi8gIQF1wumDHlskqDETMH72G9RJZ4Fpol/4K+av70Q7D3V7nq6rwXz0XmuFyLQTUZdeG6URi3ghwUgUmVrz793WPjSSFYmSfbuspYYpaVYviXDIL7Y2YPN4rPqUGNG10VmsrvQJLLPesxPd3BT067W7I9CuO+j+Ir2ZMdta5TDI7Ij+0Cpc5ZiZYd+EL5RUSirq+h+irvkBJCXD1g2Yd/8AveEjAHRbK+bv7rUKY0tKMRbdEnOtz0XskWAkinYeauNQq4dkm8EJI3peJy/CK9BfZOKxYfuFqZQCX3ZE746NuhFtejuDkRCvogkllZNn7YCqTfBfq2B8sRU8bsjKgaKS0IzJMDqzI6teGVB2RGvduYomxqdoeqKUwjh1HsZP/9sK4psaMH/3C8xnH8d8/GEo3w0ZWRjf/WncdiUWkSXBSBR94GtydsKINClcjZKw14v4KF/dCLFSN/LFNqu3QWqa1c8jhvmLHvXnwdeNdO0fE9Lsz4yTrexIawv6zZeCf/2ubVBTBUnJR20HHutU0UiMnzyEmvcVAOu9+OxDsNkxbroj5opyReyST8Ao+qDcSjufPEqW80aD9nis3gcMvP9Ef6kyXxFrjKyoCTQ6O25WzG/y11nE+mnQr/UHm6GoF+lKGQbGgq61I8FNIekPfYWrM2ajkuK7yaGy2zG+uQjjuz+zViwB6urvo8ZNjvLIRDyRYCRK9rvaOdDQgc1QnFgiUzRRsWeHVcCZngEjSsN7rjG+AtGqcnRLc3jP1QetdWCX3lieogmYNM3aK6i6El17sN8v0+1t1rJewhRszjzZWn4cZHZEe73oj96xxhWHUzS9UdNnYSx+DOMXf8AYQt+XiAwJRqJkjW+KZnpRqmyKFyWBv5onhmDJZx9UZjbkFlg9JfbuDOu5+lSxz5oisNnh2JnRHUs/qJTUzuXRwUzV7Pzc2mQsJx/CMF1g1Y74+o6sfKn/2ZHPP7OmyNIzA6uFhgqVmo4KUW2OGF5iOz87hH2wX6Zooi1QTxDmehE/VTYBfagavWdHvzfjCwd/ozOOmRGS9tORoKbMsJpsff4ZnDG/X6/p1l8kXKuF/NmRA3vRK19CffVyq+9GY4PVUt1Vb7Uyb3R23vbVDakTT4/5KTIhIkV+EqKgptnNF3VtKOCkkv61VBahpd3uziWfYa4XCRgzET55L+rNz/R6/5LeOJii8VHHzEC/8gz688/QptmvTFZnf5HwXV//yhrzsQfQ/3oe71v/gqaGzu3tj/baU+eFbVxCxBsJRqLAv4pmSn4KjhS5BFGxa5u1Y2xWtrV0NALUmAnWXitRXN6rD9VYjbaUgZp+UtTGEbQxE629g5oarGWjfezloVtbAtNhYc98zTzFWt66b5c1/QLWDqzpmdb/X5kO394q1tdkOlAjRqNKZT8SIfzkkzAKZBVNd9r0ole8gN6zA+Pq71sbR4X7nP4lvROnRq7h1+hxoAxwHkLXH0Jl50bmvF34e4swfnK/WrLHCmWzwaSpsOEj9JZPUX1tLLZjM5gm5BehcvLDOzbDwPive6ydiNMzrYAjPROVILVgQvSXFLBGWEObhy3VLQCcPEqmaHRdLebDP0P/4yn45H30R+9G5rz+BlqRmqLBaofOiFHWjSgt8Q1sjBcPq2gOE1ji248i1s7+MZG5vio9EzVlOmrUGFRWtgQiQgRJgpEI+/BAE6aGMdlJFKYP771o9KdrMe/5QWALdQD88/zhPG97O+zyFRFGqHjVT0Vx0zzd1NC5D08c1Yv4BXZ83bHFavN+FIGdmMO035AQIrQkGIkwWUVj7RdiPv1/mI8uhuZGGD0OddVN1mPbNqD7Ufw3KF9ssZZ8ZudZ+8ZEkr8tfBQyI3rDx9bUxcgyVH5RxM8/aMWjwJFj1fr4mtX1RDc3WlMmhG/zQyFEaEkwEkEtbi+fVloNr04eOTynaHRlOeZ9P0KvegUAdc6FGD95EHXK2ZCYaG2uVbE/vGPYGqYW4f3g78TKnh1o04zouQNdV+Nwigas/VD61Y11+2ZrNUvRSJQjJzKDE0IMigQjEbS+ohm3qSlKt1PqSIr2cCJKa4357huY9/5X5yZa3/85xqXXoex2lN0O44+xnrs1+D1IghrLtvAv+ezViNFW0NXaAgcrInZa3d4Om9cB1i69ccvXJOxodSORrhcRQgyeBCMR1HWKJla3bA8H3dKM/uOv0E/9DjraYcp0jJ//D2raid2epyb3v0BxwGNpawkUj0a6XgR8q0J8K0EiWjfy+Xro6LC6wI4aG7nzhligWdy+L6wamB5EupmdEGLwJBiJELdX83GFPxgZPlM0etc2zF/cbO3FYRior30L4+a7e0yfqym+v2S3b0J7veEZ0I4tVt1EXiEqtyA85+hD51RN5IIR/cn71rlnzI7rQFg5cqzsktbgb+ffhW5wwoG91o2JEowIES8kGImQjQebaXGbZCcnMCkvPlpwD5a59t+YD/4Eag9CbgHGrb/EOP/i3rtnjh5rbWnfpWFVqAXqRaKZwvcXsUao+Zn+5D30B28BoE44LSLnDCf/qpqeMmh6m29l1sgyVEZmBEclhBgMCUYixD9FM3tUBkYc/2UaDP3KM+D1wvGnYvz8N31uKa6MhMBfs7qHv3pDMqYYWPLpX97L/t1WW/ow0rt3YP7p19Z5530FNeGYsJ4vEo5axNplPxohRPyQYCQCvKZmbbnVAn64LOnV7g44WAmAcdkiVGr/pqb8UzXhCEZ0c5PVCp0o1xPkFUJ6hrW8uHx32E6j62owH73XqhWZdiLq0mvDdq6ImjgVEhKg9iC6pqrbQ1IvIkR8kmAkArbXtuJs85JmN5haEP5W5zGh6gBo05p2yer/8spAgeLOz/tsbBW0HZt8Sz5LUI7It2L3U0pBWXibn+m2VsxH7rWWSpeUYiy6xco8DQEqOQXGTgK6Z0e085D1/50yrIBFCBE3JBiJgDW+jfFOLEnHnjBMpmgq9llfjBgdXMFk0UgreOmjsdWAxtSlv0i0KV/dSDg2zdOmF/Pxh63GXxlZGN/9KSplaAXBKrDE99PAfYFdekeP7XcmTggRGyQYCTOtdZeN8YbRL0jfigY1ojSol1mNrcIzVdNZLxL9/hOBtvBhWFGj/7kEPvsQbHaMm+5A5RWG/BzRFmgN//kGtOlbebUtdoJNIURwJBgJsz3Odg42uUlMUBw/YvgEI10zI0ELQ78R3eiC8j0AqEkxkMIv82VGqg6gW5pCdljznRXo15cBoK7+fp9Fw3GrbAKkpEJLE+zbBXStF4l+sCmECI4EI2H2gW+KZkZxGsm2YfR2+4IR5d+lNgiBD5M9O9EtzaEZj38zvpJSVKYjNMccBJWRZRWyAuwJzTJmvW0j+m9/sI7/lW9izD4rJMeNRSohIbAiSm/5FH2oGmqqwDBgwpQoj04IEaxh9OkYHYGuq8NoLxrd3m71FgEoCT4zonLzoaDYKoD17TI76DHFUL2IX+dUzeDrRvTBCszf3w9eL2rWGaivXDboY8a6wBLfzz/rrBcpm4BKHlr1MUIMBxKMhFFVYwd7nO0YCmaNHB5LegGoKrdWraRnQIZjQIcIdWv4wH4lMRSM+KdqBtv8TDc3Yf7uF9aUxZiJ1vTMMOhlE6gb2bkFNn5s3RdL11cI0W8SjITRB77eIlMLUslMGhrLKvtD+9txjygd8IdiKItYtbPOCpCUglioF/EJND8bRBGr9ngwH/slHDwAOflWwWriMNmEsbAEsvPA40Gv87W7l3oRIeKSbSAveu2113j55ZdxOp2UlpZy7bXXMn78+F6fv3z5clasWEFtbS2ZmZnMnj2byy+/nMTExAEPPB503RhvWAnUiwygeNXPv+LlwF50Qz0qM3vAhwqsohk1BpUWQ9di9FirxsFZh64/hMoOrveJ1hr99P9ae7QkpWB876eorIG/T/FGKYU6Zjr6vZVWJi7BBuOkXkSIeBR0ZuT9999nyZIlXHzxxTzwwAOUlpayePFiXC5Xj89/9913Wbp0KZdccgm//vWvufHGG1mzZg1PP/30oAcfy+pbPWytaQVg9nBa0ssgV9L4qIxMGDXGOt7ng8yOxOiST5WUDP6lzwNofqZXvox++3VQBsYNt6BGjgnxCOOAr98IAGMnopKGSVZIiCEm6MzIK6+8wrx585g7dy4AixYtYt26daxevZqLLrroiOdv27aNSZMmcfrppwNQUFDAaaedxo4dvc+Tu91u3F327FBKkZKSEvg6VPzHCsf8+oflTWhgQm4y+WlDOwN0hEorGDFKgmx4dhg1ZTp6/27YugF18pzO+4O8bl03x4u1Wgo1diK6fDd6zw6ME07t9+t0dSX6H08BYFxyDcb0k8I1xJAJx8+bMWU6/v2d1eTpMXd9h4Jw/p4U4RNv1y2oYMTj8bBr165uQYdhGEybNo3t23v+y27SpEm888477Ny5k/Hjx3Pw4EHWr1/PGWec0et5li1bxvPPPx+4PWbMGB544AHy8/ODGW6/FRUVhfyY6961VpOcc8wIiouLQ378WGW2tnCgthqAwpknkZDlGPCxWk+bS+2KFzB2bO7xPezPdfPUVFFZUwlGAsVnzsOIsc6cTTNmUf/26yRW7KWgn/+faK2p/cP9eD1ukmbOJv9bN8bNLxwI8c9bcTEHpxxHx9aN5J99HknD6Gct0sLxe1KEX7xct6CCkYaGBkzTxOFwdLvf4XBQUVHR42tOP/10Ghoa+NnPfgaA1+vlnHPO4Wtf+1qv51m4cCELFiwI3Pb/oq2pqcHj8QQz5KNSSlFUVERVVRVa65Adt7nDy8f76gCY6oDKysqQHTvWBfZayXRQ3dIKLa0DP1ZuMSQk4D1YQcWG9ah864cqmOtmvr/K+qJ0HAddjeBqHPB4wkFnFwDQvm0TFQcOoIy+Z07NT97H/OR9sNnwfP0aqqqq+nxNLAjXz5u+/hYS6mupy8iBYfSzFinhum4ivGLlutlstn4lEgZUwBqMzZs3s2zZMq6//nomTJhAVVUVTz75JM8//zwXX3xxj6+x2+3Y7fYeHwvHm6q1DulxPypvxGPCyMxESjITh9UPsBlYSTN68N93UjKMmQg7P8f8/DOMw9qa9+e6+ZcGq0nTYvI66OJRkJgEba3oqnIoPnqTON3WivnMHwFQ530dCkfE5Pd1NKH+eSPTAZmOuHsf4k3Ir5uIiHi5bkEVsGZmZmIYBk6ns9v9TqfziGyJ37PPPsuZZ57JvHnzGD16NCeddBKXXXYZL7zwAqZpDnTcMW1t+TBdRQOhWUnThb/fCAPoN6JrD6I/edc6jr8nRYxRCQlQOg7o3w6++pVnoL4W8gpR5/cczAshRLwJKhix2WyMHTuWTZs2Be4zTZNNmzYxceLEHl/T3t5+xHy20Y9UdDzbWmtNTRxfnBblkUReKFbSdNW130iw0b35zB+ho8NqGx7D/ScC/Ub6aH6mD+xFv/kSAMbl3x4+/USEEENe0FHBggULWLlyJW+99Rbl5eU8/vjjtLe3M2fOHAAeeeQRli5dGnj+CSecwBtvvMF7771HdXU1GzZs4Nlnn+WEE04YkkFJY7uXQy1WXUtZ9jD8sAhxZoSxk6xpjEZXYCfg/tCfrrV2rk1IwLgixgs8y3xt4Y+SGdFaY/7tD+D1wsyTUdNOjNTohBAi7IKuGTn11FNpaGjgueeew+l0UlZWxu233x6Ypqmtre32i//rX/86SimeeeYZ6urqyMzM5IQTTuCyy4bm3hm769sAKEizk5Y4fLquAujWFqirtW6EKjNis8OEY2DzevTWz1Ajy/oeR3t7Z13F/ItQfdRhRJsaMwENUL4H7e5A2Y9cCq7XrIYdWyAxCeMbiyI+RiGECKcBFbCed955nHfeeT0+dtddd3W7nZCQwCWXXMIll1wykFPFnb3OdgDGDOOsCI4cVFroltCqKdPRm9dbzc++dGGfz9evPgeHqiEnH/Xlb4RsHGGTWwAZWVb2Z/9uKxvUhW5uQj//JGDtxqtyw7PEXQghomXozZNE2e56KxgZjlM0oa4X8QvsN7J9E9rrPepzdWU5+vVlABiXLbK6nMY4pdRRN83TL/zFClSKR6G+9NVID08IIcJOgpEQ2+O0pmnGOEL/Iag3r8f822Nod0fIjx0Soa4X8Rs1BlLToa0V9vRe5Km1xlz6GHg9cNwsmD47tOMIo942zdO7d6D//RoAxhXfsaathBBiiJFgJIS8pmaf0woUwpEZMf/xZ/Rbr8KGj0J+7FAIW2bESIDJ1r4yR9vFV3/4trVpnD0R45uLYrto9TBqzJGZEW16raJVrVEnz0HF0I7DQggRShKMhNCBxg7cpibZZlCYHtq/YLXWUG11l9SV5SE9dsiEKzNCZ78R3Uu/Ed3SjP77n6znXnBJoFtr3PBN03DwALrZ6lOj//067N0JKWmoi6+J4uCEECK8JBgJoT2+epFSRxJGqP8qb3RBuzUFxMEDoT12COjmJnBaLfBDnRmBzn4jfLEV3dF+5PlfWgqueigYgTq3960GYpVKzwR/ALV3B7qhHr3sL9ZjC69EZWVHcXRCCBFeEoyEkH9Zb1hW0tR07j+iD/a8D1BU+adocvJQKamhP35hCThyweNG7/y820N63xfoVcsBMK74NqqXrQRinb9uRO/egf77n6G1GUaPQ53V88o1IYQYKiQYCSF/ZqTMEfpgRNd02QDs4IGY22sgXPUifkqpzm6sXaZqtGli/vUPoE3UrDNQx8wMy/kjwl838u4b6A9Wg1IYV37HqpkRQoghTIKRENrtDOOy3pqDnV+3NFvTNrEkjPUiAf66kS5FrPrdN2D3dkhOQV16bfjOHQHK14mVWutaqzPP7VxlI4QQQ5gEIyHiavNQ32q1gS8NQ2aEmsO2Ro+xqZrOzEhp2M4R6DeyZydmUyO60YX+x1PWYxdejnLkhu3cETF6LPi3SMjIQi38VnTHI4QQESLBSIjs8WVFitLtpNpDn1bX/poRX2GsroqxFTW+fWPCmRlROXlW7Yg2ad/4CeY/noKWJhhZhpq7IGznjRSVmARjJ1tfX3x1SLvYCiFELBtQO3hxJH+9SNjawPunacZMhF3bYiozohsbOqeNikeG9VxqynHogwdo+McSqz08vmZgCUOjrsJYdAscPICaMj3aQxFCiIiRzEiI+FfSlGUno7duwHz2CbTbHZJj6/Z2cFnLZtXUE6z7Yml5r3+KJrcAlZwS1lP5+410+AIRdfo5qPFTwnrOSFI5eRKICCGGHQlGQsQ/TVPmSML85xL0my/Chg9Dc/Ba3xRNahrKv4laLGVGwrySppvJ0wJTVaRloL72H+E/pxBCiLCSYCQEPKZmv6vLNE39IQB0xf7QnMBfL5JXBEUl1tfVlX1uGhcx/pU0JeErXvVTaRmBugrj6/+BysgM+zmFEEKEl9SMhEC5qx2PCal2g/yUBHSj03qgKjRTKf7iVZVfBNl5YE8EdwccqoaC4pCcYzB0hVW8GpHMCJDw7R+R3dZMfXH4gx8hhBDhJ5mREOg6RaNamsGXsQjZihf/st6CIpRhdAYgMVA3orWOTI+RLlROPiknnBJXG+EJIYTonQQjIbC7vkuzs4b6zgdC1ClV+1fS5Pn2Lim0pmpiooi10QlNjVYdR1F4V9IIIYQYmiQYCYE9/pU0jmRrsza/9rZA/cigdJ2mAZS/biRE00CDcsBXvJpXiEoK07JmIYQQQ5oEIyGwp0sbeN01MwKDnkrRpjfQHjwwPVM4wnosBlbUBIp0I1C8KoQQYmiSYGSQnK0enG1eFL428C5nt8cHXTdSXwdeDyTYINtqd6580zQxsbw3wvUiQgghhh4JRgbJvzlecUYiyTaje80IDH4qxV+8mlvQuXurf5qmvhbd3ja44w9SpFfSCCGEGHokGBkkf+fVQBt4f81I8Shg8JmRwJ40BUWB+1RaBqRnWDeimB2JxkoaIYQQQ48EI4O0t75zWS+AbnACoCYeaz1h0JkRX/FqXlH3+2NhRY2rDlqaQRmd2RohhBAiSBKMDNLuLsWrQGdmZNI069+6msFNpfgzI/ndg5HOupEoBiP+NvCFxSh7YvTGIYQQIq5JMDIIbq9JeaANfLJ1p69mRI0YHZKplED31YLDMiMxsLw3onvSCCGEGLIkGBmE/a4OvBrSEg3yUm1oj9tqAAaQmR1oAjaoupGu+9J0oWJhee8BqRcRQggxeBKMDIK/v8gYR5LVmrzBZT2QkABp6Z1TKQMMRnRzE7Q0WTfyD68Z8XU7DVGX14GQzIgQQohQkGBkEPydV0sPm6Ihw2HtIVPsCxgGOpXiX9ablY1KSu7+WEGR1YK9tcVqyR5hWmuotBqeSWZECCHEYEgwMgi7u2RGgM6GZ1nZQGeR6UCnaTr3pCk84jFlT4TcAutGNOpG6mutQCghIdARVgghhBgICUYGSGvNnvruK2kCreAzHda//o3jDlagTTP4k/gyIyq/uOfHo1k34p+iKRiBstkjf34hhBBDhgQjA1TX6qGh3YuhYHRW92W9ypcZIa/Qyhx0tA9sw7xelvX6qaJBTgMNgpbiVSGEECEiwcgA+bMiIzISSbL53sZAZsQ3TWOzgT+rcTD4qRrdRzDSmRmJwjSNFK8KIYQIEQlGBmjP4c3OAB2oGXF0PtHXD0RXDiBg8PcY6S0z4q/ViMI0jX8ljSqRYEQIIcTgSDAyQP7MyBhHl1UuDYdN09BlKiXIzIh2u60iUei2L003/uW9NVVorzeo4w+GNs3AShpGlEbsvEIIIYYmCUYGaLfTWtbbNTMSaAWf2RmMdDY+CzIzcqgatIakZMhw9Pyc7FxITASvBw4dDO74g1FXA+1tYLNBQS/FtUIIIUQ/STAyAB1ekwMNHUCX3XoBfJvkdZ2mUQNt2x7ovFpoNVTrgTIMKBgxsOMPxgH/njQlqISEyJ1XCCHEkCTByADsc3ZgashINMhJsQGg21qtbAEclhnxBSP1tdZz+kn7G571tqzXLwrLewP1IlK8KoQQIgQkGBmAPYEpmuTOrIV/JU1SMio5JfBclZYBGVnWjWACBl/DM5V/ZMOzrlRhFJb3ykoaIYQQISTByAAc3uwM6Oy+6m941lVR8J1Yg8+MRC4Y6VxJI8WrQgghBk+CkQE4og08dGZGuqyk8RtQc7I+lvV2Hts3DRShYESbXqjyr6SRzIgQQojBk2AkSFYbeGuaZkx257Je3dNKGr+i4Hbv1VpDbR8Nz/z8OwM764KqSRmw2oPQ0QH2ROhjCkkIIYToDwlGgnSo1UNTh4mhYGRWYucDvmka1bXhmY+/rqPf0zSueusDXxmQm3/Up6q09IHVpAyUv16kqARlyEoaIYQQgyfBSJD89SIjMxNJTOjy9jUcJTNS7J9K6eeGef5lvTl5/duELoJ1I7InjRBCiFCTYCRIu+s7V9J0FZim6aFmhNxCSLCBu8NqGNaHPvekOUygLXwkVtRU+OpFpHhVCCFEiEgwEqTd9T0Ur0Kg4ZnqITOiEhI6O5X2J2DoZ/FqgH95bwSmafzZF1U8MuznEkIIMTxIMBKknjbIAzpbwfdQMwJAcRB1I/1d1uujIrm81/99OnLDfy4hhBDDggQjQWj3mFQ2Wm3gu07TaNOERqd1o6eaEUAV9n8Jrq7tX8OzgC7Le7XW/XvNAFjfp8u60VM/FSGEEGIAJBgJwj5XO6aGrKQEspO7rCRpbgL/rrmZWT2/2L9hXmU/MiPVwWVGyC+2Vt60tXbujxMOLU3WpnzQ++Z9QgghRJAkGAnC7i6dV7ttXudfSZOe0evql/42J9NtLZ3Zh/4WsNrtkFdg3QhnEas/0ElNt84phBBChIAEI0HoqdkZ0FlH0csUDdA5leKsQ7e29P483xQNaRmo1LT+Dy4SdSP+YESmaIQQQoSQBCNBCGRGDltJo4/SCt5PpaZ3fogfLWCoDm5Zb+D4QdSkDJSWYEQIIUQYSDDST1pr9va6ksYJgOrrQ7qo7xU1OthlvX6+YESHc3lvYPmyI3znEEIIMexIMNJPNc0emt0mNgNGZh7eY6TvzAh0qRs5Wl1Hf/ekGcixByvQZdYRvnMIIYQYdiQY6afdTqteZGRmEvYE1f3B/tSMQP8yIwOcpvHXjFBbhfZ4gnttf8k0jRBCiDCQYKSf9tT3MkVDl1qK3hqe+fQre+FreKb6u6zXz5ELiUnWEmN/EWyI6QbpMSKEECL0JBjpJ3/n1TE9BCP+zEhPreC7Keps265N7xEPa6+3c++a/jY881GGAQUjAscPi6O0vBdCCCEGSoKRfvJ3Xj2iXgT6XTNCbj7Y7OBxw6EeNsyrq7EyGzb7gNqtd7aF70djtYGQaRohhBBhIMFIP7narEyGI9nW7X7tcUNTo3Wjj4yBMhI6azt6mqrx79abV2hlOoIVaKwW+syI1lqCESGEEGEhwUg/aK1xtVlFoVld28AD+OsoEhIgLb3vg/kChp6KWPUAV9IEhHN5b9dW8BKMCCGECCEJRvqhqcPE69t/7shgxDdFk+HoVzZDFfrqRnrKjFQPsMeI/9jhXN4baAWfJq3ghRBChJQEI/3gz4qk2Q0SEw57y3wNz/qsF/ErPkpmpGawmRHfFJCrztrjJpRkikYIIUSY2Pp+ypFee+01Xn75ZZxOJ6WlpVx77bWMHz++x+feddddbNmy5Yj7Z86cyW233TaQ00ecv17kiKwIXVrB9/NDWhWOREPPbdtrB5kZSU2HjCxro72DFVDa8zUZCGkFL4QQIlyCDkbef/99lixZwqJFi5gwYQLLly9n8eLF/OY3vyErK+uI599yyy14ujThamxs5Ec/+hGnnHLK4EYeQc52f71ID2+Xf1lvfzMj/qkUVz26pTmwGZ7WurOAdaCZEbDqRhpd6KoDqBAGI4HvM8MRumMKIYQQDGCa5pVXXmHevHnMnTuXkSNHsmjRIhITE1m9enWPz09PT8fhcAT+27BhA0lJSZx88smDHnykHC0z0tkivX/BiEpJhawc60bX7EhTI/h3880LrsdIt+MXhWnDvEBjN+kxIoQQIrSCyox4PB527drFRRddFLjPMAymTZvG9u3b+3WMVatWceqpp5KcnNzrc9xuN263O3BbKUVKSkrg61DxH6uvY3Zd1nvEc/2NwBzZ/R6bKh6JdtVB1QHU2EnWnf6uqY4cjKTe35s+j11Y4psGqgjpe0WjtWpIZTpCe9wB6O91E7FFrlt8kusWn+LtugUVjDQ0NGCaJg6Ho9v9DoeDioq+l5Pu3LmT/fv3853vfOeoz1u2bBnPP/984PaYMWN44IEHyM/PD2a4/VZUdPRpEfemBgBK8hwUF3dv036wtZkOILt0DKnF/WvhXjd2As1bN5DW5MThe03zts+oA5JKSino53F60jplKrWA7VA1RYM4zuFq2ltpA7JGl5EewuMORl/XTcQmuW7xSa5bfIqX6zagAtaBWrVqFaNHj+612NVv4cKFLFiwIHDbH9nV1NR0qz8ZLKUURUVFVFVVWTUbvaiss4KRBE8rlZWV3R7z1FQD4DTBddhjvTEzrWmapp1bafW9xtyxFYCOrJwjzhEMnZgKgLt8LxUVocuOeHz1LC5T0TiI8YVCf6+biC1y3eKTXLf4FCvXzWaz9SuREFQwkpmZiWEYOJ3Obvc7nc4jsiWHa2tr47333uMb3/hGn+ex2+3Ye+llEY43VWt91OM6W30FrEkJRz7PVzOiMx3Q37H527ZXHQgcT/s2yCO/cFDfo84rBGVAeyvaeWhAbeV75F/CnJkVM7+Q+rpuIjbJdYtPct3iU7xct6AKWG02G2PHjmXTpk2B+0zTZNOmTUycOPGor/3ggw/weDycccYZAxtpFLnaey5g1W2t0N5m3Qhm8zj/hnnVFdbmeHTtMTK4KRBlt0NegXUjRJ1YtdbQ6LRuyCZ5QgghQizo1TQLFixg5cqVvPXWW5SXl/P444/T3t7OnDlzAHjkkUdYunTpEa9btWoVs2bNIiMjY9CDjrTOVvCHJZL8K2mSklHJKf0/YE4+2BPB44FDvsLVQXZf7cbfFj5UnVhbmq2xAmQeuXxbCCGEGIyga0ZOPfVUGhoaeO6553A6nZSVlXH77bcHpmlqa2uPqFOoqKhg69at/PSnPw3JoCPJ7dU0dZgAOJIOW9obmLpwBHVMZRjWVE35Hqg6gM7OA+ch68EQBCOqqAS96ZPQLe/1L+tNSUPZE0NzTCGEEMJnQAWs5513Huedd16Pj911111H3DdixAiee+65gZwq6hp8Dc8MBemHByP+zMgAem+oopHo8j3oqvLObEhyCqRnDma4Fn9NSqg2zJPuq0IIIcJI9qbpg7/HSGZSAsZhGR/tCq7hWTddN7Wr7uy8GorVL6owtBvmdba8lykaIYQQoSfBSB86i1d7agXvBEBlOYI/sK+IVVeVo2tD0Aa+K38wUluFDsVSaH9jNyleFUIIEQYSjPShs3h18K3gu1JdMyM1ISxeBcjOhcQkMM3A5nuDItM0QgghwkiCkT4EWsEnHZkZCUzTDGS/Fn/2otGF3rPD+nqQy3r9lFKBupGQLO+VYEQIIUQYSTDSB+dRMyNOYGDTFyo5pbMh2S5rXx+VP/AN8o6Qax1LH6oe9KE6a2Mcgz6WEEIIcTgJRvpw1B17A5kRx8AOXuxrfqatpcOhyowAKH/js0M1gz9YIOhyDP5YQgghxGEkGOlDbw3PtGkOuitpYNULgGFYzdBCJdd3rBBkRgLf50Cmo4QQQog+SDDSh95awdPcBL5W7gNe8upvCw+QW4BK6CH7MkAqx8qMDHaaRmstNSNCCCHCSoKRPvgzI47eWsGnZ6BsPW/q1xdV3CUzEqqVNH65/mmaQWZGWru2gncM7lhCCCFEDyQYOQqtNU7/aprDMyODaXjmV9iZGQnZsl4//zRNowvd0T7w4/hb3qekSit4IYQQYSHByFG0eTQdXmvr5SNqRgbRCj7A3w8EQp8ZScuAJN/mfXWDKGL1T9FkOAY7IiGEEKJHEowchX+KJilBkWw77K3yd18dxNSFMgwoHmV93bWYNQSUUl2KWAcejGh/MDLQFUNCCCFEHwa0Ud5wcdRW8KHIjADGZTegN6+HqScM6jg9yi2Ain3oQwcZ8I43UrwqhBAizCQYOQpn61EanoWiZgRQ4yajxk0e1DF6PXZuPhoG12tEeowIIYQIM5mmOQp/ZuSI4lXiZPoiJwQrahqk+6oQQojwkmDkKJy9NDwDApmRmN7JNs/fayQENSMSjAghhAgTCUaOItAKPukoO/bGcFdS5e/oWjeYzIjTOlYsB11CCCHimgQjR9FrK3iPG5oarRux/CHtb3xWX4f2Ny4LlmRGhBBChJkEI0fR6yZ5DS7r34QESEuP8KiCkOkAm83aiK++NuiXSyt4IYQQkSDByFG4At1Xe2kFn+GweoXEKNV1872BND5rbQaP2/paghEhhBBhErufpDHA2d7L0l5/i/QYrhcJyB3Ehnn+rEhyCsrfKVYIIYQIMQlGeuE1NY29ND3TcbTcVQU2zBtAZiQwRRMHQZcQQoi4JcFIL5o6vJjWtjRkHr6axr+sNy4yI/6W8AeDf63UiwghhIgACUZ64a8XyUg0sBmHNVNvCE331YjIGXivEekxIoQQIhIkGOnF0Rqe6UDNiCNyAxqgzmmaAdSMhGAzQCGEEKIvEoz0otdlvRDIjMTFNE2ev9dILdo0g3tto9P6V4IRIYQQYSTBSC9c7X23go+LaRpHLhgGeDyd00v9FBf77wghhIh7Eoz04uit4J3Wv3HwIa0SEqyABIJfUSM79gohhIgACUZ60VvDM93WCu1t1o14yIxAYEWNrg1yRY0/6MpwhHQ4QgghRFcSjPSis4D18FbwvqmOpGRUckqERzUwgSLWILqwaq27TEc5Qj8oIYQQwkeCkV702grev5Imnj6gB7KiprWlSyv4OMkACSGEiEsSjPTC1VsreH9mJB5W0vjlDqDXSNdW8EnSCl4IIUT4SDDSi86lvYfVjMTTShofFejCGkRmRBqeCSGEiBAJRnrQ4TVpcVs9OXrbJE/FwUqagJzOaRqtdf9eIz1GhBBCRIgEIz3wZ0VsBqTZD3uL4qkVvJ8/M9LRDk2N/XqJluJVIYQQESLBSA86e4zYUKr7vjSBD+k4qhlR9sTO8db1c6pGeowIIYSIEAlGeuDqbVkvdPmQjp9gBICcIOtGAjUjcfZ9CiGEiDsSjPTA1d5z8ar1oD8z4ojcgEJABbmiRnbsFUIIESkSjPSgt4Zn2jS7FHbGWcYg2BU1Mk0jhBAiQiQY6UGvDc+am8BrPUZmVoRHNUiBzEiw0zSOsAxHCCGE8JNgpAeBzMjhm+T5V9KkZ6Bs9giPanBUEF1YtdYSjAghhIgYCUZ60Nnw7PAeI3G4rNcvEIz0o2akrRXcHdbXEowIIYQIMwlGetC5muaw7qvx2Arez18z0tKEbm05+nP9WZGkFFRScliHJYQQQkgw0oPeMyNOID6LOlVyKqSmWzf6mqoJZIDirC5GCCFEXJJg5DBa68AmeUcUsMZzZgS6rKjpY6pGWsELIYSIIAlGDtPsNvFY29KQeXgBazzXjADkFgKg++jCKj1GhBBCRJIEI4fxT9Gk2AySbN3fnsCHdJw1PPPr9+69/h4j8ZoBEkIIEVckGDnMUVvB+zIjcdcK3q+/K2r8QVeGI5yjEUIIIQAJRo7QWbzaQyv4QGYkPoMRf2akr8ZnsmOvEEKISJJg5DD+hmeOw1vBezzQ1GDdiPvMSD+naSQYEUIIEQESjBymc5O8w6ZpGl3WvwkJkJYe4VGFSI4vGGlwov1NzXoiBaxCCCEiSIKRwwRqRpJ6Wdab4UAZcfq2pWeAv4lZL3UjWuvOpb1xOh0lhBAivsTpp2r4BDbJS+llWW8cf0ArpSDHt6Kmt+W97a3QIa3ghRBCRI4EI4fpLTMyZIo6/bv31vYSjPi6zJKULK3ghRBCRIQEI4dx9tYKfoj03lB9dWGVehEhhBARJsHIYfwFrEe0go/37qt+/hU1vU3TSDAihBAiwiQY6cJrahp7WU3TuWOvI8KjCjH/NE0vy3ulFbwQQohIk2CkiwZfIGIoSE88bJrGWQcMhWmaPrqwSo8RIYQQESbBSBf+4tWMpAQSDBW4X5teKN9j3RgxOgojCyF/zUj9IauR2+EahkihrhBCiLghwUgX/uJVx+E9RqoOQHsbJKVA4YgojCyEMrPBZgNtgvPQEQ/LNI0QQohIk2Cki942ydN7dlpflI5FGT1soBdHlGFAdp51o6epGpmmEUIIEWE97AbXt9dee42XX34Zp9NJaWkp1157LePHj+/1+c3NzTz99NN8+OGHNDU1kZ+fz3/8x39w/PHHD3jg4dBrK/i9VjCiSnv/HuNKXiHUVKEPVaMOfyyQGYnv2hghhBDxI+hg5P3332fJkiUsWrSICRMmsHz5chYvXsxvfvMbsrKyjni+x+Ph3nvvJTMzkx/+8Ifk5ORQW1tLampqSL6BUOptx169158ZGRrBiMrJR8MRy3u11rK0VwghRMQFHYy88sorzJs3j7lz5wKwaNEi1q1bx+rVq7nooouOeP6qVatoamriF7/4BTabdbqCgoLBjTpMnD1M02ivF/btAoZQZqS3FTXtrdDRbn0twYgQQogICSoY8Xg87Nq1q1vQYRgG06ZNY/v27T2+5pNPPmHChAk88cQTfPzxx2RmZnLaaadx0UUXYfSy4Zzb7cbtdgduK6VISUkJfB0q/mP5/21o62x4FjhP5X5wd0BKKqpwREjPHy0qt8DKjByq7v79NPh2Jk5MwkiJvcyV3+HXTcQHuW7xSa5bfIq36xZUMNLQ0IBpmjgcjm73OxwOKioqenzNwYMHqamp4fTTT+e2226jqqqKxx9/HK/XyyWXXNLja5YtW8bzzz8fuD1mzBgeeOAB8vPzgxluvxUVFQHQbB6wzlecT3Gxda6mjR9SDyRNOIaCkpKwnD/S2iZOpgZIcNVRXFwcuL+9/iDVQEJ2Xrf7Y5X/uon4ItctPsl1i0/xct0GVMAaDK01mZmZfPvb38YwDMaOHUtdXR0vvfRSr8HIwoULWbBgQeC2P7KrqanB01NvjAFSSlFUVERVVRVaa2oaWgEwWxuorLTO4/3sYwA6ikdTWVkZsnNHk1bWZfdUV1Jx4IC1wgYwd30BgDc9I6a/18Ovm4gPct3ik1y3+BQr181ms/UrkRBUMJKZmYlhGDidzm73O53OI7Ilfg6HA5vN1m1KpqSkBKfTicfjCdSRdGW327Hb7T0eLxxvqtYarXVgaW9mUkLgPJ3LescPmR9EnZUDygCPx9qN2JFj3e/ffyfDERffq/+6ifgi1y0+yXWLT/Fy3YLqM2Kz2Rg7diybNm0K3GeaJps2bWLixIk9vmbSpElUVVVhmmbgvsrKSrKzs3sMRKKlzWPS7rUumL+AVXvcUL4bAFU2RIpXAWWzQbYVgNB1jxrpMSKEECIKgm56tmDBAlauXMlbb71FeXk5jz/+OO3t7cyZMweARx55hKVLlwaeP3/+fJqamvjzn/9MRUUF69atY9myZZx77rkh+yZCwZ8VSUxQpNh8b8uBfeDxQGq61ZtjKMnpYcM8WdYrhBAiCoJOTZx66qk0NDTw3HPP4XQ6KSsr4/bbbw9M09TW1nar3s3Ly+OOO+7gqaee4kc/+hE5OTmcf/75PS4DjiZ/K/ispITA+PXeHdaDZePjpiK5v1RuPnon3Zb3Sit4IYQQ0TCgeZLzzjuP8847r8fH7rrrriPumzhxIosXLx7IqSKmsxV8l7dkzxDrvNpVri/T07XxWaMTAJXliPhwhBBCDF+yN41PZ/fVLg3P/G3gh1C9SIBv917dtfGZS3bsFUIIEXkSjPi4ujQ8A9DuDjiw13qwdEK0hhU2KtCFVWpGhBBCRFfsLGeJMmf7Ya3gy/eA1wsZWZCTF72BhYsvM8KhamvZV3ubtIIXQggRFRKM+ByRGenSX2SoFa8CkOMLRtrboLkRWpqt24mJkJQSvXEJIYQYdmSaxsd1+CZ5vpU0Q7JeBFCJSZ0ZkEM1XaZosodm8CWEECJmSTDi01nA2j0zMiRX0vh1rRtpkOJVIYQQ0SHBiE8gM5KUgG5vh4r91gNDNDMCoHxTNbquWnqMCCGEiBqpGQFMrXG1d1nau38naBOyclCO3CiPLoz8mZHaakhNA6QVvBBCiMiTYARo6vBi+vYRykyyBfqLDOWsCNCt14jyuK37JBgRQggRYRKM0Fkvkp5oYE9QmMOhXgRQuYVogLpqtL9mNTM7iiMSQggxHEkwwpGt4Id059WuAr1GasCeCMg0jRBCiMiTAla6b5Kn21qgqtx6oHRcFEcVAf6akeZGqK60vpZgRAghRIRJMMJhmZF9u0BryMlDDfEpC5WSGihcpdFl/SvBiBBCiAiTYISu3VcTunVeHRZyCrrflmBECCFEhEkwAji7dl/dOzyKVwPyugQjiYmQLK3ghRBCRJYEI3TvvhrovFo29Hbq7Ulg916ADIe0ghdCCBFxEozQpWZEuaG6wrpzqBev+vk3zAOZohFCCBEVEozQJTNSX2XdkVeISs+M4ogip1tmRIIRIYQQUSDBCOBstzIjmTV7gWFULwKdvUaQHiNCCCGiY9gHIx0ek+YOE4Cs/TusO4d6s7Oucgs7v84a2kuZhRBCxKZhH4zUt3YAkKAgde/nwDDLjKRnQGKS9bVkRoQQQkSBBCMt1gZxmYkGRu1B687hUrwK1uoZX92ITNMIIYSIhmEfjNS1WJmRLGXVjVAwApWaHsURRZ4692sw9XiYMiPaQxFCCDEMDfuN8uqbrWDE4WkGhsHmeD0wTpsHp82L9jCEEEIMU5IZ8U3TZLXUW3cMp3oRIYQQIgYM+2Ck3jdNk+my6kWGY2ZECCGEiKZhH4wEakYaakApGD02yiMSQgghhpdhH4z4V9NkuZugaCQqOTXKIxJCCCGGFwlG/JmRjqbh1V9ECCGEiBHDPhgJTNO4m4ZX51UhhBAiRgzrYERr3TlNI5kRIYQQIiqGdTDS6jbp8Pr2pfG0wigpXhVCCCEibVgHI852LwDJnnaSiopQSUlRHpEQQggx/AzrYMTVZrWAz3I3SX8RIYQQIkqGeTBiZUayOpqgdEKURyOEEEIMT8M6GHG2SmZECCGEiLZhHYy46l0AZLmbYWRZdAcjhBBCDFPDOhhx1lqb42Ul21D2xCiPRgghhBiehnUw4mpoBiArKz3KIxFCCCGGr2EdjDhbrYZnjrzsKI9ECCGEGL6GdTCijQQMbeIYURTtoQghhBDDli3aA4im+68+k4KCAioqKqM9FCGEEGLYGtaZEYCEhARstoRoD0MIIYQYtoZ9MCKEEEKI6JJgRAghhBBRJcGIEEIIIaJKghEhhBBCRJUEI0IIIYSIKglGhBBCCBFVEowIIYQQIqokGBFCCCFEVEkwIoQQQoiokmBECCGEEFElwYgQQgghokqCESGEEEJElQQjQgghhIgqW7QHEAybLTzDDddxRXjJdYtPct3ik1y3+BTt69bf8yuttQ7zWIQQQgghejWsp2laW1v58Y9/TGtra7SHIoIg1y0+yXWLT3Ld4lO8XbdhHYxordm9ezeSHIovct3ik1y3+CTXLT7F23Ub1sGIEEIIIaJPghEhhBBCRNWwDkbsdjsXX3wxdrs92kMRQZDrFp/kusUnuW7xKd6um6ymEUIIIURUDevMiBBCCCGiT4IRIYQQQkSVBCNCCCGEiCoJRoQQQggRVcN6s4HXXnuNl19+GafTSWlpKddeey3jx4+P9rCEz5YtW3jppZfYvXs39fX13HLLLZx00kmBx7XWPPfcc6xcuZLm5mYmT57M9ddfT3FxcRRHPbwtW7aMDz/8kAMHDpCYmMjEiRO58sorGTFiROA5HR0dLFmyhPfffx+328306dO5/vrrcTgc0Ru4YMWKFaxYsYKamhoARo4cycUXX8zMmTMBuW7x4IUXXmDp0qVccMEFXH311UD8XLdhmxl5//33WbJkCRdffDEPPPAApaWlLF68GJfLFe2hCZ/29nbKysq47rrrenz8xRdf5F//+heLFi3ivvvuIykpicWLF9PR0RHhkQq/LVu2cO6557J48WJ++tOf4vV6uffee2lraws856mnnuKTTz7hhz/8IXfffTf19fU8/PDDURy1AMjJyeHyyy/nl7/8Jffffz9Tp07lwQcfZP/+/YBct1i3c+dO3njjDUpLS7vdHzfXTQ9Tt912m3788ccDt71er77hhhv0smXLojco0atLLrlEr127NnDbNE29aNEi/eKLLwbua25u1pdffrl+9913ozFE0QOXy6UvueQSvXnzZq21dY2++c1v6jVr1gSeU15eri+55BK9bdu2aA1T9OLqq6/WK1eulOsW41pbW/X3v/99/dlnn+k777xTP/nkk1rr+Pp5G5aZEY/Hw65du5g2bVrgPsMwmDZtGtu3b4/iyER/VVdX43Q6Oe644wL3paamMn78eLmGMaSlpQWA9PR0AHbt2oXX6+32s1dSUkJeXp5ctxhimibvvfce7e3tTJw4Ua5bjHv88ceZOXNmt9+HEF8/b8OyZqShoQHTNI+YM3M4HFRUVERnUCIoTqcTgKysrG73Z2VlBR4T0WWaJn/+85+ZNGkSo0ePBqzrZrPZSEtL6/ZcuW6xYd++fdxxxx243W6Sk5O55ZZbGDlyJHv27JHrFqPee+89du/ezf3333/EY/H08zYsMyNCiPB74okn2L9/PzfffHO0hyL6acSIETz00EPcd999zJ8/n0cffZTy8vJoD0v0ora2lj//+c98//vfJzExMdrDGZRhmRnJzMzEMIwjIkOn0xlzFcaiZ/7r5HK5yM7ODtzvcrkoKyuLzqBEwBNPPMG6deu4++67yc3NDdzvcDjweDw0Nzd3+2vN5XLJz14MsNlsFBUVATB27Fi++OILXn31VU499VS5bjFo165duFwufvzjHwfuM02Tzz//nNdee4077rgjbq7bsAxGbDYbY8eOZdOmTYGloqZpsmnTJs4777woj070R0FBAQ6Hg40bNwaCj5aWFnbu3Mn8+fOjO7hhTGvNn/70Jz788EPuuusuCgoKuj0+duxYEhIS2LhxIyeffDIAFRUV1NbWMnHixGgMWRyFaZq43W65bjFq2rRp/OpXv+p23x/+8AdGjBjBhRdeSF5eXtxct2EZjAAsWLCARx99lLFjxzJ+/HheffVV2tvbmTNnTrSHJnza2tqoqqoK3K6urmbPnj2kp6eTl5fHBRdcwD//+U+Ki4spKCjgmWeeITs7m1mzZkVx1MPbE088wbvvvsutt95KSkpKIPuYmppKYmIiqampnH322SxZsoT09HRSU1P505/+xMSJE2Pul+Nws3TpUmbMmEFeXh5tbW28++67bNmyhTvuuEOuW4xKSUkJ1GP5JSUlkZGREbg/Xq7bsN6197XXXuOll17C6XRSVlbGNddcw4QJE6I9LOGzefNm7r777iPuP+uss7jpppsCTc/efPNNWlpamDx5Mtddd123Blsisi699NIe7//P//zPQKDvb8L03nvv4fF4YrYJ03Dzhz/8gU2bNlFfX09qaiqlpaVceOGFgRUact3iw1133UVZWdkRTc9i/boN62BECCGEENEnq2mEEEIIEVUSjAghhBAiqiQYEUIIIURUSTAihBBCiKiSYEQIIYQQUSXBiBBCCCGiSoIRIYQQQkSVBCNCCCGEiCoJRoQQce25557j0ksvpaGhIdpDEUIMkAQjQgghhIgqCUaEEEIIEVUSjAghhBAiqmzRHoAQIj7U1dXxzDPPsH79epqbmykqKmLBggWcffbZQOcuyzfffDN79uxh9erVtLW1MXXqVK677jry8vK6HW/NmjW88MILlJeXk5yczPTp07nyyivJycnp9rwDBw7w7LPPsnnzZtra2sjLy+Pkk0/msssu6/a8lpYW/vKXv/DRRx+htWb27Nlcd911JCUlhfeNEUIMmgQjQog+OZ1O7rjjDgDOPfdcMjMz+fTTT3nsscdobW3ly1/+cuC5//znP1FKceGFF9LQ0MDy5cv5xS9+wUMPPURiYiIAb731Fr///e8ZN24cl19+OS6Xi1dffZVt27bx4IMPkpaWBsDevXv5+c9/js1mY968eRQUFFBVVcUnn3xyRDDy61//mvz8fC6//HJ27drFqlWryMzM5Morr4zQuySEGCgJRoQQfXrmmWcwTZNf/epXZGRkADB//nx+85vf8Pe//51zzjkn8NympiZ+/etfk5KSAsCYMWP49a9/zZtvvskFF1yAx+Phb3/7G6NGjeLuu+8OBCiTJ0/ml7/8JcuXL+fSSy8F4E9/+hMADzzwQLfMyhVXXHHEGMvKyvjOd77TbRyrV6+WYESIOCA1I0KIo9Jas3btWk444QS01jQ0NAT+mzFjBi0tLezatSvw/DPPPDMQiACcfPLJZGdns379egB27dqFy+Xi3HPPDQQiAMcffzwlJSWsW7cOgIaGBj7//HPmzp17xBSPUuqIcXYNiMAKbhobG2lpaRn8myCECCvJjAghjqqhoYHm5mbefPNN3nzzzV6f459aKS4u7vaYUoqioiJqamoAAv+OGDHiiOOMGDGCrVu3AnDw4EEARo0a1a9xHh6wpKenA9Dc3Exqamq/jiGEiA4JRoQQR6W1BuCMM87grLPO6vE5paWllJeXR3JYRzCMnhO9/vELIWKXBCNCiKPKzMwkJSUF0zQ57rjjen2ePxiprKzsdr/WmqqqKkaPHg1Afn4+ABUVFUydOrXbcysqKgKPFxYWArB///7QfCNCiJglNSNCiKMyDIPZs2ezdu1a9u3bd8Tjh7dhf/vtt2ltbQ3c/uCDD6ivr2fmzJkAjB07lqysLN544w3cbnfgeevXr+fAgQMcf/zxgBUETZkyhdWrV1NbW9vtHJLtEGJokcyIEKJPl19+OZs3b+aOO+5g3rx5jBw5kqamJnbt2sXGjRt58sknA89NT0/n5z//OXPmzMHlcrF8+XKKioqYN28eADabjSuuuILf//733HXXXZx22mk4nU7+9a9/kZ+f322Z8DXXXMPPf/5zfvzjHweW9tbU1LBu3ToeeuihiL8PQojwkGBECNEnh8PBfffdx/PPP8/atWt5/fXXycjIYNSoUUcss124cCF79+7lhRdeoLW1lWnTpnH99dd3az42Z84cEhMTefHFF/nb3/5GUlISs2bN4sorrwwUwoK1XHfx4sU8++yzvPHGG3R0dJCfn88pp5wSse9dCBF+Sku+UwgRAv4OrD/84Q85+eSToz0cIUQckZoRIYQQQkSVBCNCCCGEiCoJRoQQQggRVVIzIoQQQoioksyIEEIIIaJKghEhhBBCRJUEI0IIIYSIKglGhBBCCBFVEowIIYQQIqokGBFCCCFEVEkwIoQQQoiokmBECCGEEFH1/wHdki0FC7e0vgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "for key in ['acc']:\n", " df_hist[[c for c in df_hist.columns if key in c]].plot()" @@ -2318,71 +635,9 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n", - "/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:478: PossibleUserWarning: Your `test_dataloader`'s sampler has shuffling enabled, it is strongly recommended that you turn shuffling off for val/test dataloaders.\n", - " rank_zero_warn(\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7ecb140ff81d43b99d214bdcbfebcd6c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Testing: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃        Test metric               DataLoader 0               DataLoader 1               DataLoader 2        ┃\n",
-       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│         test/acc                      1.0                 0.855555534362793         0.8805555701255798     │\n",
-       "│         test/loss           2.1766969439340755e-05      0.006868141703307629       0.006985912099480629    │\n",
-       "└───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┘\n",
-       "
\n" - ], - "text/plain": [ - "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", - "┃\u001b[1m \u001b[0m\u001b[1m Test metric \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 1 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 2 \u001b[0m\u001b[1m \u001b[0m┃\n", - "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", - "│\u001b[36m \u001b[0m\u001b[36m test/acc \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 1.0 \u001b[0m\u001b[35m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.855555534362793 \u001b[0m\u001b[35m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8805555701255798 \u001b[0m\u001b[35m \u001b[0m│\n", - "│\u001b[36m \u001b[0m\u001b[36m test/loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 2.1766969439340755e-05 \u001b[0m\u001b[35m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.006868141703307629 \u001b[0m\u001b[35m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.006985912099480629 \u001b[0m\u001b[35m \u001b[0m│\n", - "└───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┘\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "[{'test/acc/dataloader_idx_0': 1.0,\n", - " 'test/loss/dataloader_idx_0': 2.1766969439340755e-05},\n", - " {'test/acc/dataloader_idx_1': 0.855555534362793,\n", - " 'test/loss/dataloader_idx_1': 0.006868141703307629},\n", - " {'test/acc/dataloader_idx_2': 0.8805555701255798,\n", - " 'test/loss/dataloader_idx_2': 0.006985912099480629}]" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "dl_test = dm.test_dataloader()\n", "rs = trainer.test(net, dataloaders=[dl_train, dl_val, dl_test])\n", @@ -2391,41 +646,9 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e8c7348279b84d49a5aba4d01374fcd7", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Predicting: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(793,)" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "dl_test = dm.test_dataloader()\n", "r = trainer.predict(net, dataloaders=dl_test)\n", @@ -2435,25 +658,14 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2377, 3170)" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [] }, { "cell_type": "code", - "execution_count": 69, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2463,385 +675,9 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
trueindexlabelpromptlieprompt_truncatedchoice_probs0ans0choice_probs1ans1txt_ans0txt_ans1dir_trueconfllm_probllm_ansdesired_ansyprobe_predprobe_prob
2377059411<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.39532927, 0.3094553]0.439072[0.40214014, 0.18818313]0.318774FalseFalse-0.1202970.1202970.378923FalseFalseTrueTrue0.577148
2378059421<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.27720308, 0.60739946]0.686628[0.44869244, 0.46937478]0.511258TrueTrue-0.1753690.1753690.598943TrueFalseTrueTrue0.515625
2379159441<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.28807038, 0.49657252]0.632856[0.42382222, 0.3274443]0.435851TrueFalse-0.1970060.1970060.534353TrueFalseFalseFalse0.404297
2380159450<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.12029998, 0.52055067]0.812268[0.3457057, 0.60893726]0.637862TrueTrue-0.1744060.1744060.725065TrueTrueFalseFalse0.478027
2381059470<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.47331956, 0.34063554]0.418489[0.26450822, 0.4396259]0.624341FalseTrue0.2058520.2058520.521415TrueTrueFalseFalse0.462891
...............................................................
3165079850<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.4293921, 0.33180988]0.435897[0.48672205, 0.20352039]0.294849FalseFalse-0.1410480.1410480.365373FalseTrueTrueFalse0.479492
3166179881<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.4677862, 0.33066]0.414124[0.20927021, 0.47021544]0.692007FalseTrue0.2778820.2778820.553065TrueFalseTrueTrue0.587891
3167179961<|system|>You are about to immerse yourself in...Truedetermined if you are the lying Guard or the ...[0.18918358, 0.28532732]0.601296[0.4284532, 0.30026284]0.412038FalseFalse-0.1892580.1892580.506667TrueFalseFalseFalse0.426758
3168079981<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.24055526, 0.41276416]0.631786[0.35980803, 0.38881692]0.519368TrueTrue-0.1124180.1124180.575577TrueFalseTrueTrue0.567383
3169179991<|system|>You are about to immerse yourself in...True<|endoftext|><|endoftext|><|endoftext|><|endof...[0.5347394, 0.29575846]0.356118[0.41391683, 0.46787095]0.530588FalseTrue0.1744700.1744700.443353FalseFalseTrueFalse0.480469
\n", - "

793 rows × 20 columns

\n", - "
" - ], - "text/plain": [ - " true index label prompt \n", - "2377 0 5941 1 <|system|>You are about to immerse yourself in... \\\n", - "2378 0 5942 1 <|system|>You are about to immerse yourself in... \n", - "2379 1 5944 1 <|system|>You are about to immerse yourself in... \n", - "2380 1 5945 0 <|system|>You are about to immerse yourself in... \n", - "2381 0 5947 0 <|system|>You are about to immerse yourself in... \n", - "... ... ... ... ... \n", - "3165 0 7985 0 <|system|>You are about to immerse yourself in... \n", - "3166 1 7988 1 <|system|>You are about to immerse yourself in... \n", - "3167 1 7996 1 <|system|>You are about to immerse yourself in... \n", - "3168 0 7998 1 <|system|>You are about to immerse yourself in... \n", - "3169 1 7999 1 <|system|>You are about to immerse yourself in... \n", - "\n", - " lie prompt_truncated \n", - "2377 True <|endoftext|><|endoftext|><|endoftext|><|endof... \\\n", - "2378 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "2379 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "2380 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "2381 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "... ... ... \n", - "3165 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "3166 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "3167 True determined if you are the lying Guard or the ... \n", - "3168 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "3169 True <|endoftext|><|endoftext|><|endoftext|><|endof... \n", - "\n", - " choice_probs0 ans0 choice_probs1 ans1 \n", - "2377 [0.39532927, 0.3094553] 0.439072 [0.40214014, 0.18818313] 0.318774 \\\n", - "2378 [0.27720308, 0.60739946] 0.686628 [0.44869244, 0.46937478] 0.511258 \n", - "2379 [0.28807038, 0.49657252] 0.632856 [0.42382222, 0.3274443] 0.435851 \n", - "2380 [0.12029998, 0.52055067] 0.812268 [0.3457057, 0.60893726] 0.637862 \n", - "2381 [0.47331956, 0.34063554] 0.418489 [0.26450822, 0.4396259] 0.624341 \n", - "... ... ... ... ... \n", - "3165 [0.4293921, 0.33180988] 0.435897 [0.48672205, 0.20352039] 0.294849 \n", - "3166 [0.4677862, 0.33066] 0.414124 [0.20927021, 0.47021544] 0.692007 \n", - "3167 [0.18918358, 0.28532732] 0.601296 [0.4284532, 0.30026284] 0.412038 \n", - "3168 [0.24055526, 0.41276416] 0.631786 [0.35980803, 0.38881692] 0.519368 \n", - "3169 [0.5347394, 0.29575846] 0.356118 [0.41391683, 0.46787095] 0.530588 \n", - "\n", - " txt_ans0 txt_ans1 dir_true conf llm_prob llm_ans desired_ans \n", - "2377 False False -0.120297 0.120297 0.378923 False False \\\n", - "2378 True True -0.175369 0.175369 0.598943 True False \n", - "2379 True False -0.197006 0.197006 0.534353 True False \n", - "2380 True True -0.174406 0.174406 0.725065 True True \n", - "2381 False True 0.205852 0.205852 0.521415 True True \n", - "... ... ... ... ... ... ... ... \n", - "3165 False False -0.141048 0.141048 0.365373 False True \n", - "3166 False True 0.277882 0.277882 0.553065 True False \n", - "3167 False False -0.189258 0.189258 0.506667 True False \n", - "3168 True True -0.112418 0.112418 0.575577 True False \n", - "3169 False True 0.174470 0.174470 0.443353 False False \n", - "\n", - " y probe_pred probe_prob \n", - "2377 True True 0.577148 \n", - "2378 True True 0.515625 \n", - "2379 False False 0.404297 \n", - "2380 False False 0.478027 \n", - "2381 False False 0.462891 \n", - "... ... ... ... \n", - "3165 True False 0.479492 \n", - "3166 True True 0.587891 \n", - "3167 False False 0.426758 \n", - "3168 True True 0.567383 \n", - "3169 True False 0.480469 \n", - "\n", - "[793 rows x 20 columns]" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Make a prediction dataframe with everything in it\n", "df_test = dm.df.iloc[dm.splits['test'][0]:].copy()\n", @@ -2861,33 +697,9 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "probe results on subsets of the data\n", - "acc=87.89% [lie==True]\n", - "acc=nan% [lie==False]\n", - "acc=87.53% [llm_ans==label]\n", - "acc=88.33% [llm_ans==desired_ans]\n", - "acc=88.33% [lie==True & llm_ans==desired_ans]\n", - "acc=87.53% [lie==True & llm_ans!=desired_ans]\n" - ] - }, - { - "data": { - "text/plain": [ - "0.8752886836027713" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "def get_acc_subset(df, query):\n", " df_s = df.query(query)\n", @@ -2913,17 +725,9 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "⭐PRIMARY METRIC⭐ acc=87.89% from probe\n" - ] - } - ], + "outputs": [], "source": [ "acc = (df_test['y']==(y_test_pred_bool>0.5)).mean()\n", "\n", diff --git a/notebooks/03_make_dataset.ipynb b/notebooks/03_make_dataset.ipynb index 5e6ed9a..c4c80ef 100644 --- a/notebooks/03_make_dataset.ipynb +++ b/notebooks/03_make_dataset.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -32,9 +32,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'4.30.1'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import numpy as np\n", "\n", @@ -62,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -84,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -97,7 +108,7 @@ "dataset_params = dict(\n", " model_repo=\"HuggingFaceH4/starchat-beta\",\n", " dataset_name = \"amazon_polarity\",\n", - " N = 509, # 8000 # 4000 in 4 hours\n", + " N = 9009, # 8000 # 4000 in 4 hours\n", " N_SHOTS = 2,\n", " prompt_fmt=format_guard_prompt,\n", " choices=default_class2choices,\n", @@ -131,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -140,139 +151,102 @@ "text": [ "\u001b[1mchanging pad_token_id from None to 0\u001b[0m\n", "\u001b[1mchanging padding_side from right to left\u001b[0m\n", - "\u001b[1mchanging truncation_side from right to left\u001b[0m\n" + "\u001b[1mchanging truncation_side from right to left\u001b[0m\n", + "/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/bitsandbytes/cuda_setup/main.py:149: UserWarning: Found duplicate ['libcudart.so', 'libcudart.so.11.0', 'libcudart.so.12.0'] files: {PosixPath('/home/ubuntu/mambaforge/envs/dlk2/lib/libcudart.so'), PosixPath('/home/ubuntu/mambaforge/envs/dlk2/lib/libcudart.so.11.0')}.. We'll flip a coin and try one of these, in order to fail forward.\n", + "Either way, this might cause trouble in the future:\n", + "If you get `CUDA error: invalid device function` errors, the above might be the cause and the solution is to make sure only one ['libcudart.so', 'libcudart.so.11.0', 'libcudart.so.12.0'] in the paths that we search based on your env.\n", + " warn(msg)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "===================================BUG REPORT===================================\n", + "Welcome to bitsandbytes. For bug reports, please run\n", + "\n", + "python -m bitsandbytes\n", + "\n", + " and submit this information together with your error trace to: https://github.com/TimDettmers/bitsandbytes/issues\n", + "================================================================================\n", + "bin /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/bitsandbytes/libbitsandbytes_cuda117.so\n", + "CUDA SETUP: CUDA runtime path found: /home/ubuntu/mambaforge/envs/dlk2/lib/libcudart.so\n", + "CUDA SETUP: Highest compute capability among GPUs detected: 8.6\n", + "CUDA SETUP: Detected CUDA version 117\n", + "CUDA SETUP: Loading binary /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/bitsandbytes/libbitsandbytes_cuda117.so...\n" ] }, { "data": { - "text/html": [ - "
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮\n",
-       " in <module>:1                                                                                    \n",
-       "                                                                                                  \n",
-       " 1 model, tokenizer = load_model(model_repo=dataset_params['model_repo'])                       \n",
-       "   2                                                                                              \n",
-       "                                                                                                  \n",
-       " /home/ubuntu/Documents/mjc/elk/discovering_latent_knowledge/src/models/load.py:23 in load_model  \n",
-       "                                                                                                  \n",
-       "   20                                                                                             \n",
-       "   21 def load_model(model_repo = \"HuggingFaceH4/starchat-beta\", lora_repo=None, verbose=True)    \n",
-       "   22 if \"starchat\" in model_repo:                                                            \n",
-       " 23 │   │   model, tokenizer = load_starchat(model_repo=model_repo)                             \n",
-       "   24 # elif \"llama\" in model_repo:                                                           \n",
-       "   25 #     model, tokenizer = load_llama(model_repo=model_repo, lora_repo=lora_repo)         \n",
-       "   26 else:                                                                                   \n",
-       "                                                                                                  \n",
-       " /home/ubuntu/Documents/mjc/elk/discovering_latent_knowledge/src/models/load.py:51 in             \n",
-       " load_starchat                                                                                    \n",
-       "                                                                                                  \n",
-       "   48 verbose_change_param(tokenizer, 'padding_side', 'left')                                 \n",
-       "   49 verbose_change_param(tokenizer, 'truncation_side', 'left')                              \n",
-       "   50                                                                                         \n",
-       " 51 model = AutoModelForCausalLM.from_pretrained(model_repo, config=config, **model_opti    \n",
-       "   52                                                                                         \n",
-       "   53 return model, tokenizer                                                                 \n",
-       "   54                                                                                             \n",
-       "                                                                                                  \n",
-       " /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/transformers/models/auto/auto_fact \n",
-       " ory.py:484 in from_pretrained                                                                    \n",
-       "                                                                                                  \n",
-       "   481 │   │   │   )                                                                              \n",
-       "   482 │   │   elif type(config) in cls._model_mapping.keys():                                    \n",
-       "   483 │   │   │   model_class = _get_model_class(config, cls._model_mapping)                     \n",
-       " 484 │   │   │   return model_class.from_pretrained(                                            \n",
-       "   485 │   │   │   │   pretrained_model_name_or_path, *model_args, config=config, **hub_kwargs,   \n",
-       "   486 │   │   │   )                                                                              \n",
-       "   487 │   │   raise ValueError(                                                                  \n",
-       "                                                                                                  \n",
-       " /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/transformers/modeling_utils.py:281 \n",
-       " 9 in from_pretrained                                                                             \n",
-       "                                                                                                  \n",
-       "   2816 │   │   │   │   │   key: device_map[key] for key in device_map.keys() if key not in modu  \n",
-       "   2817 │   │   │   │   }                                                                         \n",
-       "   2818 │   │   │   │   if \"cpu\" in device_map_without_lm_head.values() or \"disk\" in device_map_  \n",
-       " 2819 │   │   │   │   │   raise ValueError(                                                     \n",
-       "   2820 │   │   │   │   │   │   \"\"\"                                                               \n",
-       "   2821 │   │   │   │   │   │   Some modules are dispatched on the CPU or the disk. Make sure yo  \n",
-       "   2822 │   │   │   │   │   │   the quantized model. If you want to dispatch the model on the CP  \n",
-       "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
-       "ValueError: \n",
-       "                        Some modules are dispatched on the CPU or the disk. Make sure you have enough GPU RAM to \n",
-       "fit\n",
-       "                        the quantized model. If you want to dispatch the model on the CPU or the disk while keeping\n",
-       "                        these modules in 32-bit, you need to set `load_in_8bit_fp32_cpu_offload=True` and pass a \n",
-       "custom\n",
-       "                        `device_map` to `from_pretrained`. Check\n",
-       "                        https://huggingface.co/docs/transformers/main/en/main_classes/quantization#offload-between-\n",
-       "cpu-and-gpu\n",
-       "                        for more details.\n",
-       "                        \n",
-       "
\n" - ], + "application/vnd.jupyter.widget-view+json": { + "model_id": "0c4350e56b7846fba9c6725c33de2d76", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "\u001b[31m╭─\u001b[0m\u001b[31m──────────────────────────────\u001b[0m\u001b[31m \u001b[0m\u001b[1;31mTraceback \u001b[0m\u001b[1;2;31m(most recent call last)\u001b[0m\u001b[31m \u001b[0m\u001b[31m───────────────────────────────\u001b[0m\u001b[31m─╮\u001b[0m\n", - "\u001b[31m│\u001b[0m in \u001b[92m\u001b[0m:\u001b[94m1\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m1 model, tokenizer = load_model(model_repo=dataset_params[\u001b[33m'\u001b[0m\u001b[33mmodel_repo\u001b[0m\u001b[33m'\u001b[0m]) \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m2 \u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2;33m/home/ubuntu/Documents/mjc/elk/discovering_latent_knowledge/src/models/\u001b[0m\u001b[1;33mload.py\u001b[0m:\u001b[94m23\u001b[0m in \u001b[92mload_model\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m20 \u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m21 \u001b[0m\u001b[94mdef\u001b[0m \u001b[92mload_model\u001b[0m(model_repo = \u001b[33m\"\u001b[0m\u001b[33mHuggingFaceH4/starchat-beta\u001b[0m\u001b[33m\"\u001b[0m, lora_repo=\u001b[94mNone\u001b[0m, verbose=\u001b[94mTrue\u001b[0m) \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m22 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mif\u001b[0m \u001b[33m\"\u001b[0m\u001b[33mstarchat\u001b[0m\u001b[33m\"\u001b[0m \u001b[95min\u001b[0m model_repo: \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m23 \u001b[2m│ │ \u001b[0mmodel, tokenizer = load_starchat(model_repo=model_repo) \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m24 \u001b[0m\u001b[2m│ \u001b[0m\u001b[2m# elif \"llama\" in model_repo:\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m25 \u001b[0m\u001b[2m│ \u001b[0m\u001b[2m# model, tokenizer = load_llama(model_repo=model_repo, lora_repo=lora_repo)\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m26 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94melse\u001b[0m: \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2;33m/home/ubuntu/Documents/mjc/elk/discovering_latent_knowledge/src/models/\u001b[0m\u001b[1;33mload.py\u001b[0m:\u001b[94m51\u001b[0m in \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[92mload_starchat\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m48 \u001b[0m\u001b[2m│ \u001b[0mverbose_change_param(tokenizer, \u001b[33m'\u001b[0m\u001b[33mpadding_side\u001b[0m\u001b[33m'\u001b[0m, \u001b[33m'\u001b[0m\u001b[33mleft\u001b[0m\u001b[33m'\u001b[0m) \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m49 \u001b[0m\u001b[2m│ \u001b[0mverbose_change_param(tokenizer, \u001b[33m'\u001b[0m\u001b[33mtruncation_side\u001b[0m\u001b[33m'\u001b[0m, \u001b[33m'\u001b[0m\u001b[33mleft\u001b[0m\u001b[33m'\u001b[0m) \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m50 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m51 \u001b[2m│ \u001b[0mmodel = AutoModelForCausalLM.from_pretrained(model_repo, config=config, **model_opti \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m52 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m53 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mreturn\u001b[0m model, tokenizer \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m54 \u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2;33m/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/transformers/models/auto/\u001b[0m\u001b[1;33mauto_fact\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[1;33mory.py\u001b[0m:\u001b[94m484\u001b[0m in \u001b[92mfrom_pretrained\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m481 \u001b[0m\u001b[2m│ │ │ \u001b[0m) \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m482 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94melif\u001b[0m \u001b[96mtype\u001b[0m(config) \u001b[95min\u001b[0m \u001b[96mcls\u001b[0m._model_mapping.keys(): \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m483 \u001b[0m\u001b[2m│ │ │ \u001b[0mmodel_class = _get_model_class(config, \u001b[96mcls\u001b[0m._model_mapping) \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m484 \u001b[2m│ │ │ \u001b[0m\u001b[94mreturn\u001b[0m model_class.from_pretrained( \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m485 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mpretrained_model_name_or_path, *model_args, config=config, **hub_kwargs, \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m486 \u001b[0m\u001b[2m│ │ │ \u001b[0m) \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m487 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mraise\u001b[0m \u001b[96mValueError\u001b[0m( \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2;33m/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/transformers/\u001b[0m\u001b[1;33mmodeling_utils.py\u001b[0m:\u001b[94m281\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[94m9\u001b[0m in \u001b[92mfrom_pretrained\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m2816 \u001b[0m\u001b[2m│ │ │ │ │ \u001b[0mkey: device_map[key] \u001b[94mfor\u001b[0m key \u001b[95min\u001b[0m device_map.keys() \u001b[94mif\u001b[0m key \u001b[95mnot\u001b[0m \u001b[95min\u001b[0m modu \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m2817 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m} \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m2818 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[94mif\u001b[0m \u001b[33m\"\u001b[0m\u001b[33mcpu\u001b[0m\u001b[33m\"\u001b[0m \u001b[95min\u001b[0m device_map_without_lm_head.values() \u001b[95mor\u001b[0m \u001b[33m\"\u001b[0m\u001b[33mdisk\u001b[0m\u001b[33m\"\u001b[0m \u001b[95min\u001b[0m device_map_ \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m2819 \u001b[2m│ │ │ │ │ \u001b[0m\u001b[94mraise\u001b[0m \u001b[96mValueError\u001b[0m( \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m2820 \u001b[0m\u001b[2;90m│ │ │ │ │ │ \u001b[0m\u001b[33m\"\"\"\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m2821 \u001b[0m\u001b[2;33m│ │ │ │ │ │ \u001b[0m\u001b[33mSome modules are dispatched on the CPU or the disk. Make sure yo\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m│\u001b[0m \u001b[2m2822 \u001b[0m\u001b[2;33m│ │ │ │ │ │ \u001b[0m\u001b[33mthe quantized model. If you want to dispatch the model on the CP\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n", - "\u001b[1;91mValueError: \u001b[0m\n", - " Some modules are dispatched on the CPU or the disk. Make sure you have enough GPU RAM to \n", - "fit\n", - " the quantized model. If you want to dispatch the model on the CPU or the disk while keeping\n", - " these modules in \u001b[1;36m32\u001b[0m-bit, you need to set `\u001b[33mload_in_8bit_fp32_cpu_offload\u001b[0m=\u001b[3;92mTrue\u001b[0m` and pass a \n", - "custom\n", - " `device_map` to `from_pretrained`. Check\n", - " \u001b[4;94mhttps://huggingface.co/docs/transformers/main/en/main_classes/quantization#offload-between-\u001b[0m\n", - "\u001b[4;94mcpu-and-gpu\u001b[0m\n", - " for more details.\n", - " \n" + "Loading checkpoint shards: 0%| | 0/4 [00:00', 'eos_token': '<|endoftext|>', 'unk_token': '<|endoftext|>', 'pad_token': '<|endoftext|>', 'additional_special_tokens': ['<|system|>', '<|user|>', '<|assistant|>', '<|end|>']}, clean_up_tokenization_spaces=True),\n", " 'data': Dataset({\n", " features: ['label', 'title', 'content', 'text', 'prompt', 'lie', 'input_ids', 'attention_mask', 'prompt_truncated'],\n", - " num_rows: 509\n", + " num_rows: 9009\n", " }),\n", - " 'n': 509,\n", + " 'n': 9009,\n", " 'batch_size': 10}" ] }, - "execution_count": 36, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -573,20 +580,20 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Downloading and preparing dataset None/../.ds/model-starchat-beta_ds-amazon-polarity_format-guard-prompt_N509_2shots_5c2070 to /home/ubuntu/.cache/huggingface/datasets/generator/default-f46bbb923bbf3943/0.0.0...\n" + "Downloading and preparing dataset None/../.ds/model-starchat-beta_ds-amazon-polarity_format-guard-prompt_N9009_2shots_d6813d to /home/ubuntu/.cache/huggingface/datasets/generator/default-4cd9d3e07734db42/0.0.0...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6aa11b88940248c199146d73079893d5", + "model_id": "8f625b953205443fbf9388fd506528f3", "version_major": 2, "version_minor": 0 }, @@ -600,12 +607,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f4dd1c7bebb84bb6998442b6e821df80", + "model_id": "e9d293506403423cb671cf4e98ad38e1", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "get hidden states: 0%| | 0/51 [00:00 0" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# n = len(df)\n", "from sklearn.preprocessing import RobustScaler\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import f1_score, roc_auc_score, accuracy_score\n", diff --git a/src/datasets/load.py b/src/datasets/load.py index 4eced09..b155b9a 100644 --- a/src/datasets/load.py +++ b/src/datasets/load.py @@ -20,7 +20,7 @@ def ds2df(ds, cols=None): if cols is None: r = ds[0] # get all the columns that not large lists or arrays - cols = [k for k,v in r.items() if (isinstance(v, np.ndarray) and len(v)<3) or not isinstance(v, (list, np.ndarray))] + cols = [k for k,v in r.items() if (isinstance(v, np.ndarray) and v.size<3) or not isinstance(v, (list, np.ndarray))] df = ds.select_columns(cols) df = pd.DataFrame([rows_item(r) for r in df])