198 lines
6.6 KiB
Plaintext
198 lines
6.6 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "adbd9598",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"c:\\Users\\Chris\\miniconda3\\envs\\deep_learning\\Lib\\site-packages\\torch\\utils\\_device.py:103: UserWarning: Aten Op fallback from XPU to CPU happends. This may have performance implications. If need debug the fallback ops please set environment variable `PYTORCH_DEBUG_XPU_FALLBACK=1` (Triggered internally at C:\\actions-runner\\_work\\pytorch\\pytorch\\pytorch\\build\\xpu\\ATen\\RegisterXPU_0.cpp:54528.)\n",
|
|
" return func(*args, **kwargs)\n",
|
|
"252.87s - name 'tensor' is not defined\n",
|
|
"Traceback (most recent call last):\n",
|
|
" File \"c:\\Users\\Chris\\miniconda3\\envs\\deep_learning\\Lib\\site-packages\\debugpy\\_vendored\\pydevd\\_pydevd_bundle\\pydevd_vars.py\", line 636, in change_attr_expression\n",
|
|
" value = eval(expression, frame.f_globals, frame.f_locals)\n",
|
|
" File \"<string>\", line 1, in <module>\n",
|
|
"NameError: name 'tensor' is not defined\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "",
|
|
"evalue": "",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[1;31mCannot execute code, session has been disposed. Please try restarting the Kernel."
|
|
]
|
|
},
|
|
{
|
|
"ename": "",
|
|
"evalue": "",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[1;31mCannot execute code, session has been disposed. Please try restarting the Kernel. \n",
|
|
"\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import random\n",
|
|
"import torch\n",
|
|
"import pandas as pd\n",
|
|
"from pathlib import Path\n",
|
|
"import Project_Model.Libs.Embedder as Embedder\n",
|
|
"import Project_Model.Libs.BPE as BPE\n",
|
|
"import Project_Model.Libs.Transformer as Transformer\n",
|
|
"import Project_Model.Libs.TorchShims as torch_shims\n",
|
|
"\n",
|
|
"# set a fixed seed\n",
|
|
"torch.manual_seed(0)\n",
|
|
"random.seed(0)\n",
|
|
"DEVICE = torch_shims.get_default_device()\n",
|
|
"torch.set_default_device(DEVICE)\n",
|
|
"\n",
|
|
"# set a default device\n",
|
|
"\n",
|
|
"# BPE Init\n",
|
|
"VOCABULARY_PATH = Path(\"Assets/Model/toy_10/toy_dictionary.json\")\n",
|
|
"SPECIAL_VOC = BPE.default_special_tokens()\n",
|
|
"\n",
|
|
"VOCABULARY = BPE.load_nanos_vocabulary(VOCABULARY_PATH)\n",
|
|
"TOKENANO = BPE.TokeNanoCore(VOCABULARY, SPECIAL_VOC)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Constants\n",
|
|
"TOKEN_SPACE_SIZE = TOKENANO.vocabulary_size + 1\n",
|
|
"EMBEDDED_SIZE = 256\n",
|
|
"FEED_FORWARD_MULTIPLIER = 4\n",
|
|
"ATTENTION_HEADS = 4\n",
|
|
"SENTENCE_LENGTH = 256\n",
|
|
"NUMBER_OF_BLOCKS = 2\n",
|
|
"MAX_EPOCHS = int(1e3)\n",
|
|
"\n",
|
|
"\n",
|
|
"PAD_TOKEN = TOKENANO.encode(\"<PAD>\")[0]\n",
|
|
"END_TOKEN = TOKENANO.encode(\"<END>\")[0]\n",
|
|
"\n",
|
|
"\n",
|
|
"# Load CSV\n",
|
|
"TOY_DATASET_PATH = Path(\"Assets/Dataset/1-hop/toy/rdf_text.csv\")\n",
|
|
"\n",
|
|
"TOY_DATASET = pd.read_csv(TOY_DATASET_PATH)\n",
|
|
"\n",
|
|
"TOY_BATCH_INPUT_LIST: list[list[int]] = []\n",
|
|
"TOY_BATCH_PADDING_LIST: list[list[bool]] = []\n",
|
|
"TOY_BATCH_TARGET_LIST: list[list[int]] = []\n",
|
|
"TOY_BATCH_DECODER_DEFAULT: list[list[int]]= []\n",
|
|
"\n",
|
|
"\n",
|
|
"for index, row in TOY_DATASET.iterrows():\n",
|
|
"\n",
|
|
" RDFs: str = row[\"RDFs\"]\n",
|
|
" Abstract: str = row[\"Abstract\"]\n",
|
|
"\n",
|
|
" input_tokens = TOKENANO.encode(RDFs)\n",
|
|
" output_tokens = TOKENANO.encode(Abstract)[1:]\n",
|
|
" decoder_default_tokens = TOKENANO.encode(\"<SOS>\")\n",
|
|
"\n",
|
|
" input_tokens, padding = Transformer.normalize_sequence(\n",
|
|
" input_tokens, SENTENCE_LENGTH, PAD_TOKEN, END_TOKEN\n",
|
|
" )\n",
|
|
" output_tokens, _ = Transformer.normalize_sequence(\n",
|
|
" output_tokens, SENTENCE_LENGTH, PAD_TOKEN, END_TOKEN\n",
|
|
" )\n",
|
|
" decoder_default_tokens, _ = Transformer.normalize_sequence(\n",
|
|
" decoder_default_tokens, SENTENCE_LENGTH, PAD_TOKEN, END_TOKEN\n",
|
|
" )\n",
|
|
"\n",
|
|
" TOY_BATCH_INPUT_LIST.append(input_tokens)\n",
|
|
" TOY_BATCH_PADDING_LIST.append(padding)\n",
|
|
" TOY_BATCH_TARGET_LIST.append(output_tokens)\n",
|
|
" TOY_BATCH_DECODER_DEFAULT.append(decoder_default_tokens)\n",
|
|
"\n",
|
|
"# Training loop\n",
|
|
"LOSS_HISTORY = []\n",
|
|
"NANOSOCRATES = Transformer.TrainingModel(\n",
|
|
" TOKEN_SPACE_SIZE,\n",
|
|
" EMBEDDED_SIZE,\n",
|
|
" FEED_FORWARD_MULTIPLIER,\n",
|
|
" ATTENTION_HEADS,\n",
|
|
" NUMBER_OF_BLOCKS\n",
|
|
")\n",
|
|
"cross_entropy = torch.nn.CrossEntropyLoss(ignore_index=PAD_TOKEN)\n",
|
|
"optimizer = torch.optim.AdamW(NANOSOCRATES.parameters())\n",
|
|
"scheduler = torch.optim.lr_scheduler.StepLR(optimizer, 4)\n",
|
|
"last_loss = 0\n",
|
|
"current_epoch = 0\n",
|
|
"\n",
|
|
"while current_epoch < MAX_EPOCHS:\n",
|
|
"\n",
|
|
" optimizer.zero_grad()\n",
|
|
"\n",
|
|
" encoder_list = torch.tensor([TOY_BATCH_INPUT_LIST[0]])\n",
|
|
" decoder_list = torch.tensor([TOY_BATCH_DECODER_DEFAULT[0]])\n",
|
|
" padding_list = torch.tensor([TOY_BATCH_PADDING_LIST[0]], dtype=torch.bool)\n",
|
|
"\n",
|
|
" # Transform target into logits\n",
|
|
" target_logits = torch.tensor([TOY_BATCH_TARGET_LIST[0]])\n",
|
|
"\n",
|
|
" last_loss = 0\n",
|
|
"\n",
|
|
" for i in range(0, SENTENCE_LENGTH):\n",
|
|
"\n",
|
|
" optimizer.zero_grad()\n",
|
|
"\n",
|
|
" logits: torch.Tensor = NANOSOCRATES((encoder_list, padding_list, decoder_list))\n",
|
|
"\n",
|
|
" most_probable_tokens = torch.argmax(logits, 2)\n",
|
|
"\n",
|
|
" logits = logits[:,i,:]\n",
|
|
"\n",
|
|
" loss = cross_entropy(logits, target_logits[:,i])\n",
|
|
" last_loss = loss\n",
|
|
" optimizer.step()\n",
|
|
" scheduler.step()\n",
|
|
"\n",
|
|
" if i < SENTENCE_LENGTH - 1:\n",
|
|
" decoder_list[:,i+1] = most_probable_tokens[:,i]\n",
|
|
"\n",
|
|
"\n",
|
|
" current_epoch += 1\n",
|
|
"\n",
|
|
" if current_epoch % 1 == 0:\n",
|
|
" print(f\"EPOCH {current_epoch}\\n\\tLoss: {last_loss}\")\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "deep_learning",
|
|
"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.13.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|