{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/ueharam1/miniconda3/envs/testgrelu/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n", "Failed to detect the name of this notebook, you can set it manually with the WANDB_NOTEBOOK_NAME environment variable to enable code saving.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mmasatoshi136\u001b[0m (\u001b[33mmasa136\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline\n", "\n", "import torch\n", "import numpy as np\n", "import pandas as pd\n", "import sys \n", "sys.path.append(\"../../\")\n", "sys.path.append(\"../../src/\")\n", "sys.path.append(\"../../src/model\")\n", "\n", "from src.model import ddsm as ddsm\n", "from src.model import ddsm_model as modeld\n", "from src.model.lightning_model_diffusion import LightningDiffusion as lightning_dif\n", "\n", "import scipy as sp\n", "from matplotlib import pyplot as plt\n", "\n", "import wandb\n", "wandb.login(host=\"https://api.wandb.ai\") \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Load Pre-trained Model " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Tracking run with wandb version 0.17.4" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Run data is saved locally in /raid/home/ueharam1/prj/RLfinetuning_Diffusion_Bioseq/tutorials/UTR/wandb/run-20240718_000258-4baop2xy" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Syncing run twilight-microwave-7 to Weights & Biases (docs)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View project at https://wandb.ai/masa136/RLfinetuning_Diffusion_Bioseq-tutorials_UTR" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run at https://wandb.ai/masa136/RLfinetuning_Diffusion_Bioseq-tutorials_UTR/runs/4baop2xy" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact UTR-Model:v0, 1499.65MB. 3 files... \n", "\u001b[34m\u001b[1mwandb\u001b[0m: 3 of 3 files downloaded. \n", "Done. 0:0:2.1\n" ] }, { "data": { "text/html": [ " View run twilight-microwave-7 at: https://wandb.ai/masa136/RLfinetuning_Diffusion_Bioseq-tutorials_UTR/runs/4baop2xy
View project at: https://wandb.ai/masa136/RLfinetuning_Diffusion_Bioseq-tutorials_UTR
Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Find logs at: ./wandb/run-20240718_000258-4baop2xy/logs" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "The new W&B backend becomes opt-out in version 0.18.0; try it out with `wandb.require(\"core\")`! See https://wandb.me/wandb-core for more information." ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run = wandb.init()\n", "artifact = run.use_artifact('fderc_diffusion/Diffusion-DNA-RNA/UTR-Model:v0')\n", "dir = artifact.download()\n", "wandb.finish()\n", "\n", "\n", "class ModelParameters:\n", " diffusion_weights_file = 'artifacts/UTR-dataset:v0/steps400.cat4.speed_balance.time4.0.samples100000.pth'\n", " time_schedule = \"artifacts/UTR-dataset:v0/time_dependent.npz\"\n", " checkpoint_path = 'artifacts/UTR-Model:v0/diffusion_unconditional_epoch=075.ckpt'\n", "config = ModelParameters() \n", "DEVICE = \"cuda:2\" # Any number is fine" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ScoreNet(\n", " (embed): Sequential(\n", " (0): GaussianFourierProjection()\n", " (1): Linear(in_features=256, out_features=256, bias=True)\n", " )\n", " (linear): Conv1d(4, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (blocks): ModuleList(\n", " (0-1): 2 x Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (2): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(16,), dilation=(4,))\n", " (3): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(64,), dilation=(16,))\n", " (4): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(256,), dilation=(64,))\n", " (5-6): 2 x Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (7): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(16,), dilation=(4,))\n", " (8): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(64,), dilation=(16,))\n", " (9): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(256,), dilation=(64,))\n", " (10-11): 2 x Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (12): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(16,), dilation=(4,))\n", " (13): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(64,), dilation=(16,))\n", " (14): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(256,), dilation=(64,))\n", " (15-16): 2 x Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (17): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(16,), dilation=(4,))\n", " (18): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(64,), dilation=(16,))\n", " (19): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(256,), dilation=(64,))\n", " )\n", " (denses): ModuleList(\n", " (0-19): 20 x Dense(\n", " (dense): Linear(in_features=256, out_features=256, bias=True)\n", " )\n", " )\n", " (norms): ModuleList(\n", " (0-19): 20 x GroupNorm(1, 256, eps=1e-05, affine=True)\n", " )\n", " (relu): ReLU()\n", " (softplus): Softplus(beta=1.0, threshold=20.0)\n", " (final): Sequential(\n", " (0): Conv1d(256, 256, kernel_size=(1,), stride=(1,))\n", " (1): GELU(approximate='none')\n", " (2): Conv1d(256, 4, kernel_size=(1,), stride=(1,))\n", " )\n", ")" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Introduce Two Models\n", "score_model = lightning_dif.load_from_checkpoint(checkpoint_path= config.checkpoint_path, weight_file = config.diffusion_weights_file, time_schedule = config.time_schedule, all_class_number =1)\n", "score_model = score_model.model\n", "score_model.cuda(device = DEVICE) \n", "\n", "\n", "original_model = lightning_dif.load_from_checkpoint(checkpoint_path= config.checkpoint_path, weight_file = config.diffusion_weights_file, time_schedule = config.time_schedule, all_class_number =1)\n", "original_model = original_model.model\n", "original_model.cuda(device = DEVICE) " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact human_state_dict:latest, 939.29MB. 1 files... \n", "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n", "Done. 0:0:0.7\n" ] } ], "source": [ "# Load Reward model\n", "from grelu.lightning import LightningModel\n", "\n", "model = LightningModel.load_from_checkpoint(\"artifacts/UTR-Model:v0/reward_model.ckpt\")\n", "model.eval()\n", "model.to(DEVICE)\n", "\n", "def new_reward_model(x):\n", " x = torch.nn.functional.softmax(x /0.1, -1)\n", " seq = torch.transpose(x, 1, 2) \n", " return model(seq)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Start Fine-Tuning Diffusion Models " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Tracking run with wandb version 0.17.4" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Run data is saved locally in /raid/home/ueharam1/prj/RLfinetuning_Diffusion_Bioseq/tutorials/UTR/wandb/run-20240718_000328-xsyv2sly" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Syncing run serene-waterfall-8 to Weights & Biases (docs)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View project at https://wandb.ai/masa136/RLfinetuning_Diffusion_Bioseq-tutorials_UTR" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run at https://wandb.ai/masa136/RLfinetuning_Diffusion_Bioseq-tutorials_UTR/runs/xsyv2sly" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:01<00:00, 47.85it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 90.12it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 87.12it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.83it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 32.83it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.093607097864151\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 87.64it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 88.31it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.83it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 90.19it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.01it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.0539022795855999\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 93.45it/s] \n", "100%|██████████| 50/50 [00:00<00:00, 81.28it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 89.60it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 84.59it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.30it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.05979406461119652\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.26it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 89.80it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.61it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.85it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.17it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.016387619078159332\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 78.87it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 96.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 84.73it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 96.53it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 33.21it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.08198007196187973\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 92.56it/s] \n", "100%|██████████| 50/50 [00:00<00:00, 93.94it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.93it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.24it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.74it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.07776749134063721\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 93.67it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 85.33it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.92it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 81.59it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.68it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.08390823006629944\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 85.61it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 79.16it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 90.96it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.47it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 33.38it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.041931718587875366\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 88.76it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 90.90it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 89.06it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 90.32it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.55it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.23232989013195038\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.18it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 83.08it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.54it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 83.95it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.81it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.14865915477275848\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 90.35it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.42it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 88.27it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.06it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 33.35it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.05320519208908081\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 86.17it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.23it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.03it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.83it/s] \n", "100%|██████████| 50/50 [00:01<00:00, 35.49it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.010541107505559921\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.05it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 86.04it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 96.45it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 84.53it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.41it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-0.07215788960456848\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 95.05it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 97.05it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.25it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 90.67it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 37.35it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.12385587394237518\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 85.76it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.38it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 67.42it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.74it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 33.97it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.03170732036232948\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 90.16it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.01it/s] \n", "100%|██████████| 50/50 [00:00<00:00, 83.24it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.92it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 33.95it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.13975749909877777\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 96.07it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.52it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.06it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.56it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.24it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.14654295146465302\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.10it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 84.98it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.20it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 84.22it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.51it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.17936594784259796\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 79.66it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 89.24it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 82.69it/s] \n", "100%|██████████| 50/50 [00:00<00:00, 91.42it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 31.67it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.12722653150558472\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 92.79it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.27it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 90.63it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.90it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.40it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.1447390913963318\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.68it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 83.32it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.61it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 82.60it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.55it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.26272180676460266\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 89.05it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 73.60it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 89.25it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.77it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 32.95it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.4696967899799347\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 90.73it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.37it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 86.30it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.05it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.28it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.39761072397232056\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.18it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 80.60it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 96.03it/s] \n", "100%|██████████| 50/50 [00:00<00:00, 82.49it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.37it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.027702808380127\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 96.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.15it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.72it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 73.77it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.49it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.028461217880249\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 83.26it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.81it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 77.71it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.14it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.26it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0377557277679443\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.28it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 81.95it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.06it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 80.70it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.19it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0351324081420898\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.76it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.87it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.12it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.60it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 34.71it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0369904041290283\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 81.07it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.40it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 81.56it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.65it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 33.96it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0478723049163818\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 91.62it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 82.93it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.57it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 83.22it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.60it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0170085430145264\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 95.02it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.85it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.90it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.12it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.20it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.9164496660232544\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 85.97it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.93it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 82.83it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 84.03it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 33.18it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.9993910789489746\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 93.84it/s] \n", "100%|██████████| 50/50 [00:00<00:00, 86.30it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 90.43it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 89.65it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 35.88it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0408823490142822\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 91.89it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 86.27it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.45it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 89.24it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.18it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0336281061172485\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 84.74it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.82it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 81.56it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.52it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 31.19it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0335655212402344\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 94.04it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 91.23it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 93.90it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 94.67it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 36.40it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.039017915725708\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 90.83it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 81.07it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.69it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 82.68it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.17it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0491890907287598\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 127.08it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 131.81it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 136.22it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.13it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.66it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.049037218093872\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.35it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 95.29it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 92.97it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 97.36it/s]\n", "100%|██████████| 50/50 [00:01<00:00, 37.09it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.8261951208114624\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 73.84it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 106.98it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.15it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.44it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.50it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7261002063751221\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.74it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 129.85it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.05it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.68it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.67it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7485535144805908\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.17it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.10it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 139.34it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 129.91it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.88it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677001953125\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 131.82it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.94it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.04it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.71it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.79it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7678109407424927\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.56it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.90it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.29it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.69it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.67it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677959203720093\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.42it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.96it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.63it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.85it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.55it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677809596061707\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.02it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.97it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.44it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.48it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.35it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677979469299316\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.60it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.64it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.81it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.61it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.23it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7678025960922241\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.41it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.49it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.29it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.63it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.72it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677918672561646\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.71it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.67it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.18it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.91it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.65it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677866816520691\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.28it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.64it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.02it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.23it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.76it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677921056747437\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.03it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.39it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 115.76it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.01it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.71it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677744030952454\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.31it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.26it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.13it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.22it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.46it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677748203277588\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.20it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.26it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.25it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.96it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.57it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.767799973487854\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.76it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.17it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.08it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.81it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.55it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677716016769409\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.60it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.59it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.90it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.48it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.78it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.767778754234314\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.59it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.49it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.91it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 132.41it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.55it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7678053379058838\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.50it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.98it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.39it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 132.88it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.86it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7677733898162842\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.62it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.81it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.26it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.91it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.48it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7676479816436768\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.98it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.37it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.34it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.16it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.63it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7654789686203003\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.88it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.56it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.36it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.86it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.66it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7613867521286011\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.82it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.30it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 138.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.40it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.98it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7745516300201416\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.80it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.49it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.61it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.67it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.71it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.8421664834022522\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 113.35it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.68it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.34it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.77it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7841044664382935\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 132.99it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 136.30it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.46it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.63it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.38it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.6142284870147705\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.82it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.80it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.52it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.51it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.4892839193344116\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.83it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.16it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.55it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.20it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.60it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.4577106833457947\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.54it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.05it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.71it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.64it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.8168200254440308\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 131.66it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 127.41it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.54it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.54it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 55.04it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.9002389311790466\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 131.34it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.36it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.27it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.80it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.86it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.8831311464309692\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.19it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.59it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.75it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.66it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.51it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7803572416305542\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.53it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.37it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.39it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.01it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.63it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.725957989692688\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 131.93it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.18it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.66it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.73it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.79it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.8710960149765015\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.32it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.36it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.93it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.67it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7929440140724182\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.22it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.79it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.91it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.33it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 67.29it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.7499601244926453\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.88it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.08it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.21it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.80it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.80it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.8778568506240845\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.16it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.93it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.49it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.61it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.40it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.8749969601631165\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 136.17it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.80it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.41it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.50it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.79it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.9011806845664978\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 132.86it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.20it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.56it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.33it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.78it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0977369546890259\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.04it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.16it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.77it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.01it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.70it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.9756740927696228\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 131.19it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.57it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.01it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 119.18it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.75it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.8935947418212891\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.79it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.96it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.23it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.32it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.84it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0234729051589966\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.20it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.87it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.36it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.12it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.90it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0417101383209229\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.78it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.57it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.42it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.63it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.71it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0669455528259277\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.50it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.51it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.09it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.10it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.65it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0559083223342896\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.22it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.23it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.98it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.02it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.67it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.052657127380371\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.09it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 97.00it/s] \n", "100%|██████████| 50/50 [00:00<00:00, 135.32it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.28it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.69it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0760927200317383\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.87it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.33it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.06it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.89it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.71it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0760669708251953\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.52it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.08it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.17it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.80it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.45it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0761319398880005\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.17it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 132.92it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.06it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.17it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.76it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0763676166534424\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 135.46it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.76it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.90it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.64it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0764174461364746\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.74it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.75it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.23it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 133.85it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 57.33it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0764861106872559\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.53it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 134.95it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.72it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 135.20it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.65it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.07643723487854\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 134.34it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 123.92it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 126.21it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 127.74it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.38it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0763583183288574\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 127.23it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 129.41it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 129.39it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 129.57it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.14it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0763914585113525\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 130.50it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.58it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 126.89it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 132.04it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 65.88it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0764312744140625\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 131.71it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.67it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 128.76it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 131.00it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.28it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0764646530151367\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 132.29it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 125.95it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 111.37it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.41it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.45it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0765151977539062\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 131.34it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 125.71it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.83it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.22it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 67.93it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0765444040298462\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 131.16it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 130.70it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 125.50it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 124.81it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 65.99it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.076564908027649\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [00:00<00:00, 133.05it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 132.86it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 132.45it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 131.26it/s]\n", "100%|██████████| 50/50 [00:00<00:00, 66.51it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1.0765550136566162\n" ] }, { "data": { "text/html": [ "\n", "

Run history:


reward▁▁▂▁▁▁▂▃▃▄██▇██▇▆▆▆▆▆▆▆▆▆▅▆▇▇▆▇▇████████

Run summary:


reward1.07656

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run serene-waterfall-8 at: https://wandb.ai/masa136/RLfinetuning_Diffusion_Bioseq-tutorials_UTR/runs/xsyv2sly
View project at: https://wandb.ai/masa136/RLfinetuning_Diffusion_Bioseq-tutorials_UTR
Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Find logs at: ./wandb/run-20240718_000328-xsyv2sly/logs" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "The new W&B backend becomes opt-out in version 0.18.0; try it out with `wandb.require(\"core\")`! See https://wandb.me/wandb-core for more information." ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from src.model import ddsm_PPO as fine_tune\n", "\n", "import os\n", "save_name = \"./log_finetune_PPO/\"\n", "isExist = os.path.exists(save_name)\n", "if not isExist:\n", " os.makedirs(save_name)\n", "\n", "\n", "loss_curves, eval_curves = fine_tune.fine_tuning(score_model, new_reward_model, [new_reward_model], original_model,\n", " learning_rate =3e-3, num_epoch = 400, length = 50, num_steps = 50, accmu = 4,\n", " batch_size = 128, save_name = save_name, entropy_coff = 0.0, device= DEVICE)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Evaluation" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ScoreNet(\n", " (embed): Sequential(\n", " (0): GaussianFourierProjection()\n", " (1): Linear(in_features=256, out_features=256, bias=True)\n", " )\n", " (linear): Conv1d(4, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (blocks): ModuleList(\n", " (0-1): 2 x Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (2): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(16,), dilation=(4,))\n", " (3): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(64,), dilation=(16,))\n", " (4): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(256,), dilation=(64,))\n", " (5-6): 2 x Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (7): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(16,), dilation=(4,))\n", " (8): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(64,), dilation=(16,))\n", " (9): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(256,), dilation=(64,))\n", " (10-11): 2 x Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (12): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(16,), dilation=(4,))\n", " (13): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(64,), dilation=(16,))\n", " (14): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(256,), dilation=(64,))\n", " (15-16): 2 x Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(4,))\n", " (17): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(16,), dilation=(4,))\n", " (18): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(64,), dilation=(16,))\n", " (19): Conv1d(256, 256, kernel_size=(9,), stride=(1,), padding=(256,), dilation=(64,))\n", " )\n", " (denses): ModuleList(\n", " (0-19): 20 x Dense(\n", " (dense): Linear(in_features=256, out_features=256, bias=True)\n", " )\n", " )\n", " (norms): ModuleList(\n", " (0-19): 20 x GroupNorm(1, 256, eps=1e-05, affine=True)\n", " )\n", " (relu): ReLU()\n", " (softplus): Softplus(beta=1.0, threshold=20.0)\n", " (final): Sequential(\n", " (0): Conv1d(256, 256, kernel_size=(1,), stride=(1,))\n", " (1): GELU(approximate='none')\n", " (2): Conv1d(256, 4, kernel_size=(1,), stride=(1,))\n", " )\n", ")" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#### Load Fine-Tuned Model \n", "time_dependent_weights = torch.tensor(np.load(config.time_schedule)['x'])\n", "score_finetuned_model = modeld.ScoreNet(time_dependent_weights=torch.sqrt(time_dependent_weights)) \n", "score_finetuned_model.load_state_dict(torch.load(\"log_finetune_PPO/_127.pth\")) # Change here\n", "score_finetuned_model.cuda(device = DEVICE) \n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/100 [00:00 0.5) * torch.ones_like(batch)\n", " batch = torch.permute(batch, (0, 2, 1)).to(DEVICE)\n", " generated_samples.append(model(batch).detach().cpu() ) \n", "\n", "generated_samples = np.concatenate(generated_samples)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/100 [00:00 0.5) * torch.ones_like(batch)\n", " batch = torch.permute(batch, (0, 2, 1)).to(DEVICE)\n", " generated_samples_before.append( model(batch).detach().cpu() ) \n", "\n", "generated_samples_before = np.concatenate(generated_samples_before)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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XCkpKVWYGAAA/7N5q9EXAr/44ovasGGDPvzwwxLL9uzZo9/85jfKyMjwvZ0nISFB0dHReumll0pdX3p6utLT00vMT01NVWJiorZt26Z27dr590Xgop05c0YZGRlyOByqU6eO1XEAoMpUq2vWX3zxha6++upSl6WkpKhRo0bF3nfbtm1bff7552WuLykpSVOmTPF7TvjX2bNntWLFCm3dulW1atXSmTNnFBMTo379+qlevXpWxwOASldtyvq1117Tjh07NG/evFKXu93uEncHR0REKCcnp8x1jhgxQj169Cgx/9yRNcywdOlSHTlyRA8//LBcLpdyc3P16aefasaMGXrsscdUq1YtqyMCQKWyrKz79u2rZcuWlbn852fn58+fr2nTpmnt2rWKiooqdbzD4VB2dnaxednZ2XI6nWVuw+Vy8T5dw508eVLffPONnnjiCdWuXVuSFBISou7duystLU1bt25Vly5drA0JAJXMshvMli5dKq/XW+bjnHfffVdjx47Vp59+qhYtWpS5vvj4eO3fv19ZWVm+edu3b1d8fHxlvgxUsgMHDsjlcvmK+hybzabWrVtr37591gQDgCpk9N3gCxYs0COPPKJVq1ZdsHSbNm2qDh066KmnnlJubq7Wr1+vFStWaOjQoVWUFpUhODhYbrdbHo+nxLKcnBwFBwdbkAoAqpbRZf3kk08qKytLnTt3lsPhkMPhULdu3XzLu3XrpmnTpvmmFy5cqF27dikqKkpDhgxRUlISR9bVXFxcnIqKirR9+/Zi80+dOqWtW7fqmmuusSYYAFQho28w27t373mXr1q1qth0w4YN9emnn1ZmJFSxwMBA9e3bV8nJydq7d6+aNWumzMxMbdy4US1btlTz5s2tjggAlc7osgYkqVWrVnrooYe0ceNGrVmzRg6HQ3fddZfatGkjm81mdTwAqHSUNaqF6Oho9evXz+oYAGAJo69ZAwAAyhoAAONR1gAAGI6yBgDAcNxghmqhsLBQ3377rQ4fPqzQ0FC1a9eu2Je2AMCljLKG8TIyMjRz5kwFBweradOm2rdvnz755BP17t1bv/3tb62OBwCVjrKG0bxer+bPn6+rr75a3bt3972veu/evZo5c6YaNWrEl7EAuORxzRpGO3DggLKystStW7diH4DSuHFjtW3bVlu2bLEwHQBUDcoaRjt58qTq1aunoKCgEsuio6N18uRJC1IBQNWirGG0OnXq6MiRI8rLyyux7MCBA6pbt64FqQCgalHWMFpMTIxcLpfef/99nT171jc/JSVFKSkp6tSpk4XpAKBqcIMZjJeYmKjZs2fr2WefVZMmTXT8+HEdPXpUAwcO5MgawGWBsobxIiIiNHr0aO3evVuHDx9W06ZNdfXVVyskJMTqaABQJShrVAt2u10tWrRQixYtrI4CAFWOa9YAABiOsgYAwHCUNQAAhqOsAQAwHGUNAIDhKGsAAAxHWQMAYDjKGgAAw1HWAAAYjrIGAMBwlDUAAIajrAEAMBxlDQCA4fjWrVLk5uZKklJTUy1OAgC41LVo0UK1atU67xjKuhT79u2TJCUmJlobBABwydu2bZvatWt33jE2r9frraI81UZmZqZWr16tK6+8UiEhIVbHwc+kpqYqMTFRycnJatmypdVxAOOxz5iPI+uLVKdOHSUkJFgdA+fRsmXLC/5LFMB/sM9Ub9xgBgCA4ShrAAAMR1kDAGA4yhoAAMNR1qhWXC6XJk2aJJfLZXUUoFpgn7k08NYtAAAMx5E1AACGo6wBADAcZQ0AgOEoa5Tq2LFj6tq1q8LCwjRs2DDLcjzwwAOaNGmSZduviGnTpunuu++2OgaqiJX7yIYNG9SkSZMq3ebFOnDggBwOh/Lz862OUr15cUm64YYbvMHBwd7Q0FCvw+Hwtm/f3rtu3bpyP3/q1Kneu+66y+vxeCox5X8MHTrUGxQU5A0NDfU9Xn311UrZ1u233+7bRlBQkDcwMNA3ffvtt1fKNlF99ezZ0xsUFOTNyMgoNv+X+8gNN9zgfeutt/y67bVr13ptNlux/aJDhw5+3cY5ycnJvm3UqlXLK6nYdvfv318p20X5cGR9CZs+fbrcbreys7M1YsQI9e7dW2fPni3Xc/fu3atWrVrJZrNVeLvl3cYvjRkzRm632/f4y1/+clHruZBVq1b5tjFmzBglJCT4pletWlUp20T1lJGRoY8++khOp1PvvvtusWW/Zh8pTVn7Tb169YrtF1u3bvXL9n7p5/vBtm3bJKnYdmNjYytluygfyvoyYLfblZCQoJMnT+rw4cO++cnJyYqPj1dERIQ6d+6snTt3SpIGDx6sd955R6+88oocDoeWLVumgoICjR07VjExMapfv77uvvtuZWdn+9Zls9n05ptvqkWLFoqIiJAkffnll7r++usVGRmpli1bavny5RXOfvfdd2vcuHGSpHXr1qlBgwZ67bXX5HK5VK9ePb300ku+sV6vV6+88oqaNWum2rVr64477tDBgwfLva19+/bJZrMpLy/PN2/AgAGaPHlyubY/efJkDRgwoNi65s+fr8aNGysyMlKjR4/2jfV4PBo3bpzq1q2r2NhYvf3227LZbL6vZ4UZkpOTFRcXp7Fjx2rOnDm++b/cR5o2baoNGzbokUcekcPh0ODBgyVJR44cUf/+/VW/fn01bNhQkydPlsfjkSTNnTtXv/3tb/XEE0+oXr16evDBB8ud69zv4jlXXnml/uu//kvt27dXWFiY7rjjDp08edK3/Nfui126dNGMGTN80//85z915ZVXlmv7v9yvunTpookTJ6pr165yOp267rrrtH//ft+6Pv/8c/3mN7+R0+nUkCFD1KdPH98+eDmjrC8DRUVFeueddxQbG6vo6GhJ0ocffqinnnpKCxYs0PHjx5WYmKju3buroKBA8+fPV0JCgu9I949//KOmTZumzz77TFu3btXu3bt14sQJ/fnPfy62ncWLF2v9+vU6duyY0tPTdfvtt2vMmDHKzMzU3LlzNWzYMKWmpv6q15KZmam0tDTt379fK1eu1IQJE/Tvf/9bkvT666/r3Xff1SeffKKjR4+qXbt2vvL0l/NtvzRr1qxRSkqKtm3bpjlz5ujzzz+XJM2ePVvLli3Tl19+qX/9618c0Rtqzpw5SkxMVEJCgnbs2KGvv/5akkrsI3v27FHnzp19Z7Pmz58vj8ejHj16KC4uTvv379eWLVv0wQcfaPbs2b71f/XVV6pTp44OHTqk6dOn/6qsycnJ+sc//qHDhw8rKytLf/vb3ySp0vbF8m6/NPPmzdNrr72m48ePy+VyaeLEiZKkEydOqFevXnrqqad08uRJ3X777frwww/9mrO6oqwvYWPGjFFERIRCQ0M1evRoPffccwoM/OlbUd966y098cQTat26tQICAjRixAjZbDZt3ry51HUlJydr0qRJio6OVnh4uF588UUtWrRIBQUFvjHjxo1TvXr1FBISovnz5+vmm29Wr169FBAQoE6dOql3795asmRJmXmnT5+uiIgI3+PEiRMlxtjtdk2dOlU1atRQx44d1aJFC23fvt33mqZOnaorr7xSQUFBmjx5sr788ksdOHDgV/xX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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "plt.figure(figsize=(80, 10))\n", "\n", "compare = np.concatenate( (generated_samples_before[:,0], generated_samples[:,0] ), axis= 0)\n", "\n", "type1 = ['Before Fine-Tuning' for i in range(len(generated_samples_before[:,0] ))]\n", "type3 = ['After Fine-Tuning ' for i in range(len(generated_samples[:,0]))]\n", "\n", "type = type1 + type3\n", "data_dict = {'type': type, 'HepG2': compare[:,0] }\n", "plot_data = pd.DataFrame(data_dict)\n", "fig = sns.catplot(data=plot_data, x = 'type', y = 'HepG2', hue=\"type\", kind=\"boxen\" )\n", "sns.set_context(\"paper\", rc={\"figure.figsize\": (80, 10)})\n", "#fig.savefig(\"../media/RNA_output_high.png\")\n", "\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "GRELU1", "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.12.4" } }, "nbformat": 4, "nbformat_minor": 2 }