\", rstrip=False, lstrip=False, single_word=False, normalized=True)}, clean_up_tokenization_spaces=False),\n",
- " PeftModelForCausalLM(\n",
- " (base_model): LoraModel(\n",
- " (model): LlamaForCausalLM(\n",
- " (model): LlamaModel(\n",
- " (embed_tokens): Embedding(32000, 4096, padding_idx=0)\n",
- " (layers): ModuleList(\n",
- " (0-31): 32 x LlamaDecoderLayer(\n",
- " (self_attn): LlamaAttention(\n",
- " (q_proj): Linear8bitLt(\n",
- " in_features=4096, out_features=4096, bias=False\n",
- " (lora_dropout): ModuleDict(\n",
- " (default): Dropout(p=0.05, inplace=False)\n",
- " )\n",
- " (lora_A): ModuleDict(\n",
- " (default): Linear(in_features=4096, out_features=16, bias=False)\n",
- " )\n",
- " (lora_B): ModuleDict(\n",
- " (default): Linear(in_features=16, out_features=4096, bias=False)\n",
- " )\n",
- " )\n",
- " (k_proj): Linear8bitLt(\n",
- " in_features=4096, out_features=4096, bias=False\n",
- " (lora_dropout): ModuleDict(\n",
- " (default): Dropout(p=0.05, inplace=False)\n",
- " )\n",
- " (lora_A): ModuleDict(\n",
- " (default): Linear(in_features=4096, out_features=16, bias=False)\n",
- " )\n",
- " (lora_B): ModuleDict(\n",
- " (default): Linear(in_features=16, out_features=4096, bias=False)\n",
- " )\n",
- " )\n",
- " (v_proj): Linear8bitLt(\n",
- " in_features=4096, out_features=4096, bias=False\n",
- " (lora_dropout): ModuleDict(\n",
- " (default): Dropout(p=0.05, inplace=False)\n",
- " )\n",
- " (lora_A): ModuleDict(\n",
- " (default): Linear(in_features=4096, out_features=16, bias=False)\n",
- " )\n",
- " (lora_B): ModuleDict(\n",
- " (default): Linear(in_features=16, out_features=4096, bias=False)\n",
- " )\n",
- " )\n",
- " (o_proj): Linear8bitLt(\n",
- " in_features=4096, out_features=4096, bias=False\n",
- " (lora_dropout): ModuleDict(\n",
- " (default): Dropout(p=0.05, inplace=False)\n",
- " )\n",
- " (lora_A): ModuleDict(\n",
- " (default): Linear(in_features=4096, out_features=16, bias=False)\n",
- " )\n",
- " (lora_B): ModuleDict(\n",
- " (default): Linear(in_features=16, out_features=4096, bias=False)\n",
- " )\n",
- " )\n",
- " (rotary_emb): LlamaRotaryEmbedding()\n",
- " )\n",
- " (mlp): LlamaMLP(\n",
- " (gate_proj): Linear8bitLt(in_features=4096, out_features=11008, bias=False)\n",
- " (down_proj): Linear8bitLt(in_features=11008, out_features=4096, bias=False)\n",
- " (up_proj): Linear8bitLt(in_features=4096, out_features=11008, bias=False)\n",
- " (act_fn): SiLUActivation()\n",
- " )\n",
- " (input_layernorm): LlamaRMSNorm()\n",
- " (post_attention_layernorm): LlamaRMSNorm()\n",
- " )\n",
- " )\n",
- " (norm): LlamaRMSNorm()\n",
- " )\n",
- " (lm_head): Linear(in_features=4096, out_features=32000, bias=False)\n",
- " )\n",
- " )\n",
- " ))"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"# Here are a few different model options you can play around with:\n",
"model_name = \"deberta\"\n",
@@ -229,10 +112,17 @@
" model.parallelize() # T5 is big enough that we may need to run it on multiple GPUs\n",
"elif (\"llama\" in model_name) or (\"alpaca\" in model_name):\n",
" # https://github.com/deep-diver/LLM-As-Chatbot/blob/216abb559d00a0555f41a1426ac9db6c1abc24f3/models/alpaca.py\n",
+ " \n",
+ " # working\n",
" model_repo = \"Neko-Institute-of-Science/LLaMA-7B-HF\"\n",
+ " lora_repo = \"chansung/gpt4-alpaca-lora-7b\"\n",
+ " \n",
+ " model_repo = \"Neko-Institute-of-Science/LLaMA-13B-HF\"\n",
+ " lora_repo = \"chansung/gpt4-alpaca-lora-13b\"\n",
+ " \n",
" # model_repo = \"decapoda-research/llama-7b-hf\"\n",
" # lora_repo = \"tloen/alpaca-lora-7b\"\n",
- " lora_repo = \"chansung/gpt4-alpaca-lora-7b\"\n",
+ " \n",
" \n",
" # model_repo = \"Neko-Institute-of-Science/LLaMA-13B-HF\"\n",
" # lora_repo = \"LLMs/Alpaca-LoRA-13B-elina\"\n",
@@ -271,28 +161,17 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T01:56:26.469934Z",
"start_time": "2023-05-20T01:56:26.444768Z"
}
},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(29900, 29896)"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"# get the tokens for 0 and 1, we will use these later...\n",
- "id_0, id_1 = tokenizer('0')['input_ids'][-1], tokenizer('1')['input_ids'][-1]\n",
+ "id_0, id_1 = tokenizer('n')['input_ids'][-1], tokenizer('y')['input_ids'][-1]\n",
"id_0, id_1"
]
},
@@ -321,7 +200,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T01:56:27.020627Z",
@@ -329,29 +208,7 @@
},
"scrolled": false
},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "Found cached dataset amazon_polarity (/home/ubuntu/.cache/huggingface/datasets/amazon_polarity/amazon_polarity/3.0.0/a27b32b7e7b88eb274a8fa8ba0f654f1fe998a87c22547557317793b5d2772dc)\n",
- "100%|██████████| 2/2 [00:02<00:00, 1.10s/it]\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "Dataset({\n",
- " features: ['label', 'title', 'content'],\n",
- " num_rows: 400000\n",
- "})"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"# debug\n",
"datasets.logging.set_verbosity_info()\n",
@@ -364,29 +221,14 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:25:05.461369Z",
"start_time": "2023-05-20T02:25:05.458241Z"
}
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Review: \"I think this is a lovely family movie. There are plenty of hilarious scenes and heart-warming moments to be had throughout the movie. The actors are great and the effects well executed throughout. Danny Glover plays George Knox who manages the terrible baseball team 'The Angels' and is great throughout the film. Also fantastic are the young actors Joseph Gordon-Levitt and Milton Davis Jr. Christopher Lloyd is good as Al 'The Angel' and the effects are great in this top notch Disney movie. A touching and heart-warming movie which everyone should enjoy.\"\n",
- "Question: Is this review positive? \n",
- "Answer: 1\n",
- "---\n",
- "Review: \"The movie was the worst.... not!\"\n",
- "Question: Is this review negative?\n",
- "Answer: \n",
- "\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"def format_imdb(text, label):\n",
" return f\"\"\"Review: \"I think this is a lovely family movie. There are plenty of hilarious scenes and heart-warming moments to be had throughout the movie. The actors are great and the effects well executed throughout. Danny Glover plays George Knox who manages the terrible baseball team 'The Angels' and is great throughout the film. Also fantastic are the young actors Joseph Gordon-Levitt and Milton Davis Jr. Christopher Lloyd is good as Al 'The Angel' and the effects are great in this top notch Disney movie. A touching and heart-warming movie which everyone should enjoy.\"\n",
@@ -406,20 +248,43 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
- "def format_imdb(input, label):\n",
- " instruction = f\"Is this review {'positive' if label else 'negative'}?\"\n",
- " alpaca_prompt = f\"Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\n{instruction}\\n\\n### Input:\\n{input}\\n\\n### Response:\\n\"\n",
+ "def format_imdb(input, label, prefix=1):\n",
+ " s_prefix = \"Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n\" if prefix else \"\"\n",
+ " q = f\"Is this review {'positive' if label else 'negative'} (y/n)?\"\n",
+ " if label==1:\n",
+ " l = \"y\"\n",
+ " elif label==0:\n",
+ " l=\"n\"\n",
+ " else:\n",
+ " l = \"?\"\n",
+ " alpaca_prompt = f'{s_prefix}### Instruction:\\n{q}\"\\n\\n### Input:\\n\\n\"{input}\"\\n\\n### Response: {l}'\n",
" return alpaca_prompt"
]
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def format_imbd_multishot(input, label):\n",
+ " a = format_imdb(\"Although Hypnotic isn't without glimmers of inspiration, the ultimate effect of this often clunky crime caper will be to leave you feeling rather sleepy.\", 0, prefix=1)\n",
+ " b = format_imdb(\"Although Hypnotic isn't without it's downsides, the ultimate effect of this often funny crime caper will be to leave you feeling rather fascinated.\", 1, prefix=0)\n",
+ " c = format_imdb(input, \"\", prefix=0)\n",
+ " return \"\\n\\n\".join([a, b, c])\n",
+ "\n",
+ "text=\"The movie was the worst.... not!\"\n",
+ "print(format_imbd_multishot(text, 0))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -447,25 +312,14 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:25:05.902898Z",
"start_time": "2023-05-20T02:25:05.898745Z"
}
},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "66"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"# tokens\n",
"len(tokenizer(format_imdb(\"The movie was the worst.... not!\", 0))['input_ids'])"
@@ -480,7 +334,7 @@
},
{
"cell_type": "code",
- "execution_count": 75,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:25:45.805378Z",
@@ -526,7 +380,7 @@
" # remove bos token? https://github.com/oobabooga/text-generation-webui/blob/1b52bddfcc70d2db88257d36f1c6d182573588c4/modules/text_generation.py#L36\n",
" if not add_bos_token and input_ids[0][0] == tokenizer.bos_token_id:\n",
" input_ids = input_ids[:, 1:]\n",
- " print('removed')\n",
+ " # print('removed')\n",
"\n",
"\n",
" # Llama adds this extra token when the first character is '\\n', and this\n",
@@ -554,20 +408,21 @@
" return_dict_in_generate=True,\n",
" output_scores=True,\n",
" )\n",
- " s = [generation_output.sequences[0]]\n",
+ " s = generation_output.sequences[0]\n",
" # print(s)\n",
" \n",
- " # text_q = tokenizer.batch_decode(input_ids, skip_special_tokens=False)\n",
- " text_ans = tokenizer.batch_decode(s, skip_special_tokens=False)#, skip_prompt=True, skip_special_tokens=True)\n",
- " # print(text_q[0])\n",
+ " text_q = tokenizer.batch_decode(input_ids, skip_special_tokens=False)\n",
+ " text_ans = tokenizer.decode(s, skip_special_tokens=False)#, skip_prompt=True, skip_special_tokens=True)\n",
+ " print(text_q[0])\n",
" # print('-'*40+'answ'+'-'*40)\n",
- " print(text_ans[0])\n",
+ " print(text_ans)\n",
+ " return text_ans\n",
" \n"
]
},
{
"cell_type": "code",
- "execution_count": 76,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T01:54:09.323908Z",
@@ -575,13 +430,11 @@
}
},
"outputs": [],
- "source": [
- "# model.generate??"
- ]
+ "source": []
},
{
"cell_type": "code",
- "execution_count": 77,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:25:46.260946Z",
@@ -596,7 +449,7 @@
},
{
"cell_type": "code",
- "execution_count": 78,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:25:46.401304Z",
@@ -611,7 +464,7 @@
},
{
"cell_type": "code",
- "execution_count": 79,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:25:53.587709Z",
@@ -619,43 +472,35 @@
},
"scrolled": true
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "removed\n",
- "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n",
- "\n",
- "### Instruction:\n",
- "Is this review negative?\n",
- "\n",
- "### Input:\n",
- "Despite the fact that I have only played a small portion of the game, the music I heard (plus the connection to Chrono Trigger which was great as well) led me to purchase the soundtrack, and it remains one of my favorite albums. There is an incredible mix of fun, epic, and emotional songs. Those sad and beautiful tracks I especially like, as there's not too many of those kinds of songs in my other video game soundtracks. I must admit that one of the songs (Life-A Distant Promise) has brought tears to my eyes on many occasions.My one complaint about this soundtrack is that they use guitar fretting effects in many of the songs, which I find distracting. But even if those weren't included I would still consider the collection worth it.\n",
- "\n",
- "### Response:\n",
- "Yes, based on your description, it sounds quite negative. It seems you were initially intrigued by the inclusion of classic JRPG hit \"Chrono Trigger\" into its soundtrack, but upon listening more closely found yourself turned off by several aspects such as guitar frets used extensively throughout the album or specific songs being overly sentimental or emotionally heavy. As for whether the overall feel of the review itself might be considered positive or neutral, that will vary depending on how others may interpret the tone/vocabulary chosen.\"l,p, regardless, it appears clear from reading this review that while you are ultimately satisfied with what this particular soundtrack offers musically, it fell short of meeting some important expectations on your part.<\n",
- "`quertyguess (10 points).\n",
- "\n",
- "Answer 3 questions from Science & Nature: [Genome Editing]\n",
- "[https://www.khanacademy.org/computer-programming/algorithms/genetic-algorithm/a/genomic-editing](http://%20https://www.khanacademy.org/computer-programming/algorithms/genetic-algorithm/%E2%80%94Genomic editing is also referred to as genotype editing. When referring to DNA, genes correspond to our body’s individual traits; the process of modifying these traits through genomics refers to genetics engineering, where scientists manipulate DNA sequences within cells using CRISPR technology. This modification results in either adding new functionalities or removing defective ones that cause disease.] Genome editing involves changing parts of a cellular DNA sequence in order to correct existing flaws or insert beneficial changes, thereby improving health outcomes.[For example, scientists can edit plant genomes so that crops become drought resistant, or alter human genomes to combat diseases and illnesses like cancer or HIV]. In contrast, gene therapy uses recombinant DNA to directly replace defective or missing proteins responsible for disorders.[https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5761436/?tool=pubmed]. Which definition best describes genomic editing? A) The act of inserting new information into the genome B) The act of deleting incorrect sections of the genome C) The application of CRISPR technology D) All\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"input_text = [format_imdb(text, 0)]\n",
"# input_text = [i + tokenizer.eos_token for i in input_text]\n",
"s = get_output(model, tokenizer, input_text)\n",
- "# s[0]"
+ "# s[0]\n",
+ "s"
]
},
{
"cell_type": "code",
- "execution_count": 74,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
- "1/0"
+ "# input_text = [format_imbd_multishot(text, 0)]\n",
+ "# # input_text = [i + tokenizer.eos_token for i in input_text]\n",
+ "# s = get_output(model, tokenizer, input_text)\n",
+ "# # s[0]\n",
+ "# s"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(s[0])"
]
},
{
@@ -668,7 +513,7 @@
},
{
"cell_type": "code",
- "execution_count": 58,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:27:49.742646Z",
@@ -746,10 +591,9 @@
" text_q = tokenizer.batch_decode(input_ids, clean_up_tokenization_spaces=False)\n",
" text_ans = tokenizer.batch_decode(o.argmax(-1), clean_up_tokenization_spaces=False)\n",
"\n",
- " nth_place = 0\n",
+ " nth_place = 1\n",
" prob_0, prob1 = o[:, nth_place][:, [id_0, id_1]].T # get the prob of 0 vs 1 in nth place in answer\n",
" output['ans'] = (prob1/(prob_0+prob1))\n",
- " # FIXME output batch\n",
" return dict(hidden_states=output['hidden_states'], ans=output['ans'], text_ans=text_ans, text_q=text_q\n",
"# , attentions=output['attentions']\n",
" )\n",
@@ -763,16 +607,7 @@
},
{
"cell_type": "code",
- "execution_count": 59,
- "metadata": {},
- "outputs": [],
- "source": [
- "# tokenizer.__call__?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 60,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:27:50.048590Z",
@@ -793,7 +628,7 @@
},
{
"cell_type": "code",
- "execution_count": 61,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:27:50.695875Z",
@@ -808,88 +643,20 @@
"text, true_label = data[idx][\"content\"], data[idx][\"label\"]\n",
"neg_hs = get_hidden_states(model, tokenizer, format_imdb(text, 0), model_type=model_type)\n",
"pos_hs = get_hidden_states(model, tokenizer, format_imdb(text, 1), model_type=model_type)\n",
+ "neu_hs = get_hidden_states(model, tokenizer, format_imdb(text, \"\"), model_type=model_type)\n",
"# neg_hs"
]
},
{
"cell_type": "code",
- "execution_count": 62,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:27:50.700337Z",
"start_time": "2023-05-20T02:27:50.697307Z"
}
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "----------------------------------------input----------------------------------------\n",
- "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n",
- "\n",
- "### Instruction:\n",
- "Is this review negative?\n",
- "\n",
- "### Input:\n",
- "My lovely Pat has one of the GREAT voices of her generation. I have listened to this CD for YEARS and I still LOVE IT. When I'm in a good mood it makes me feel better. A bad mood just evaporates like sugar in the rain. This CD just oozes LIFE. Vocals are jusat STUUNNING and lyrics just kill. One of life's hidden gems. This is a desert isle CD in my book. Why she never made it big is just beyond me. Everytime I play this, no matter black, white, young, old, male, female EVERYBODY says one thing \"Who was that singing ?\"\n",
- "\n",
- "### Response:\n",
- "\n",
- "----------------------------------------answ----------------------------------------\n",
- "below a exampleal will how task. followedired with a input that provides further context. Write a response that appropriately completes the request.\n",
- "\n",
- "### Instruction:\n",
- "G the sentence positive or\n",
- "\n",
- "### Input:\n",
- "This experienceely newag a of the bestREATEATE in all generation. She love never to her album over hoursEARS and it still loveVE it!\n",
- "ever listenm feeling the bad mood, makes me smile happy.\n",
- " must dayood and melaporates. a in water rain.\n",
- " CD is makesozes withIFE.\n",
- "ocals are soawss perfectUNFFNING. theics are make it\n",
- " of the's little gems.\n",
- " CD a M islandle CD for my collection.\n",
- " aren isn made it big is beyond a me.\n",
- "one I listen it CD I matter what or blue, or, old, it, female,VERYONEDY lov \" thing:W is that??\"\n",
- "\n",
- "### Response:\n",
- "Yes\n",
- "================================================================================\n",
- "----------------------------------------input----------------------------------------\n",
- "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n",
- "\n",
- "### Instruction:\n",
- "Is this review positive?\n",
- "\n",
- "### Input:\n",
- "My lovely Pat has one of the GREAT voices of her generation. I have listened to this CD for YEARS and I still LOVE IT. When I'm in a good mood it makes me feel better. A bad mood just evaporates like sugar in the rain. This CD just oozes LIFE. Vocals are jusat STUUNNING and lyrics just kill. One of life's hidden gems. This is a desert isle CD in my book. Why she never made it big is just beyond me. Everytime I play this, no matter black, white, young, old, male, female EVERYBODY says one thing \"Who was that singing ?\"\n",
- "\n",
- "### Response:\n",
- "\n",
- "----------------------------------------answ----------------------------------------\n",
- "below a exampleal will how task. followedired with a input that provides further context. Write a response that appropriately completes the request.\n",
- "\n",
- "### Instruction:\n",
- "G the sentence positive or\n",
- "\n",
- "### Input:\n",
- "This newely newag a of the bestREATEATE in all generation. She love never to her album over hoursEARS and it still loveVE it!\n",
- "ever hearm feeling a bad mood, makes me smile happy.\n",
- " must dayood and melaporates. a in water rain.\n",
- " CD is makesozes withIFE.\n",
- "ocals are soawss perfectUNFFNING. theics are make it\n",
- " of the's little gems.\n",
- " CD a M islandle CD for my collection.\n",
- " haven' made it big is a a me.\n",
- "one I listen it CD I matter what or blue or or, old, it, female,VERYONEDY lov \" thing:W is that??\"\n",
- "\n",
- "### Response:\n",
- "Yes\n",
- "--------------------------------------------------------------------------------\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"print('-'*40+'input'+'-'*40)\n",
"print(neg_hs['text_q'][0])\n",
@@ -900,12 +667,18 @@
"print(pos_hs['text_q'][0])\n",
"print('-'*40+'answ'+'-'*40)\n",
"print(pos_hs['text_ans'][0])\n",
+ "print('-'*80)\n",
+ "print('='*80)\n",
+ "print('-'*40+'input'+'-'*40)\n",
+ "print(neu_hs['text_q'][0])\n",
+ "print('-'*40+'answ'+'-'*40)\n",
+ "print(neu_hs['text_ans'][0])\n",
"print('-'*80)"
]
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:27:50.723482Z",
@@ -939,7 +712,7 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:04.246539Z",
@@ -1012,25 +785,14 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:05.387382Z",
"start_time": "2023-05-20T02:28:05.033921Z"
}
},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "0"
- ]
- },
- "execution_count": 22,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"gc.collect()\n",
"torch.cuda.empty_cache()\n",
@@ -1039,33 +801,14 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.747656Z",
"start_time": "2023-05-20T02:28:05.388608Z"
}
},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "Loading cached shuffled indices for dataset at /home/ubuntu/.cache/huggingface/datasets/amazon_polarity/amazon_polarity/3.0.0/a27b32b7e7b88eb274a8fa8ba0f654f1fe998a87c22547557317793b5d2772dc/cache-0a5d0b47b5e8dfc6.arrow\n",
- "100%|██████████| 34/34 [00:19<00:00, 1.71it/s]\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "0"
- ]
- },
- "execution_count": 23,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"neg_hs, pos_hs, y, all_neg_ans, all_pos_ans = get_hidden_states_many_examples(model, tokenizer, data, model_type)\n",
"\n",
@@ -1077,25 +820,14 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.750431Z",
"start_time": "2023-05-20T02:28:35.750421Z"
}
},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(0.49139655862344944, 0.39895958383353347)"
- ]
- },
- "execution_count": 24,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"# roc_auc_score\n",
"pos_score = roc_auc_score(y, all_pos_ans)\n",
@@ -1105,7 +837,7 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.751184Z",
@@ -1113,18 +845,7 @@
},
"scrolled": true
},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(0.49, 0.51)"
- ]
- },
- "execution_count": 25,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"# accuracy_score\n",
"pos_score = accuracy_score(y, (all_pos_ans>0.)*1.0)\n",
@@ -1145,23 +866,14 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.751934Z",
"start_time": "2023-05-20T02:28:35.751926Z"
}
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Logistic regression accuracy: 1.0 [TRAIN]\n",
- "Logistic regression accuracy: 0.96 [TEST]\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"# let's create a simple 50/50 train split (the data is already randomized)\n",
"n = len(y)\n",
@@ -1198,132 +910,9 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " P(false) \n",
- " P(true) \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " What happens if you break a mirror? You get seven years of bad luck \n",
- " 0.858168 \n",
- " 0.141832 \n",
- " \n",
- " \n",
- " What happens if you break a mirror? You get a broken mirror \n",
- " 0.595936 \n",
- " 0.404064 \n",
- " \n",
- " \n",
- " What happens if you break a mirror? You are punished in hell \n",
- " 0.977351 \n",
- " 0.022649 \n",
- " \n",
- " \n",
- " What happens if you break a mirror? You are punished in jail \n",
- " 0.923394 \n",
- " 0.076606 \n",
- " \n",
- " \n",
- " Taylor Swift is the best musician in all of history \n",
- " 0.668364 \n",
- " 0.331636 \n",
- " \n",
- " \n",
- " Taylor Swift is the worst musician in all of history \n",
- " 0.999746 \n",
- " 0.000254 \n",
- " \n",
- " \n",
- " Mozart is the best musician in all of history \n",
- " 0.229271 \n",
- " 0.770729 \n",
- " \n",
- " \n",
- " Mozart is the worst musician in all of history \n",
- " 0.999281 \n",
- " 0.000719 \n",
- " \n",
- " \n",
- " Hitler loves the jews \n",
- " 0.999335 \n",
- " 0.000665 \n",
- " \n",
- " \n",
- " Hitler hates the jews \n",
- " 0.999871 \n",
- " 0.000129 \n",
- " \n",
- " \n",
- " Hitler killed the jews \n",
- " 0.999674 \n",
- " 0.000326 \n",
- " \n",
- " \n",
- " Ghandi loves all people \n",
- " 0.002377 \n",
- " 0.997623 \n",
- " \n",
- " \n",
- " Ghandi hates all people \n",
- " 0.999955 \n",
- " 0.000045 \n",
- " \n",
- " \n",
- " Ghandi fucks all people \n",
- " 0.996169 \n",
- " 0.003831 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " P(false) P(true)\n",
- "What happens if you break a mirror? You get sev... 0.858168 0.141832\n",
- "What happens if you break a mirror? You get a b... 0.595936 0.404064\n",
- "What happens if you break a mirror? You are pun... 0.977351 0.022649\n",
- "What happens if you break a mirror? You are pun... 0.923394 0.076606\n",
- "Taylor Swift is the best musician in all of his... 0.668364 0.331636\n",
- "Taylor Swift is the worst musician in all of hi... 0.999746 0.000254\n",
- "Mozart is the best musician in all of history 0.229271 0.770729\n",
- "Mozart is the worst musician in all of history 0.999281 0.000719\n",
- "Hitler loves the jews 0.999335 0.000665\n",
- "Hitler hates the jews 0.999871 0.000129\n",
- "Hitler killed the jews 0.999674 0.000326\n",
- "Ghandi loves all people 0.002377 0.997623\n",
- "Ghandi hates all people 0.999955 0.000045\n",
- "Ghandi fucks all people 0.996169 0.003831"
- ]
- },
- "execution_count": 27,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"# https://astralcodexten.substack.com/p/elk-and-the-problem-of-truthful-ai\n",
"text = [\n",
@@ -1357,33 +946,9 @@
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nWhat happens if you break a mirror? You get seven years of bad luck\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nWhat happens if you break a mirror? You get a broken mirror\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nWhat happens if you break a mirror? You are punished in hell\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nWhat happens if you break a mirror? You are punished in jail\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nTaylor Swift is the best musician in all of history\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nTaylor Swift is the worst musician in all of history\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nMozart is the best musician in all of history\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nMozart is the worst musician in all of history\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nHitler loves the jews\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nHitler hates the jews\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nHitler killed the jews\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nGhandi loves all people\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nGhandi hates all people\\n\\n### Response:\\n',\n",
- " 'Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\\n\\n### Instruction:\\nIs this review negative?\\n\\n### Input:\\nGhandi fucks all people\\n\\n### Response:\\n']"
- ]
- },
- "execution_count": 28,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"format_imdbs(text, 0)"
]
@@ -1397,7 +962,7 @@
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.752548Z",
@@ -1452,7 +1017,7 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.753297Z",
@@ -1475,7 +1040,7 @@
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.754161Z",
@@ -1536,19 +1101,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2023-05-14T11:34:43.243172Z",
- "start_time": "2023-05-14T11:34:43.240582Z"
- }
- },
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": 32,
+ "execution_count": 81,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.754973Z",
@@ -1562,44 +1115,57 @@
"output_type": "stream",
"text": [
"Found cached dataset amazon_polarity (/home/ubuntu/.cache/huggingface/datasets/amazon_polarity/amazon_polarity/3.0.0/a27b32b7e7b88eb274a8fa8ba0f654f1fe998a87c22547557317793b5d2772dc)\n",
- "Loading cached shuffled indices for dataset at /home/ubuntu/.cache/huggingface/datasets/amazon_polarity/amazon_polarity/3.0.0/a27b32b7e7b88eb274a8fa8ba0f654f1fe998a87c22547557317793b5d2772dc/cache-0a5d0b47b5e8dfc6.arrow\n",
- "100%|██████████| 67/67 [00:37<00:00, 1.77it/s]\n"
+ "Loading cached shuffled indices for dataset at /home/ubuntu/.cache/huggingface/datasets/amazon_polarity/amazon_polarity/3.0.0/a27b32b7e7b88eb274a8fa8ba0f654f1fe998a87c22547557317793b5d2772dc/cache-0a5d0b47b5e8dfc6.arrow\n"
]
},
{
"data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "b3438da979364c239f64decd952f4608",
+ "version_major": 2,
+ "version_minor": 0
+ },
"text/plain": [
- "[tensor([[-1.1948e-02, 6.5460e-03, 1.3947e-02, ..., -4.2310e-01,\n",
- " 2.9434e+00, -7.3926e-01],\n",
- " [ 1.6174e-03, -9.7046e-03, 3.1555e-02, ..., -1.1250e+00,\n",
- " 4.5000e+00, -2.1387e+00],\n",
- " [-7.0190e-03, -1.2100e-02, 7.8011e-03, ..., -1.2891e+00,\n",
- " 5.8750e+00, -3.2148e+00],\n",
- " ...,\n",
- " [-6.2904e-03, -2.3613e-03, 2.6764e-02, ..., -1.0664e+00,\n",
- " 3.8770e+00, -1.4531e+00],\n",
- " [-1.1757e-02, 3.6144e-03, 4.1016e-02, ..., -1.1611e+00,\n",
- " 1.4551e+00, -1.1094e+00],\n",
- " [-8.5297e-03, 5.9509e-03, 1.1269e-02, ..., -1.3750e+00,\n",
- " 5.0508e+00, -4.0234e+00]]),\n",
- " tensor([[-1.0651e-02, 9.7961e-03, 7.8506e-03, ..., -7.2852e-01,\n",
- " 2.3594e+00, -8.9648e-01],\n",
- " [ 1.1292e-03, -1.2955e-02, 3.0853e-02, ..., -1.2227e+00,\n",
- " 4.2734e+00, -2.5000e+00],\n",
- " [-9.7351e-03, -1.3451e-02, 7.6790e-03, ..., -1.9482e+00,\n",
- " 5.1602e+00, -3.1445e+00],\n",
- " ...,\n",
- " [-6.1722e-03, -8.4686e-04, 2.6672e-02, ..., -1.6943e+00,\n",
- " 3.4668e+00, -2.3359e+00],\n",
- " [-9.1858e-03, 3.3684e-03, 4.0924e-02, ..., -1.3906e+00,\n",
- " 8.4180e-01, -1.6855e+00],\n",
- " [-5.3711e-03, 5.5618e-03, 1.0307e-02, ..., -1.2754e+00,\n",
- " 4.8047e+00, -4.3281e+00]]),\n",
- " tensor([0., 1., 1., 1., 0., 0., 0., 0., 1., 1., 0., 1., 0., 1., 0., 1., 1., 0.,\n",
- " 1., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0.])]"
+ " 0%| | 0/667 [00:00, ?it/s]"
]
},
- "execution_count": 32,
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "[tensor([[ 9.9731e-02, 1.9989e-03, -9.7107e-02, ..., 4.3633e+00,\n",
+ " 1.2617e+00, -7.2031e+00],\n",
+ " [ 4.4189e-02, 2.4109e-02, -7.2266e-02, ..., 4.7695e+00,\n",
+ " 2.9395e+00, -8.6875e+00],\n",
+ " [ 4.9866e-02, 2.9343e-02, -6.7383e-02, ..., 4.8203e+00,\n",
+ " 2.6348e+00, -7.8945e+00],\n",
+ " ...,\n",
+ " [ 5.5817e-02, 2.6428e-02, -7.4646e-02, ..., 5.4297e+00,\n",
+ " 2.5508e+00, -8.2344e+00],\n",
+ " [ 5.8105e-02, 1.3382e-02, -6.6162e-02, ..., 4.6367e+00,\n",
+ " 2.0664e+00, -7.0234e+00],\n",
+ " [ 7.4951e-02, 1.8173e-02, -5.4932e-02, ..., 3.4434e+00,\n",
+ " 1.9717e+00, -7.3477e+00]]),\n",
+ " tensor([[-2.0508e-02, 1.9470e-02, 5.0354e-02, ..., 2.5703e+00,\n",
+ " 1.6621e+00, -5.6680e+00],\n",
+ " [-2.9877e-02, 2.9388e-02, 3.7842e-02, ..., 3.5508e+00,\n",
+ " 6.6133e+00, -7.6680e+00],\n",
+ " [-4.0192e-02, 3.7933e-02, 5.0598e-02, ..., 3.1504e+00,\n",
+ " 3.8203e+00, -8.1562e+00],\n",
+ " ...,\n",
+ " [-9.6436e-03, 4.8035e-02, 4.5044e-02, ..., 4.5938e+00,\n",
+ " 6.2617e+00, -7.1562e+00],\n",
+ " [-2.6733e-02, 1.8387e-02, 4.3274e-02, ..., 3.8906e+00,\n",
+ " 4.4062e+00, -5.7305e+00],\n",
+ " [-3.5400e-03, 2.2522e-02, 5.7709e-02, ..., 3.4766e+00,\n",
+ " 3.4805e+00, -6.5977e+00]]),\n",
+ " tensor([0., 1., 0., 0., 1., 1., 1., 1., 1., 0., 0., 1., 1., 1., 0., 1., 1., 0.,\n",
+ " 1., 0., 0., 0., 0., 0., 1., 1., 0., 0., 1., 1., 0., 1.])]"
+ ]
+ },
+ "execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
@@ -1626,7 +1192,7 @@
" model_type=\"decoder\",\n",
" dataset_name=\"amazon_polarity\",\n",
" batch_size=32,\n",
- " n=200,\n",
+ " n=2000,\n",
" ):\n",
" super().__init__()\n",
" self.model = model\n",
@@ -1700,7 +1266,7 @@
},
{
"cell_type": "code",
- "execution_count": 33,
+ "execution_count": 82,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.755617Z",
@@ -1711,10 +1277,10 @@
{
"data": {
"text/plain": [
- "(50, 8192)"
+ "(500, 10240)"
]
},
- "execution_count": 33,
+ "execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
@@ -1732,7 +1298,7 @@
},
{
"cell_type": "code",
- "execution_count": 34,
+ "execution_count": 83,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.756378Z",
@@ -1746,7 +1312,7 @@
},
{
"cell_type": "code",
- "execution_count": 35,
+ "execution_count": 84,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.757039Z",
@@ -1783,7 +1349,7 @@
" \n",
" # TODO f1\n",
" conf = (avg_confidence.detach().cpu().numpy() )[:, 0]\n",
- " auc = roc_auc_score(y.cpu().numpy(), predictions)\n",
+ " auc = f1_score(y.cpu().numpy(), predictions)\n",
" \n",
" auc = max(auc, 1 - auc)\n",
" return predictions, auc\n",
@@ -1807,8 +1373,8 @@
" \n",
" predictions, acc = get_acc(p0, p1, y)\n",
" self.log(f\"{stage}/acc\", acc)\n",
- " predictions, f1 = get_f1(p0, p1, y)\n",
- " self.log(f\"{stage}/f1\", f1)\n",
+ " # predictions, f1 = get_f1(p0, p1, y)\n",
+ " # self.log(f\"{stage}/f1\", f1)\n",
" return loss\n",
" \n",
" def training_step(self, batch, batch_idx):\n",
@@ -1833,32 +1399,13 @@
]
},
{
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2023-05-07T10:58:56.488668Z",
- "start_time": "2023-05-07T10:58:56.488662Z"
- }
- },
- "outputs": [],
+ "cell_type": "markdown",
+ "metadata": {},
"source": []
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2023-05-14T06:17:57.365689Z",
- "start_time": "2023-05-14T06:17:57.356995Z"
- }
- },
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": 36,
+ "execution_count": 85,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.757814Z",
@@ -1868,14 +1415,14 @@
"outputs": [],
"source": [
"# init the autoencoder\n",
- "max_epochs = 1000\n",
+ "max_epochs = 200\n",
"d = b[0].shape[-1]\n",
"net = CSS(d=d, max_epochs=max_epochs)"
]
},
{
"cell_type": "code",
- "execution_count": 37,
+ "execution_count": 86,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.758702Z",
@@ -1889,7 +1436,7 @@
},
{
"cell_type": "code",
- "execution_count": 38,
+ "execution_count": 87,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.759285Z",
@@ -1906,31 +1453,54 @@
"TPU available: False, using: 0 TPU cores\n",
"IPU available: False, using: 0 IPUs\n",
"HPU available: False, using: 0 HPUs\n",
- "/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/connectors/logger_connector/logger_connector.py:67: UserWarning: Starting from v1.9.0, `tensorboardX` has been removed as a dependency of the `lightning.pytorch` package, due to potential conflicts with other packages in the ML ecosystem. For this reason, `logger=True` will use `CSVLogger` as the default logger, unless the `tensorboard` or `tensorboardX` packages are found. Please `pip install lightning[extra]` or one of them to enable TensorBoard support by default\n",
- " warning_cache.warn(\n",
"You are using a CUDA device ('NVIDIA GeForce RTX 3090') that has Tensor Cores. To properly utilize them, you should set `torch.set_float32_matmul_precision('medium' | 'high')` which will trade-off precision for performance. For more details, read https://pytorch.org/docs/stable/generated/torch.set_float32_matmul_precision.html#torch.set_float32_matmul_precision\n",
"Found cached dataset amazon_polarity (/home/ubuntu/.cache/huggingface/datasets/amazon_polarity/amazon_polarity/3.0.0/a27b32b7e7b88eb274a8fa8ba0f654f1fe998a87c22547557317793b5d2772dc)\n",
- "Loading cached shuffled indices for dataset at /home/ubuntu/.cache/huggingface/datasets/amazon_polarity/amazon_polarity/3.0.0/a27b32b7e7b88eb274a8fa8ba0f654f1fe998a87c22547557317793b5d2772dc/cache-0a5d0b47b5e8dfc6.arrow\n",
- "100%|██████████| 67/67 [00:37<00:00, 1.76it/s]\n",
- "Missing logger folder: /home/ubuntu/Documents/mjc/elk/discovering_latent_knowledge/notebooks/lightning_logs\n",
+ "Loading cached shuffled indices for dataset at /home/ubuntu/.cache/huggingface/datasets/amazon_polarity/amazon_polarity/3.0.0/a27b32b7e7b88eb274a8fa8ba0f654f1fe998a87c22547557317793b5d2772dc/cache-0a5d0b47b5e8dfc6.arrow\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "f7cfa256fe264fad86acc2c3b99a710c",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ " 0%| | 0/667 [00:00, ?it/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
"LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
"\n",
" | Name | Type | Params\n",
"-----------------------------------\n",
- "0 | probe | MLPProbe | 839 K \n",
+ "0 | probe | MLPProbe | 1.0 M \n",
"-----------------------------------\n",
- "839 K Trainable params\n",
+ "1.0 M Trainable params\n",
"0 Non-trainable params\n",
- "839 K Total params\n",
- "3.358 Total estimated model params size (MB)\n"
+ "1.0 M Total params\n",
+ "4.178 Total estimated model params size (MB)\n"
]
},
{
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " "
- ]
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "3d21c4eaa57d4732b6613e60bb1c4894",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Sanity Checking: 0it [00:00, ?it/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
"name": "stderr",
@@ -1940,741 +1510,2830 @@
" rank_zero_warn(\n",
"/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:430: PossibleUserWarning: The dataloader, train_dataloader, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 16 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
" rank_zero_warn(\n",
- "/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/fit_loop.py:280: PossibleUserWarning: The number of training batches (4) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.\n",
+ "/home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/fit_loop.py:280: PossibleUserWarning: The number of training batches (32) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.\n",
" rank_zero_warn(\n"
]
},
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 0: 75%|███████▌ | 3/4 [00:00<00:00, 58.85it/s, v_num=0]"
- ]
- },
{
"data": {
- "text/html": [
- "╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮ \n",
- "│ in <module> :3 │ \n",
- "│ │ \n",
- "│ 1 # train the model (hint: here are some helpful Trainer arguments for rapid idea iteratio │ \n",
- "│ 2 trainer = pl.Trainer(limit_train_batches=100 , max_epochs=max_epochs) │ \n",
- "│ ❱ 3 trainer.fit(model=net, datamodule=dm) │ \n",
- "│ 4 │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/ trainer. │ \n",
- "│ py :520 in fit │ \n",
- "│ │ \n",
- "│ 517 │ │ \"\"\" │ \n",
- "│ 518 │ │ model = _maybe_unwrap_optimized(model) │ \n",
- "│ 519 │ │ self .strategy._lightning_module = model │ \n",
- "│ ❱ 520 │ │ call._call_and_handle_interrupt( │ \n",
- "│ 521 │ │ │ self , self ._fit_impl, model, train_dataloaders, val_dataloaders, datamodule, │ \n",
- "│ 522 │ │ ) │ \n",
- "│ 523 │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/ call.py : │ \n",
- "│ 44 in _call_and_handle_interrupt │ \n",
- "│ │ \n",
- "│ 41 │ │ if trainer.strategy.launcher is not None : │ \n",
- "│ 42 │ │ │ return trainer.strategy.launcher.launch(trainer_fn, *args, trainer=trainer, │ \n",
- "│ 43 │ │ else : │ \n",
- "│ ❱ 44 │ │ │ return trainer_fn(*args, **kwargs) │ \n",
- "│ 45 │ │ \n",
- "│ 46 │ except _TunerExitException: │ \n",
- "│ 47 │ │ _call_teardown_hook(trainer) │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/ trainer. │ \n",
- "│ py :559 in _fit_impl │ \n",
- "│ │ \n",
- "│ 556 │ │ │ model_provided=True , │ \n",
- "│ 557 │ │ │ model_connected=self .lightning_module is not None , │ \n",
- "│ 558 │ │ ) │ \n",
- "│ ❱ 559 │ │ self ._run(model, ckpt_path=ckpt_path) │ \n",
- "│ 560 │ │ │ \n",
- "│ 561 │ │ assert self .state.stopped │ \n",
- "│ 562 │ │ self .training = False │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/ trainer. │ \n",
- "│ py :935 in _run │ \n",
- "│ │ \n",
- "│ 932 │ │ # ---------------------------- │ \n",
- "│ 933 │ │ # RUN THE TRAINER │ \n",
- "│ 934 │ │ # ---------------------------- │ \n",
- "│ ❱ 935 │ │ results = self ._run_stage() │ \n",
- "│ 936 │ │ │ \n",
- "│ 937 │ │ # ---------------------------- │ \n",
- "│ 938 │ │ # POST-Training CLEAN UP │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/ trainer. │ \n",
- "│ py :978 in _run_stage │ \n",
- "│ │ \n",
- "│ 975 │ │ │ with isolate_rng(): │ \n",
- "│ 976 │ │ │ │ self ._run_sanity_check() │ \n",
- "│ 977 │ │ │ with torch.autograd.set_detect_anomaly(self ._detect_anomaly): │ \n",
- "│ ❱ 978 │ │ │ │ self .fit_loop.run() │ \n",
- "│ 979 │ │ │ return None │ \n",
- "│ 980 │ │ raise RuntimeError (f\"Unexpected state { self .state}\" ) │ \n",
- "│ 981 │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/ fit_loop.p │ \n",
- "│ y :201 in run │ \n",
- "│ │ \n",
- "│ 198 │ │ while not self .done: │ \n",
- "│ 199 │ │ │ try : │ \n",
- "│ 200 │ │ │ │ self .on_advance_start() │ \n",
- "│ ❱ 201 │ │ │ │ self .advance() │ \n",
- "│ 202 │ │ │ │ self .on_advance_end() │ \n",
- "│ 203 │ │ │ │ self ._restarting = False │ \n",
- "│ 204 │ │ │ except StopIteration : │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/ fit_loop.p │ \n",
- "│ y :354 in advance │ \n",
- "│ │ \n",
- "│ 351 │ │ assert self ._data_fetcher is not None │ \n",
- "│ 352 │ │ self ._data_fetcher.setup(combined_loader) │ \n",
- "│ 353 │ │ with self .trainer.profiler.profile(\"run_training_epoch\" ): │ \n",
- "│ ❱ 354 │ │ │ self .epoch_loop.run(self ._data_fetcher) │ \n",
- "│ 355 │ │ \n",
- "│ 356 │ def on_advance_end (self ) -> None : │ \n",
- "│ 357 │ │ trainer = self .trainer │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/ training_e │ \n",
- "│ poch_loop.py :133 in run │ \n",
- "│ │ \n",
- "│ 130 │ │ self .on_run_start(data_fetcher) │ \n",
- "│ 131 │ │ while not self .done: │ \n",
- "│ 132 │ │ │ try : │ \n",
- "│ ❱ 133 │ │ │ │ self .advance(data_fetcher) │ \n",
- "│ 134 │ │ │ │ self .on_advance_end() │ \n",
- "│ 135 │ │ │ │ self ._restarting = False │ \n",
- "│ 136 │ │ │ except StopIteration : │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/ training_e │ \n",
- "│ poch_loop.py :218 in advance │ \n",
- "│ │ \n",
- "│ 215 │ │ │ with trainer.profiler.profile(\"run_training_batch\" ): │ \n",
- "│ 216 │ │ │ │ if trainer.lightning_module.automatic_optimization: │ \n",
- "│ 217 │ │ │ │ │ # in automatic optimization, there can only be one optimizer │ \n",
- "│ ❱ 218 │ │ │ │ │ batch_output = self .automatic_optimization.run(trainer.optimizers[0 ] │ \n",
- "│ 219 │ │ │ │ else : │ \n",
- "│ 220 │ │ │ │ │ batch_output = self .manual_optimization.run(kwargs) │ \n",
- "│ 221 │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/optimizati │ \n",
- "│ on/ automatic.py :185 in run │ \n",
- "│ │ \n",
- "│ 182 │ │ # ------------------------------ │ \n",
- "│ 183 │ │ # gradient update with accumulated gradients │ \n",
- "│ 184 │ │ else : │ \n",
- "│ ❱ 185 │ │ │ self ._optimizer_step(kwargs.get(\"batch_idx\" , 0 ), closure) │ \n",
- "│ 186 │ │ │ \n",
- "│ 187 │ │ result = closure.consume_result() │ \n",
- "│ 188 │ │ if result.loss is None : │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/optimizati │ \n",
- "│ on/ automatic.py :261 in _optimizer_step │ \n",
- "│ │ \n",
- "│ 258 │ │ │ self .optim_progress.optimizer.step.increment_ready() │ \n",
- "│ 259 │ │ │ \n",
- "│ 260 │ │ # model hook │ \n",
- "│ ❱ 261 │ │ call._call_lightning_module_hook( │ \n",
- "│ 262 │ │ │ trainer, │ \n",
- "│ 263 │ │ │ \"optimizer_step\" , │ \n",
- "│ 264 │ │ │ trainer.current_epoch, │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/ call.py : │ \n",
- "│ 142 in _call_lightning_module_hook │ \n",
- "│ │ \n",
- "│ 139 │ pl_module._current_fx_name = hook_name │ \n",
- "│ 140 │ │ \n",
- "│ 141 │ with trainer.profiler.profile(f\"[LightningModule]{ pl_module.__class__ .__name__ }.{ hoo │ \n",
- "│ ❱ 142 │ │ output = fn(*args, **kwargs) │ \n",
- "│ 143 │ │ \n",
- "│ 144 │ # restore current_fx when nested context │ \n",
- "│ 145 │ pl_module._current_fx_name = prev_fx_name │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/core/ module.py :1 │ \n",
- "│ 265 in optimizer_step │ \n",
- "│ │ \n",
- "│ 1262 │ │ │ │ │ for pg in optimizer.param_groups: │ \n",
- "│ 1263 │ │ │ │ │ │ pg[\"lr\"] = lr_scale * self.learning_rate │ \n",
- "│ 1264 │ │ \"\"\" │ \n",
- "│ ❱ 1265 │ │ optimizer.step(closure=optimizer_closure) │ \n",
- "│ 1266 │ │ \n",
- "│ 1267 │ def optimizer_zero_grad (self , epoch: int , batch_idx: int , optimizer: Optimizer) -> N │ \n",
- "│ 1268 │ │ \"\"\"Override this method to change the default behaviour of ``optimizer.zero_grad │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/core/ optimizer.p │ \n",
- "│ y :158 in step │ \n",
- "│ │ \n",
- "│ 155 │ │ │ raise MisconfigurationException(\"When `optimizer.step(closure)` is called, t │ \n",
- "│ 156 │ │ │ \n",
- "│ 157 │ │ assert self ._strategy is not None │ \n",
- "│ ❱ 158 │ │ step_output = self ._strategy.optimizer_step(self ._optimizer, closure, **kwargs) │ \n",
- "│ 159 │ │ │ \n",
- "│ 160 │ │ self ._on_after_step() │ \n",
- "│ 161 │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/strategies/ strat │ \n",
- "│ egy.py :224 in optimizer_step │ \n",
- "│ │ \n",
- "│ 221 │ │ model = model or self .lightning_module │ \n",
- "│ 222 │ │ # TODO(fabric): remove assertion once strategy's optimizer_step typing is fixed │ \n",
- "│ 223 │ │ assert isinstance (model, pl.LightningModule) │ \n",
- "│ ❱ 224 │ │ return self .precision_plugin.optimizer_step(optimizer, model=model, closure=clos │ \n",
- "│ 225 │ │ \n",
- "│ 226 │ def _setup_model_and_optimizers (self , model: Module, optimizers: List[Optimizer]) -> │ \n",
- "│ 227 │ │ \"\"\"Setup a model and multiple optimizers together. │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/plugins/precisio │ \n",
- "│ n/ precision_plugin.py :114 in optimizer_step │ \n",
- "│ │ \n",
- "│ 111 │ ) -> Any: │ \n",
- "│ 112 │ │ \"\"\"Hook to run the optimizer step.\"\"\" │ \n",
- "│ 113 │ │ closure = partial(self ._wrap_closure, model, optimizer, closure) │ \n",
- "│ ❱ 114 │ │ return optimizer.step(closure=closure, **kwargs) │ \n",
- "│ 115 │ │ \n",
- "│ 116 │ def _clip_gradients ( │ \n",
- "│ 117 │ │ self , │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/torch/optim/ lr_scheduler.py :69 in │ \n",
- "│ wrapper │ \n",
- "│ │ \n",
- "│ 66 │ │ │ │ instance = instance_ref() │ \n",
- "│ 67 │ │ │ │ instance._step_count += 1 │ \n",
- "│ 68 │ │ │ │ wrapped = func.__get__ (instance, cls ) │ \n",
- "│ ❱ 69 │ │ │ │ return wrapped(*args, **kwargs) │ \n",
- "│ 70 │ │ │ │ \n",
- "│ 71 │ │ │ # Note that the returned function here is no longer a bound method, │ \n",
- "│ 72 │ │ │ # so attributes like `__func__` and `__self__` no longer exist. │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/torch/optim/ optimizer.py :280 in │ \n",
- "│ wrapper │ \n",
- "│ │ \n",
- "│ 277 │ │ │ │ │ │ │ raise RuntimeError (f\"{ func} must return None or a tuple of ( │ \n",
- "│ 278 │ │ │ │ │ │ │ │ │ │ │ f\"but got { result}.\" ) │ \n",
- "│ 279 │ │ │ │ │ \n",
- "│ ❱ 280 │ │ │ │ out = func(*args, **kwargs) │ \n",
- "│ 281 │ │ │ │ self ._optimizer_step_code() │ \n",
- "│ 282 │ │ │ │ │ \n",
- "│ 283 │ │ │ │ # call optimizer step post hooks │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/torch/optim/ optimizer.py :33 in │ \n",
- "│ _use_grad │ \n",
- "│ │ \n",
- "│ 30 │ │ prev_grad = torch.is_grad_enabled() │ \n",
- "│ 31 │ │ try : │ \n",
- "│ 32 │ │ │ torch.set_grad_enabled(self .defaults['differentiable' ]) │ \n",
- "│ ❱ 33 │ │ │ ret = func(self , *args, **kwargs) │ \n",
- "│ 34 │ │ finally : │ \n",
- "│ 35 │ │ │ torch.set_grad_enabled(prev_grad) │ \n",
- "│ 36 │ │ return ret │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/torch/optim/ adamw.py :148 in step │ \n",
- "│ │ \n",
- "│ 145 │ │ loss = None │ \n",
- "│ 146 │ │ if closure is not None : │ \n",
- "│ 147 │ │ │ with torch.enable_grad(): │ \n",
- "│ ❱ 148 │ │ │ │ loss = closure() │ \n",
- "│ 149 │ │ │ \n",
- "│ 150 │ │ for group in self .param_groups: │ \n",
- "│ 151 │ │ │ params_with_grad = [] │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/plugins/precisio │ \n",
- "│ n/ precision_plugin.py :101 in _wrap_closure │ \n",
- "│ │ \n",
- "│ 98 │ │ The closure (generally) runs ``backward`` so this allows inspecting gradients in │ \n",
- "│ 99 │ │ consistent with the ``PrecisionPlugin`` subclasses that cannot pass ``optimizer. │ \n",
- "│ 100 │ │ \"\"\" │ \n",
- "│ ❱ 101 │ │ closure_result = closure() │ \n",
- "│ 102 │ │ self ._after_closure(model, optimizer) │ \n",
- "│ 103 │ │ return closure_result │ \n",
- "│ 104 │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/optimizati │ \n",
- "│ on/ automatic.py :140 in __call__ │ \n",
- "│ │ \n",
- "│ 137 │ │ return step_output │ \n",
- "│ 138 │ │ \n",
- "│ 139 │ def __call__ (self , *args: Any, **kwargs: Any) -> Optional[Tensor]: │ \n",
- "│ ❱ 140 │ │ self ._result = self .closure(*args, **kwargs) │ \n",
- "│ 141 │ │ return self ._result.loss │ \n",
- "│ 142 │ \n",
- "│ 143 │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/optimizati │ \n",
- "│ on/ automatic.py :126 in closure │ \n",
- "│ │ \n",
- "│ 123 │ │ self ._zero_grad_fn = zero_grad_fn │ \n",
- "│ 124 │ │ \n",
- "│ 125 │ def closure (self , *args: Any, **kwargs: Any) -> ClosureResult: │ \n",
- "│ ❱ 126 │ │ step_output = self ._step_fn() │ \n",
- "│ 127 │ │ │ \n",
- "│ 128 │ │ if step_output.closure_loss is None : │ \n",
- "│ 129 │ │ │ self .warning_cache.warn(\"`training_step` returned `None`. If this was on pur │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/loops/optimizati │ \n",
- "│ on/ automatic.py :308 in _training_step │ \n",
- "│ │ \n",
- "│ 305 │ │ trainer = self .trainer │ \n",
- "│ 306 │ │ │ \n",
- "│ 307 │ │ # manually capture logged metrics │ \n",
- "│ ❱ 308 │ │ training_step_output = call._call_strategy_hook(trainer, \"training_step\" , *kwarg │ \n",
- "│ 309 │ │ self .trainer.strategy.post_training_step() │ \n",
- "│ 310 │ │ │ \n",
- "│ 311 │ │ result = self .output_result_cls.from_training_step_output(training_step_output, │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/trainer/ call.py : │ \n",
- "│ 288 in _call_strategy_hook │ \n",
- "│ │ \n",
- "│ 285 │ │ return │ \n",
- "│ 286 │ │ \n",
- "│ 287 │ with trainer.profiler.profile(f\"[Strategy]{ trainer.strategy.__class__ .__name__ }.{ hoo │ \n",
- "│ ❱ 288 │ │ output = fn(*args, **kwargs) │ \n",
- "│ 289 │ │ \n",
- "│ 290 │ # restore current_fx when nested context │ \n",
- "│ 291 │ pl_module._current_fx_name = prev_fx_name │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/lightning/pytorch/strategies/ strat │ \n",
- "│ egy.py :366 in training_step │ \n",
- "│ │ \n",
- "│ 363 │ │ \"\"\" │ \n",
- "│ 364 │ │ with self .precision_plugin.train_step_context(): │ \n",
- "│ 365 │ │ │ assert isinstance (self .model, TrainingStep) │ \n",
- "│ ❱ 366 │ │ │ return self .model.training_step(*args, **kwargs) │ \n",
- "│ 367 │ │ \n",
- "│ 368 │ def post_training_step (self ) -> None : │ \n",
- "│ 369 │ │ pass │ \n",
- "│ │ \n",
- "│ in training_step :56 │ \n",
- "│ │ \n",
- "│ 53 │ │ return loss │ \n",
- "│ 54 │ │ \n",
- "│ 55 │ def training_step (self , batch, batch_idx): │ \n",
- "│ ❱ 56 │ │ return self ._step(batch, batch_idx) │ \n",
- "│ 57 │ │ \n",
- "│ 58 │ def validation_step (self , batch, batch_idx=0 ): │ \n",
- "│ 59 │ │ return self ._step(batch, batch_idx, stage='val' ) │ \n",
- "│ │ \n",
- "│ in _step :51 │ \n",
- "│ │ \n",
- "│ 48 │ │ │ \n",
- "│ 49 │ │ predictions, acc = get_acc(p0, p1, y) │ \n",
- "│ 50 │ │ self .log(f\"{ stage}/acc\" , acc) │ \n",
- "│ ❱ 51 │ │ predictions, f1 = get_f1(p0, p1, y) │ \n",
- "│ 52 │ │ self .log(f\"{ stage}/f1\" , f1) │ \n",
- "│ 53 │ │ return loss │ \n",
- "│ 54 │ \n",
- "│ │ \n",
- "│ in get_f1 :27 │ \n",
- "│ │ \n",
- "│ 24 │ │ \n",
- "│ 25 │ # TODO f1 │ \n",
- "│ 26 │ conf = (avg_confidence.detach().cpu().numpy() )[:, 0 ] │ \n",
- "│ ❱ 27 │ auc = roc_auc_score(y.cpu().numpy(), predictions) │ \n",
- "│ 28 │ │ \n",
- "│ 29 │ auc = max (auc, 1 - auc) │ \n",
- "│ 30 │ return predictions, auc │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/sklearn/metrics/ _ranking.py :572 in │ \n",
- "│ roc_auc_score │ \n",
- "│ │ \n",
- "│ 569 │ elif y_type == \"binary\" : │ \n",
- "│ 570 │ │ labels = np.unique(y_true) │ \n",
- "│ 571 │ │ y_true = label_binarize(y_true, classes=labels)[:, 0 ] │ \n",
- "│ ❱ 572 │ │ return _average_binary_score( │ \n",
- "│ 573 │ │ │ partial(_binary_roc_auc_score, max_fpr=max_fpr), │ \n",
- "│ 574 │ │ │ y_true, │ \n",
- "│ 575 │ │ │ y_score, │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/sklearn/metrics/ _base.py :75 in │ \n",
- "│ _average_binary_score │ \n",
- "│ │ \n",
- "│ 72 │ │ raise ValueError (\"{0} format is not supported\" .format(y_type)) │ \n",
- "│ 73 │ │ \n",
- "│ 74 │ if y_type == \"binary\" : │ \n",
- "│ ❱ 75 │ │ return binary_metric(y_true, y_score, sample_weight=sample_weight) │ \n",
- "│ 76 │ │ \n",
- "│ 77 │ check_consistent_length(y_true, y_score, sample_weight) │ \n",
- "│ 78 │ y_true = check_array(y_true) │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/sklearn/metrics/ _ranking.py :339 in │ \n",
- "│ _binary_roc_auc_score │ \n",
- "│ │ \n",
- "│ 336 def _binary_roc_auc_score (y_true, y_score, sample_weight=None , max_fpr=None ): │ \n",
- "│ 337 │ \"\"\"Binary roc auc score.\"\"\" │ \n",
- "│ 338 │ if len (np.unique(y_true)) != 2 : │ \n",
- "│ ❱ 339 │ │ raise ValueError ( │ \n",
- "│ 340 │ │ │ \"Only one class present in y_true. ROC AUC score \" │ \n",
- "│ 341 │ │ │ \"is not defined in that case.\" │ \n",
- "│ 342 │ │ ) │ \n",
- "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
- "ValueError: Only one class present in y_true. ROC AUC score is not defined in that case.\n",
- " \n"
- ],
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "eb889c861add4bef85d1d7d2daeb812e",
+ "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[94m3\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1 \u001b[0m\u001b[2m# train the model (hint: here are some helpful Trainer arguments for rapid idea iteratio\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m2 \u001b[0mtrainer = pl.Trainer(limit_train_batches=\u001b[94m100\u001b[0m, max_epochs=max_epochs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m3 trainer.fit(model=net, datamodule=dm) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m4 \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/lightning/pytorch/trainer/\u001b[0m\u001b[1;33mtrainer.\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33mpy\u001b[0m:\u001b[94m520\u001b[0m in \u001b[92mfit\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 517 \u001b[0m\u001b[2;33m│ │ \u001b[0m\u001b[33m\"\"\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 518 \u001b[0m\u001b[2m│ │ \u001b[0mmodel = _maybe_unwrap_optimized(model) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 519 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m.strategy._lightning_module = model \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 520 \u001b[2m│ │ \u001b[0mcall._call_and_handle_interrupt( \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 521 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[96mself\u001b[0m, \u001b[96mself\u001b[0m._fit_impl, model, train_dataloaders, val_dataloaders, datamodule, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 522 \u001b[0m\u001b[2m│ │ \u001b[0m) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 523 \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/lightning/pytorch/trainer/\u001b[0m\u001b[1;33mcall.py\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[94m44\u001b[0m in \u001b[92m_call_and_handle_interrupt\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 41 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mif\u001b[0m trainer.strategy.launcher \u001b[95mis\u001b[0m \u001b[95mnot\u001b[0m \u001b[94mNone\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 42 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mreturn\u001b[0m trainer.strategy.launcher.launch(trainer_fn, *args, trainer=trainer, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 43 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94melse\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 44 \u001b[2m│ │ │ \u001b[0m\u001b[94mreturn\u001b[0m trainer_fn(*args, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 45 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 46 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mexcept\u001b[0m _TunerExitException: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 47 \u001b[0m\u001b[2m│ │ \u001b[0m_call_teardown_hook(trainer) \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/lightning/pytorch/trainer/\u001b[0m\u001b[1;33mtrainer.\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33mpy\u001b[0m:\u001b[94m559\u001b[0m in \u001b[92m_fit_impl\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 556 \u001b[0m\u001b[2m│ │ │ \u001b[0mmodel_provided=\u001b[94mTrue\u001b[0m, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 557 \u001b[0m\u001b[2m│ │ │ \u001b[0mmodel_connected=\u001b[96mself\u001b[0m.lightning_module \u001b[95mis\u001b[0m \u001b[95mnot\u001b[0m \u001b[94mNone\u001b[0m, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 558 \u001b[0m\u001b[2m│ │ \u001b[0m) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 559 \u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m._run(model, ckpt_path=ckpt_path) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 560 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 561 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94massert\u001b[0m \u001b[96mself\u001b[0m.state.stopped \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 562 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m.training = \u001b[94mFalse\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/lightning/pytorch/trainer/\u001b[0m\u001b[1;33mtrainer.\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33mpy\u001b[0m:\u001b[94m935\u001b[0m in \u001b[92m_run\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 932 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# ----------------------------\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 933 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# RUN THE TRAINER\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 934 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# ----------------------------\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 935 \u001b[2m│ │ \u001b[0mresults = \u001b[96mself\u001b[0m._run_stage() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 936 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 937 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# ----------------------------\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 938 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# POST-Training CLEAN UP\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/lightning/pytorch/trainer/\u001b[0m\u001b[1;33mtrainer.\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33mpy\u001b[0m:\u001b[94m978\u001b[0m in \u001b[92m_run_stage\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 975 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mwith\u001b[0m isolate_rng(): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 976 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m._run_sanity_check() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 977 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mwith\u001b[0m torch.autograd.set_detect_anomaly(\u001b[96mself\u001b[0m._detect_anomaly): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 978 \u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m.fit_loop.run() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 979 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mreturn\u001b[0m \u001b[94mNone\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 980 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mraise\u001b[0m \u001b[96mRuntimeError\u001b[0m(\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33mUnexpected state \u001b[0m\u001b[33m{\u001b[0m\u001b[96mself\u001b[0m.state\u001b[33m}\u001b[0m\u001b[33m\"\u001b[0m) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 981 \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/lightning/pytorch/loops/\u001b[0m\u001b[1;33mfit_loop.p\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33my\u001b[0m:\u001b[94m201\u001b[0m in \u001b[92mrun\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m198 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mwhile\u001b[0m \u001b[95mnot\u001b[0m \u001b[96mself\u001b[0m.done: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m199 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mtry\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m200 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m.on_advance_start() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m201 \u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m.advance() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m202 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m.on_advance_end() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m203 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m._restarting = \u001b[94mFalse\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m204 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mexcept\u001b[0m \u001b[96mStopIteration\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/lightning/pytorch/loops/\u001b[0m\u001b[1;33mfit_loop.p\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33my\u001b[0m:\u001b[94m354\u001b[0m in \u001b[92madvance\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m351 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94massert\u001b[0m \u001b[96mself\u001b[0m._data_fetcher \u001b[95mis\u001b[0m \u001b[95mnot\u001b[0m \u001b[94mNone\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m352 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m._data_fetcher.setup(combined_loader) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m353 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mwith\u001b[0m \u001b[96mself\u001b[0m.trainer.profiler.profile(\u001b[33m\"\u001b[0m\u001b[33mrun_training_epoch\u001b[0m\u001b[33m\"\u001b[0m): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m354 \u001b[2m│ │ │ \u001b[0m\u001b[96mself\u001b[0m.epoch_loop.run(\u001b[96mself\u001b[0m._data_fetcher) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m355 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m356 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92mon_advance_end\u001b[0m(\u001b[96mself\u001b[0m) -> \u001b[94mNone\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m357 \u001b[0m\u001b[2m│ │ \u001b[0mtrainer = \u001b[96mself\u001b[0m.trainer \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/lightning/pytorch/loops/\u001b[0m\u001b[1;33mtraining_e\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33mpoch_loop.py\u001b[0m:\u001b[94m133\u001b[0m in \u001b[92mrun\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m130 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m.on_run_start(data_fetcher) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m131 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mwhile\u001b[0m \u001b[95mnot\u001b[0m \u001b[96mself\u001b[0m.done: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m132 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mtry\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m133 \u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m.advance(data_fetcher) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m134 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m.on_advance_end() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m135 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m._restarting = \u001b[94mFalse\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m136 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mexcept\u001b[0m \u001b[96mStopIteration\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/lightning/pytorch/loops/\u001b[0m\u001b[1;33mtraining_e\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33mpoch_loop.py\u001b[0m:\u001b[94m218\u001b[0m in \u001b[92madvance\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m215 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mwith\u001b[0m trainer.profiler.profile(\u001b[33m\"\u001b[0m\u001b[33mrun_training_batch\u001b[0m\u001b[33m\"\u001b[0m): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m216 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[94mif\u001b[0m trainer.lightning_module.automatic_optimization: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m217 \u001b[0m\u001b[2m│ │ │ │ │ \u001b[0m\u001b[2m# in automatic optimization, there can only be one optimizer\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m218 \u001b[2m│ │ │ │ │ \u001b[0mbatch_output = \u001b[96mself\u001b[0m.automatic_optimization.run(trainer.optimizers[\u001b[94m0\u001b[0m] \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m219 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[94melse\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m220 \u001b[0m\u001b[2m│ │ │ │ │ \u001b[0mbatch_output = \u001b[96mself\u001b[0m.manual_optimization.run(kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m221 \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/lightning/pytorch/loops/optimizati\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2;33mon/\u001b[0m\u001b[1;33mautomatic.py\u001b[0m:\u001b[94m185\u001b[0m in \u001b[92mrun\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m182 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# ------------------------------\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m183 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# gradient update with accumulated gradients\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m184 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94melse\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m185 \u001b[2m│ │ │ \u001b[0m\u001b[96mself\u001b[0m._optimizer_step(kwargs.get(\u001b[33m\"\u001b[0m\u001b[33mbatch_idx\u001b[0m\u001b[33m\"\u001b[0m, \u001b[94m0\u001b[0m), closure) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m186 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m187 \u001b[0m\u001b[2m│ │ \u001b[0mresult = closure.consume_result() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m188 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mif\u001b[0m result.loss \u001b[95mis\u001b[0m \u001b[94mNone\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/lightning/pytorch/loops/optimizati\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2;33mon/\u001b[0m\u001b[1;33mautomatic.py\u001b[0m:\u001b[94m261\u001b[0m in \u001b[92m_optimizer_step\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m258 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[96mself\u001b[0m.optim_progress.optimizer.step.increment_ready() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m259 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m260 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# model hook\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m261 \u001b[2m│ │ \u001b[0mcall._call_lightning_module_hook( \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m262 \u001b[0m\u001b[2m│ │ │ \u001b[0mtrainer, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m263 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[33m\"\u001b[0m\u001b[33moptimizer_step\u001b[0m\u001b[33m\"\u001b[0m, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m264 \u001b[0m\u001b[2m│ │ │ \u001b[0mtrainer.current_epoch, \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/lightning/pytorch/trainer/\u001b[0m\u001b[1;33mcall.py\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[94m142\u001b[0m in \u001b[92m_call_lightning_module_hook\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m139 \u001b[0m\u001b[2m│ \u001b[0mpl_module._current_fx_name = hook_name \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m140 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m141 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mwith\u001b[0m trainer.profiler.profile(\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33m[LightningModule]\u001b[0m\u001b[33m{\u001b[0mpl_module.\u001b[91m__class__\u001b[0m.\u001b[91m__name__\u001b[0m\u001b[33m}\u001b[0m\u001b[33m.\u001b[0m\u001b[33m{\u001b[0mhoo \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m142 \u001b[2m│ │ \u001b[0moutput = fn(*args, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m143 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m144 \u001b[0m\u001b[2m│ \u001b[0m\u001b[2m# restore current_fx when nested context\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m145 \u001b[0m\u001b[2m│ \u001b[0mpl_module._current_fx_name = prev_fx_name \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/lightning/pytorch/core/\u001b[0m\u001b[1;33mmodule.py\u001b[0m:\u001b[94m1\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[94m265\u001b[0m in \u001b[92moptimizer_step\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1262 \u001b[0m\u001b[2;33m│ │ │ │ │ \u001b[0m\u001b[33mfor pg in optimizer.param_groups:\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1263 \u001b[0m\u001b[2;33m│ │ │ │ │ │ \u001b[0m\u001b[33mpg[\"lr\"] = lr_scale * self.learning_rate\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1264 \u001b[0m\u001b[2;33m│ │ \u001b[0m\u001b[33m\"\"\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m1265 \u001b[2m│ │ \u001b[0moptimizer.step(closure=optimizer_closure) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1266 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1267 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92moptimizer_zero_grad\u001b[0m(\u001b[96mself\u001b[0m, epoch: \u001b[96mint\u001b[0m, batch_idx: \u001b[96mint\u001b[0m, optimizer: Optimizer) -> \u001b[94mN\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1268 \u001b[0m\u001b[2;90m│ │ \u001b[0m\u001b[33m\"\"\"Override this method to change the default behaviour of ``optimizer.zero_grad\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/lightning/pytorch/core/\u001b[0m\u001b[1;33moptimizer.p\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33my\u001b[0m:\u001b[94m158\u001b[0m in \u001b[92mstep\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m155 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mraise\u001b[0m MisconfigurationException(\u001b[33m\"\u001b[0m\u001b[33mWhen `optimizer.step(closure)` is called, t\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m156 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m157 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94massert\u001b[0m \u001b[96mself\u001b[0m._strategy \u001b[95mis\u001b[0m \u001b[95mnot\u001b[0m \u001b[94mNone\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m158 \u001b[2m│ │ \u001b[0mstep_output = \u001b[96mself\u001b[0m._strategy.optimizer_step(\u001b[96mself\u001b[0m._optimizer, closure, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m159 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m160 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m._on_after_step() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m161 \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/lightning/pytorch/strategies/\u001b[0m\u001b[1;33mstrat\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33megy.py\u001b[0m:\u001b[94m224\u001b[0m in \u001b[92moptimizer_step\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m221 \u001b[0m\u001b[2m│ │ \u001b[0mmodel = model \u001b[95mor\u001b[0m \u001b[96mself\u001b[0m.lightning_module \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m222 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# TODO(fabric): remove assertion once strategy's optimizer_step typing is fixed\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m223 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94massert\u001b[0m \u001b[96misinstance\u001b[0m(model, pl.LightningModule) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m224 \u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m \u001b[96mself\u001b[0m.precision_plugin.optimizer_step(optimizer, model=model, closure=clos \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m225 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m226 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92m_setup_model_and_optimizers\u001b[0m(\u001b[96mself\u001b[0m, model: Module, optimizers: List[Optimizer]) -> \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m227 \u001b[0m\u001b[2;90m│ │ \u001b[0m\u001b[33m\"\"\"Setup a model and multiple optimizers together.\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/lightning/pytorch/plugins/precisio\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2;33mn/\u001b[0m\u001b[1;33mprecision_plugin.py\u001b[0m:\u001b[94m114\u001b[0m in \u001b[92moptimizer_step\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m111 \u001b[0m\u001b[2m│ \u001b[0m) -> Any: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m112 \u001b[0m\u001b[2;90m│ │ \u001b[0m\u001b[33m\"\"\"Hook to run the optimizer step.\"\"\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m113 \u001b[0m\u001b[2m│ │ \u001b[0mclosure = partial(\u001b[96mself\u001b[0m._wrap_closure, model, optimizer, closure) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m114 \u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m optimizer.step(closure=closure, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m115 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m116 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92m_clip_gradients\u001b[0m( \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m117 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\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/torch/optim/\u001b[0m\u001b[1;33mlr_scheduler.py\u001b[0m:\u001b[94m69\u001b[0m in \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[92mwrapper\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 66 \u001b[0m\u001b[2m│ │ │ │ \u001b[0minstance = instance_ref() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 67 \u001b[0m\u001b[2m│ │ │ │ \u001b[0minstance._step_count += \u001b[94m1\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 68 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mwrapped = func.\u001b[92m__get__\u001b[0m(instance, \u001b[96mcls\u001b[0m) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 69 \u001b[2m│ │ │ │ \u001b[0m\u001b[94mreturn\u001b[0m wrapped(*args, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 70 \u001b[0m\u001b[2m│ │ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 71 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[2m# Note that the returned function here is no longer a bound method,\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 72 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[2m# so attributes like `__func__` and `__self__` no longer exist.\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/torch/optim/\u001b[0m\u001b[1;33moptimizer.py\u001b[0m:\u001b[94m280\u001b[0m in \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[92mwrapper\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m277 \u001b[0m\u001b[2m│ │ │ │ │ │ │ \u001b[0m\u001b[94mraise\u001b[0m \u001b[96mRuntimeError\u001b[0m(\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33m{\u001b[0mfunc\u001b[33m}\u001b[0m\u001b[33m must return None or a tuple of (\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m278 \u001b[0m\u001b[2m│ │ │ │ │ │ │ │ │ │ │ \u001b[0m\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33mbut got \u001b[0m\u001b[33m{\u001b[0mresult\u001b[33m}\u001b[0m\u001b[33m.\u001b[0m\u001b[33m\"\u001b[0m) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m279 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m280 \u001b[2m│ │ │ │ \u001b[0mout = func(*args, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m281 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[96mself\u001b[0m._optimizer_step_code() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m282 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m283 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[2m# call optimizer step post hooks\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/torch/optim/\u001b[0m\u001b[1;33moptimizer.py\u001b[0m:\u001b[94m33\u001b[0m in \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[92m_use_grad\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 30 \u001b[0m\u001b[2m│ │ \u001b[0mprev_grad = torch.is_grad_enabled() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 31 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mtry\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 32 \u001b[0m\u001b[2m│ │ │ \u001b[0mtorch.set_grad_enabled(\u001b[96mself\u001b[0m.defaults[\u001b[33m'\u001b[0m\u001b[33mdifferentiable\u001b[0m\u001b[33m'\u001b[0m]) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 33 \u001b[2m│ │ │ \u001b[0mret = func(\u001b[96mself\u001b[0m, *args, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 34 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mfinally\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 35 \u001b[0m\u001b[2m│ │ │ \u001b[0mtorch.set_grad_enabled(prev_grad) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 36 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m ret \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/torch/optim/\u001b[0m\u001b[1;33madamw.py\u001b[0m:\u001b[94m148\u001b[0m in \u001b[92mstep\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m145 \u001b[0m\u001b[2m│ │ \u001b[0mloss = \u001b[94mNone\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m146 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mif\u001b[0m closure \u001b[95mis\u001b[0m \u001b[95mnot\u001b[0m \u001b[94mNone\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m147 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mwith\u001b[0m torch.enable_grad(): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m148 \u001b[2m│ │ │ │ \u001b[0mloss = closure() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m149 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m150 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mfor\u001b[0m group \u001b[95min\u001b[0m \u001b[96mself\u001b[0m.param_groups: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m151 \u001b[0m\u001b[2m│ │ │ \u001b[0mparams_with_grad = [] \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/lightning/pytorch/plugins/precisio\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2;33mn/\u001b[0m\u001b[1;33mprecision_plugin.py\u001b[0m:\u001b[94m101\u001b[0m in \u001b[92m_wrap_closure\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 98 \u001b[0m\u001b[2;33m│ │ \u001b[0m\u001b[33mThe closure (generally) runs ``backward`` so this allows inspecting gradients in\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 99 \u001b[0m\u001b[2;33m│ │ \u001b[0m\u001b[33mconsistent with the ``PrecisionPlugin`` subclasses that cannot pass ``optimizer.\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m100 \u001b[0m\u001b[2;33m│ │ \u001b[0m\u001b[33m\"\"\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m101 \u001b[2m│ │ \u001b[0mclosure_result = closure() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m102 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m._after_closure(model, optimizer) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m103 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m closure_result \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m104 \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/lightning/pytorch/loops/optimizati\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2;33mon/\u001b[0m\u001b[1;33mautomatic.py\u001b[0m:\u001b[94m140\u001b[0m in \u001b[92m__call__\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m137 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m step_output \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m138 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m139 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92m__call__\u001b[0m(\u001b[96mself\u001b[0m, *args: Any, **kwargs: Any) -> Optional[Tensor]: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m140 \u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m._result = \u001b[96mself\u001b[0m.closure(*args, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m141 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m \u001b[96mself\u001b[0m._result.loss \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m142 \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m143 \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/lightning/pytorch/loops/optimizati\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2;33mon/\u001b[0m\u001b[1;33mautomatic.py\u001b[0m:\u001b[94m126\u001b[0m in \u001b[92mclosure\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m123 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m._zero_grad_fn = zero_grad_fn \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m124 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m125 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92mclosure\u001b[0m(\u001b[96mself\u001b[0m, *args: Any, **kwargs: Any) -> ClosureResult: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m126 \u001b[2m│ │ \u001b[0mstep_output = \u001b[96mself\u001b[0m._step_fn() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m127 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m128 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mif\u001b[0m step_output.closure_loss \u001b[95mis\u001b[0m \u001b[94mNone\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m129 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[96mself\u001b[0m.warning_cache.warn(\u001b[33m\"\u001b[0m\u001b[33m`training_step` returned `None`. If this was on pur\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/lightning/pytorch/loops/optimizati\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2;33mon/\u001b[0m\u001b[1;33mautomatic.py\u001b[0m:\u001b[94m308\u001b[0m in \u001b[92m_training_step\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m305 \u001b[0m\u001b[2m│ │ \u001b[0mtrainer = \u001b[96mself\u001b[0m.trainer \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m306 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m307 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# manually capture logged metrics\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m308 \u001b[2m│ │ \u001b[0mtraining_step_output = call._call_strategy_hook(trainer, \u001b[33m\"\u001b[0m\u001b[33mtraining_step\u001b[0m\u001b[33m\"\u001b[0m, *kwarg \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m309 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m.trainer.strategy.post_training_step() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m310 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m311 \u001b[0m\u001b[2m│ │ \u001b[0mresult = \u001b[96mself\u001b[0m.output_result_cls.from_training_step_output(training_step_output, \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/lightning/pytorch/trainer/\u001b[0m\u001b[1;33mcall.py\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[94m288\u001b[0m in \u001b[92m_call_strategy_hook\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m285 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m286 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m287 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mwith\u001b[0m trainer.profiler.profile(\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33m[Strategy]\u001b[0m\u001b[33m{\u001b[0mtrainer.strategy.\u001b[91m__class__\u001b[0m.\u001b[91m__name__\u001b[0m\u001b[33m}\u001b[0m\u001b[33m.\u001b[0m\u001b[33m{\u001b[0mhoo \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m288 \u001b[2m│ │ \u001b[0moutput = fn(*args, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m289 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m290 \u001b[0m\u001b[2m│ \u001b[0m\u001b[2m# restore current_fx when nested context\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m291 \u001b[0m\u001b[2m│ \u001b[0mpl_module._current_fx_name = prev_fx_name \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/lightning/pytorch/strategies/\u001b[0m\u001b[1;33mstrat\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[1;33megy.py\u001b[0m:\u001b[94m366\u001b[0m in \u001b[92mtraining_step\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m363 \u001b[0m\u001b[2;33m│ │ \u001b[0m\u001b[33m\"\"\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m364 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mwith\u001b[0m \u001b[96mself\u001b[0m.precision_plugin.train_step_context(): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m365 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94massert\u001b[0m \u001b[96misinstance\u001b[0m(\u001b[96mself\u001b[0m.model, TrainingStep) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m366 \u001b[2m│ │ │ \u001b[0m\u001b[94mreturn\u001b[0m \u001b[96mself\u001b[0m.model.training_step(*args, **kwargs) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m367 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m368 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92mpost_training_step\u001b[0m(\u001b[96mself\u001b[0m) -> \u001b[94mNone\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m369 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mpass\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92mtraining_step\u001b[0m:\u001b[94m56\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m53 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m loss \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m54 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m55 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92mtraining_step\u001b[0m(\u001b[96mself\u001b[0m, batch, batch_idx): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m56 \u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m \u001b[96mself\u001b[0m._step(batch, batch_idx) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m57 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m58 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92mvalidation_step\u001b[0m(\u001b[96mself\u001b[0m, batch, batch_idx=\u001b[94m0\u001b[0m): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m59 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m \u001b[96mself\u001b[0m._step(batch, batch_idx, stage=\u001b[33m'\u001b[0m\u001b[33mval\u001b[0m\u001b[33m'\u001b[0m) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92m_step\u001b[0m:\u001b[94m51\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[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m49 \u001b[0m\u001b[2m│ │ \u001b[0mpredictions, acc = get_acc(p0, p1, y) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m50 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m.log(\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33m{\u001b[0mstage\u001b[33m}\u001b[0m\u001b[33m/acc\u001b[0m\u001b[33m\"\u001b[0m, acc) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m51 \u001b[2m│ │ \u001b[0mpredictions, f1 = get_f1(p0, p1, y) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m52 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m.log(\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33m{\u001b[0mstage\u001b[33m}\u001b[0m\u001b[33m/f1\u001b[0m\u001b[33m\"\u001b[0m, f1) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m53 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m loss \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 in \u001b[92mget_f1\u001b[0m:\u001b[94m27\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m24 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m25 \u001b[0m\u001b[2m│ \u001b[0m\u001b[2m# TODO f1\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m26 \u001b[0m\u001b[2m│ \u001b[0mconf = (avg_confidence.detach().cpu().numpy() )[:, \u001b[94m0\u001b[0m] \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m27 \u001b[2m│ \u001b[0mauc = roc_auc_score(y.cpu().numpy(), predictions) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m28 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m29 \u001b[0m\u001b[2m│ \u001b[0mauc = \u001b[96mmax\u001b[0m(auc, \u001b[94m1\u001b[0m - auc) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m30 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mreturn\u001b[0m predictions, auc \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/sklearn/metrics/\u001b[0m\u001b[1;33m_ranking.py\u001b[0m:\u001b[94m572\u001b[0m in \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[92mroc_auc_score\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 569 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94melif\u001b[0m y_type == \u001b[33m\"\u001b[0m\u001b[33mbinary\u001b[0m\u001b[33m\"\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 570 \u001b[0m\u001b[2m│ │ \u001b[0mlabels = np.unique(y_true) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 571 \u001b[0m\u001b[2m│ │ \u001b[0my_true = label_binarize(y_true, classes=labels)[:, \u001b[94m0\u001b[0m] \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 572 \u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m _average_binary_score( \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 573 \u001b[0m\u001b[2m│ │ │ \u001b[0mpartial(_binary_roc_auc_score, max_fpr=max_fpr), \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 574 \u001b[0m\u001b[2m│ │ │ \u001b[0my_true, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 575 \u001b[0m\u001b[2m│ │ │ \u001b[0my_score, \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/sklearn/metrics/\u001b[0m\u001b[1;33m_base.py\u001b[0m:\u001b[94m75\u001b[0m in \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[92m_average_binary_score\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 72 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mraise\u001b[0m \u001b[96mValueError\u001b[0m(\u001b[33m\"\u001b[0m\u001b[33m{0}\u001b[0m\u001b[33m format is not supported\u001b[0m\u001b[33m\"\u001b[0m.format(y_type)) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 73 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 74 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mif\u001b[0m y_type == \u001b[33m\"\u001b[0m\u001b[33mbinary\u001b[0m\u001b[33m\"\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 75 \u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m binary_metric(y_true, y_score, sample_weight=sample_weight) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 76 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 77 \u001b[0m\u001b[2m│ \u001b[0mcheck_consistent_length(y_true, y_score, sample_weight) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 78 \u001b[0m\u001b[2m│ \u001b[0my_true = check_array(y_true) \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/sklearn/metrics/\u001b[0m\u001b[1;33m_ranking.py\u001b[0m:\u001b[94m339\u001b[0m in \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[92m_binary_roc_auc_score\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 336 \u001b[0m\u001b[94mdef\u001b[0m \u001b[92m_binary_roc_auc_score\u001b[0m(y_true, y_score, sample_weight=\u001b[94mNone\u001b[0m, max_fpr=\u001b[94mNone\u001b[0m): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 337 \u001b[0m\u001b[2;90m│ \u001b[0m\u001b[33m\"\"\"Binary roc auc score.\"\"\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 338 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mif\u001b[0m \u001b[96mlen\u001b[0m(np.unique(y_true)) != \u001b[94m2\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 339 \u001b[2m│ │ \u001b[0m\u001b[94mraise\u001b[0m \u001b[96mValueError\u001b[0m( \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 340 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[33m\"\u001b[0m\u001b[33mOnly one class present in y_true. ROC AUC score \u001b[0m\u001b[33m\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 341 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[33m\"\u001b[0m\u001b[33mis not defined in that case.\u001b[0m\u001b[33m\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 342 \u001b[0m\u001b[2m│ │ \u001b[0m) \u001b[31m│\u001b[0m\n",
- "\u001b[31m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n",
- "\u001b[1;91mValueError: \u001b[0mOnly one class present in y_true. ROC AUC score is not defined in that case.\n"
+ "Training: 0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "83e6c6b1a58243d7b9cd284ef6083500",
+ "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": "1f15a58101974fdbada285c0b890655e",
+ "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": "73c52a29e80d422db09a05fc342c3fe1",
+ "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": "c5e7ff8a8a5d4f809cc3b84c58a6094e",
+ "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": "8959e15d66a6474f9deb82b92c00160d",
+ "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": "a412db8a62cf4208a64de0a165d80f9e",
+ "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": "d39d2001d6344edba81feb9c0a0e8163",
+ "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": "76c6124d977541d0afdf7be3a1220deb",
+ "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": "ce8ed8fc73cc4a029b9ad3e00e6efadd",
+ "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": "718756e4031b49ccaa62ed4f6a0b089e",
+ "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": "1a81495709f543e2a7406531b00fb8a3",
+ "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": "8a604fbf9a9841d5b0af001d327d73ac",
+ "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": "e7779c0443494eb4adffb2110d33803a",
+ "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": "5fd7160154bb4d0c83b4350f7afb36ae",
+ "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": "3b3cb176c1484cd28505fa0ca7fcacab",
+ "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": "f9e4e62d47d04a7f8c48c327c6af3ba1",
+ "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": "77368ddecac944c3b83168b0cd5e2239",
+ "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": "1f47c15ef5ba4849b6d49c0bb92a829f",
+ "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": "cef5e43c4b8b45c3a4c8cabce408f20e",
+ "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": "03c99042e37e4a7398be88c0477894d4",
+ "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": "0c6f976ecc40453c8b7b5545d414ac72",
+ "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": "da229e04bf4d460c9f53048430ee7836",
+ "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": "ec1103bf1efc4fa18e628675af49e9c2",
+ "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": "1b87e61c51ab44558966bfb951835228",
+ "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": "927f1c05dca941d89cc6358541d20298",
+ "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": "0b87ad11099546c7ac6f4e602364b8aa",
+ "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": "06acb0f6760a4179b9d0717e0182fd11",
+ "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": "b6cd4bbbfce44bcd87ce62808b7caa4d",
+ "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": "99f51573dd2746f48e5dd7b924522ce0",
+ "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": "e0496be3f98749ed898aea5939ff936e",
+ "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": "aba4326c87a64b9fa49d752409348c39",
+ "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": "18bd38ef00c4495bbd2c826522359956",
+ "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": "c64434a7f206408ebb3ffd99e5f4f073",
+ "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": "69e66745a14b46b28c013f5036e28494",
+ "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": "b6dc9911c9be4409b4e50db9c0246892",
+ "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": "21a59eee313a42c38f9c2e903061e760",
+ "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": "cdfc5f5a742248238037f5df9d6edd7e",
+ "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": "c79baa4315f54b5b8b9bf4b484af04ea",
+ "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": "c3fa37b420e140b5b9e6753310382c09",
+ "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": "0d4bb03bcf50478c8747c711860ee0de",
+ "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": "4071bead020a4857b7271b96669c6e3a",
+ "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": "03f4a65164224947a5f9323a5e5074b2",
+ "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": "d3a92324e18a424197ba6556719d334e",
+ "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": "fa0336f8c09c42539a00ec5eff3c23c6",
+ "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": "ed25cb435ed040aebc495f9fa8fddd76",
+ "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": "6b388b339a6c46789d956f0a78d4dbbb",
+ "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": "9ce239fc5b6c46cbb028f8fe6c43f251",
+ "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": "c80a2ee9478e407aab3e308e210ea5e2",
+ "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": "bf8cc3070d664d39bed05f267e37e7ac",
+ "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": "5e7bfead04d641c0a1430c5a8bed9c48",
+ "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": "d37dd04b53dd470ea46d0277b56bbdc2",
+ "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": "ca10ec7ef44b436abdb289ae046ebef6",
+ "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": "1d2264fb39c04b3d8e746347a5c06238",
+ "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": "ab9599d38c0d4bdf8938dca889196408",
+ "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": "a5eb1663871e4c8db5d275dfbf9a7ab5",
+ "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": "c4e4cb11e0564e7796101b9468a747f8",
+ "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": "cea0f1867df4464680536f6fa9e7da6d",
+ "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": "b6b7d618ddb846ca81b69de71552550b",
+ "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": "22a3964e471b46bc8f6c21bf57b5a7a7",
+ "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": "ea7ea54e700647f9b66f38aa8a723f36",
+ "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": "94cc09595d074e04853b0458986e5804",
+ "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": "5e00b290521a40358892c1aa0888eba2",
+ "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": "74bcd63ae4e44079b5e242aab58d094e",
+ "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": "9615154bdd834e02adcbd0e83265c0e5",
+ "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": "372b6ac8dc2d438db122ad7a93bbd7ec",
+ "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": "ca503cf8f77a46eeb208870af63cbd35",
+ "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": "a3ef03485e764afd8f6e761703535915",
+ "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": "318ad6f305634517b3377b946dca1a57",
+ "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": "6e45f3f5cb8d4a3bac9ef48c45fce58e",
+ "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": "c82d5453e73b4331895cbf2cd0569f29",
+ "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": "e3a945e0040942889f3e9be633ce6175",
+ "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": "c129e6d527c54d5586d382420125a0c7",
+ "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": "c6bd5d04a05146f58a0a2db333891ee4",
+ "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": "978a228f7f084dc2a505ee5d61cac9dc",
+ "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": "7aa331fcd3f8457497b01fd1284fc905",
+ "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": "8ef80498d9314b9ebc03ee83ce1194f4",
+ "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": "46d6b6525495457081ab1d6b0e1d9ca5",
+ "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": "886fb2ef33a44e0db863057254704f82",
+ "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": "28e385ded2464869bd48db0a9af6f6fd",
+ "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": "eceb5d2d748f446fbb19338af15eed14",
+ "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": "f5f5635ae4fd4c8b847fe1ccfe742057",
+ "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": "0fc4d1ac86064684b88c962f95a4fdd8",
+ "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": "735e8cd143804eb1bb555f44f7da128a",
+ "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": "69ed4e065bc44095bc38405930d62ecd",
+ "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": "7b2c4af875264aa18b1d2b53c54214f3",
+ "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": "4bd0d7c510bb49d19b0f963959cb6294",
+ "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": "c66f300505214651909d4dd4077c2244",
+ "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": "84f3d116dc5b46648ac7fde69ff1ef9a",
+ "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": "0b8b0863c9584e9cb86bedf9fbb70910",
+ "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": "dece397615ab43e18825c8594930b7dd",
+ "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": "83f54a823d1943e4985e665709867c51",
+ "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": "953c5ff8029d4523a7cd06ac2988c109",
+ "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": "28b5f03a84454a23bc6ec2a76a0c75f3",
+ "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": "f8e20a198a954faf907e5604bbfed656",
+ "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": "cbb73ba40eb14b59b274dc0a955306b5",
+ "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": "b24b9f6bf8f44a02bf2f2a13e1babeb4",
+ "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": "1cb4a18a61d447b2bc4aaab5714b8be2",
+ "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": "37a71917c58d45c19583e8d4098787a3",
+ "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": "3b4d0678dbbf4317a066727f42c6f33b",
+ "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": "d2de35832edc4dfb9ec8e23133ef5f5f",
+ "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": "2dfaf11a7f4a45ca8b441b16e0790deb",
+ "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": "b42b3eb9429644df974dfb3f9acaa9bc",
+ "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": "c770fdf4264e4193a2d41a5180b6b41f",
+ "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": "aeb117f2927a497ebdcb130247b7ca73",
+ "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": "c4a82b27396f4156aef3edfbb20f386f",
+ "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": "695a44c229894374bd7f38953e250653",
+ "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": "7b58605611594977bbbd9b462ff60a2d",
+ "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": "8c0784ac6f65452eb07ddb6440dcca02",
+ "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": "bebd4550eaeb407c99e58a8da151730e",
+ "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": "6d55660ce8ca4bc0bd6c46b026ef68d5",
+ "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": "087e0693dd4b4ceea2af34d6e18037b8",
+ "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": "a0e7a18ae7e94d969dc7780d095c5e35",
+ "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": "c1bb0280abcc44d289105c2d9c1b3063",
+ "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": "1f63663fbbd64be38c41c8eea9e69ef3",
+ "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": "7a2c41bfd3294aac9c4afa186ebd0f10",
+ "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": "6983261c4ffd4f7d91c61a677657a3fe",
+ "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": "5d8c0ca12a8b430b97bd45de63e3e512",
+ "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": "c1c880fc58e94a1191f66284cb337105",
+ "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": "9f9fc3b9f2a840de958500e149bde4a5",
+ "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": "8deb913eb47b490f9de6a160f7eaa32c",
+ "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": "0761434ed57946de88f44f563c20ce2d",
+ "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": "c4bb58606ff346f48b07e23dc988597e",
+ "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": "74aaecb39c224e0da3c555313c3c822e",
+ "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": "f753a7b10b674330a2c8da449fecf489",
+ "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": "ef92ccbe79db4183bcf6565cc406ea08",
+ "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": "ce81f811e6d44efb9edc19248ccdbad5",
+ "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": "9af8f9cfa7fc4919882ff56044d4ca37",
+ "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": "77d28c30de0c400eb09f3d1cab884c82",
+ "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": "c36d52013696404287ec483d115b487d",
+ "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": "d1c8e4d32147414db6778869a5df7d3e",
+ "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": "f5cf14bf7e3f45f2baa26da3dbf6960e",
+ "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": "ed31e48b81b54bb6ae8f7b153d578318",
+ "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": "b1ea7ef45ceb4a128de769918423c997",
+ "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": "6971d5b6cb374cf4b44c801f73b99042",
+ "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": "5ee229d02f8742748d5629de701ae91b",
+ "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": "bc22630515e04068aa6c5e5fee6b98fb",
+ "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": "7a25b57347244085979c0450843c6b98",
+ "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": "4d98c04d4ece479ea0acb674d88b0548",
+ "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": "3ef80fd21d364bccaec9b9d12bf39ae8",
+ "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": "e52f7c713831437c8aa5ff1faec4ff99",
+ "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": "a8a7a83a5f1b47849e86577b70ad1b74",
+ "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": "67b85581421741e78eb19de07cb1b65f",
+ "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": "66f9a75c6feb4e7fbaacc165556b4624",
+ "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": "1304431769774035871569dc83af227d",
+ "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": "fa78b9b5cd89470ea06f14e7b03b0c8b",
+ "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": "ae7bd7ea60804d62ad2dd8709da3f560",
+ "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": "91ed60a9ceee40a9864dd3787bbce878",
+ "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": "e45b7b883a2b416c8eb109a746811b7c",
+ "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": "8582490ba6a64256942343be2bceabf9",
+ "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": "3ef645a348e34baea1f4c5e3b47cae5a",
+ "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": "264dd4993d3b4f5aabdeb72312ea3194",
+ "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": "e85d7ced71994ffebdc94eda0a0ef1a2",
+ "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": "87888472ee91482a8c375c36cee178b1",
+ "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": "7c0eb0174b214efca5830c9aae3bbaa7",
+ "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": "a65a597565764ac39354d106232150c6",
+ "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": "08034331209449869d099ce20fd089fa",
+ "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": "46dce5f3e95149be9eca227c76e41459",
+ "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": "fa968bbc61c546c69f8627572e2ec1a0",
+ "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": "06ea8def0cd9490b93591b6b19abbc56",
+ "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": "5f0574703ad1451489f9e3b409318d4d",
+ "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": "56efd0b1ce7f4815913d45cee9ecf2cf",
+ "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": "0302653cd962481c82f013ec2c9bcf26",
+ "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": "f58bcddfcfd84e1db169a7db3a477a2b",
+ "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": "c2d4d27b38ff4f38a8fa435b909b7d93",
+ "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": "d9748896859248a8a6ca9a0bc4d9508e",
+ "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": "e3b94c8fdd234aa9a4c59af579710e92",
+ "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": "b525856a73494f01bb55cc9b0553319e",
+ "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": "649d3df00cc642e78ebf6573fa5ad7b6",
+ "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": "89bc5c8ad497455cb4a691b9a645a44f",
+ "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": "a3379605353c4a78a9afcaba5b33f8d2",
+ "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": "fd16a57acd1e4dac9199ad6930a5fc6b",
+ "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": "988088d25d7646b8a17924e17c803c7a",
+ "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": "fa2c31d005ee423a8959c2c1f4b597dd",
+ "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": "3afacbaaeb9b4c7c940e94213a7ae175",
+ "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": "736173072e284b0daf2d6c8dad3c8713",
+ "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": "f3ba8738f32b4d1ba7acfd547d623523",
+ "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": "ad64a1342240414e96d17cceeb6b39b9",
+ "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": "9e6baa2df1674717b33b4af219509347",
+ "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": "4520877baea840479dd3f5610d54c72e",
+ "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": "11d34751316c45e1be091f6825022d4c",
+ "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": "df230ff50772421986ee65da990e87df",
+ "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": "b7002ba318014071a6463fac58794380",
+ "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": "e09a1bde1bd44c4cbb60f47f8b9f7da9",
+ "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": "28b153f5d8f44cdb90a423d4de247064",
+ "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": "16161622574446f39aeebd8731f4be01",
+ "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": "7e5c07aa6bfe4246a27334feb66d74e6",
+ "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": "29cf60880fa24609bc36b8a63dbbff54",
+ "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": "fcdfbcf1188146a6b250e297126a4726",
+ "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": "3ee4cd4700e142349d2312441078502d",
+ "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": "1d2f93a44c694d55887a5ce77ae9e428",
+ "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": "f5aa84f10d81413d9e4f8c1057fc628e",
+ "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": "ce794f84d69b4cacbf8ee2f67f5655b7",
+ "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": "af10c5772342427e87e51683d9cea0c5",
+ "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": "11870a4414a64c1483505f58208a9179",
+ "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": "38fb3b99cd93467f8afb4a88c8b2d4fe",
+ "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": "b2eb1526fd624a1bbd609f031523f3dc",
+ "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": "576bf19720a54f418b4f72ec4cdb27b6",
+ "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": "918c997d1e9e405f874ca494aaf8c48e",
+ "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": "51e590d8d80348aeb3d00c41ec680fcb",
+ "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": "6062b27332c14b74845b240489adb8ea",
+ "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=200` reached.\n"
+ ]
}
],
"source": [
@@ -2697,7 +4356,7 @@
},
{
"cell_type": "code",
- "execution_count": 39,
+ "execution_count": 88,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.760833Z",
@@ -2734,7 +4393,7 @@
},
{
"cell_type": "code",
- "execution_count": 40,
+ "execution_count": 89,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.761623Z",
@@ -2746,205 +4405,160 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "[]\n"
+ "[]\n"
]
},
{
"data": {
"text/html": [
- "╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮ \n",
- "│ in <module> :1 │ \n",
- "│ │ \n",
- "│ ❱ 1 df_hist = read_hist(trainer).ffill().bfill() │ \n",
- "│ 2 df_hist │ \n",
- "│ 3 │ \n",
- "│ │ \n",
- "│ in read_hist :23 │ \n",
- "│ │ \n",
- "│ 20 │ │ df_histe = read_metrics_csv(metrics_file_path) │ \n",
- "│ 21 │ │ return df_histe │ \n",
- "│ 22 │ except Exception as e: │ \n",
- "│ ❱ 23 │ │ raise e │ \n",
- "│ 24 │ │ print (e) │ \n",
- "│ 25 │ \n",
- "│ │ \n",
- "│ in read_hist :20 │ \n",
- "│ │ \n",
- "│ 17 │ print (ts) │ \n",
- "│ 18 │ try : │ \n",
- "│ 19 │ │ metrics_file_path = Path(ts[0 ].experiment.metrics_file_path) │ \n",
- "│ ❱ 20 │ │ df_histe = read_metrics_csv(metrics_file_path) │ \n",
- "│ 21 │ │ return df_histe │ \n",
- "│ 22 │ except Exception as e: │ \n",
- "│ 23 │ │ raise e │ \n",
- "│ │ \n",
- "│ in read_metrics_csv :8 │ \n",
- "│ │ \n",
- "│ 5 import pandas as pd │ \n",
- "│ 6 │ \n",
- "│ 7 def read_metrics_csv (metrics_file_path): │ \n",
- "│ ❱ 8 │ df_hist = pd.read_csv(metrics_file_path) │ \n",
- "│ 9 │ df_hist[\"epoch\" ] = df_hist[\"epoch\" ].ffill() │ \n",
- "│ 10 │ df_histe = df_hist.set_index(\"epoch\" ).groupby(\"epoch\" ).mean() │ \n",
- "│ 11 │ return df_histe │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/pandas/io/parsers/ readers.py :912 │ \n",
- "│ in read_csv │ \n",
- "│ │ \n",
- "│ 909 │ ) │ \n",
- "│ 910 │ kwds.update(kwds_defaults) │ \n",
- "│ 911 │ │ \n",
- "│ ❱ 912 │ return _read(filepath_or_buffer, kwds) │ \n",
- "│ 913 │ \n",
- "│ 914 │ \n",
- "│ 915 # iterator=True -> TextFileReader │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/pandas/io/parsers/ readers.py :577 │ \n",
- "│ in _read │ \n",
- "│ │ \n",
- "│ 574 │ _validate_names(kwds.get(\"names\" , None )) │ \n",
- "│ 575 │ │ \n",
- "│ 576 │ # Create the parser. │ \n",
- "│ ❱ 577 │ parser = TextFileReader(filepath_or_buffer, **kwds) │ \n",
- "│ 578 │ │ \n",
- "│ 579 │ if chunksize or iterator: │ \n",
- "│ 580 │ │ return parser │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/pandas/io/parsers/ readers.py :1407 │ \n",
- "│ in __init__ │ \n",
- "│ │ \n",
- "│ 1404 │ │ │ self .options[\"has_index_names\" ] = kwds[\"has_index_names\" ] │ \n",
- "│ 1405 │ │ │ \n",
- "│ 1406 │ │ self .handles: IOHandles | None = None │ \n",
- "│ ❱ 1407 │ │ self ._engine = self ._make_engine(f, self .engine) │ \n",
- "│ 1408 │ │ \n",
- "│ 1409 │ def close (self ) -> None : │ \n",
- "│ 1410 │ │ if self .handles is not None : │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/pandas/io/parsers/ readers.py :1661 │ \n",
- "│ in _make_engine │ \n",
- "│ │ \n",
- "│ 1658 │ │ │ │ is_text = False │ \n",
- "│ 1659 │ │ │ │ if \"b\" not in mode: │ \n",
- "│ 1660 │ │ │ │ │ mode += \"b\" │ \n",
- "│ ❱ 1661 │ │ │ self .handles = get_handle( │ \n",
- "│ 1662 │ │ │ │ f, │ \n",
- "│ 1663 │ │ │ │ mode, │ \n",
- "│ 1664 │ │ │ │ encoding=self .options.get(\"encoding\" , None ), │ \n",
- "│ │ \n",
- "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/pandas/io/ common.py :859 in │ \n",
- "│ get_handle │ \n",
- "│ │ \n",
- "│ 856 │ │ # Binary mode does not support 'encoding' and 'newline'. │ \n",
- "│ 857 │ │ if ioargs.encoding and \"b\" not in ioargs.mode: │ \n",
- "│ 858 │ │ │ # Encoding │ \n",
- "│ ❱ 859 │ │ │ handle = open ( │ \n",
- "│ 860 │ │ │ │ handle, │ \n",
- "│ 861 │ │ │ │ ioargs.mode, │ \n",
- "│ 862 │ │ │ │ encoding=ioargs.encoding, │ \n",
- "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
- "FileNotFoundError: [ Errno 2 ] No such file or directory: \n",
- "'/home/ubuntu/Documents/mjc/elk/discovering_latent_knowledge/notebooks/lightning_logs/version_0/metrics.csv' \n",
- " \n"
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " val/loss \n",
+ " val/acc \n",
+ " step \n",
+ " train/loss \n",
+ " train/acc \n",
+ " \n",
+ " \n",
+ " epoch \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 31.0 \n",
+ " 1.0 \n",
+ " 0.59375 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 56.0 \n",
+ " 1.0 \n",
+ " 0.59375 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 95.0 \n",
+ " 1.0 \n",
+ " 0.59375 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 113.0 \n",
+ " 1.0 \n",
+ " 0.53125 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 154.0 \n",
+ " 1.0 \n",
+ " 0.62500 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 195 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 6260.0 \n",
+ " 1.0 \n",
+ " 0.56250 \n",
+ " \n",
+ " \n",
+ " 196 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 6301.0 \n",
+ " 1.0 \n",
+ " 0.62500 \n",
+ " \n",
+ " \n",
+ " 197 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 6335.0 \n",
+ " 1.0 \n",
+ " 0.62500 \n",
+ " \n",
+ " \n",
+ " 198 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 6358.0 \n",
+ " 1.0 \n",
+ " 0.50000 \n",
+ " \n",
+ " \n",
+ " 199 \n",
+ " 1.0 \n",
+ " 0.564 \n",
+ " 6399.0 \n",
+ " 1.0 \n",
+ " 0.62500 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
200 rows × 5 columns
\n",
+ "
"
],
"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 df_hist = read_hist(trainer).ffill().bfill() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m2 \u001b[0mdf_hist \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m3 \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92mread_hist\u001b[0m:\u001b[94m23\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[2m│ │ \u001b[0mdf_histe = read_metrics_csv(metrics_file_path) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m21 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m df_histe \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m22 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mexcept\u001b[0m \u001b[96mException\u001b[0m \u001b[94mas\u001b[0m e: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m23 \u001b[2m│ │ \u001b[0m\u001b[94mraise\u001b[0m e \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m24 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mprint\u001b[0m(e) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m25 \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92mread_hist\u001b[0m:\u001b[94m20\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m17 \u001b[0m\u001b[2m│ \u001b[0m\u001b[96mprint\u001b[0m(ts) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m18 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mtry\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m19 \u001b[0m\u001b[2m│ │ \u001b[0mmetrics_file_path = Path(ts[\u001b[94m0\u001b[0m].experiment.metrics_file_path) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m20 \u001b[2m│ │ \u001b[0mdf_histe = read_metrics_csv(metrics_file_path) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m21 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m df_histe \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m22 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mexcept\u001b[0m \u001b[96mException\u001b[0m \u001b[94mas\u001b[0m e: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m23 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mraise\u001b[0m e \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92mread_metrics_csv\u001b[0m:\u001b[94m8\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 5 \u001b[0m\u001b[94mimport\u001b[0m \u001b[4;96mpandas\u001b[0m \u001b[94mas\u001b[0m \u001b[4;96mpd\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 6 \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 7 \u001b[0m\u001b[94mdef\u001b[0m \u001b[92mread_metrics_csv\u001b[0m(metrics_file_path): \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 8 \u001b[2m│ \u001b[0mdf_hist = pd.read_csv(metrics_file_path) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 9 \u001b[0m\u001b[2m│ \u001b[0mdf_hist[\u001b[33m\"\u001b[0m\u001b[33mepoch\u001b[0m\u001b[33m\"\u001b[0m] = df_hist[\u001b[33m\"\u001b[0m\u001b[33mepoch\u001b[0m\u001b[33m\"\u001b[0m].ffill() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m10 \u001b[0m\u001b[2m│ \u001b[0mdf_histe = df_hist.set_index(\u001b[33m\"\u001b[0m\u001b[33mepoch\u001b[0m\u001b[33m\"\u001b[0m).groupby(\u001b[33m\"\u001b[0m\u001b[33mepoch\u001b[0m\u001b[33m\"\u001b[0m).mean() \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m11 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mreturn\u001b[0m df_histe \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/pandas/io/parsers/\u001b[0m\u001b[1;33mreaders.py\u001b[0m:\u001b[94m912\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92mread_csv\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 909 \u001b[0m\u001b[2m│ \u001b[0m) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 910 \u001b[0m\u001b[2m│ \u001b[0mkwds.update(kwds_defaults) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 911 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 912 \u001b[2m│ \u001b[0m\u001b[94mreturn\u001b[0m _read(filepath_or_buffer, kwds) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 913 \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 914 \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 915 \u001b[0m\u001b[2m# iterator=True -> TextFileReader\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/pandas/io/parsers/\u001b[0m\u001b[1;33mreaders.py\u001b[0m:\u001b[94m577\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92m_read\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 574 \u001b[0m\u001b[2m│ \u001b[0m_validate_names(kwds.get(\u001b[33m\"\u001b[0m\u001b[33mnames\u001b[0m\u001b[33m\"\u001b[0m, \u001b[94mNone\u001b[0m)) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 575 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 576 \u001b[0m\u001b[2m│ \u001b[0m\u001b[2m# Create the parser.\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 577 \u001b[2m│ \u001b[0mparser = TextFileReader(filepath_or_buffer, **kwds) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 578 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 579 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mif\u001b[0m chunksize \u001b[95mor\u001b[0m iterator: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 580 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mreturn\u001b[0m parser \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/pandas/io/parsers/\u001b[0m\u001b[1;33mreaders.py\u001b[0m:\u001b[94m1407\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92m__init__\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1404 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[96mself\u001b[0m.options[\u001b[33m\"\u001b[0m\u001b[33mhas_index_names\u001b[0m\u001b[33m\"\u001b[0m] = kwds[\u001b[33m\"\u001b[0m\u001b[33mhas_index_names\u001b[0m\u001b[33m\"\u001b[0m] \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1405 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1406 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m.handles: IOHandles | \u001b[94mNone\u001b[0m = \u001b[94mNone\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m1407 \u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m._engine = \u001b[96mself\u001b[0m._make_engine(f, \u001b[96mself\u001b[0m.engine) \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1408 \u001b[0m\u001b[2m│ \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1409 \u001b[0m\u001b[2m│ \u001b[0m\u001b[94mdef\u001b[0m \u001b[92mclose\u001b[0m(\u001b[96mself\u001b[0m) -> \u001b[94mNone\u001b[0m: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1410 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mif\u001b[0m \u001b[96mself\u001b[0m.handles \u001b[95mis\u001b[0m \u001b[95mnot\u001b[0m \u001b[94mNone\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/pandas/io/parsers/\u001b[0m\u001b[1;33mreaders.py\u001b[0m:\u001b[94m1661\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m in \u001b[92m_make_engine\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1658 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mis_text = \u001b[94mFalse\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1659 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[94mif\u001b[0m \u001b[33m\"\u001b[0m\u001b[33mb\u001b[0m\u001b[33m\"\u001b[0m \u001b[95mnot\u001b[0m \u001b[95min\u001b[0m mode: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1660 \u001b[0m\u001b[2m│ │ │ │ │ \u001b[0mmode += \u001b[33m\"\u001b[0m\u001b[33mb\u001b[0m\u001b[33m\"\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m1661 \u001b[2m│ │ │ \u001b[0m\u001b[96mself\u001b[0m.handles = get_handle( \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1662 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mf, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1663 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mmode, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m1664 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mencoding=\u001b[96mself\u001b[0m.options.get(\u001b[33m\"\u001b[0m\u001b[33mencoding\u001b[0m\u001b[33m\"\u001b[0m, \u001b[94mNone\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/pandas/io/\u001b[0m\u001b[1;33mcommon.py\u001b[0m:\u001b[94m859\u001b[0m in \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[92mget_handle\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 856 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# Binary mode does not support 'encoding' and 'newline'.\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 857 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mif\u001b[0m ioargs.encoding \u001b[95mand\u001b[0m \u001b[33m\"\u001b[0m\u001b[33mb\u001b[0m\u001b[33m\"\u001b[0m \u001b[95mnot\u001b[0m \u001b[95min\u001b[0m ioargs.mode: \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 858 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[2m# Encoding\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 859 \u001b[2m│ │ │ \u001b[0mhandle = \u001b[96mopen\u001b[0m( \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 860 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mhandle, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 861 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mioargs.mode, \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m 862 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mencoding=ioargs.encoding, \u001b[31m│\u001b[0m\n",
- "\u001b[31m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n",
- "\u001b[1;91mFileNotFoundError: \u001b[0m\u001b[1m[\u001b[0mErrno \u001b[1;36m2\u001b[0m\u001b[1m]\u001b[0m No such file or directory: \n",
- "\u001b[32m'/home/ubuntu/Documents/mjc/elk/discovering_latent_knowledge/notebooks/lightning_logs/version_0/metrics.csv'\u001b[0m\n"
+ " val/loss val/acc step train/loss train/acc\n",
+ "epoch \n",
+ "0 1.0 0.564 31.0 1.0 0.59375\n",
+ "1 1.0 0.564 56.0 1.0 0.59375\n",
+ "2 1.0 0.564 95.0 1.0 0.59375\n",
+ "3 1.0 0.564 113.0 1.0 0.53125\n",
+ "4 1.0 0.564 154.0 1.0 0.62500\n",
+ "... ... ... ... ... ...\n",
+ "195 1.0 0.564 6260.0 1.0 0.56250\n",
+ "196 1.0 0.564 6301.0 1.0 0.62500\n",
+ "197 1.0 0.564 6335.0 1.0 0.62500\n",
+ "198 1.0 0.564 6358.0 1.0 0.50000\n",
+ "199 1.0 0.564 6399.0 1.0 0.62500\n",
+ "\n",
+ "[200 rows x 5 columns]"
]
},
+ "execution_count": 89,
"metadata": {},
- "output_type": "display_data"
+ "output_type": "execute_result"
}
],
"source": [
@@ -2954,7 +4568,7 @@
},
{
"cell_type": "code",
- "execution_count": 41,
+ "execution_count": 90,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-20T02:28:35.762326Z",
@@ -2966,26 +4580,106 @@
"data": {
"text/html": [
"╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮ \n",
- "│ in <module> :1 │ \n",
+ "│ in <module> :3 │ \n",
"│ │ \n",
- "│ ❱ 1 df_hist[['val/acc' , 'train/acc' ]].plot() │ \n",
+ "│ 1 df_hist[['val/acc' , 'train/acc' ]].plot() │ \n",
"│ 2 │ \n",
- "│ 3 df_hist[['val/f1' , 'train/f1' ]].plot() │ \n",
+ "│ ❱ 3 df_hist[['val/f1' , 'train/f1' ]].plot() │ \n",
"│ 4 │ \n",
+ "│ 5 df_hist[['val/loss' , 'train/loss' ]].plot() │ \n",
+ "│ 6 │ \n",
+ "│ │ \n",
+ "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/pandas/core/ frame.py :3767 in │ \n",
+ "│ __getitem__ │ \n",
+ "│ │ \n",
+ "│ 3764 │ │ else : │ \n",
+ "│ 3765 │ │ │ if is_iterator(key): │ \n",
+ "│ 3766 │ │ │ │ key = list (key) │ \n",
+ "│ ❱ 3767 │ │ │ indexer = self .columns._get_indexer_strict(key, \"columns\" )[1 ] │ \n",
+ "│ 3768 │ │ │ \n",
+ "│ 3769 │ │ # take() does not accept boolean indexers │ \n",
+ "│ 3770 │ │ if getattr (indexer, \"dtype\" , None ) == bool : │ \n",
+ "│ │ \n",
+ "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/pandas/core/indexes/ base.py :5876 │ \n",
+ "│ in _get_indexer_strict │ \n",
+ "│ │ \n",
+ "│ 5873 │ │ else : │ \n",
+ "│ 5874 │ │ │ keyarr, indexer, new_indexer = self ._reindex_non_unique(keyarr) │ \n",
+ "│ 5875 │ │ │ \n",
+ "│ ❱ 5876 │ │ self ._raise_if_missing(keyarr, indexer, axis_name) │ \n",
+ "│ 5877 │ │ │ \n",
+ "│ 5878 │ │ keyarr = self .take(indexer) │ \n",
+ "│ 5879 │ │ if isinstance (key, Index): │ \n",
+ "│ │ \n",
+ "│ /home/ubuntu/mambaforge/envs/dlk2/lib/python3.9/site-packages/pandas/core/indexes/ base.py :5935 │ \n",
+ "│ in _raise_if_missing │ \n",
+ "│ │ \n",
+ "│ 5932 │ │ │ if nmissing == len (indexer): │ \n",
+ "│ 5933 │ │ │ │ if use_interval_msg: │ \n",
+ "│ 5934 │ │ │ │ │ key = list (key) │ \n",
+ "│ ❱ 5935 │ │ │ │ raise KeyError (f\"None of [{ key}] are in the [{ axis_name}]\" ) │ \n",
+ "│ 5936 │ │ │ │ \n",
+ "│ 5937 │ │ │ not_found = list (ensure_index(key)[missing_mask.nonzero()[0 ]].unique()) │ \n",
+ "│ 5938 │ │ │ raise KeyError (f\"{ not_found} not in index\" ) │ \n",
"╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
- "NameError: name 'df_hist' is not defined\n",
+ "KeyError: \"None of [Index(['val/f1', 'train/f1'], dtype='object')] are in the [columns]\" \n",
" \n"
],
"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 in \u001b[92m\u001b[0m:\u001b[94m3\u001b[0m \u001b[31m│\u001b[0m\n",
"\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m1 df_hist[[\u001b[33m'\u001b[0m\u001b[33mval/acc\u001b[0m\u001b[33m'\u001b[0m, \u001b[33m'\u001b[0m\u001b[33mtrain/acc\u001b[0m\u001b[33m'\u001b[0m]].plot() \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m1 \u001b[0mdf_hist[[\u001b[33m'\u001b[0m\u001b[33mval/acc\u001b[0m\u001b[33m'\u001b[0m, \u001b[33m'\u001b[0m\u001b[33mtrain/acc\u001b[0m\u001b[33m'\u001b[0m]].plot() \u001b[31m│\u001b[0m\n",
"\u001b[31m│\u001b[0m \u001b[2m2 \u001b[0m \u001b[31m│\u001b[0m\n",
- "\u001b[31m│\u001b[0m \u001b[2m3 \u001b[0mdf_hist[[\u001b[33m'\u001b[0m\u001b[33mval/f1\u001b[0m\u001b[33m'\u001b[0m, \u001b[33m'\u001b[0m\u001b[33mtrain/f1\u001b[0m\u001b[33m'\u001b[0m]].plot() \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m3 df_hist[[\u001b[33m'\u001b[0m\u001b[33mval/f1\u001b[0m\u001b[33m'\u001b[0m, \u001b[33m'\u001b[0m\u001b[33mtrain/f1\u001b[0m\u001b[33m'\u001b[0m]].plot() \u001b[31m│\u001b[0m\n",
"\u001b[31m│\u001b[0m \u001b[2m4 \u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5 \u001b[0mdf_hist[[\u001b[33m'\u001b[0m\u001b[33mval/loss\u001b[0m\u001b[33m'\u001b[0m, \u001b[33m'\u001b[0m\u001b[33mtrain/loss\u001b[0m\u001b[33m'\u001b[0m]].plot() \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m6 \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/pandas/core/\u001b[0m\u001b[1;33mframe.py\u001b[0m:\u001b[94m3767\u001b[0m in \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[92m__getitem__\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m 3764 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94melse\u001b[0m: \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m 3765 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mif\u001b[0m is_iterator(key): \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m 3766 \u001b[0m\u001b[2m│ │ │ │ \u001b[0mkey = \u001b[96mlist\u001b[0m(key) \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m 3767 \u001b[2m│ │ │ \u001b[0mindexer = \u001b[96mself\u001b[0m.columns._get_indexer_strict(key, \u001b[33m\"\u001b[0m\u001b[33mcolumns\u001b[0m\u001b[33m\"\u001b[0m)[\u001b[94m1\u001b[0m] \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m 3768 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m 3769 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[2m# take() does not accept boolean indexers\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m 3770 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mif\u001b[0m \u001b[96mgetattr\u001b[0m(indexer, \u001b[33m\"\u001b[0m\u001b[33mdtype\u001b[0m\u001b[33m\"\u001b[0m, \u001b[94mNone\u001b[0m) == \u001b[96mbool\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/pandas/core/indexes/\u001b[0m\u001b[1;33mbase.py\u001b[0m:\u001b[94m5876\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m in \u001b[92m_get_indexer_strict\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5873 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94melse\u001b[0m: \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5874 \u001b[0m\u001b[2m│ │ │ \u001b[0mkeyarr, indexer, new_indexer = \u001b[96mself\u001b[0m._reindex_non_unique(keyarr) \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5875 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m5876 \u001b[2m│ │ \u001b[0m\u001b[96mself\u001b[0m._raise_if_missing(keyarr, indexer, axis_name) \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5877 \u001b[0m\u001b[2m│ │ \u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5878 \u001b[0m\u001b[2m│ │ \u001b[0mkeyarr = \u001b[96mself\u001b[0m.take(indexer) \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5879 \u001b[0m\u001b[2m│ │ \u001b[0m\u001b[94mif\u001b[0m \u001b[96misinstance\u001b[0m(key, Index): \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/pandas/core/indexes/\u001b[0m\u001b[1;33mbase.py\u001b[0m:\u001b[94m5935\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m in \u001b[92m_raise_if_missing\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5932 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mif\u001b[0m nmissing == \u001b[96mlen\u001b[0m(indexer): \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5933 \u001b[0m\u001b[2m│ │ │ │ \u001b[0m\u001b[94mif\u001b[0m use_interval_msg: \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5934 \u001b[0m\u001b[2m│ │ │ │ │ \u001b[0mkey = \u001b[96mlist\u001b[0m(key) \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[31m❱ \u001b[0m5935 \u001b[2m│ │ │ │ \u001b[0m\u001b[94mraise\u001b[0m \u001b[96mKeyError\u001b[0m(\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33mNone of [\u001b[0m\u001b[33m{\u001b[0mkey\u001b[33m}\u001b[0m\u001b[33m] are in the [\u001b[0m\u001b[33m{\u001b[0maxis_name\u001b[33m}\u001b[0m\u001b[33m]\u001b[0m\u001b[33m\"\u001b[0m) \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5936 \u001b[0m\u001b[2m│ │ │ \u001b[0m \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5937 \u001b[0m\u001b[2m│ │ │ \u001b[0mnot_found = \u001b[96mlist\u001b[0m(ensure_index(key)[missing_mask.nonzero()[\u001b[94m0\u001b[0m]].unique()) \u001b[31m│\u001b[0m\n",
+ "\u001b[31m│\u001b[0m \u001b[2m5938 \u001b[0m\u001b[2m│ │ │ \u001b[0m\u001b[94mraise\u001b[0m \u001b[96mKeyError\u001b[0m(\u001b[33mf\u001b[0m\u001b[33m\"\u001b[0m\u001b[33m{\u001b[0mnot_found\u001b[33m}\u001b[0m\u001b[33m not in index\u001b[0m\u001b[33m\"\u001b[0m) \u001b[31m│\u001b[0m\n",
"\u001b[31m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n",
- "\u001b[1;91mNameError: \u001b[0mname \u001b[32m'df_hist'\u001b[0m is not defined\n"
+ "\u001b[1;91mKeyError: \u001b[0m\u001b[32m\"None of \u001b[0m\u001b[32m[\u001b[0m\u001b[32mIndex\u001b[0m\u001b[32m(\u001b[0m\u001b[32m[\u001b[0m\u001b[32m'val/f1', 'train/f1'\u001b[0m\u001b[32m]\u001b[0m\u001b[32m, \u001b[0m\u001b[32mdtype\u001b[0m\u001b[32m='object'\u001b[0m\u001b[32m)\u001b[0m\u001b[32m]\u001b[0m\u001b[32m are in the \u001b[0m\u001b[32m[\u001b[0m\u001b[32mcolumns\u001b[0m\u001b[32m]\u001b[0m\u001b[32m\"\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGwCAYAAACKOz5MAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACug0lEQVR4nO2dfXgU1fXHv/ueBEgAAwkgAopSUUBFSVFbraKAFtFaRbRFUbG1Uq1Uq1hBi61YrYi2Kq2FqrWtWmvVFkWRiv3Jq0KpVRFFeRUS5DWQQDbZnd8fs3f2zt07b7uzO7Ob83mePEl2Z2fvvN177jnfc25AURQFBEEQBEEQPibodQMIgiAIgiCsIIOFIAiCIAjfQwYLQRAEQRC+hwwWgiAIgiB8DxksBEEQBEH4HjJYCIIgCILwPWSwEARBEAThe8JeN8ANkskktm3bhk6dOiEQCHjdHIIgCIIgbKAoCvbv34+ePXsiGDT3oZSEwbJt2zb07t3b62YQBEEQBJEFW7ZsweGHH266TUkYLJ06dQKgHnBlZaXHrSEIgiAIwg6NjY3o3bu3No6bURIGCwsDVVZWksFCEARBEEWGHTkHiW4JgiAIgvA9ZLAQBEEQBOF7yGAhCIIgCML3lISGhSAIgmg/JJNJxONxr5tB2CQSiSAUCuW8HzJYCIIgiKIhHo9jw4YNSCaTXjeFcEDnzp1RW1ubU600MlgIgiCIokBRFGzfvh2hUAi9e/e2LDRGeI+iKGhubsaOHTsAAD169Mh6X2SwEARBEEVBW1sbmpub0bNnT1RUVHjdHMIm5eXlAIAdO3age/fuWYeHyDwlCIIgioJEIgEAiEajHreEcAozMFtbW7PeBxksBEEQRFFBa8YVH25cMzJYCIIgCILwPWSwEARBEAThe8hgIQiCIAgf07dvX8yePdvrZngOGSwEQRBe0hYH9m5Wf1r2e90aoojo168f3nzzTa+bUTAorZkgCMIrkglgzmnAzk/U/yMVwA+WAV36etoswv+8//772LNnD8444wyvm1IwyMNCEAThFS2NaWMFAFqbgR0fe9eeIkNRFDTH2zz5URTFVht/97vfoWfPnhmVeceOHYurr74an332GcaOHYuamhp07NgRp5xyii2vycsvv4xRo0YhEolg165dGD9+PHr16oWKigoMGjQIf/nLX3TbJ5NJ3H///ejfvz9isRiOOOII/OIXv9De37p1K8aPH4+uXbuiQ4cOOPnkk7FixQpbx1goyMNCEAThFclE+u9eJwNfvAfA3kBIAAdbExg4/XVPvvujGSNREbUeQi+55BL88Ic/xFtvvYWzzz4bALB7924sWLAAr776Kg4cOIDzzjsPv/jFLxCLxfD0009jzJgxWLduHY444gjD/b7yyiuYMmUKAODQoUMYOnQobrvtNlRWVmL+/Pn47ne/i6OOOgrDhg0DAEydOhVPPPEEHnroIZx++unYvn07Pv5YNY4PHDiAM844A7169cIrr7yC2tparF692nfLH5DBQhAE4RXJNvV3IAQEUg5vxV+DBJEbXbp0wejRo/HnP/9ZM1heeOEFVFdX4xvf+AaCwSCGDBmibX/PPffg73//O1555RVMnjxZus8vvvgC77//PkaPHg0A6NWrF2655Rbt/R/+8Id4/fXX8fzzz2PYsGHYv38/Hn74YfzmN7/BlVdeCQA46qijcPrppwMA/vznP+PLL7/Eu+++i65duwIA+vfv7/7JyBEyWAiCILyCGSzBMBksWVAeCeGjGSM9+267XHHFFZg0aRIee+wxxGIx/OlPf8Jll12GYDCIAwcO4O6778b8+fOxfft2tLW14eDBg9i8ebPh/l555RWcfvrp6Ny5MwC1AvC9996L559/Hl988QXi8ThaWlq06rJr165FS0uLZjCJrFmzBieeeKJmrPgVMlgIgiC8IpEqUx4MA6wSKBkstgkEArbCMl4zZswYKIqC+fPn45RTTsH//d//4aGHHgIA3HLLLVi4cCF+9atfoX///igvL8e3v/1txONxw/298soruOCCC7T/H3jgATz88MOYPXs2Bg0ahA4dOuBHP/qRtg+2lo8RVu/7BRLdEgRBeAXTsOg8LKRhKTXKysrwrW99C3/605/wl7/8BQMGDMBJJ50EAFiyZAmuuuoqXHTRRRg0aBBqa2uxceNGw30dOHAAb731FsaOHau9tmTJEowdOxbf+c53MGTIEBx55JH45JO0mPvoo49GeXk5Fi1aJN3n4MGDsWbNGuzevdudA84TZLAQBEF4hRYSIg1LqXPFFVdg/vz5mDdvHq644grt9aOPPhovvvgi1qxZg//+97+4/PLLTcWuCxYswDHHHIO+ffvq9rFw4UIsXboUa9euxfe+9z00NDRo75eVleG2227DT37yEzz99NP47LPPsHz5csydOxcAMH78eNTW1uLCCy/EkiVL8Pnnn+Nvf/sbli1b5v6JyAEyWAiCILyCGSyhCIWESpyzzjoLXbt2xbp163D55Zdrr8+aNQtdunTBqaeeijFjxmDkyJGa90XGyy+/rAsHAcCdd96Jk046CSNHjsSZZ56pGR8806ZNw49//GNMnz4dxx57LMaNG4cdO3YAUFe/fuONN9C9e3ecd955GDRoEO677z6EQvZ1OoUgoNhNJvcxjY2NqKqqwr59+1BZWel1cwiCIOyxbQ3wuzOAyl7AYf2BDW8DF88FBn3b65b5kkOHDmHDhg3o168fysrKvG5OwWlra0NNTQ1ee+01LV25WDC6dk7Gb/KwEARBeIWmYaGQEGHN7t27cfPNN+OUU07xuime4H95NUEQRKlCac2EA7p3744777zT62Z4BnlYCIIgvCLJpzWTwUIQZpDBQhAE4RU6DwsT3Ra9rJAg8gIZLARBEF5Bac0EYRsyWAiCILxCE91GyGAhCAvIYCEIgvAKPiQEqsNCEGaQwUIQBOEVMg0LSMNCEDLIYCEIgvAK0rAQhG3IYCEIgvCKhKwOC3lYCGP69u2L2bNne90MT8jKYHn00UfRt29flJWVoa6uDitXrjTdfvbs2RgwYADKy8vRu3dv3HzzzTh06JD2/t13341AIKD7+cpXvpJN0wiCIIoHSmtuF5x55pn40Y9+5Mq+3n33XVx33XWOP7dp0yaUl5fjwIEDrrTDCxxXun3uuecwZcoUzJkzB3V1dZg9ezZGjhyJdevWoXv37hnb//nPf8btt9+OefPm4dRTT8Unn3yCq666CoFAALNmzdK2O+644/Dmm2+mGxamIrwEQZQ4VOmWAKAoChKJhK1xr1u3bll9x8svv4xvfOMb6NixY1af9wOOPSyzZs3CpEmTMHHiRAwcOBBz5sxBRUUF5s2bJ91+6dKlOO2003D55Zejb9++OPfcczF+/PgMr0w4HEZtba32U11dbdiGlpYWNDY26n4IgiCKDm21ZjJYskJRgHiTNz82PWFXXXUV3n77bTz88MNaBOHJJ59EIBDAa6+9hqFDhyIWi+Gdd97BZ599hrFjx6KmpgYdO3bEKaecopvIA5khoUAggN///ve46KKLUFFRgaOPPhqvvPJKRjv4VZ7fffddnHPOOaiurkZVVRXOOOMMrF69Wrf93r178b3vfQ81NTUoKyvD8ccfj3/+85/a+0uWLMGZZ56JiooKdOnSBSNHjsSePXvsXrmscOTGiMfjWLVqFaZOnaq9FgwGMWLECCxbtkz6mVNPPRXPPPMMVq5ciWHDhuHzzz/Hq6++iu9+97u67T799FP07NkTZWVlGD58OGbOnIkjjjhCus+ZM2fiZz/7mZOmEwRB+A+tDgsZLFnR2gzc29Ob775jGxDtYLnZww8/jE8++QTHH388ZsyYAQD48MMPAQC33347fvWrX+HII49Ely5dsGXLFpx33nn4xS9+gVgshqeffhpjxozBunXrDMdDAPjZz36G+++/Hw888AB+/etf44orrsCmTZvQtWtXAKrx8c477+CPf/wjAGD//v248sor8etf/xqKouDBBx/Eeeedh08//RSdOnVCMpnE6NGjsX//fjzzzDM46qij8NFHHyEUCgEA1qxZg7PPPhtXX301Hn74YYTDYbz11ltIJBI5nVIrHBksO3fuRCKRQE1Nje71mpoafPzxx9LPXH755di5cydOP/10KIqCtrY2fP/738cdd9yhbVNXV4cnn3wSAwYMwPbt2/Gzn/0MX/va1/DBBx+gU6dOGfucOnUqpkyZov3f2NiI3r17OzkUgiAI75HVYaG05pKiqqoK0WgUFRUVqK2tBQBtvJwxYwbOOeccbduuXbtiyJAh2v/33HMP/v73v+OVV17B5MmTDb/jqquuwvjx4wEA9957Lx555BGsXLkSo0aNAgC8+uqrGDx4MHr2VI27s846S/f53/3ud+jcuTPefvttfPOb38Sbb76JlStXYu3atTjmmGMAAEceeaS2/f3334+TTz4Zjz32mPbacccd5/zkOCTvQpHFixfj3nvvxWOPPYa6ujqsX78eN910E+655x5MmzYNADB69Ght+8GDB6Ourg59+vTB888/j2uuuSZjn7FYDLFYLN9NJwiCyC9UOC43IhWqp8Or786Rk08+Wff/gQMHcPfdd2P+/PnYvn072tracPDgQWzevNl0P4MHD9b+7tChAyorK7Fjxw7tNT4cBAANDQ248847sXjxYuzYsQOJRALNzc3a96xZswaHH364ZqyIrFmzBpdcconj480VRwZLdXU1QqEQGhoadK83NDRolqPItGnT8N3vfhfXXnstAGDQoEFoamrCddddh5/+9KcIBjNlNJ07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3XXXFeoQLDE7xubmZqxevRrTpk3D6tWr8eKLL2LdunW44IILMradMWOG7tr+8Ic/LETzLbG6hgAwatQoXdv/8pe/6N4v5msIQHds27dvx7x58xAIBHDxxRfrtvPrNbQzPlj1n4lEAueffz7i8TiWLl2Kp556Ck8++SSmT5/uXkMVwpBhw4YpN9xwg/Z/IpFQevbsqcycOdPDVrnDjh07FADK22+/rb12xhlnKDfddJN3jcqRu+66SxkyZIj0vb179yqRSET561//qr22du1aBYCybNmyArXQXW666SblqKOOUpLJpKIoxX/9ACh///vftf+TyaRSW1urPPDAA9pre/fuVWKxmPKXv/xFURRF+eijjxQAyrvvvqtt89prrymBQED54osvCtZ2u4jHKGPlypUKAGXTpk3aa3369FEeeuih/DbOBWTHd+WVVypjx441/EwpXsOxY8cqZ511lu61YrmGipI5PtjpP1999VUlGAwq9fX12jaPP/64UllZqbS0tLjSLvKwGBCPx7Fq1SqMGDFCey0YDGLEiBFYtmyZhy1zh3379gEAunbtqnv9T3/6E6qrq3H88cdj6tSpaG5u9qJ5WfPpp5+iZ8+eOPLII3HFFVdg8+bNAIBVq1ahtbVVdz2/8pWv4IgjjijK6xmPx/HMM8/g6quv1i34WezXj2fDhg2or6/XXbOqqirU1dVp12zZsmXo3LkzTj75ZG2bESNGIBgMYsWKFQVvsxvs27cPgUAAnTt31r1+33334bDDDsOJJ56IBx54wFVXe75ZvHgxunfvjgEDBuD666/Hrl27tPdK7Ro2NDRg/vz5uOaaazLeK5ZrKI4PdvrPZcuWYdCgQaipqdG2GTlyJBobG/Hhhx+60q6SWPwwH+zcuROJREJ38gGgpqYGH3/8sUetcodkMokf/ehHOO2003D88cdrr19++eXo06cPevbsiffffx+33XYb1q1bhxdffNHD1tqnrq4OTz75JAYMGIDt27fjZz/7Gb72ta/hgw8+QH19PaLRaMYgUFNTg/r6em8anAMvvfQS9u7di6uuukp7rdivnwi7LrJnkL1XX1+P7t27694Ph8Po2rVrUV7XQ4cO4bbbbsP48eN1C8vdeOONOOmkk9C1a1csXboUU6dOxfbt2zFr1iwPW2uPUaNG4Vvf+hb69euHzz77DHfccQdGjx6NZcuW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",
+ "text/plain": [
+ ""
]
},
"metadata": {},
diff --git a/notebooks/002_mjc_debug_one_shot.ipynb b/notebooks/002_mjc_debug_one_shot.ipynb
new file mode 100644
index 0000000..386afc8
--- /dev/null
+++ b/notebooks/002_mjc_debug_one_shot.ipynb
@@ -0,0 +1,213 @@
+{
+ "cells": [
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A notebook to quickly iterate and make sure the llama models are loading and working OK"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from tqdm.autonotebook import tqdm\n",
+ "import copy\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "\n",
+ "import torch\n",
+ "import torch.nn as nn\n",
+ "import torch.nn.functional as F\n",
+ "\n",
+ "from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, AutoModelForMaskedLM, AutoModelForCausalLM, LlamaTokenizer, LlamaForCausalLM\n",
+ "\n",
+ "from transformers import GenerationConfig"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## load"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# model_repo = \"decapoda-research/llama-7b-hf\"\n",
+ "model_repo = \"Neko-Institute-of-Science/LLaMA-7B-HF\"\n",
+ "model_repo = \"elinas/llama-13b-hf-transformers-4.29\"\n",
+ "\n",
+ "# lora_repo = \"tloen/alpaca-lora-7b\"\n",
+ "lora_repo = \"NousResearch/gpt4-x-vicuna-13b\"\n",
+ "\n",
+ "# model_repo = \"TheBloke/wizardLM-7B-HF\"\n",
+ "# lora_repo = None\n",
+ "tokenizer = AutoTokenizer.from_pretrained(model_repo)\n",
+ "model = AutoModelForCausalLM.from_pretrained(model_repo, device_map=\"auto\", \n",
+ " load_in_8bit=True,\n",
+ " torch_dtype=torch.float16)\n",
+ "# if lora_repo is not None:\n",
+ "# # https://github.com/tloen/alpaca-lora/blob/main/generate.py#L40\n",
+ "# from peft import PeftModel\n",
+ "# model = PeftModel.from_pretrained(\n",
+ "# model, \n",
+ "# lora_repo, \n",
+ "# torch_dtype=torch.float16,\n",
+ "# device_map='auto'#{'': 0}\n",
+ "# )\n",
+ "tokenizer, model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def format_imdb(text, label):\n",
+ " return f\"\"\"Review: \"I think this is a lovely family movie. There are plenty of hilarious scenes and heart-warming moments to be had throughout the movie. The actors are great and the effects well executed throughout. Danny Glover plays George Knox who manages the terrible baseball team 'The Angels' and is great throughout the film. Also fantastic are the young actors Joseph Gordon-Levitt and Milton Davis Jr. Christopher Lloyd is good as Al 'The Angel' and the effects are great in this top notch Disney movie. A touching and heart-warming movie which everyone should enjoy.\"\n",
+ "Question: Is this review positive? \n",
+ "Answer: 1\n",
+ "---\n",
+ "Review: \" Although Hypnotic isn't without glimmers of inspiration, the ultimate effect of this often clunky crime caper will be to leave you feeling rather sleepy.\"\n",
+ "Question: Is this review positive?\n",
+ "Answer: 0\n",
+ "---\n",
+ "Review: \"A galactic group hug that might squeeze a little too tight on the heartstrings, the final Guardians of the Galaxy is a loving last hurrah for the MCU's most ragtag family.\"\n",
+ "Question: Is this review negative?\n",
+ "Answer: 0\n",
+ "---\n",
+ "Review: \"{text}\"\n",
+ "Question: Is this review {'positive' if label else 'negative'}?\n",
+ "Answer: \n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# from https://github.com/deep-diver/LLM-As-Chatbot/blob/main/configs/response_configs/default.yaml\n",
+ "generation_config = GenerationConfig(\n",
+ " temperature=0.95,\n",
+ " top_p=0.9,\n",
+ " top_k=50,\n",
+ " num_beams=1,\n",
+ " use_cache=True,\n",
+ " repetition_penalty=1.2,\n",
+ " max_new_tokens=512,\n",
+ " do_sample=True,\n",
+ ")\n",
+ "\n",
+ "input_text = format_imdb(\"The room is the worst movie ever\", 0)\n",
+ "# print(input_text)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# see https://github.com/deep-diver/LLM-As-Chatbot/blob/216abb559d00a0555f41a1426ac9db6c1abc24f3/gens/batch_gen.py#L3\n",
+ "input_ids = tokenizer(input_text, \n",
+ " return_tensors=\"pt\",\n",
+ "# truncation=True, \n",
+ "# padding=True,\n",
+ "# max_length=600,\n",
+ " # add_special_tokens=False,\n",
+ " ).input_ids.to(model.device)\n",
+ "\n",
+ "with torch.no_grad():\n",
+ " generation_output = model.generate(\n",
+ " input_ids=input_ids, generation_config=generation_config,\n",
+ " return_dict_in_generate=True,\n",
+ " output_scores=True,\n",
+ " # max_new_tokens=max_new_tokens,\n",
+ " )\n",
+ "\n",
+ "s = generation_output.sequences[0]\n",
+ "torch.cuda.empty_cache() \n",
+ "# text_q = tokenizer.batch_decode(input_ids, \n",
+ "# skip_prompt=True, skip_special_tokens=True\n",
+ "# )\n",
+ "text_ans = tokenizer.decode(s,\n",
+ " #skip_prompt=True, skip_special_tokens=True\n",
+ " )\n",
+ "# print(text_q[0])\n",
+ "print('='*40+'answ'+'='*40)\n",
+ "print(text_ans)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "text_ans = tokenizer.decode(s,\n",
+ " # skip_prompt=True, \n",
+ " # skip_special_tokens=True\n",
+ " )\n",
+ "print(text_ans)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "dlk2",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.16"
+ },
+ "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index 226fc88..b12454a 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -13,3 +13,5 @@ sentencepiece
git+https://github.com/huggingface/peft.git@70af02a2bca5a63921790036b2c9430edf4037e2
# due to a bug we have to downgrade to this one for now https://twitter.com/Teknium1/status/1660003439752138752
bitsandbytes==0.37.2
+matplotlib
+black