{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "# %matplotlib notebook\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "\n", "import os,sys\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import helper\n", "import simulation\n", "\n", "# print(sys.version_info)\n", "\n", "# # Generate some random images\n", "# input_images, target_masks = simulation.generate_random_data(192, 192, count=3)\n", "\n", "# # for x in [input_images, target_masks]:\n", "# # print(x.shape)\n", "# # print(x.min(), x.max())\n", "# # print(len(input_images))\n", "# # print(input_images[0].shape)\n", "# # print(target_masks[0].shape)\n", "\n", "\n", "# # Change channel-order and make 3 channels for matplot\n", "# input_images_rgb = [x.astype(np.uint8) for x in input_images]\n", "\n", "# # Map each channel (i.e. class) to each color\n", "# target_masks_rgb = [helper.masks_to_colorimg(x) for x in target_masks]\n", "# # print(target_masks[0][0])\n", "# # print(target_masks_rgb[0][0][0])\n", "# # Left: Input image, Right: Target mask (Ground-truth)\n", "# # print(input_images_rgb[0].shape)\n", "# # print(target_masks_rgb[0].shape)\n", "# helper.plot_side_by_side([input_images_rgb, target_masks_rgb])\n", "# # helper.plot_side_by_side([input_images, target_masks])\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# the first working version which one slice was copied in 3 channels 3 times and was working without bug\n", "\n", "# from torch.utils.data import Dataset, DataLoader\n", "# import torch\n", "# print(torch.cuda.is_available())\n", "\n", "# from torchvision import transforms\n", "# from torchvision import datasets\n", "# import natsort\n", "# from PIL import *\n", "# import albumentations as A\n", "# # cwd = os.getcwd()\n", "# # print(cwd)\n", "\n", "# def showIm(img) -> None:\n", "# \"\"\"\n", "# View multiple images stored in files, stacking vertically\n", "\n", "# Arguments:\n", "# filename: str - path to filename containing image\n", "# \"\"\"\n", " \n", "# # \n", "# plt.figure()\n", "# plt.imshow(img)\n", "\n", "# def showAll(picList):\n", "# for im in picList:\n", "# plt.figure()\n", "# plt.imshow(im)\n", " \n", "# imgList = []\n", "\n", "# class SimDataset(Dataset):\n", "# def __init__(self, main_dir, transform=None):\n", "# # self.input_images, self.target_masks = simulation.generate_random_data(192, 192, count=count) \n", "# self.main_dir = main_dir\n", "# self.transform = transform\n", "# self.input_images = os.listdir(main_dir + '/image/')\n", "# self.target_masks = os.listdir(main_dir + '/mask')\n", "# self.input_images = natsort.natsorted(self.input_images)\n", "# self.target_masks = natsort.natsorted(self.target_masks)\n", "\n", "# def __len__(self):\n", "# return len(self.input_images)\n", " \n", "\n", "# def __getitem__(self, idx): \n", "# image = self.input_images[idx]\n", "# mask = self.target_masks[idx]\n", " \n", "# img_loc = os.path.join(self.main_dir, 'image', image)\n", "# mask_loc = os.path.join(self.main_dir, 'mask', mask)\n", "\n", "# # image = np.load(img_loc).type(torch.FloatTensor)\n", "# # mask = np.load(mask_loc).type(torch.FloatTensor)\n", "# image = torch.from_numpy(np.load(img_loc)).type(torch.FloatTensor)\n", "# mask = torch.from_numpy(np.load(mask_loc)).type(torch.FloatTensor)\n", " \n", "# # mask = 1 - mask\n", "# imgList.append(image)\n", "# imgList.append(mask)\n", " \n", "# image = np.repeat(image[np.newaxis, :,:], 3, axis=0)\n", "# mask = np.repeat(mask[np.newaxis, :, :], 1, axis=0)\n", "# # image = np.transpose(image, (1, 2, 0))\n", "# # mask = np.transpose(mask, (1, 2, 0))\n", " \n", " \n", "# if self.transform:\n", "# transformed = self.transform(image=image, mask=mask)\n", " \n", "# return [image, mask]\n", "\n", "# # n = 1\n", "# # train_dataset_path = './data/train1'\n", "# # val_dataset_path = './data/val1'\n", "# # n = 32\n", "# train_dataset_path = './data/train'\n", "# val_dataset_path = './data/val'\n", "# # n = all\n", "# # train_dataset_path = './data/trainold'\n", "# # val_dataset_path = './data/valold'\n", "\n", "\n", "# train_set = SimDataset(\n", "# main_dir=train_dataset_path, \n", "# transform=None\n", "# )\n", "# val_set = SimDataset(\n", "# main_dir=val_dataset_path, \n", "# transform=None\n", "# )\n", "\n", "# image_datasets = {\n", "# 'train': train_set, 'val': val_set\n", "# }\n", "\n", "# batch_size = 4\n", "# num_workers = 25\n", "\n", "# dataloaders = {\n", "# 'train': DataLoader(train_set, batch_size=batch_size, shuffle=True, num_workers=num_workers),\n", "# 'val': DataLoader(val_set, batch_size=batch_size, shuffle=True, num_workers=num_workers)\n", "# }\n", "\n", "# dataset_sizes = {\n", "# x: len(image_datasets[x]) for x in image_datasets.keys()\n", "# }\n", "\n", "# inputs, masks = next(iter(dataloaders['train']))\n", "# num = 0\n", "# print(inputs.shape)\n", "# print(masks.shape)\n", "# img = inputs[0][0]\n", "# mask = masks[0][0]\n", "# img = inputs[num][0]\n", "\n", "# imgList.append(img)\n", "# imgList.append(mask)\n", "\n", "# print(img.shape)\n", "# showAll(imgList)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "torch.Size([8, 3, 512, 512])\n", "torch.Size([8, 1, 512, 512])\n", "torch.Size([512, 512])\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 3 different slices in each channel\n", "\n", "from torch.utils.data import Dataset, DataLoader\n", "import torch\n", "print(torch.cuda.is_available())\n", "\n", "from torchvision import transforms\n", "from torchvision import datasets\n", "import natsort\n", "from PIL import *\n", "import albumentations as A\n", "# cwd = os.getcwd()\n", "# print(cwd)\n", "\n", "def showIm(img) -> None:\n", " \"\"\"\n", " View multiple images stored in files, stacking vertically\n", "\n", " Arguments:\n", " filename: str - path to filename containing image\n", " \"\"\"\n", " \n", " # \n", " plt.figure()\n", " plt.imshow(img)\n", "\n", "def showAll(picList):\n", " for im in picList:\n", " plt.figure()\n", " plt.imshow(im)\n", " \n", "imgList = []\n", "\n", "class SimDataset(Dataset):\n", " def __init__(self, main_dir, transform=None):\n", "# self.input_images, self.target_masks = simulation.generate_random_data(192, 192, count=count) \n", " self.main_dir = main_dir\n", " self.transform = transform\n", " self.input_images = os.listdir(main_dir + '/image/')\n", " self.target_masks = os.listdir(main_dir + '/mask')\n", " self.input_images = natsort.natsorted(self.input_images)\n", " self.target_masks = natsort.natsorted(self.target_masks)\n", "\n", " def __len__(self):\n", " return len(self.input_images)\n", " \n", " def _get_prev_next(self, idx, image_list_set, mask_list_set):\n", " main_slice = self.input_images[idx]\n", " \n", " slice_num = int(main_slice[16:19])\n", " prev_num = slice_num - 1\n", " next_num = slice_num + 1\n", " \n", " prev_num = \"%03d\" % prev_num\n", " next_num = \"%03d\" % next_num\n", " \n", " \n", " prev_slice = prev_num.join([main_slice[0:15], main_slice[19:]])\n", " next_slice = next_num.join([main_slice[0:15], main_slice[19:]])\n", " \n", " if not (prev_slice in image_list_set):\n", " prev_slice = main_slice\n", " if not (next_slice in image_list_set):\n", " next_slice = main_slice\n", " \n", "# print(type(self.input_images))\n", "# print(str(type(main_slice)) + ' ' + main_slice + ' ' + str(slice_num) + ' ' + str(prev_num) + ' ' + str(next_num) + ' ' + prev_slice + ' ' + next_slice)\n", "# print(main_slice)\n", "# print()\n", " return prev_slice, next_slice\n", " \n", " def __getitem__(self, idx): \n", " image = self.input_images[idx]\n", " mask = self.target_masks[idx]\n", " \n", " \n", " image_list_set = set(self.input_images)\n", " mask_list_set = set(self.target_masks)\n", " \n", " prev_slice, next_slice = self._get_prev_next(idx, image_list_set, mask_list_set)\n", " \n", " prev_loc = os.path.join(self.main_dir, 'image', prev_slice)\n", " next_loc = os.path.join(self.main_dir, 'image', next_slice)\n", " img_loc = os.path.join(self.main_dir, 'image', image)\n", " mask_loc = os.path.join(self.main_dir, 'mask', mask)\n", "\n", "# image = np.load(img_loc).type(torch.FloatTensor)\n", "# mask = np.load(mask_loc).type(torch.FloatTensor)\n", " mid_slice = torch.from_numpy(np.load(img_loc)).type(torch.FloatTensor)\n", " prev_slice = torch.from_numpy(np.load(prev_loc)).type(torch.FloatTensor)\n", " next_slice = torch.from_numpy(np.load(next_loc)).type(torch.FloatTensor)\n", " mask = torch.from_numpy(np.load(mask_loc)).type(torch.FloatTensor)\n", " \n", " image_3d = torch.stack([prev_slice, mid_slice, next_slice], dim=0)\n", " \n", " # mask = 1 - mask\n", " \n", "# print(image_3d.shape)\n", "# self._get_prev_next(idx, image_list_set, mask_list_set)\n", " \n", " image = np.repeat(image_3d[np.newaxis, :,:], 1, axis=0)\n", " mask = np.repeat(mask[np.newaxis, :, :], 1, axis=0)\n", "# image = np.transpose(image, (1, 2, 0))\n", "# mask = np.transpose(mask, (1, 2, 0))\n", " \n", " \n", " if self.transform:\n", " transformed = self.transform(image=image, mask=mask)\n", " \n", " return [image_3d, mask]\n", "\n", "# n = 1\n", "# train_dataset_path = './data/train1'\n", "# val_dataset_path = './data/val1'\n", "# n = 32\n", "train_dataset_path = './data/train'\n", "val_dataset_path = './data/val'\n", "# n = all\n", "# train_dataset_path = './data/trainold'\n", "# val_dataset_path = './data/valold'\n", "\n", "\n", "train_set = SimDataset(\n", " main_dir=train_dataset_path, \n", " transform=None\n", ")\n", "val_set = SimDataset(\n", " main_dir=val_dataset_path, \n", " transform=None\n", ")\n", "\n", "image_datasets = {\n", " 'train': train_set, 'val': val_set\n", "}\n", "\n", "batch_size = 8\n", "num_workers = 25\n", "\n", "dataloaders = {\n", " 'train': DataLoader(train_set, batch_size=batch_size, shuffle=True, num_workers=num_workers),\n", " 'val': DataLoader(val_set, batch_size=batch_size, shuffle=True, num_workers=num_workers)\n", "}\n", "\n", "dataset_sizes = {\n", " x: len(image_datasets[x]) for x in image_datasets.keys()\n", "}\n", "\n", "inputs, masks = next(iter(dataloaders['train']))\n", "num = 0\n", "print(inputs.shape)\n", "print(masks.shape)\n", "img = inputs[0][0]\n", "mask = masks[0][0]\n", "img = inputs[num][0]\n", "\n", "imgList.append(img)\n", "imgList.append(mask)\n", "\n", "print(img.shape)\n", "showAll(imgList)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# import torchvision.utils\n", "\n", "# def reverse_transform(inp):\n", "# inp = inp.numpy().transpose((1, 2, 0))\n", "# inp = np.clip(inp, 0, 1)\n", "# inp = (inp * 255).astype(np.uint8)\n", " \n", "# return inp\n", "\n", "# print(target_masks_rgb[0].shape)\n", "# print(reverse_transform(target_masks_rgb[0]).shape)\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# inputs, masks = next(iter(dataloaders['train']))\n", "\n", "# print(inputs.shape, masks.shape)\n", "# for x in [inputs.numpy(), masks.numpy()]:\n", "# print(x.min(), x.max(), x.mean(), x.std())\n", "\n", "# plt.imshow(reverse_transform(inputs[3]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### import torchvision.utils\n", "\n", "def reverse_transform(inp):\n", " inp = inp.numpy().transpose((1, 2, 0))\n", " inp = np.clip(inp, 0, 1)\n", " inp = (inp * 255).astype(np.uint8)\n", " \n", " return inp\n", "\n", "# Get a batch of training data\n", "inputs, masks = next(iter(dataloaders['train']))\n", "\n", "print(inputs.shape, masks.shape)\n", "for x in [inputs.numpy(), masks.numpy()]:\n", " print(x.min(), x.max(), x.mean(), x.std())\n", "\n", "plt.imshow(reverse_transform(inputs[3]))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from torchsummary import summary\n", "import torch\n", "import torch.nn as nn\n", "import pytorch_unet\n", "\n", "# device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", "\n", "n_out_class = 1\n", "\n", "# model = pytorch_unet.UNet(n_out_class)\n", "# model = torch.hub.load('mateuszbuda/brain-segmentation-pytorch', 'unet',\n", "# in_channels=1, out_channels=1, init_features=32, pretrained=False)\n", "\n", "# model = model.to(device)\n", "\n", "# print(next(model.parameters()).is_cuda)\n", "\n", "# summary(model, input_size=(1, 512, 512))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "\n", "# import torch\n", "# import torch.nn as nn\n", "# import torch.nn.functional as F\n", "# import torchvision\n", "\n", "# class DoubleConv(nn.Module):\n", "# \"\"\"(convolution => [BN] => ReLU) * 2\"\"\"\n", "\n", "# def __init__(self, in_channels, out_channels, mid_channels=None):\n", "# super().__init__()\n", "# if not mid_channels:\n", "# mid_channels = out_channels\n", "# self.double_conv = nn.Sequential(\n", "# nn.Conv2d(in_channels, mid_channels, kernel_size=3, padding=1),\n", "# nn.BatchNorm2d(mid_channels),\n", "# nn.ReLU(inplace=True),\n", "# nn.Conv2d(mid_channels, out_channels, kernel_size=3, padding=1),\n", "# nn.BatchNorm2d(out_channels),\n", "# nn.ReLU(inplace=True)\n", "# )\n", "\n", "# def forward(self, x):\n", "# return self.double_conv(x)\n", "\n", "\n", "# class Down(nn.Module):\n", "# \"\"\"Downscaling with maxpool then double conv\"\"\"\n", "\n", "# def __init__(self, in_channels, out_channels):\n", "# super().__init__()\n", "# self.maxpool_conv = nn.Sequential(\n", "# nn.MaxPool2d(2),\n", "# DoubleConv(in_channels, out_channels)\n", "# )\n", "\n", "# def forward(self, x):\n", "# return self.maxpool_conv(x)\n", "\n", "\n", "# class Up(nn.Module):\n", "# \"\"\"Upscaling then double conv\"\"\"\n", "\n", "# def __init__(self, in_channels, out_channels, bilinear=True):\n", "# super().__init__()\n", "\n", "# # if bilinear, use the normal convolutions to reduce the number of channels\n", "# if bilinear:\n", "# self.up = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)\n", "# self.conv = DoubleConv(in_channels, out_channels, in_channels // 2)\n", "# else:\n", "# self.up = nn.ConvTranspose2d(in_channels , in_channels // 2, kernel_size=2, stride=2)\n", "# self.conv = DoubleConv(in_channels, out_channels)\n", "\n", "\n", "# def forward(self, x1, x2):\n", "# x1 = self.up(x1)\n", "# # input is CHW\n", "# diffY = x2.size()[2] - x1.size()[2]\n", "# diffX = x2.size()[3] - x1.size()[3]\n", "\n", "# x1 = F.pad(x1, [diffX // 2, diffX - diffX // 2,\n", "# diffY // 2, diffY - diffY // 2])\n", "# # if you have padding issues, see\n", "# # https://github.com/HaiyongJiang/U-Net-Pytorch-Unstructured-Buggy/commit/0e854509c2cea854e247a9c615f175f76fbb2e3a\n", "# # https://github.com/xiaopeng-liao/Pytorch-UNet/commit/8ebac70e633bac59fc22bb5195e513d5832fb3bd\n", "# x = torch.cat([x2, x1], dim=1)\n", "# return self.conv(x)\n", "\n", "# class OutConv(nn.Module):\n", "# def __init__(self, in_channels, out_channels):\n", "# super(OutConv, self).__init__()\n", "# self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=1)\n", "\n", "# def forward(self, x):\n", "# return self.conv(x)\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# \"\"\" Full assembly of the parts to form the complete network \"\"\"\n", "\n", "# import torch.nn.functional as F\n", "\n", "# # from .unet_parts import *\n", "\n", "\n", "# class NewUnet(nn.Module):\n", "# def __init__(self, n_channels, n_classes, bilinear=True):\n", "# super(NewUnet, self).__init__()\n", "# self.n_channels = n_channels\n", "# self.n_classes = n_classes\n", "# self.bilinear = bilinear\n", "\n", "# self.inc = DoubleConv(n_channels, 64)\n", "# self.down1 = Down(64, 128)\n", "# self.down2 = Down(128, 256)\n", "# self.down3 = Down(256, 512)\n", "# factor = 2 if bilinear else 1\n", "# self.down4 = Down(512, 1024 // factor)\n", "# self.up1 = Up(1024, 512 // factor, bilinear)\n", "# self.up2 = Up(512, 256 // factor, bilinear)\n", "# self.up3 = Up(256, 128 // factor, bilinear)\n", "# self.up4 = Up(128, 64, bilinear)\n", "# self.outc = OutConv(64, n_classes)\n", "\n", "# def forward(self, x):\n", "# x1 = self.inc(x)\n", "# x2 = self.down1(x1)\n", "# x3 = self.down2(x2)\n", "# x4 = self.down3(x3)\n", "# x5 = self.down4(x4)\n", "# x = self.up1(x5, x4)\n", "# x = self.up2(x, x3)\n", "# x = self.up3(x, x2)\n", "# x = self.up4(x, x1)\n", "# logits = self.outc(x)\n", "# return logits" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import torch\n", "from torch import nn\n", "import torch.nn.functional as F\n", "\n", "class double_conv(nn.Module):\n", " def __init__(self, in_ch, out_ch):\n", " super(double_conv, self).__init__()\n", " self.conv = nn.Sequential(\n", " nn.Conv2d(in_ch, out_ch, 3, padding=1),\n", " nn.BatchNorm2d(out_ch),\n", " nn.ReLU(inplace=True),\n", " nn.Conv2d(out_ch, out_ch, 3, padding=1),\n", " nn.BatchNorm2d(out_ch),\n", " nn.ReLU(inplace=True)\n", " )\n", "\n", " def forward(self, x):\n", " x = self.conv(x)\n", " return x\n", "\n", "\n", "class up(nn.Module):\n", " def __init__(self, in_ch, out_ch):\n", " super(up, self).__init__()\n", " self.up_scale = nn.ConvTranspose2d(in_ch, out_ch, 2, stride=2)\n", "\n", " def forward(self, x1, x2):\n", " x2 = self.up_scale(x2)\n", "\n", " diffY = x1.size()[2] - x2.size()[2]\n", " diffX = x1.size()[3] - x2.size()[3]\n", "\n", " x2 = F.pad(x2, [diffX // 2, diffX - diffX // 2,\n", " diffY // 2, diffY - diffY // 2])\n", " x = torch.cat([x2, x1], dim=1)\n", " return x\n", "\n", "\n", "class down_layer(nn.Module):\n", " def __init__(self, in_ch, out_ch):\n", " super(down_layer, self).__init__()\n", " self.pool = nn.MaxPool2d(2, stride=2, padding=0)\n", " self.conv = double_conv(in_ch, out_ch)\n", "\n", " def forward(self, x):\n", " x = self.conv(self.pool(x))\n", " return x\n", "\n", "\n", "class up_layer(nn.Module):\n", " def __init__(self, in_ch, out_ch):\n", " super(up_layer, self).__init__()\n", " self.up = up(in_ch, out_ch)\n", " self.conv = double_conv(in_ch, out_ch)\n", "\n", " def forward(self, x1, x2):\n", " a = self.up(x1, x2)\n", " x = self.conv(a)\n", " return x\n", "\n", "\n", "class NewUnet(nn.Module):\n", " def __init__(self, dimensions=2):\n", " super(NewUnet, self).__init__()\n", " self.conv1 = double_conv(1, 64)\n", " self.down1 = down_layer(64, 128)\n", " self.down2 = down_layer(128, 256)\n", " self.down3 = down_layer(256, 512)\n", " self.down4 = down_layer(512, 1024)\n", " self.up1 = up_layer(1024, 512)\n", " self.up2 = up_layer(512, 256)\n", " self.up3 = up_layer(256, 128)\n", " self.up4 = up_layer(128, 64)\n", " self.last_conv = nn.Conv2d(64, dimensions, 1)\n", "\n", " def forward(self, x):\n", " x1 = self.conv1(x)\n", " x2 = self.down1(x1)\n", " x3 = self.down2(x2)\n", " x4 = self.down3(x3)\n", " x5 = self.down4(x4)\n", " x1_up = self.up1(x4, x5)\n", " x2_up = self.up2(x3, x1_up)\n", " x3_up = self.up3(x2, x2_up)\n", " x4_up = self.up4(x1, x3_up)\n", " output = self.last_conv(x4_up)\n", " return output" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "from torch.utils.tensorboard import SummaryWriter\n", "import shutil\n", "\n", "shutil.rmtree('./runs/train')\n", "shutil.rmtree('./runs/val')\n", "\n", "os.mkdir('./runs/train')\n", "os.mkdir('./runs/val')\n", "\n", "trainWriter = SummaryWriter('runs/train')\n", "valWriter = SummaryWriter('runs/val')\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# import torch\n", "# import torch.nn as nn\n", "# import torch.nn.functional as F\n", "\n", "\n", "# class DiceLoss(nn.Module):\n", "\n", "# def __init__(self):\n", "# super(DiceLoss, self).__init__()\n", "# self.smooth = 1.0\n", "\n", "# def forward(self, y_pred, y_true):\n", "# assert y_pred.size() == y_true.size()\n", "# y_pred = y_pred[:, 0].contiguous().view(-1)\n", "# y_true = y_true[:, 0].contiguous().view(-1)\n", "# intersection = (y_pred * y_true).sum()\n", "# dsc = (2. * intersection + self.smooth) / (\n", "# y_pred.sum() + y_true.sum() + self.smooth\n", "# )\n", "# return 1. - dsc\n", "\n", "# class FocalLoss(nn.Module): \n", "# def __init__(self, weight=None, \n", "# gamma=2., reduction='none'):\n", "# nn.Module.__init__(self)\n", "# self.weight = weight\n", "# self.gamma = gamma\n", "# self.reduction = reduction\n", " \n", "# def forward(self, input_tensor, target_tensor):\n", " \n", "# target = target_tensor.long()\n", "# target = target.squeeze(1) \n", "# print(input_tensor.shape)\n", "# print(target_tensor.shape)\n", "# print(target.shape)\n", "# log_prob = F.log_softmax(input_tensor, dim=-1)\n", "# prob = torch.exp(log_prob)\n", "# return F.nll_loss(\n", "# ((1 - prob) ** self.gamma) * log_prob, \n", "# target, \n", "# weight=self.weight,\n", "# reduction = self.reduction\n", "# )" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# class BinaryFocalLoss(nn.Module):\n", "# \"\"\"\n", "# This is a implementation of Focal Loss with smooth label cross entropy supported which is proposed in\n", "# 'Focal Loss for Dense Object Detection. (https://arxiv.org/abs/1708.02002)'\n", "# Focal_Loss= -1*alpha*(1-pt)*log(pt)\n", "# :param alpha: (tensor) 3D or 4D the scalar factor for this criterion\n", "# :param gamma: (float,double) gamma > 0 reduces the relative loss for well-classified examples (p>0.5) putting more\n", "# focus on hard misclassified example\n", "# :param reduction: `none`|`mean`|`sum`\n", "# :param **kwargs\n", "# balance_index: (int) balance class index, should be specific when alpha is float\n", "# \"\"\"\n", "\n", "# def __init__(self, alpha=3, gamma=2, ignore_index=None, reduction='mean',**kwargs):\n", "# super(BinaryFocalLoss, self).__init__()\n", "# self.alpha = alpha\n", "# self.gamma = gamma\n", "# self.smooth = 1e-6 # set '1e-4' when train with FP16\n", "# self.ignore_index = ignore_index\n", "# self.reduction = reduction\n", "\n", "# assert self.reduction in ['none', 'mean', 'sum']\n", "\n", "# # if self.alpha is None:\n", "# # self.alpha = torch.ones(2)\n", "# # elif isinstance(self.alpha, (list, np.ndarray)):\n", "# # self.alpha = np.asarray(self.alpha)\n", "# # self.alpha = np.reshape(self.alpha, (2))\n", "# # assert self.alpha.shape[0] == 2, \\\n", "# # 'the `alpha` shape is not match the number of class'\n", "# # elif isinstance(self.alpha, (float, int)):\n", "# # self.alpha = np.asarray([self.alpha, 1.0 - self.alpha], dtype=np.float).view(2)\n", "\n", "# # else:\n", "# # raise TypeError('{} not supported'.format(type(self.alpha)))\n", "\n", "# def forward(self, output, target):\n", "# prob = torch.sigmoid(output)\n", "# prob = torch.clamp(prob, self.smooth, 1.0 - self.smooth)\n", "\n", "# valid_mask = None\n", "# if self.ignore_index is not None:\n", "# valid_mask = (target != self.ignore_index).float()\n", "\n", "# pos_mask = (target == 1).float()\n", "# neg_mask = (target == 0).float()\n", "# if valid_mask is not None:\n", "# pos_mask = pos_mask * valid_mask\n", "# neg_mask = neg_mask * valid_mask\n", "\n", "# pos_weight = (pos_mask * torch.pow(1 - prob, self.gamma)).detach()\n", "# pos_loss = -torch.sum(pos_weight * torch.log(prob)) / (torch.sum(pos_weight) + 1e-4)\n", " \n", " \n", "# neg_weight = (neg_mask * torch.pow(prob, self.gamma)).detach()\n", "# neg_loss = -self.alpha * torch.sum(neg_weight * F.logsigmoid(-output)) / (torch.sum(neg_weight) + 1e-4)\n", "# loss = pos_loss + neg_loss\n", "\n", "# return loss\n", "\n", "\n", "\n", "# class FocalLoss_Ori(nn.Module):\n", "# \"\"\"\n", "# This is a implementation of Focal Loss with smooth label cross entropy supported which is proposed in\n", "# 'Focal Loss for Dense Object Detection. (https://arxiv.org/abs/1708.02002)'\n", "# Focal_Loss= -1*alpha*(1-pt)*log(pt)\n", "# :param num_class:\n", "# :param alpha: (tensor) 3D or 4D the scalar factor for this criterion\n", "# :param gamma: (float,double) gamma > 0 reduces the relative loss for well-classified examples (p>0.5) putting more\n", "# focus on hard misclassified example\n", "# :param smooth: (float,double) smooth value when cross entropy\n", "# :param size_average: (bool, optional) By default, the losses are averaged over each loss element in the batch.\n", "# \"\"\"\n", "\n", "# def __init__(self, num_class, alpha=[0.25,0.75], gamma=2, balance_index=-1, size_average=True):\n", "# super(FocalLoss_Ori, self).__init__()\n", "# self.num_class = num_class\n", "# self.alpha = alpha\n", "# self.gamma = gamma\n", "# self.size_average = size_average\n", "# self.eps = 1e-6\n", "\n", "# if isinstance(self.alpha, (list, tuple)):\n", "# assert len(self.alpha) == self.num_class\n", "# self.alpha = torch.Tensor(list(self.alpha))\n", "# elif isinstance(self.alpha, (float,int)):\n", "# assert 0 < self.alpha < 1.0, 'alpha should be in `(0,1)`)'\n", "# assert balance_index > -1\n", "# alpha = torch.ones((self.num_class))\n", "# alpha *= 1-self.alpha\n", "# alpha[balance_index] = self.alpha\n", "# self.alpha = alpha\n", "# elif isinstance(self.alpha, torch.Tensor):\n", "# self.alpha = self.alpha\n", "# else:\n", "# raise TypeError('Not support alpha type, expect `int|float|list|tuple|torch.Tensor`')\n", "\n", "# def forward(self, logit, target):\n", "\n", "# if logit.dim() > 2:\n", "# # N,C,d1,d2 -> N,C,m (m=d1*d2*...)\n", "# logit = logit.view(logit.size(0), logit.size(1), -1)\n", "# logit = logit.transpose(1, 2).contiguous() # [N,C,d1*d2..] -> [N,d1*d2..,C]\n", "# logit = logit.view(-1, logit.size(-1)) # [N,d1*d2..,C]-> [N*d1*d2..,C]\n", "# target = target.view(-1, 1) # [N,d1,d2,...]->[N*d1*d2*...,1]\n", "\n", "# # -----------legacy way------------\n", "# # idx = target.cpu().long()\n", "# # one_hot_key = torch.FloatTensor(target.size(0), self.num_class).zero_()\n", "# # one_hot_key = one_hot_key.scatter_(1, idx, 1)\n", "# # if one_hot_key.device != logit.device:\n", "# # one_hot_key = one_hot_key.to(logit.device)\n", "# # pt = (one_hot_key * logit).sum(1) + epsilon\n", "\n", "# # ----------memory saving way--------\n", "# pt = logit.gather(1, target).view(-1) + self.eps # avoid apply\n", "# logpt = pt.log()\n", "\n", "# if self.alpha.device != logpt.device:\n", "# alpha = self.alpha.to(logpt.device)\n", "# alpha_class = alpha.gather(0,target.view(-1))\n", "# logpt = alpha_class*logpt\n", "# loss = -1 * torch.pow(torch.sub(1.0, pt), self.gamma) * logpt\n", "\n", "# if self.size_average:\n", "# loss = loss.mean()\n", "# else:\n", "# loss = loss.sum()\n", "# return loss" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# class FocalLoss(nn.Module):\n", "# def __init__(self, alpha=1, gamma=2, logits=False, reduce=True):\n", "# super(FocalLoss, self).__init__()\n", "# self.alpha = alpha\n", "# self.gamma = gamma\n", "# self.logits = logits\n", "# self.reduce = reduce\n", "\n", "# def forward(self, inputs, targets):\n", "# if self.logits:\n", "# BCE_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduce=False)\n", "# else:\n", "# BCE_loss = F.binary_cross_entropy(inputs, targets, reduce=False)\n", "# pt = torch.exp(-BCE_loss)\n", "# F_loss = self.alpha * (1-pt)**self.gamma * BCE_loss\n", "\n", "# if self.reduce:\n", "# return torch.mean(F_loss)\n", "# else:\n", "# return F_loss" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "\n", "# from collections import defaultdict\n", "# import torch.nn.functional as F\n", "# from loss import dice_loss\n", "\n", "# def calc_loss(pred, target, metrics, bce_weight=0.5):\n", "# bce = F.binary_cross_entropy_with_logits(pred, target)\n", " \n", "# pred = F.sigmoid(pred)\n", "# dice = dice_loss(pred, target)\n", " \n", "# loss = bce * bce_weight + dice * (1 - bce_weight)\n", " \n", "# metrics['bce'] += bce.data.cpu().numpy() * target.size(0)\n", "# metrics['dice'] += dice.data.cpu().numpy() * target.size(0)\n", "# metrics['loss'] += loss.data.cpu().numpy() * target.size(0)\n", " \n", "# return loss\n", "\n", "# def print_metrics(metrics, epoch_samples, phase): \n", "# outputs = []\n", "# for k in metrics.keys():\n", "# outputs.append(\"{}: {:4f}\".format(k, metrics[k] / epoch_samples))\n", " \n", "# print(\"{}: {}\".format(phase, \", \".join(outputs))) \n", "\n", "\n", "# def get_loss_tb(metrics, epoch_samples, phase):\n", "# loss = metrics['loss']\n", "# return loss\n", " \n", "# def train_model(model, optimizer, scheduler, num_epochs=25):\n", "# best_model_wts = copy.deepcopy(model.state_dict())\n", "# best_loss = 1e10\n", " \n", "# dsc_loss = DiceLoss()\n", "# # dsc_loss = FocalLoss()\n", "\n", "# loss_train = []\n", "# loss_valid = []\n", "# step = 0\n", " \n", "# for epoch in range(num_epochs):\n", "# print('Epoch {}/{}'.format(epoch, num_epochs - 1))\n", "# print('-' * 10)\n", " \n", "# print(model.encoder1[0].weight[0])\n", "# # print(model.dconv_down1[0].weight.grad)\n", "# # print(model.dconv_down1[0].weight[0])\n", "# # print(model.module.down1.maxpool_conv[1].double_conv[0].weight[0][0])\n", " \n", "# # dconv_down1\n", "# since = time.time()\n", " \n", " \n", "# # Each epoch has a training and validation phase\n", "# for phase in ['train', 'val']:\n", "# if phase == 'train':\n", "# scheduler.step()\n", "# for param_group in optimizer.param_groups:\n", "# print(\"LR\", param_group['lr'])\n", " \n", "# model.train() # Set model to training mode\n", "# else:\n", "# model.eval() # Set model to evaluate mode\n", "\n", "# metrics = defaultdict(float)\n", "# epoch_samples = 0\n", " \n", "# dtype = torch.cuda.FloatTensor if torch.cuda.is_available() else torch.FloatTensor\n", " \n", "# for inputs, labels in dataloaders[phase]:\n", " \n", "# if phase == 'train':\n", "# step += 1\n", "# inputs = inputs.to(device, dtype=torch.float)\n", "# labels = labels.to(device, dtype=torch.float)\n", "# # inputs = inputs.to(device)\n", "# # labels = labels.to(device)\n", "\n", "# # zero the parameter gradients\n", "# optimizer.zero_grad()\n", "\n", "# # forward\n", "# # track history if only in train\n", "# with torch.set_grad_enabled(phase == 'train'):\n", "# outputs = model(inputs)\n", "# # loss = calc_loss(outputs, labels, metrics)\n", "# loss = dsc_loss(outputs, labels)\n", "\n", "# # backward + optimize only if in training phase\n", "# if phase == 'train':\n", "# loss_train.append(loss.item())\n", "# loss.backward()\n", "# # print(loss.grad)\n", "# optimizer.step()\n", " \n", "# # print(\"hello\")\n", "# # print(loss)\n", "# print(\"step: \" + str(step))\n", "# if phase == \"train\" and (step + 1) % 20 == 0:\n", "# # log_loss_summary(logger, loss_train, step)\n", "# print(\"epoch: \" + str(epoch) + \"phase: \" + phase + \" step: \" + str(step) + \" loss: \" + str(np.mean(loss_train)))\n", "# loss_train = []\n", "# # statistics\n", "# epoch_samples += inputs.size(0)\n", "\n", "# # print_metrics(metrics, epoch_samples, phase)\n", "# # print(phase + \": \" + str(loss))\n", "# epoch_loss = metrics['loss'] / epoch_samples\n", " \n", "# if phase == 'train':\n", "# trainWriter.add_scalar('Loss',\n", "# epoch_loss,\n", "# epoch)\n", "# elif phase == 'val':\n", "# valWriter.add_scalar('Loss',\n", "# epoch_loss,\n", "# epoch)\n", "# # deep copy the model\n", "# if phase == 'val' and epoch_loss < best_loss:\n", "# print(\"saving best model\")\n", "# best_loss = epoch_loss\n", "# best_model_wts = copy.deepcopy(model.state_dict())\n", "\n", "# time_elapsed = time.time() - since\n", "# print('{:.0f}m {:.0f}s'.format(time_elapsed // 60, time_elapsed % 60))\n", "# # print(metrics)\n", "# # writer.add_scalar('val loss',\n", "# # running_loss / 1000,\n", "# # epoch)\n", " \n", "# print('Best val loss: {:4f}'.format(best_loss))\n", "\n", "# # load best model weights\n", "# model.load_state_dict(best_model_wts)\n", "# return model" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def focalLoss(inputs, targets, alpha=1, gamma=1, logits=True, reduce=True):\n", " if logits:\n", " BCE_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduce=False)\n", " else:\n", " BCE_loss = F.binary_cross_entropy(inputs, targets, reduce=False)\n", " pt = torch.exp(-BCE_loss)\n", " F_loss = alpha * (1-pt)**gamma * BCE_loss\n", "\n", " if reduce:\n", " return torch.mean(F_loss)\n", " else:\n", " return F_loss\n", "\n", "def calc_loss(pred, target, metrics, bce_weight=0.5):\n", " bce = F.binary_cross_entropy_with_logits(pred, target)\n", " dice = dice_loss(pred, target)\n", "# loss = bce * bce_weight + dice * (1 - bce_weight)\n", " loss = focalLoss(pred, target)\n", " metrics['bce'] += bce.data.cpu().numpy() * target.size(0)\n", " metrics['dice'] += dice.data.cpu().numpy() * target.size(0)\n", " metrics['loss'] += loss.data.cpu().numpy() * target.size(0)\n", " \n", " return loss\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# # Default_loss_function\n", "# def calc_loss(pred, target, metrics, bce_weight=0.5):\n", "# bce = F.binary_cross_entropy_with_logits(pred, target)\n", "# # bce = torch.nn.CrossEntropyLoss(pred, target)\n", " \n", "# # bce = F.binary_cross_entropy(pred, target)\n", "# # loss_nll = nn.NLLLoss2d()\n", "# # loss1 = loss_nll(F.log_softmax(input1), target)\n", "# # loss = loss_nll(F.log_softmax(pred), target)\n", "\n", "# # pred = F.sigmoid(pred)\n", "# dice = dice_loss(pred, target)\n", " \n", "# loss = bce * bce_weight + dice * (1 - bce_weight)\n", " \n", "# metrics['bce'] += bce.data.cpu().numpy() * target.size(0)\n", "# metrics['dice'] += dice.data.cpu().numpy() * target.size(0)\n", "# metrics['loss'] += loss.data.cpu().numpy() * target.size(0)\n", " \n", "# return loss\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "\n", "\n", "from collections import defaultdict\n", "import torch.nn.functional as F\n", "from loss import dice_loss\n", "\n", "\n", "def print_metrics(metrics, epoch_samples, phase): \n", " outputs = []\n", " for k in metrics.keys():\n", " outputs.append(\"{}: {:4f}\".format(k, metrics[k] / epoch_samples))\n", " \n", " print(\"{}: {}\".format(phase, \", \".join(outputs))) \n", "\n", "\n", "def get_loss_tb(metrics, epoch_samples, phase):\n", " loss = metrics['loss']\n", " return loss\n", " \n", "def print_pred(output):\n", " img = output.data.cpu().numpy()\n", "\n", " print(\"min max:\")\n", " print(np.amin(img), np.amax(img))\n", "# print(np.amax(img))\n", " print(\"sum\")\n", " print(img.sum())\n", " \n", " \n", "def train_model(model, optimizer, scheduler, num_epochs=25, load_model=False):\n", " best_model_wts = copy.deepcopy(model.state_dict())\n", " best_loss = 1e10\n", "\n", " if load_model:\n", " model.load_state_dict(torch.load('./best_model.pt'))\n", " \n", " \n", "# FL = FocalLoss()\n", "# FL = FocalLoss(n)\n", "# FL = FocalLoss_Ori(num_class=2)\n", "# FL = FocalLoss_Ori(num_class=2, alpha=0.25,\n", "# gamma=2.0, balance_index=2)\n", " \n", " for epoch in range(num_epochs):\n", " print('\\n\\nEpoch {}/{}'.format(epoch, num_epochs - 1))\n", " print('-' * 10)\n", " \n", "# print(model.encoder1[0].weight[0])\n", "# print(model.dconv_down1[0].weight.grad)\n", "# print(model.dconv_down1[0].weight[0])\n", "# print(model.module.down1.maxpool_conv[1].double_conv[0].weight[0][0])\n", " \n", " \n", "# print(model.decoder1[4].weight)\n", "# dconv_down1\n", " since = time.time()\n", " \n", " \n", " # Each epoch has a training and validation phase\n", " for phase in ['train', 'val']:\n", " if phase == 'train':\n", " scheduler.step()\n", " for param_group in optimizer.param_groups:\n", " print(\"LR\", param_group['lr'])\n", " \n", " model.train() # Set model to training mode\n", " else:\n", " model.eval() # Set model to evaluate mode\n", "\n", " metrics = defaultdict(float)\n", " epoch_samples = 0\n", " \n", " dtype = torch.cuda.FloatTensor if torch.cuda.is_available() else torch.FloatTensor\n", " \n", " for inputs, labels in dataloaders[phase]:\n", "# inputs = inputs.to(device, dtype=torch.float)\n", "# labels = labels.to(device, dtype=torch.float)\n", "# inputs = inputs.to(device).type(dtype)\n", "# labels = labels.to(device).type(dtype)\n", "\n", " inputs = inputs.to(device)\n", " labels = labels.to(device)\n", "\n", " # zero the parameter gradients\n", " optimizer.zero_grad()\n", "\n", " # forward\n", " # track history if only in train\n", " with torch.set_grad_enabled(phase == 'train'):\n", " outputs = model(inputs)\n", " loss = calc_loss(outputs, labels, metrics)\n", " \n", "# loss = FL(outputs, labels)\n", "# print(type(loss))\n", "# print(loss.shape)\n", " # backward + optimize only if in training phase\n", " if phase == 'train':\n", "# print('loss.item:\\n')\n", "# print()\n", " loss.backward()\n", "# print(loss.grad)\n", " optimizer.step()\n", " \n", "# print(\"hello\")\n", "# print(loss)\n", "\n", "\n", " # statistics\n", " epoch_samples += inputs.size(0)\n", "\n", " print_metrics(metrics, epoch_samples, phase)\n", " epoch_loss = metrics['loss'] / epoch_samples\n", " \n", " if phase == 'train':\n", " trainWriter.add_scalar('Loss',\n", " epoch_loss,\n", " epoch)\n", " elif phase == 'val':\n", " valWriter.add_scalar('Loss',\n", " epoch_loss,\n", " epoch)\n", " # deep copy the model\n", " if phase == 'val' and epoch_loss < best_loss:\n", " print(\"saving best model\")\n", " best_loss = epoch_loss\n", " best_model_wts = copy.deepcopy(model.state_dict())\n", " torch.save(model.state_dict(), './best_model.pt')\n", "\n", " time_elapsed = time.time() - since\n", " print('{:.0f}m {:.0f}s'.format(time_elapsed // 60, time_elapsed % 60))\n", "# print(metrics)\n", "# writer.add_scalar('val loss',\n", "# running_loss / 1000,\n", "# epoch)\n", " \n", " print('Best val loss: {:4f}'.format(best_loss))\n", "\n", " # load best model weights\n", " model.load_state_dict(best_model_wts)\n", " return model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cuda:1\n", "True\n", "\n", "\n", "Epoch 0/799\n", "----------\n", "LR 0.0001\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/rasekh/.local/lib/python3.5/site-packages/torch/nn/_reduction.py:46: UserWarning: size_average and reduce args will be deprecated, please use reduction='none' instead.\n", " warnings.warn(warning.format(ret))\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "train: loss: 0.071897, bce: 0.076008, dice: 0.999324\n", "val: loss: 0.306743, bce: 0.644317, dice: 1.009425\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 1/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.079999, bce: 0.176136, dice: 1.000632\n", "val: loss: 0.003854, bce: 0.017278, dice: 0.998829\n", "saving best model\n", "0m 8s\n", "\n", "\n", "Epoch 2/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.003582, bce: 0.015781, dice: 0.998975\n", "val: loss: 0.003774, bce: 0.011886, dice: 0.998861\n", "saving best model\n", "0m 8s\n", "\n", "\n", "Epoch 3/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.003246, bce: 0.013095, dice: 0.999064\n", "val: loss: 0.003168, bce: 0.013453, dice: 0.999186\n", "saving best model\n", "0m 8s\n", "\n", "\n", "Epoch 4/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.003923, bce: 0.016950, dice: 0.999210\n", "val: loss: 0.005839, bce: 0.007567, dice: 0.998680\n", "0m 8s\n", "\n", "\n", "Epoch 5/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.003537, bce: 0.010286, dice: 0.999067\n", "val: loss: 0.003171, bce: 0.011245, dice: 0.999114\n", "0m 8s\n", "\n", "\n", "Epoch 6/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.002956, bce: 0.011612, dice: 0.999179\n", "val: loss: 0.002927, bce: 0.013787, dice: 0.999311\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 7/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.002784, bce: 0.011852, dice: 0.999293\n", "val: loss: 0.002957, bce: 0.009062, dice: 0.999179\n", "0m 9s\n", "\n", "\n", "Epoch 8/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.002549, bce: 0.011070, dice: 0.999340\n", "val: loss: 0.003910, bce: 0.006232, dice: 0.998974\n", "0m 9s\n", "\n", "\n", "Epoch 9/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.003529, bce: 0.012275, dice: 0.999210\n", "val: loss: 0.002714, bce: 0.010829, dice: 0.999249\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 10/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.002384, bce: 0.010921, dice: 0.999352\n", "val: loss: 0.002877, bce: 0.008249, dice: 0.999123\n", "0m 9s\n", "\n", "\n", "Epoch 11/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.002122, bce: 0.008885, dice: 0.999422\n", "val: loss: 0.002338, bce: 0.018231, dice: 0.999663\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 12/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.002430, bce: 0.011536, dice: 0.999464\n", "val: loss: 0.002067, bce: 0.008582, dice: 0.999548\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 13/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001865, bce: 0.008732, dice: 0.999581\n", "val: loss: 0.002762, bce: 0.008200, dice: 0.999153\n", "0m 9s\n", "\n", "\n", "Epoch 14/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001687, bce: 0.008645, dice: 0.999581\n", "val: loss: 0.001515, bce: 0.007237, dice: 0.999887\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 15/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001656, bce: 0.007952, dice: 0.999656\n", "val: loss: 0.001813, bce: 0.015488, dice: 0.999947\n", "0m 9s\n", "\n", "\n", "Epoch 16/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.002156, bce: 0.010403, dice: 0.999598\n", "val: loss: 0.001639, bce: 0.009729, dice: 0.999849\n", "0m 9s\n", "\n", "\n", "Epoch 17/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001417, bce: 0.008512, dice: 0.999742\n", "val: loss: 0.001432, bce: 0.005983, dice: 0.999913\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 18/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001160, bce: 0.006083, dice: 0.999883\n", "val: loss: 0.001193, bce: 0.006689, dice: 1.000627\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 19/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001530, bce: 0.006533, dice: 0.999979\n", "val: loss: 0.001071, bce: 0.005101, dice: 1.000539\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 20/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001009, bce: 0.004980, dice: 1.000147\n", "val: loss: 0.000854, bce: 0.003162, dice: 1.000955\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 21/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001396, bce: 0.006085, dice: 1.000400\n", "val: loss: 0.008671, bce: 0.009508, dice: 0.998112\n", "0m 9s\n", "\n", "\n", "Epoch 22/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.002213, bce: 0.008195, dice: 0.999523\n", "val: loss: 0.001126, bce: 0.005387, dice: 1.000224\n", "0m 9s\n", "\n", "\n", "Epoch 23/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001056, bce: 0.005376, dice: 1.000006\n", "val: loss: 0.000982, bce: 0.003616, dice: 1.000368\n", "0m 9s\n", "\n", "\n", "Epoch 24/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000986, bce: 0.005949, dice: 1.000130\n", "val: loss: 0.001073, bce: 0.003197, dice: 1.000282\n", "0m 9s\n", "\n", "\n", "Epoch 25/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000849, bce: 0.003531, dice: 1.000200\n", "val: loss: 0.000826, bce: 0.002912, dice: 1.000669\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 26/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000768, bce: 0.003208, dice: 1.000258\n", "val: loss: 0.000750, bce: 0.002606, dice: 1.000884\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 27/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000855, bce: 0.004148, dice: 1.000379\n", "val: loss: 0.000778, bce: 0.002888, dice: 1.000940\n", "0m 9s\n", "\n", "\n", "Epoch 28/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000695, bce: 0.002763, dice: 1.000342\n", "val: loss: 0.000740, bce: 0.002772, dice: 1.001198\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 29/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000675, bce: 0.002509, dice: 1.000417\n", "val: loss: 0.000662, bce: 0.002166, dice: 1.000914\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 30/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000602, bce: 0.002546, dice: 1.000426\n", "val: loss: 0.000648, bce: 0.001743, dice: 1.001007\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 31/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000628, bce: 0.002308, dice: 1.000457\n", "val: loss: 0.000924, bce: 0.002899, dice: 1.001475\n", "0m 9s\n", "\n", "\n", "Epoch 32/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000741, bce: 0.002228, dice: 1.000472\n", "val: loss: 0.000774, bce: 0.003057, dice: 1.001135\n", "0m 9s\n", "\n", "\n", "Epoch 33/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000771, bce: 0.002843, dice: 1.000343\n", "val: loss: 0.000595, bce: 0.002020, dice: 1.001034\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 34/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000587, bce: 0.002280, dice: 1.000454\n", "val: loss: 0.000604, bce: 0.002099, dice: 1.001353\n", "0m 9s\n", "\n", "\n", "Epoch 35/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000527, bce: 0.001867, dice: 1.000518\n", "val: loss: 0.000511, bce: 0.001625, dice: 1.001077\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 36/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000528, bce: 0.001577, dice: 1.000467\n", "val: loss: 0.000658, bce: 0.003471, dice: 1.001595\n", "0m 9s\n", "\n", "\n", "Epoch 37/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000489, bce: 0.001897, dice: 1.000497\n", "val: loss: 0.000517, bce: 0.002065, dice: 1.001541\n", "0m 9s\n", "\n", "\n", "Epoch 38/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000465, bce: 0.001596, dice: 1.000580\n", "val: loss: 0.000416, bce: 0.001209, dice: 1.001142\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 39/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000576, bce: 0.001908, dice: 1.000661\n", "val: loss: 0.001376, bce: 0.002086, dice: 1.000165\n", "0m 9s\n", "\n", "\n", "Epoch 40/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000907, bce: 0.004724, dice: 1.000367\n", "val: loss: 0.000680, bce: 0.002080, dice: 1.000715\n", "0m 9s\n", "\n", "\n", "Epoch 41/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000529, bce: 0.001955, dice: 1.000478\n", "val: loss: 0.000451, bce: 0.001721, dice: 1.001276\n", "0m 9s\n", "\n", "\n", "Epoch 42/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000439, bce: 0.001542, dice: 1.000578\n", "val: loss: 0.000430, bce: 0.001809, dice: 1.001767\n", "0m 9s\n", "\n", "\n", "Epoch 43/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000446, bce: 0.001597, dice: 1.000671\n", "val: loss: 0.000397, bce: 0.001215, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 44/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000439, bce: 0.001341, dice: 1.000588\n", "val: loss: 0.000390, bce: 0.001305, dice: 1.001502\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 45/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000387, bce: 0.001245, dice: 1.000667\n", "val: loss: 0.000352, bce: 0.001163, dice: 1.001613\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 46/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000408, bce: 0.001216, dice: 1.000666\n", "val: loss: 0.000518, bce: 0.001493, dice: 1.001949\n", "0m 9s\n", "\n", "\n", "Epoch 47/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000648, bce: 0.001660, dice: 1.000526\n", "val: loss: 0.000429, bce: 0.001987, dice: 1.001340\n", "0m 9s\n", "\n", "\n", "Epoch 48/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000418, bce: 0.001509, dice: 1.000503\n", "val: loss: 0.000408, bce: 0.001389, dice: 1.001599\n", "0m 9s\n", "\n", "\n", "Epoch 49/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000373, bce: 0.001157, dice: 1.000609\n", "val: loss: 0.000346, bce: 0.001087, dice: 1.001590\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 50/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000341, bce: 0.001027, dice: 1.000651\n", "val: loss: 0.000322, bce: 0.000881, dice: 1.001482\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 51/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000574, bce: 0.001741, dice: 1.000722\n", "val: loss: 0.000668, bce: 0.001737, dice: 1.000547\n", "0m 9s\n", "\n", "\n", "Epoch 52/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000506, bce: 0.001493, dice: 1.000381\n", "val: loss: 0.000355, bce: 0.001152, dice: 1.001320\n", "0m 9s\n", "\n", "\n", "Epoch 53/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000360, bce: 0.001101, dice: 1.000544\n", "val: loss: 0.000326, bce: 0.001000, dice: 1.001548\n", "0m 9s\n", "\n", "\n", "Epoch 54/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000336, bce: 0.000977, dice: 1.000666\n", "val: loss: 0.000367, bce: 0.000892, dice: 1.001225\n", "0m 9s\n", "\n", "\n", "Epoch 55/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000374, bce: 0.001069, dice: 1.000624\n", "val: loss: 0.000299, bce: 0.000857, dice: 1.001388\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 56/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000310, bce: 0.000869, dice: 1.000644\n", "val: loss: 0.000320, bce: 0.001038, dice: 1.001939\n", "0m 9s\n", "\n", "\n", "Epoch 57/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000439, bce: 0.001121, dice: 1.000676\n", "val: loss: 0.000546, bce: 0.001779, dice: 1.001407\n", "0m 9s\n", "\n", "\n", "Epoch 58/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000398, bce: 0.001245, dice: 1.000537\n", "val: loss: 0.000317, bce: 0.000879, dice: 1.001133\n", "0m 9s\n", "\n", "\n", "Epoch 59/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000317, bce: 0.000856, dice: 1.000557\n", "val: loss: 0.000296, bce: 0.000804, dice: 1.001133\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 60/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000324, bce: 0.000890, dice: 1.000627\n", "val: loss: 0.000431, bce: 0.000977, dice: 1.000926\n", "0m 9s\n", "\n", "\n", "Epoch 61/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000324, bce: 0.000856, dice: 1.000553\n", "val: loss: 0.000340, bce: 0.000956, dice: 1.001582\n", "0m 9s\n", "\n", "\n", "Epoch 62/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000343, bce: 0.000900, dice: 1.000615\n", "val: loss: 0.000284, bce: 0.000837, dice: 1.001234\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 63/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000308, bce: 0.000852, dice: 1.000602\n", "val: loss: 0.000293, bce: 0.000750, dice: 1.001036\n", "0m 9s\n", "\n", "\n", "Epoch 64/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000291, bce: 0.000801, dice: 1.000617\n", "val: loss: 0.000282, bce: 0.000722, dice: 1.001262\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 65/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000297, bce: 0.000795, dice: 1.000676\n", "val: loss: 0.000537, bce: 0.000966, dice: 1.000828\n", "0m 9s\n", "\n", "\n", "Epoch 66/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000385, bce: 0.001049, dice: 1.000548\n", "val: loss: 0.000283, bce: 0.000791, dice: 1.001137\n", "0m 9s\n", "\n", "\n", "Epoch 67/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000280, bce: 0.000764, dice: 1.000577\n", "val: loss: 0.000273, bce: 0.000718, dice: 1.001149\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 68/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000314, bce: 0.000837, dice: 1.000677\n", "val: loss: 0.000422, bce: 0.000873, dice: 1.000975\n", "0m 9s\n", "\n", "\n", "Epoch 69/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000307, bce: 0.000825, dice: 1.000602\n", "val: loss: 0.000273, bce: 0.000717, dice: 1.001158\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 70/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000368, bce: 0.000811, dice: 1.000515\n", "val: loss: 0.000664, bce: 0.002018, dice: 1.001681\n", "0m 9s\n", "\n", "\n", "Epoch 71/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.033772, bce: 0.049883, dice: 1.000462\n", "val: loss: 0.017069, bce: 0.122445, dice: 0.999526\n", "0m 9s\n", "\n", "\n", "Epoch 72/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.010027, bce: 0.037787, dice: 0.999328\n", "val: loss: 0.001985, bce: 0.005178, dice: 0.999583\n", "0m 9s\n", "\n", "\n", "Epoch 73/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001512, bce: 0.006318, dice: 0.999640\n", "val: loss: 0.001487, bce: 0.007158, dice: 0.999837\n", "0m 9s\n", "\n", "\n", "Epoch 74/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001236, bce: 0.006821, dice: 0.999780\n", "val: loss: 0.001345, bce: 0.005467, dice: 0.999899\n", "0m 9s\n", "\n", "\n", "Epoch 75/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001104, bce: 0.005164, dice: 0.999851\n", "val: loss: 0.001278, bce: 0.004877, dice: 0.999922\n", "0m 9s\n", "\n", "\n", "Epoch 76/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000986, bce: 0.004139, dice: 0.999890\n", "val: loss: 0.001095, bce: 0.004413, dice: 1.000131\n", "0m 9s\n", "\n", "\n", "Epoch 77/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000855, bce: 0.003534, dice: 1.000010\n", "val: loss: 0.000865, bce: 0.003464, dice: 1.000424\n", "0m 9s\n", "\n", "\n", "Epoch 78/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000643, bce: 0.002700, dice: 1.000201\n", "val: loss: 0.000631, bce: 0.002671, dice: 1.001089\n", "0m 9s\n", "\n", "\n", "Epoch 79/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000785, bce: 0.002485, dice: 1.000223\n", "val: loss: 0.000536, bce: 0.002171, dice: 1.000854\n", "0m 9s\n", "\n", "\n", "Epoch 80/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000508, bce: 0.002071, dice: 1.000404\n", "val: loss: 0.000425, bce: 0.001696, dice: 1.001138\n", "0m 9s\n", "\n", "\n", "Epoch 81/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000447, bce: 0.001626, dice: 1.000475\n", "val: loss: 0.000389, bce: 0.001472, dice: 1.001113\n", "0m 9s\n", "\n", "\n", "Epoch 82/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000369, bce: 0.001423, dice: 1.000581\n", "val: loss: 0.000400, bce: 0.001388, dice: 1.001142\n", "0m 9s\n", "\n", "\n", "Epoch 83/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000381, bce: 0.001312, dice: 1.000569\n", "val: loss: 0.000375, bce: 0.001375, dice: 1.001145\n", "0m 9s\n", "\n", "\n", "Epoch 84/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000381, bce: 0.001265, dice: 1.000569\n", "val: loss: 0.000399, bce: 0.001553, dice: 1.001426\n", "0m 9s\n", "\n", "\n", "Epoch 85/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000370, bce: 0.001397, dice: 1.000549\n", "val: loss: 0.000334, bce: 0.001226, dice: 1.001439\n", "0m 9s\n", "\n", "\n", "Epoch 86/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000436, bce: 0.001293, dice: 1.000544\n", "val: loss: 0.000378, bce: 0.001447, dice: 1.001050\n", "0m 9s\n", "\n", "\n", "Epoch 87/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000371, bce: 0.001411, dice: 1.000525\n", "val: loss: 0.000315, bce: 0.001131, dice: 1.001383\n", "0m 9s\n", "\n", "\n", "Epoch 88/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000308, bce: 0.001141, dice: 1.000675\n", "val: loss: 0.000341, bce: 0.001018, dice: 1.001276\n", "0m 9s\n", "\n", "\n", "Epoch 89/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000302, bce: 0.001032, dice: 1.000685\n", "val: loss: 0.000338, bce: 0.000975, dice: 1.001313\n", "0m 9s\n", "\n", "\n", "Epoch 90/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000347, bce: 0.001088, dice: 1.000704\n", "val: loss: 0.000802, bce: 0.001505, dice: 1.000498\n", "0m 9s\n", "\n", "\n", "Epoch 91/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000458, bce: 0.001414, dice: 1.000374\n", "val: loss: 0.000368, bce: 0.001247, dice: 1.001114\n", "0m 9s\n", "\n", "\n", "Epoch 92/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000311, bce: 0.001099, dice: 1.000558\n", "val: loss: 0.000316, bce: 0.001000, dice: 1.001191\n", "0m 9s\n", "\n", "\n", "Epoch 93/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000318, bce: 0.000970, dice: 1.000618\n", "val: loss: 0.000320, bce: 0.001185, dice: 1.001449\n", "0m 9s\n", "\n", "\n", "Epoch 94/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000295, bce: 0.001025, dice: 1.000621\n", "val: loss: 0.000294, bce: 0.000944, dice: 1.001395\n", "0m 9s\n", "\n", "\n", "Epoch 95/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000285, bce: 0.000886, dice: 1.000632\n", "val: loss: 0.000293, bce: 0.000944, dice: 1.001373\n", "0m 9s\n", "\n", "\n", "Epoch 96/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000270, bce: 0.000862, dice: 1.000640\n", "val: loss: 0.000280, bce: 0.000818, dice: 1.001340\n", "0m 9s\n", "\n", "\n", "Epoch 97/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000277, bce: 0.000838, dice: 1.000673\n", "val: loss: 0.000342, bce: 0.000878, dice: 1.001103\n", "0m 9s\n", "\n", "\n", "Epoch 98/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000314, bce: 0.000939, dice: 1.000563\n", "val: loss: 0.000285, bce: 0.000881, dice: 1.001432\n", "0m 9s\n", "\n", "\n", "Epoch 99/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000259, bce: 0.000811, dice: 1.000654\n", "val: loss: 0.000267, bce: 0.000766, dice: 1.001436\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 100/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000257, bce: 0.000747, dice: 1.000672\n", "val: loss: 0.000264, bce: 0.000762, dice: 1.001480\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 101/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000372, bce: 0.000958, dice: 1.000754\n", "val: loss: 0.000514, bce: 0.001214, dice: 1.000714\n", "0m 9s\n", "\n", "\n", "Epoch 102/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000346, bce: 0.001010, dice: 1.000464\n", "val: loss: 0.000280, bce: 0.000941, dice: 1.001263\n", "0m 9s\n", "\n", "\n", "Epoch 103/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000262, bce: 0.000852, dice: 1.000599\n", "val: loss: 0.000267, bce: 0.000811, dice: 1.001249\n", "0m 9s\n", "\n", "\n", "Epoch 104/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000253, bce: 0.000776, dice: 1.000606\n", "val: loss: 0.000263, bce: 0.000762, dice: 1.001295\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 105/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000252, bce: 0.000726, dice: 1.000654\n", "val: loss: 0.000303, bce: 0.000768, dice: 1.001104\n", "0m 9s\n", "\n", "\n", "Epoch 106/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000327, bce: 0.000895, dice: 1.000588\n", "val: loss: 0.000270, bce: 0.000834, dice: 1.001199\n", "0m 9s\n", "\n", "\n", "Epoch 107/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000251, bce: 0.000777, dice: 1.000604\n", "val: loss: 0.000256, bce: 0.000760, dice: 1.001392\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 108/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000247, bce: 0.000718, dice: 1.000652\n", "val: loss: 0.000304, bce: 0.000740, dice: 1.001152\n", "0m 9s\n", "\n", "\n", "Epoch 109/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000280, bce: 0.000759, dice: 1.000594\n", "val: loss: 0.000269, bce: 0.000802, dice: 1.001468\n", "0m 9s\n", "\n", "\n", "Epoch 110/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000246, bce: 0.000725, dice: 1.000636\n", "val: loss: 0.000292, bce: 0.000800, dice: 1.001556\n", "0m 9s\n", "\n", "\n", "Epoch 111/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000268, bce: 0.000722, dice: 1.000664\n", "val: loss: 0.000275, bce: 0.000805, dice: 1.001572\n", "0m 9s\n", "\n", "\n", "Epoch 112/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000287, bce: 0.000811, dice: 1.000626\n", "val: loss: 0.000254, bce: 0.000753, dice: 1.001320\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 113/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000243, bce: 0.000707, dice: 1.000625\n", "val: loss: 0.000249, bce: 0.000693, dice: 1.001347\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 114/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000235, bce: 0.000657, dice: 1.000648\n", "val: loss: 0.000249, bce: 0.000684, dice: 1.001380\n", "0m 9s\n", "\n", "\n", "Epoch 115/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000320, bce: 0.000822, dice: 1.000680\n", "val: loss: 0.000351, bce: 0.001033, dice: 1.001007\n", "0m 9s\n", "\n", "\n", "Epoch 116/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000296, bce: 0.000842, dice: 1.000531\n", "val: loss: 0.000287, bce: 0.000807, dice: 1.001493\n", "0m 9s\n", "\n", "\n", "Epoch 117/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000279, bce: 0.000771, dice: 1.000600\n", "val: loss: 0.000307, bce: 0.000871, dice: 1.001589\n", "0m 9s\n", "\n", "\n", "Epoch 118/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000276, bce: 0.000788, dice: 1.000610\n", "val: loss: 0.000261, bce: 0.000725, dice: 1.001143\n", "0m 9s\n", "\n", "\n", "Epoch 119/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000244, bce: 0.000688, dice: 1.000626\n", "val: loss: 0.000253, bce: 0.000700, dice: 1.001237\n", "0m 9s\n", "\n", "\n", "Epoch 120/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000235, bce: 0.000653, dice: 1.000624\n", "val: loss: 0.000238, bce: 0.000659, dice: 1.001331\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 121/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000264, bce: 0.000705, dice: 1.000645\n", "val: loss: 0.000264, bce: 0.000738, dice: 1.001329\n", "0m 9s\n", "\n", "\n", "Epoch 122/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000256, bce: 0.000683, dice: 1.000646\n", "val: loss: 0.000326, bce: 0.000761, dice: 1.001018\n", "0m 9s\n", "\n", "\n", "Epoch 123/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000241, bce: 0.000667, dice: 1.000592\n", "val: loss: 0.000247, bce: 0.000712, dice: 1.001460\n", "0m 9s\n", "\n", "\n", "Epoch 124/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000244, bce: 0.000671, dice: 1.000634\n", "val: loss: 0.000235, bce: 0.000650, dice: 1.001379\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 125/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000225, bce: 0.000607, dice: 1.000648\n", "val: loss: 0.000254, bce: 0.000681, dice: 1.001439\n", "0m 9s\n", "\n", "\n", "Epoch 126/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000222, bce: 0.000601, dice: 1.000672\n", "val: loss: 0.000234, bce: 0.000625, dice: 1.001264\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 127/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000299, bce: 0.000698, dice: 1.000731\n", "val: loss: 0.000596, bce: 0.001134, dice: 1.000574\n", "0m 9s\n", "\n", "\n", "Epoch 128/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000345, bce: 0.000936, dice: 1.000453\n", "val: loss: 0.000249, bce: 0.000769, dice: 1.001193\n", "0m 9s\n", "\n", "\n", "Epoch 129/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000232, bce: 0.000684, dice: 1.000603\n", "val: loss: 0.000239, bce: 0.000675, dice: 1.001264\n", "0m 9s\n", "\n", "\n", "Epoch 130/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000231, bce: 0.000645, dice: 1.000636\n", "val: loss: 0.000238, bce: 0.000652, dice: 1.001281\n", "0m 9s\n", "\n", "\n", "Epoch 131/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000239, bce: 0.000630, dice: 1.000615\n", "val: loss: 0.000243, bce: 0.000639, dice: 1.001249\n", "0m 9s\n", "\n", "\n", "Epoch 132/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000227, bce: 0.000614, dice: 1.000638\n", "val: loss: 0.000230, bce: 0.000623, dice: 1.001338\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 133/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000257, bce: 0.000670, dice: 1.000651\n", "val: loss: 0.000275, bce: 0.000690, dice: 1.001121\n", "0m 9s\n", "\n", "\n", "Epoch 134/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000242, bce: 0.000643, dice: 1.000638\n", "val: loss: 0.000242, bce: 0.000640, dice: 1.001224\n", "0m 9s\n", "\n", "\n", "Epoch 135/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000233, bce: 0.000617, dice: 1.000664\n", "val: loss: 0.000280, bce: 0.000687, dice: 1.001158\n", "0m 9s\n", "\n", "\n", "Epoch 136/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000237, bce: 0.000631, dice: 1.000650\n", "val: loss: 0.000249, bce: 0.000634, dice: 1.001240\n", "0m 9s\n", "\n", "\n", "Epoch 137/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000252, bce: 0.000646, dice: 1.000678\n", "val: loss: 0.000375, bce: 0.000784, dice: 1.001017\n", "0m 9s\n", "\n", "\n", "Epoch 138/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000269, bce: 0.000670, dice: 1.000577\n", "val: loss: 0.000232, bce: 0.000668, dice: 1.001277\n", "0m 9s\n", "\n", "\n", "Epoch 139/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000227, bce: 0.000615, dice: 1.000611\n", "val: loss: 0.000245, bce: 0.000679, dice: 1.001429\n", "0m 9s\n", "\n", "\n", "Epoch 140/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000213, bce: 0.000580, dice: 1.000642\n", "val: loss: 0.000230, bce: 0.000607, dice: 1.001260\n", "0m 9s\n", "\n", "\n", "Epoch 141/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000218, bce: 0.000569, dice: 1.000637\n", "val: loss: 0.000224, bce: 0.000593, dice: 1.001377\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 142/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000311, bce: 0.000669, dice: 1.000633\n", "val: loss: 0.000481, bce: 0.001431, dice: 1.001560\n", "0m 9s\n", "\n", "\n", "Epoch 143/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000308, bce: 0.000905, dice: 1.000594\n", "val: loss: 0.000248, bce: 0.000718, dice: 1.001306\n", "0m 9s\n", "\n", "\n", "Epoch 144/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000238, bce: 0.000667, dice: 1.000573\n", "val: loss: 0.000230, bce: 0.000656, dice: 1.001214\n", "0m 9s\n", "\n", "\n", "Epoch 145/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000216, bce: 0.000588, dice: 1.000616\n", "val: loss: 0.000227, bce: 0.000615, dice: 1.001211\n", "0m 9s\n", "\n", "\n", "Epoch 146/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000221, bce: 0.000579, dice: 1.000631\n", "val: loss: 0.000243, bce: 0.000615, dice: 1.001194\n", "0m 9s\n", "\n", "\n", "Epoch 147/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000275, bce: 0.000681, dice: 1.000600\n", "val: loss: 0.000233, bce: 0.000689, dice: 1.001242\n", "0m 9s\n", "\n", "\n", "Epoch 148/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000222, bce: 0.000608, dice: 1.000611\n", "val: loss: 0.000246, bce: 0.000655, dice: 1.001444\n", "0m 9s\n", "\n", "\n", "Epoch 149/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000232, bce: 0.000604, dice: 1.000615\n", "val: loss: 0.000252, bce: 0.000667, dice: 1.001491\n", "0m 9s\n", "\n", "\n", "Epoch 150/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000251, bce: 0.000615, dice: 1.000647\n", "val: loss: 0.000291, bce: 0.000861, dice: 1.001300\n", "0m 9s\n", "\n", "\n", "Epoch 151/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000229, bce: 0.000641, dice: 1.000622\n", "val: loss: 0.000243, bce: 0.000647, dice: 1.001438\n", "0m 9s\n", "\n", "\n", "Epoch 152/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000364, bce: 0.000735, dice: 1.000618\n", "val: loss: 0.001550, bce: 0.004515, dice: 1.001126\n", "0m 9s\n", "\n", "\n", "Epoch 153/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.001597, bce: 0.003301, dice: 1.000279\n", "val: loss: 0.000415, bce: 0.001498, dice: 1.001247\n", "0m 9s\n", "\n", "\n", "Epoch 154/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000395, bce: 0.001314, dice: 1.000574\n", "val: loss: 0.000380, bce: 0.001524, dice: 1.001530\n", "0m 9s\n", "\n", "\n", "Epoch 155/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000297, bce: 0.001192, dice: 1.000729\n", "val: loss: 0.000260, bce: 0.000844, dice: 1.001467\n", "0m 9s\n", "\n", "\n", "Epoch 156/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000272, bce: 0.000842, dice: 1.000804\n", "val: loss: 0.000325, bce: 0.001081, dice: 1.001090\n", "0m 9s\n", "\n", "\n", "Epoch 157/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000261, bce: 0.000863, dice: 1.000676\n", "val: loss: 0.000242, bce: 0.000726, dice: 1.001563\n", "0m 9s\n", "\n", "\n", "Epoch 158/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000231, bce: 0.000702, dice: 1.000798\n", "val: loss: 0.000238, bce: 0.000673, dice: 1.001525\n", "0m 9s\n", "\n", "\n", "Epoch 159/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000251, bce: 0.000710, dice: 1.000873\n", "val: loss: 0.000376, bce: 0.000807, dice: 1.001182\n", "0m 9s\n", "\n", "\n", "Epoch 160/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000277, bce: 0.000795, dice: 1.000713\n", "val: loss: 0.000255, bce: 0.000701, dice: 1.001270\n", "0m 9s\n", "\n", "\n", "Epoch 161/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000227, bce: 0.000662, dice: 1.000718\n", "val: loss: 0.000224, bce: 0.000634, dice: 1.001477\n", "0m 9s\n", "\n", "\n", "Epoch 162/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000225, bce: 0.000621, dice: 1.000762\n", "val: loss: 0.000231, bce: 0.000635, dice: 1.001486\n", "0m 9s\n", "\n", "\n", "Epoch 163/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000216, bce: 0.000611, dice: 1.000770\n", "val: loss: 0.000217, bce: 0.000605, dice: 1.001560\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 164/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000212, bce: 0.000579, dice: 1.000769\n", "val: loss: 0.000310, bce: 0.000670, dice: 1.001168\n", "0m 9s\n", "\n", "\n", "Epoch 165/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000255, bce: 0.000680, dice: 1.000733\n", "val: loss: 0.000254, bce: 0.000666, dice: 1.001306\n", "0m 9s\n", "\n", "\n", "Epoch 166/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000232, bce: 0.000643, dice: 1.000704\n", "val: loss: 0.000217, bce: 0.000614, dice: 1.001430\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 167/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000232, bce: 0.000616, dice: 1.000731\n", "val: loss: 0.000251, bce: 0.000628, dice: 1.001272\n", "0m 9s\n", "\n", "\n", "Epoch 168/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000230, bce: 0.000609, dice: 1.000695\n", "val: loss: 0.000227, bce: 0.000621, dice: 1.001337\n", "0m 9s\n", "\n", "\n", "Epoch 169/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000216, bce: 0.000588, dice: 1.000725\n", "val: loss: 0.000259, bce: 0.000629, dice: 1.001188\n", "0m 9s\n", "\n", "\n", "Epoch 170/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000244, bce: 0.000638, dice: 1.000718\n", "val: loss: 0.000267, bce: 0.000632, dice: 1.001240\n", "0m 9s\n", "\n", "\n", "Epoch 171/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000212, bce: 0.000563, dice: 1.000737\n", "val: loss: 0.000224, bce: 0.000600, dice: 1.001555\n", "0m 9s\n", "\n", "\n", "Epoch 172/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000213, bce: 0.000545, dice: 1.000733\n", "val: loss: 0.000229, bce: 0.000612, dice: 1.001652\n", "0m 9s\n", "\n", "\n", "Epoch 173/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000272, bce: 0.000634, dice: 1.000674\n", "val: loss: 0.000547, bce: 0.001286, dice: 1.001958\n", "0m 9s\n", "\n", "\n", "Epoch 174/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000264, bce: 0.000770, dice: 1.000702\n", "val: loss: 0.000235, bce: 0.000644, dice: 1.001200\n", "0m 9s\n", "\n", "\n", "Epoch 175/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000210, bce: 0.000574, dice: 1.000665\n", "val: loss: 0.000210, bce: 0.000576, dice: 1.001395\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 176/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000209, bce: 0.000540, dice: 1.000662\n", "val: loss: 0.000274, bce: 0.000684, dice: 1.001669\n", "0m 9s\n", "\n", "\n", "Epoch 177/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000235, bce: 0.000622, dice: 1.000677\n", "val: loss: 0.000224, bce: 0.000605, dice: 1.001495\n", "0m 9s\n", "\n", "\n", "Epoch 178/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000216, bce: 0.000547, dice: 1.000688\n", "val: loss: 0.000257, bce: 0.000670, dice: 1.001487\n", "0m 9s\n", "\n", "\n", "Epoch 179/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000204, bce: 0.000540, dice: 1.000668\n", "val: loss: 0.000214, bce: 0.000557, dice: 1.001532\n", "0m 9s\n", "\n", "\n", "Epoch 180/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000199, bce: 0.000504, dice: 1.000701\n", "val: loss: 0.000291, bce: 0.000661, dice: 1.001795\n", "0m 9s\n", "\n", "\n", "Epoch 181/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000309, bce: 0.000711, dice: 1.000665\n", "val: loss: 0.000309, bce: 0.000896, dice: 1.001442\n", "0m 9s\n", "\n", "\n", "Epoch 182/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000231, bce: 0.000649, dice: 1.000656\n", "val: loss: 0.000258, bce: 0.000632, dice: 1.001112\n", "0m 9s\n", "\n", "\n", "Epoch 183/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000239, bce: 0.000605, dice: 1.000608\n", "val: loss: 0.000211, bce: 0.000598, dice: 1.001409\n", "0m 9s\n", "\n", "\n", "Epoch 184/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000221, bce: 0.000560, dice: 1.000734\n", "val: loss: 0.000300, bce: 0.000760, dice: 1.000900\n", "0m 9s\n", "\n", "\n", "Epoch 185/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000252, bce: 0.000638, dice: 1.000615\n", "val: loss: 0.000241, bce: 0.000595, dice: 1.001227\n", "0m 9s\n", "\n", "\n", "Epoch 186/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000222, bce: 0.000563, dice: 1.000683\n", "val: loss: 0.000345, bce: 0.000670, dice: 1.001065\n", "0m 9s\n", "\n", "\n", "Epoch 187/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000286, bce: 0.000671, dice: 1.000673\n", "val: loss: 0.000320, bce: 0.000723, dice: 1.000922\n", "0m 9s\n", "\n", "\n", "Epoch 188/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000216, bce: 0.000578, dice: 1.000574\n", "val: loss: 0.000205, bce: 0.000576, dice: 1.001348\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 189/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000200, bce: 0.000519, dice: 1.000679\n", "val: loss: 0.000265, bce: 0.000599, dice: 1.001068\n", "0m 9s\n", "\n", "\n", "Epoch 190/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000254, bce: 0.000619, dice: 1.000647\n", "val: loss: 0.000231, bce: 0.000580, dice: 1.001178\n", "0m 9s\n", "\n", "\n", "Epoch 191/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000198, bce: 0.000510, dice: 1.000656\n", "val: loss: 0.000214, bce: 0.000538, dice: 1.001234\n", "0m 9s\n", "\n", "\n", "Epoch 192/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000190, bce: 0.000485, dice: 1.000681\n", "val: loss: 0.000203, bce: 0.000513, dice: 1.001312\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 193/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000189, bce: 0.000475, dice: 1.000686\n", "val: loss: 0.000199, bce: 0.000495, dice: 1.001411\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 194/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000211, bce: 0.000499, dice: 1.000703\n", "val: loss: 0.000322, bce: 0.000657, dice: 1.000974\n", "0m 9s\n", "\n", "\n", "Epoch 195/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000330, bce: 0.000810, dice: 1.000585\n", "val: loss: 0.000293, bce: 0.000703, dice: 1.000924\n", "0m 9s\n", "\n", "\n", "Epoch 196/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000217, bce: 0.000569, dice: 1.000609\n", "val: loss: 0.000214, bce: 0.000559, dice: 1.001227\n", "0m 9s\n", "\n", "\n", "Epoch 197/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000195, bce: 0.000500, dice: 1.000674\n", "val: loss: 0.000226, bce: 0.000541, dice: 1.001161\n", "0m 9s\n", "\n", "\n", "Epoch 198/799\n", "----------\n", "LR 0.0001\n", "train: loss: 0.000246, bce: 0.000585, dice: 1.000697\n", "val: loss: 0.000288, bce: 0.000716, dice: 1.000830\n", "0m 9s\n", "\n", "\n", "Epoch 199/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000274, bce: 0.000649, dice: 1.000411\n", "val: loss: 0.000235, bce: 0.000667, dice: 1.000989\n", "0m 9s\n", "\n", "\n", "Epoch 200/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000230, bce: 0.000608, dice: 1.000495\n", "val: loss: 0.000221, bce: 0.000641, dice: 1.001085\n", "0m 9s\n", "\n", "\n", "Epoch 201/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000212, bce: 0.000580, dice: 1.000548\n", "val: loss: 0.000214, bce: 0.000619, dice: 1.001147\n", "0m 9s\n", "\n", "\n", "Epoch 202/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000204, bce: 0.000561, dice: 1.000582\n", "val: loss: 0.000209, bce: 0.000600, dice: 1.001185\n", "0m 9s\n", "\n", "\n", "Epoch 203/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000198, bce: 0.000543, dice: 1.000600\n", "val: loss: 0.000206, bce: 0.000584, dice: 1.001216\n", "0m 9s\n", "\n", "\n", "Epoch 204/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000195, bce: 0.000530, dice: 1.000615\n", "val: loss: 0.000203, bce: 0.000571, dice: 1.001240\n", "0m 9s\n", "\n", "\n", "Epoch 205/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000192, bce: 0.000519, dice: 1.000630\n", "val: loss: 0.000200, bce: 0.000559, dice: 1.001252\n", "0m 9s\n", "\n", "\n", "Epoch 206/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000191, bce: 0.000509, dice: 1.000635\n", "val: loss: 0.000198, bce: 0.000549, dice: 1.001266\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 207/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000189, bce: 0.000502, dice: 1.000645\n", "val: loss: 0.000197, bce: 0.000540, dice: 1.001271\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 208/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000187, bce: 0.000494, dice: 1.000648\n", "val: loss: 0.000196, bce: 0.000533, dice: 1.001281\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 209/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000186, bce: 0.000487, dice: 1.000653\n", "val: loss: 0.000195, bce: 0.000526, dice: 1.001288\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 210/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000186, bce: 0.000482, dice: 1.000656\n", "val: loss: 0.000195, bce: 0.000520, dice: 1.001293\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 211/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000185, bce: 0.000477, dice: 1.000662\n", "val: loss: 0.000194, bce: 0.000515, dice: 1.001297\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 212/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000184, bce: 0.000472, dice: 1.000662\n", "val: loss: 0.000193, bce: 0.000511, dice: 1.001308\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 213/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000183, bce: 0.000468, dice: 1.000665\n", "val: loss: 0.000193, bce: 0.000507, dice: 1.001315\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 214/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000183, bce: 0.000465, dice: 1.000668\n", "val: loss: 0.000193, bce: 0.000503, dice: 1.001321\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 215/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000182, bce: 0.000462, dice: 1.000670\n", "val: loss: 0.000192, bce: 0.000500, dice: 1.001326\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 216/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000182, bce: 0.000458, dice: 1.000674\n", "val: loss: 0.000192, bce: 0.000497, dice: 1.001329\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 217/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000182, bce: 0.000457, dice: 1.000674\n", "val: loss: 0.000192, bce: 0.000494, dice: 1.001336\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 218/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000181, bce: 0.000454, dice: 1.000679\n", "val: loss: 0.000191, bce: 0.000491, dice: 1.001334\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 219/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000181, bce: 0.000451, dice: 1.000675\n", "val: loss: 0.000191, bce: 0.000489, dice: 1.001350\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 220/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000180, bce: 0.000449, dice: 1.000684\n", "val: loss: 0.000191, bce: 0.000486, dice: 1.001346\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 221/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000180, bce: 0.000446, dice: 1.000677\n", "val: loss: 0.000190, bce: 0.000485, dice: 1.001363\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 222/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000180, bce: 0.000446, dice: 1.000687\n", "val: loss: 0.000190, bce: 0.000482, dice: 1.001355\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 223/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000180, bce: 0.000444, dice: 1.000687\n", "val: loss: 0.000190, bce: 0.000480, dice: 1.001351\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 224/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000179, bce: 0.000442, dice: 1.000684\n", "val: loss: 0.000190, bce: 0.000479, dice: 1.001360\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 225/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000179, bce: 0.000441, dice: 1.000691\n", "val: loss: 0.000190, bce: 0.000477, dice: 1.001355\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 226/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000179, bce: 0.000438, dice: 1.000686\n", "val: loss: 0.000189, bce: 0.000476, dice: 1.001366\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 227/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000178, bce: 0.000437, dice: 1.000688\n", "val: loss: 0.000189, bce: 0.000475, dice: 1.001376\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 228/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000178, bce: 0.000437, dice: 1.000691\n", "val: loss: 0.000189, bce: 0.000474, dice: 1.001373\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 229/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000178, bce: 0.000436, dice: 1.000692\n", "val: loss: 0.000189, bce: 0.000472, dice: 1.001368\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 230/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000178, bce: 0.000434, dice: 1.000693\n", "val: loss: 0.000188, bce: 0.000470, dice: 1.001367\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 231/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000178, bce: 0.000433, dice: 1.000691\n", "val: loss: 0.000188, bce: 0.000470, dice: 1.001376\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 232/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000178, bce: 0.000433, dice: 1.000694\n", "val: loss: 0.000188, bce: 0.000469, dice: 1.001372\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 233/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000177, bce: 0.000432, dice: 1.000696\n", "val: loss: 0.000188, bce: 0.000468, dice: 1.001367\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 234/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000177, bce: 0.000431, dice: 1.000693\n", "val: loss: 0.000188, bce: 0.000466, dice: 1.001371\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 235/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000177, bce: 0.000430, dice: 1.000694\n", "val: loss: 0.000187, bce: 0.000466, dice: 1.001375\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 236/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000177, bce: 0.000429, dice: 1.000698\n", "val: loss: 0.000187, bce: 0.000464, dice: 1.001371\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 237/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000176, bce: 0.000428, dice: 1.000697\n", "val: loss: 0.000187, bce: 0.000464, dice: 1.001374\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 238/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000176, bce: 0.000427, dice: 1.000698\n", "val: loss: 0.000187, bce: 0.000463, dice: 1.001377\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 239/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000176, bce: 0.000427, dice: 1.000695\n", "val: loss: 0.000186, bce: 0.000462, dice: 1.001387\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 240/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000176, bce: 0.000426, dice: 1.000698\n", "val: loss: 0.000186, bce: 0.000461, dice: 1.001382\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 241/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000175, bce: 0.000424, dice: 1.000699\n", "val: loss: 0.000186, bce: 0.000460, dice: 1.001383\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 242/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000176, bce: 0.000424, dice: 1.000699\n", "val: loss: 0.000186, bce: 0.000459, dice: 1.001382\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 243/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000175, bce: 0.000423, dice: 1.000698\n", "val: loss: 0.000186, bce: 0.000458, dice: 1.001387\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 244/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000175, bce: 0.000422, dice: 1.000702\n", "val: loss: 0.000185, bce: 0.000458, dice: 1.001382\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 245/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000175, bce: 0.000421, dice: 1.000700\n", "val: loss: 0.000185, bce: 0.000457, dice: 1.001387\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 246/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000175, bce: 0.000421, dice: 1.000699\n", "val: loss: 0.000185, bce: 0.000457, dice: 1.001392\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 247/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000174, bce: 0.000421, dice: 1.000700\n", "val: loss: 0.000185, bce: 0.000455, dice: 1.001383\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 248/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000174, bce: 0.000419, dice: 1.000698\n", "val: loss: 0.000185, bce: 0.000455, dice: 1.001398\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 249/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000174, bce: 0.000419, dice: 1.000702\n", "val: loss: 0.000184, bce: 0.000454, dice: 1.001382\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 250/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000417, dice: 1.000699\n", "val: loss: 0.000184, bce: 0.000454, dice: 1.001394\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 251/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000417, dice: 1.000703\n", "val: loss: 0.000184, bce: 0.000452, dice: 1.001374\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 252/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000416, dice: 1.000703\n", "val: loss: 0.000184, bce: 0.000452, dice: 1.001371\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 253/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000416, dice: 1.000697\n", "val: loss: 0.000184, bce: 0.000452, dice: 1.001399\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 254/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000415, dice: 1.000702\n", "val: loss: 0.000183, bce: 0.000451, dice: 1.001388\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 255/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000414, dice: 1.000701\n", "val: loss: 0.000183, bce: 0.000450, dice: 1.001387\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 256/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000415, dice: 1.000701\n", "val: loss: 0.000183, bce: 0.000450, dice: 1.001389\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 257/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000172, bce: 0.000414, dice: 1.000704\n", "val: loss: 0.000183, bce: 0.000448, dice: 1.001375\n", "0m 9s\n", "\n", "\n", "Epoch 258/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000172, bce: 0.000412, dice: 1.000700\n", "val: loss: 0.000182, bce: 0.000447, dice: 1.001384\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 259/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000172, bce: 0.000412, dice: 1.000703\n", "val: loss: 0.000182, bce: 0.000447, dice: 1.001378\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 260/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000172, bce: 0.000412, dice: 1.000699\n", "val: loss: 0.000182, bce: 0.000447, dice: 1.001390\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 261/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000172, bce: 0.000411, dice: 1.000705\n", "val: loss: 0.000182, bce: 0.000445, dice: 1.001366\n", "0m 9s\n", "\n", "\n", "Epoch 262/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000172, bce: 0.000410, dice: 1.000701\n", "val: loss: 0.000181, bce: 0.000445, dice: 1.001380\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 263/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000171, bce: 0.000410, dice: 1.000702\n", "val: loss: 0.000181, bce: 0.000444, dice: 1.001384\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 264/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000171, bce: 0.000409, dice: 1.000698\n", "val: loss: 0.000181, bce: 0.000445, dice: 1.001406\n", "0m 9s\n", "\n", "\n", "Epoch 265/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000171, bce: 0.000409, dice: 1.000708\n", "val: loss: 0.000181, bce: 0.000443, dice: 1.001370\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 266/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000171, bce: 0.000408, dice: 1.000700\n", "val: loss: 0.000180, bce: 0.000443, dice: 1.001379\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 267/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000171, bce: 0.000408, dice: 1.000699\n", "val: loss: 0.000180, bce: 0.000442, dice: 1.001381\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 268/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000170, bce: 0.000407, dice: 1.000701\n", "val: loss: 0.000180, bce: 0.000441, dice: 1.001377\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 269/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000170, bce: 0.000405, dice: 1.000702\n", "val: loss: 0.000180, bce: 0.000441, dice: 1.001378\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 270/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000170, bce: 0.000404, dice: 1.000702\n", "val: loss: 0.000180, bce: 0.000440, dice: 1.001376\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 271/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000170, bce: 0.000405, dice: 1.000701\n", "val: loss: 0.000179, bce: 0.000439, dice: 1.001370\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 272/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000170, bce: 0.000404, dice: 1.000703\n", "val: loss: 0.000179, bce: 0.000439, dice: 1.001379\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 273/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000170, bce: 0.000404, dice: 1.000701\n", "val: loss: 0.000179, bce: 0.000440, dice: 1.001385\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 274/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000170, bce: 0.000404, dice: 1.000701\n", "val: loss: 0.000178, bce: 0.000438, dice: 1.001382\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 275/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000169, bce: 0.000403, dice: 1.000701\n", "val: loss: 0.000178, bce: 0.000438, dice: 1.001372\n", "0m 9s\n", "\n", "\n", "Epoch 276/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000169, bce: 0.000403, dice: 1.000700\n", "val: loss: 0.000178, bce: 0.000436, dice: 1.001381\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 277/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000401, dice: 1.000702\n", "val: loss: 0.000178, bce: 0.000437, dice: 1.001388\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 278/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000401, dice: 1.000703\n", "val: loss: 0.000178, bce: 0.000435, dice: 1.001369\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 279/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000399, dice: 1.000701\n", "val: loss: 0.000177, bce: 0.000435, dice: 1.001382\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 280/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000401, dice: 1.000703\n", "val: loss: 0.000181, bce: 0.000436, dice: 1.001333\n", "0m 9s\n", "\n", "\n", "Epoch 281/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000169, bce: 0.000401, dice: 1.000703\n", "val: loss: 0.000180, bce: 0.000436, dice: 1.001322\n", "0m 9s\n", "\n", "\n", "Epoch 282/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000399, dice: 1.000694\n", "val: loss: 0.000177, bce: 0.000434, dice: 1.001374\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 283/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000398, dice: 1.000699\n", "val: loss: 0.000176, bce: 0.000434, dice: 1.001367\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 284/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000397, dice: 1.000704\n", "val: loss: 0.000177, bce: 0.000431, dice: 1.001353\n", "0m 9s\n", "\n", "\n", "Epoch 285/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000398, dice: 1.000701\n", "val: loss: 0.000177, bce: 0.000431, dice: 1.001383\n", "0m 9s\n", "\n", "\n", "Epoch 286/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000396, dice: 1.000702\n", "val: loss: 0.000177, bce: 0.000431, dice: 1.001350\n", "0m 9s\n", "\n", "\n", "Epoch 287/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000169, bce: 0.000397, dice: 1.000700\n", "val: loss: 0.000176, bce: 0.000433, dice: 1.001360\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 288/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000398, dice: 1.000698\n", "val: loss: 0.000178, bce: 0.000431, dice: 1.001343\n", "0m 9s\n", "\n", "\n", "Epoch 289/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000395, dice: 1.000695\n", "val: loss: 0.000175, bce: 0.000432, dice: 1.001387\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 290/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000395, dice: 1.000696\n", "val: loss: 0.000178, bce: 0.000437, dice: 1.001426\n", "0m 9s\n", "\n", "\n", "Epoch 291/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000396, dice: 1.000705\n", "val: loss: 0.000174, bce: 0.000430, dice: 1.001385\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 292/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000166, bce: 0.000394, dice: 1.000701\n", "val: loss: 0.000174, bce: 0.000427, dice: 1.001364\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 293/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000394, dice: 1.000703\n", "val: loss: 0.000178, bce: 0.000429, dice: 1.001313\n", "0m 9s\n", "\n", "\n", "Epoch 294/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000392, dice: 1.000707\n", "val: loss: 0.000174, bce: 0.000427, dice: 1.001364\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 295/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000394, dice: 1.000690\n", "val: loss: 0.000175, bce: 0.000434, dice: 1.001362\n", "0m 9s\n", "\n", "\n", "Epoch 296/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000393, dice: 1.000697\n", "val: loss: 0.000173, bce: 0.000426, dice: 1.001361\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 297/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000391, dice: 1.000699\n", "val: loss: 0.000173, bce: 0.000427, dice: 1.001376\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 298/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000392, dice: 1.000700\n", "val: loss: 0.000174, bce: 0.000429, dice: 1.001411\n", "0m 9s\n", "\n", "\n", "Epoch 299/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000390, dice: 1.000705\n", "val: loss: 0.000174, bce: 0.000430, dice: 1.001395\n", "0m 9s\n", "\n", "\n", "Epoch 300/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000392, dice: 1.000692\n", "val: loss: 0.000174, bce: 0.000428, dice: 1.001412\n", "0m 9s\n", "\n", "\n", "Epoch 301/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000166, bce: 0.000391, dice: 1.000699\n", "val: loss: 0.000173, bce: 0.000427, dice: 1.001372\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 302/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000166, bce: 0.000390, dice: 1.000694\n", "val: loss: 0.000173, bce: 0.000424, dice: 1.001393\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 303/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000399, dice: 1.000698\n", "val: loss: 0.000175, bce: 0.000432, dice: 1.001419\n", "0m 9s\n", "\n", "\n", "Epoch 304/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000396, dice: 1.000696\n", "val: loss: 0.000172, bce: 0.000428, dice: 1.001327\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 305/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000392, dice: 1.000694\n", "val: loss: 0.000175, bce: 0.000425, dice: 1.001297\n", "0m 9s\n", "\n", "\n", "Epoch 306/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000389, dice: 1.000693\n", "val: loss: 0.000172, bce: 0.000421, dice: 1.001343\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 307/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000388, dice: 1.000697\n", "val: loss: 0.000171, bce: 0.000425, dice: 1.001334\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 308/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000386, dice: 1.000692\n", "val: loss: 0.000171, bce: 0.000420, dice: 1.001346\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 309/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000386, dice: 1.000699\n", "val: loss: 0.000171, bce: 0.000418, dice: 1.001321\n", "0m 9s\n", "\n", "\n", "Epoch 310/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000383, dice: 1.000692\n", "val: loss: 0.000170, bce: 0.000418, dice: 1.001341\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 311/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000162, bce: 0.000383, dice: 1.000695\n", "val: loss: 0.000170, bce: 0.000416, dice: 1.001348\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 312/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000383, dice: 1.000695\n", "val: loss: 0.000170, bce: 0.000418, dice: 1.001362\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 313/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000383, dice: 1.000697\n", "val: loss: 0.000171, bce: 0.000418, dice: 1.001358\n", "0m 9s\n", "\n", "\n", "Epoch 314/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000387, dice: 1.000691\n", "val: loss: 0.000174, bce: 0.000431, dice: 1.001371\n", "0m 9s\n", "\n", "\n", "Epoch 315/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000164, bce: 0.000388, dice: 1.000693\n", "val: loss: 0.000170, bce: 0.000418, dice: 1.001311\n", "0m 9s\n", "\n", "\n", "Epoch 316/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000384, dice: 1.000692\n", "val: loss: 0.000169, bce: 0.000415, dice: 1.001325\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 317/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000162, bce: 0.000382, dice: 1.000694\n", "val: loss: 0.000171, bce: 0.000415, dice: 1.001302\n", "0m 9s\n", "\n", "\n", "Epoch 318/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000164, bce: 0.000382, dice: 1.000692\n", "val: loss: 0.000170, bce: 0.000416, dice: 1.001296\n", "0m 9s\n", "\n", "\n", "Epoch 319/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000386, dice: 1.000681\n", "val: loss: 0.000169, bce: 0.000416, dice: 1.001317\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 320/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000162, bce: 0.000381, dice: 1.000698\n", "val: loss: 0.000171, bce: 0.000415, dice: 1.001297\n", "0m 9s\n", "\n", "\n", "Epoch 321/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000383, dice: 1.000683\n", "val: loss: 0.000168, bce: 0.000415, dice: 1.001329\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 322/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000161, bce: 0.000380, dice: 1.000691\n", "val: loss: 0.000168, bce: 0.000412, dice: 1.001323\n", "0m 9s\n", "\n", "\n", "Epoch 323/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000162, bce: 0.000380, dice: 1.000694\n", "val: loss: 0.000168, bce: 0.000411, dice: 1.001316\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 324/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000161, bce: 0.000376, dice: 1.000695\n", "val: loss: 0.000168, bce: 0.000411, dice: 1.001325\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 325/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000161, bce: 0.000377, dice: 1.000694\n", "val: loss: 0.000168, bce: 0.000414, dice: 1.001318\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 326/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000160, bce: 0.000377, dice: 1.000688\n", "val: loss: 0.000167, bce: 0.000410, dice: 1.001326\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 327/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000160, bce: 0.000376, dice: 1.000690\n", "val: loss: 0.000168, bce: 0.000409, dice: 1.001290\n", "0m 9s\n", "\n", "\n", "Epoch 328/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000162, bce: 0.000377, dice: 1.000683\n", "val: loss: 0.000170, bce: 0.000413, dice: 1.001361\n", "0m 9s\n", "\n", "\n", "Epoch 329/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000161, bce: 0.000376, dice: 1.000687\n", "val: loss: 0.000167, bce: 0.000411, dice: 1.001315\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 330/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000160, bce: 0.000375, dice: 1.000688\n", "val: loss: 0.000167, bce: 0.000409, dice: 1.001299\n", "0m 9s\n", "\n", "\n", "Epoch 331/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000381, dice: 1.000703\n", "val: loss: 0.000177, bce: 0.000417, dice: 1.001301\n", "0m 9s\n", "\n", "\n", "Epoch 332/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000162, bce: 0.000377, dice: 1.000679\n", "val: loss: 0.000171, bce: 0.000422, dice: 1.001363\n", "0m 9s\n", "\n", "\n", "Epoch 333/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000376, dice: 1.000687\n", "val: loss: 0.000166, bce: 0.000407, dice: 1.001307\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 334/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000160, bce: 0.000373, dice: 1.000686\n", "val: loss: 0.000166, bce: 0.000406, dice: 1.001319\n", "0m 9s\n", "\n", "\n", "Epoch 335/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000160, bce: 0.000375, dice: 1.000690\n", "val: loss: 0.000171, bce: 0.000410, dice: 1.001252\n", "0m 9s\n", "\n", "\n", "Epoch 336/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000165, bce: 0.000382, dice: 1.000691\n", "val: loss: 0.000171, bce: 0.000414, dice: 1.001203\n", "0m 9s\n", "\n", "\n", "Epoch 337/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000164, bce: 0.000382, dice: 1.000676\n", "val: loss: 0.000176, bce: 0.000415, dice: 1.001224\n", "0m 9s\n", "\n", "\n", "Epoch 338/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000164, bce: 0.000379, dice: 1.000677\n", "val: loss: 0.000168, bce: 0.000414, dice: 1.001272\n", "0m 9s\n", "\n", "\n", "Epoch 339/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000161, bce: 0.000379, dice: 1.000678\n", "val: loss: 0.000167, bce: 0.000410, dice: 1.001275\n", "0m 9s\n", "\n", "\n", "Epoch 340/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000162, bce: 0.000376, dice: 1.000670\n", "val: loss: 0.000178, bce: 0.000432, dice: 1.001372\n", "0m 9s\n", "\n", "\n", "Epoch 341/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000161, bce: 0.000376, dice: 1.000696\n", "val: loss: 0.000165, bce: 0.000407, dice: 1.001339\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 342/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000158, bce: 0.000372, dice: 1.000691\n", "val: loss: 0.000166, bce: 0.000404, dice: 1.001269\n", "0m 9s\n", "\n", "\n", "Epoch 343/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000371, dice: 1.000688\n", "val: loss: 0.000167, bce: 0.000406, dice: 1.001297\n", "0m 9s\n", "\n", "\n", "Epoch 344/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000372, dice: 1.000677\n", "val: loss: 0.000164, bce: 0.000408, dice: 1.001329\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 345/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000158, bce: 0.000371, dice: 1.000683\n", "val: loss: 0.000164, bce: 0.000404, dice: 1.001314\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 346/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000158, bce: 0.000370, dice: 1.000687\n", "val: loss: 0.000167, bce: 0.000404, dice: 1.001271\n", "0m 9s\n", "\n", "\n", "Epoch 347/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000160, bce: 0.000374, dice: 1.000675\n", "val: loss: 0.000164, bce: 0.000403, dice: 1.001293\n", "0m 9s\n", "\n", "\n", "Epoch 348/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000158, bce: 0.000369, dice: 1.000680\n", "val: loss: 0.000164, bce: 0.000400, dice: 1.001299\n", "0m 9s\n", "\n", "\n", "Epoch 349/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000160, bce: 0.000371, dice: 1.000679\n", "val: loss: 0.000164, bce: 0.000403, dice: 1.001299\n", "0m 9s\n", "\n", "\n", "Epoch 350/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000371, dice: 1.000690\n", "val: loss: 0.000168, bce: 0.000402, dice: 1.001262\n", "0m 9s\n", "\n", "\n", "Epoch 351/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000164, bce: 0.000376, dice: 1.000694\n", "val: loss: 0.000182, bce: 0.000418, dice: 1.001228\n", "0m 9s\n", "\n", "\n", "Epoch 352/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000167, bce: 0.000382, dice: 1.000673\n", "val: loss: 0.000167, bce: 0.000411, dice: 1.001333\n", "0m 9s\n", "\n", "\n", "Epoch 353/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000375, dice: 1.000681\n", "val: loss: 0.000166, bce: 0.000411, dice: 1.001358\n", "0m 9s\n", "\n", "\n", "Epoch 354/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000160, bce: 0.000373, dice: 1.000684\n", "val: loss: 0.000164, bce: 0.000409, dice: 1.001321\n", "0m 9s\n", "\n", "\n", "Epoch 355/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000371, dice: 1.000680\n", "val: loss: 0.000163, bce: 0.000400, dice: 1.001290\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 356/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000157, bce: 0.000369, dice: 1.000684\n", "val: loss: 0.000162, bce: 0.000401, dice: 1.001305\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 357/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000156, bce: 0.000366, dice: 1.000676\n", "val: loss: 0.000162, bce: 0.000399, dice: 1.001283\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 358/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000156, bce: 0.000365, dice: 1.000674\n", "val: loss: 0.000161, bce: 0.000398, dice: 1.001295\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 359/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000155, bce: 0.000362, dice: 1.000672\n", "val: loss: 0.000161, bce: 0.000400, dice: 1.001298\n", "0m 9s\n", "\n", "\n", "Epoch 360/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000156, bce: 0.000364, dice: 1.000677\n", "val: loss: 0.000161, bce: 0.000397, dice: 1.001287\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 361/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000156, bce: 0.000364, dice: 1.000677\n", "val: loss: 0.000161, bce: 0.000395, dice: 1.001278\n", "0m 9s\n", "\n", "\n", "Epoch 362/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000157, bce: 0.000363, dice: 1.000685\n", "val: loss: 0.000164, bce: 0.000396, dice: 1.001232\n", "0m 9s\n", "\n", "\n", "Epoch 363/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000163, bce: 0.000373, dice: 1.000674\n", "val: loss: 0.000170, bce: 0.000405, dice: 1.001233\n", "0m 9s\n", "\n", "\n", "Epoch 364/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000158, bce: 0.000367, dice: 1.000678\n", "val: loss: 0.000164, bce: 0.000400, dice: 1.001255\n", "0m 9s\n", "\n", "\n", "Epoch 365/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000168, bce: 0.000382, dice: 1.000676\n", "val: loss: 0.000165, bce: 0.000406, dice: 1.001231\n", "0m 9s\n", "\n", "\n", "Epoch 366/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000158, bce: 0.000369, dice: 1.000673\n", "val: loss: 0.000164, bce: 0.000401, dice: 1.001231\n", "0m 9s\n", "\n", "\n", "Epoch 367/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000158, bce: 0.000370, dice: 1.000671\n", "val: loss: 0.000162, bce: 0.000400, dice: 1.001233\n", "0m 9s\n", "\n", "\n", "Epoch 368/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000369, dice: 1.000677\n", "val: loss: 0.000162, bce: 0.000395, dice: 1.001240\n", "0m 9s\n", "\n", "\n", "Epoch 369/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000366, dice: 1.000690\n", "val: loss: 0.000171, bce: 0.000399, dice: 1.001226\n", "0m 9s\n", "\n", "\n", "Epoch 370/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000158, bce: 0.000366, dice: 1.000674\n", "val: loss: 0.000162, bce: 0.000394, dice: 1.001267\n", "0m 9s\n", "\n", "\n", "Epoch 371/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000156, bce: 0.000362, dice: 1.000674\n", "val: loss: 0.000162, bce: 0.000396, dice: 1.001246\n", "0m 9s\n", "\n", "\n", "Epoch 372/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000154, bce: 0.000360, dice: 1.000665\n", "val: loss: 0.000159, bce: 0.000396, dice: 1.001277\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 373/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000154, bce: 0.000361, dice: 1.000673\n", "val: loss: 0.000159, bce: 0.000393, dice: 1.001285\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 374/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000154, bce: 0.000358, dice: 1.000666\n", "val: loss: 0.000159, bce: 0.000392, dice: 1.001280\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 375/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000153, bce: 0.000358, dice: 1.000672\n", "val: loss: 0.000159, bce: 0.000392, dice: 1.001276\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 376/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000155, bce: 0.000358, dice: 1.000668\n", "val: loss: 0.000158, bce: 0.000393, dice: 1.001289\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 377/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000154, bce: 0.000361, dice: 1.000666\n", "val: loss: 0.000159, bce: 0.000391, dice: 1.001283\n", "0m 9s\n", "\n", "\n", "Epoch 378/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000153, bce: 0.000357, dice: 1.000672\n", "val: loss: 0.000158, bce: 0.000389, dice: 1.001262\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 379/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000153, bce: 0.000356, dice: 1.000670\n", "val: loss: 0.000158, bce: 0.000388, dice: 1.001263\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 380/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000154, bce: 0.000357, dice: 1.000668\n", "val: loss: 0.000163, bce: 0.000389, dice: 1.001220\n", "0m 9s\n", "\n", "\n", "Epoch 381/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000159, bce: 0.000365, dice: 1.000657\n", "val: loss: 0.000158, bce: 0.000392, dice: 1.001263\n", "0m 9s\n", "\n", "\n", "Epoch 382/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000153, bce: 0.000356, dice: 1.000662\n", "val: loss: 0.000158, bce: 0.000390, dice: 1.001282\n", "0m 9s\n", "\n", "\n", "Epoch 383/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000152, bce: 0.000354, dice: 1.000666\n", "val: loss: 0.000157, bce: 0.000389, dice: 1.001270\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 384/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000152, bce: 0.000353, dice: 1.000663\n", "val: loss: 0.000158, bce: 0.000391, dice: 1.001292\n", "0m 9s\n", "\n", "\n", "Epoch 385/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000153, bce: 0.000355, dice: 1.000662\n", "val: loss: 0.000163, bce: 0.000400, dice: 1.001304\n", "0m 9s\n", "\n", "\n", "Epoch 386/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000156, bce: 0.000357, dice: 1.000653\n", "val: loss: 0.000178, bce: 0.000420, dice: 1.001368\n", "0m 9s\n", "\n", "\n", "Epoch 387/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000173, bce: 0.000386, dice: 1.000657\n", "val: loss: 0.000173, bce: 0.000426, dice: 1.001288\n", "0m 9s\n", "\n", "\n", "Epoch 388/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000157, bce: 0.000369, dice: 1.000667\n", "val: loss: 0.000162, bce: 0.000394, dice: 1.001193\n", "0m 9s\n", "\n", "\n", "Epoch 389/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000161, bce: 0.000370, dice: 1.000645\n", "val: loss: 0.000159, bce: 0.000391, dice: 1.001225\n", "0m 9s\n", "\n", "\n", "Epoch 390/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000154, bce: 0.000358, dice: 1.000653\n", "val: loss: 0.000157, bce: 0.000390, dice: 1.001255\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 391/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000153, bce: 0.000355, dice: 1.000660\n", "val: loss: 0.000156, bce: 0.000388, dice: 1.001250\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 392/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000152, bce: 0.000354, dice: 1.000659\n", "val: loss: 0.000157, bce: 0.000390, dice: 1.001275\n", "0m 9s\n", "\n", "\n", "Epoch 393/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000152, bce: 0.000354, dice: 1.000658\n", "val: loss: 0.000156, bce: 0.000387, dice: 1.001252\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 394/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000151, bce: 0.000352, dice: 1.000659\n", "val: loss: 0.000156, bce: 0.000386, dice: 1.001271\n", "0m 9s\n", "\n", "\n", "Epoch 395/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000153, bce: 0.000353, dice: 1.000660\n", "val: loss: 0.000156, bce: 0.000385, dice: 1.001266\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 396/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000151, bce: 0.000352, dice: 1.000663\n", "val: loss: 0.000155, bce: 0.000382, dice: 1.001231\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 397/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000151, bce: 0.000351, dice: 1.000657\n", "val: loss: 0.000155, bce: 0.000381, dice: 1.001248\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 398/799\n", "----------\n", "LR 1e-05\n", "train: loss: 0.000151, bce: 0.000350, dice: 1.000661\n", "val: loss: 0.000158, bce: 0.000381, dice: 1.001202\n", "0m 9s\n", "\n", "\n", "Epoch 399/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000151, bce: 0.000348, dice: 1.000645\n", "val: loss: 0.000156, bce: 0.000381, dice: 1.001221\n", "0m 9s\n", "\n", "\n", "Epoch 400/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000150, bce: 0.000348, dice: 1.000651\n", "val: loss: 0.000155, bce: 0.000381, dice: 1.001230\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 401/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000150, bce: 0.000348, dice: 1.000655\n", "val: loss: 0.000155, bce: 0.000381, dice: 1.001233\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 402/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000150, bce: 0.000348, dice: 1.000656\n", "val: loss: 0.000155, bce: 0.000381, dice: 1.001234\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 403/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000348, dice: 1.000656\n", "val: loss: 0.000155, bce: 0.000381, dice: 1.001236\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 404/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000348, dice: 1.000656\n", "val: loss: 0.000155, bce: 0.000381, dice: 1.001238\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 405/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000348, dice: 1.000657\n", "val: loss: 0.000155, bce: 0.000381, dice: 1.001238\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 406/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000348, dice: 1.000658\n", "val: loss: 0.000155, bce: 0.000381, dice: 1.001238\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 407/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000348, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 408/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000348, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 409/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000658\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 410/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000658\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 411/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000658\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 412/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001240\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 413/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000658\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001240\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 414/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000658\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 415/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000658\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 416/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001240\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 417/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000380, dice: 1.001240\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 418/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000658\n", "val: loss: 0.000154, bce: 0.000379, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 419/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000379, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 420/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000379, dice: 1.001239\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 421/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000379, dice: 1.001240\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 422/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000347, dice: 1.000658\n", "val: loss: 0.000154, bce: 0.000379, dice: 1.001238\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 423/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000379, dice: 1.001238\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 424/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000379, dice: 1.001238\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 425/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000379, dice: 1.001237\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 426/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001237\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 427/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001238\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 428/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001236\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 429/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001237\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 430/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001236\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 431/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000656\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001238\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 432/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001237\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 433/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001235\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 434/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000346, dice: 1.000656\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001235\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 435/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000655\n", "val: loss: 0.000154, bce: 0.000378, dice: 1.001236\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 436/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000656\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001234\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 437/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000656\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001235\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 438/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000657\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001233\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 439/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000656\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001234\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 440/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000656\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001233\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 441/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000655\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001234\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 442/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000655\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001234\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 443/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000656\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001233\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 444/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000344, dice: 1.000655\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001234\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 445/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000345, dice: 1.000655\n", "val: loss: 0.000154, bce: 0.000377, dice: 1.001234\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 446/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000344, dice: 1.000655\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001233\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 447/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000344, dice: 1.000655\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001232\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 448/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000149, bce: 0.000344, dice: 1.000656\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001229\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 449/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000344, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001230\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 450/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000344, dice: 1.000655\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001229\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 451/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000344, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001230\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 452/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000344, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001230\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 453/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000344, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001232\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 454/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000344, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001231\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 455/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000376, dice: 1.001231\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 456/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000344, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000375, dice: 1.001231\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 457/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000375, dice: 1.001230\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 458/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000375, dice: 1.001228\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 459/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000375, dice: 1.001226\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 460/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000653\n", "val: loss: 0.000153, bce: 0.000375, dice: 1.001228\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 461/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000654\n", "val: loss: 0.000153, bce: 0.000375, dice: 1.001226\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 462/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000652\n", "val: loss: 0.000153, bce: 0.000375, dice: 1.001227\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 463/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000653\n", "val: loss: 0.000153, bce: 0.000375, dice: 1.001226\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 464/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000653\n", "val: loss: 0.000153, bce: 0.000374, dice: 1.001225\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 465/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000343, dice: 1.000652\n", "val: loss: 0.000153, bce: 0.000374, dice: 1.001224\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 466/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000153, bce: 0.000374, dice: 1.001227\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 467/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000153, bce: 0.000374, dice: 1.001227\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 468/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000653\n", "val: loss: 0.000153, bce: 0.000374, dice: 1.001225\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 469/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000153, bce: 0.000374, dice: 1.001225\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 470/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000153, bce: 0.000374, dice: 1.001224\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 471/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000153, bce: 0.000374, dice: 1.001223\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 472/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000651\n", "val: loss: 0.000153, bce: 0.000373, dice: 1.001223\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 473/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000153, bce: 0.000373, dice: 1.001226\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 474/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000653\n", "val: loss: 0.000153, bce: 0.000373, dice: 1.001224\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 475/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000152, bce: 0.000373, dice: 1.001224\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 476/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000152, bce: 0.000373, dice: 1.001223\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 477/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000342, dice: 1.000652\n", "val: loss: 0.000152, bce: 0.000373, dice: 1.001220\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 478/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000341, dice: 1.000652\n", "val: loss: 0.000152, bce: 0.000373, dice: 1.001220\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 479/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000341, dice: 1.000651\n", "val: loss: 0.000152, bce: 0.000373, dice: 1.001223\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 480/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000341, dice: 1.000651\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001222\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 481/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000341, dice: 1.000651\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001220\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 482/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000341, dice: 1.000650\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001220\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 483/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000341, dice: 1.000650\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001220\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 484/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000341, dice: 1.000650\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001221\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 485/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000651\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001220\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 486/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000650\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001219\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 487/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000650\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001222\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 488/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000148, bce: 0.000341, dice: 1.000650\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001218\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 489/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000650\n", "val: loss: 0.000152, bce: 0.000372, dice: 1.001220\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 490/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000341, dice: 1.000651\n", "val: loss: 0.000152, bce: 0.000371, dice: 1.001216\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 491/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000649\n", "val: loss: 0.000152, bce: 0.000371, dice: 1.001217\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 492/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000650\n", "val: loss: 0.000152, bce: 0.000371, dice: 1.001216\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 493/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000649\n", "val: loss: 0.000152, bce: 0.000371, dice: 1.001217\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 494/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000649\n", "val: loss: 0.000152, bce: 0.000371, dice: 1.001215\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 495/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000649\n", "val: loss: 0.000152, bce: 0.000371, dice: 1.001215\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 496/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000648\n", "val: loss: 0.000152, bce: 0.000371, dice: 1.001217\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 497/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000649\n", "val: loss: 0.000152, bce: 0.000371, dice: 1.001217\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 498/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000340, dice: 1.000649\n", "val: loss: 0.000152, bce: 0.000370, dice: 1.001213\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 499/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000339, dice: 1.000649\n", "val: loss: 0.000152, bce: 0.000370, dice: 1.001214\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 500/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000339, dice: 1.000648\n", "val: loss: 0.000151, bce: 0.000370, dice: 1.001217\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 501/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000339, dice: 1.000649\n", "val: loss: 0.000151, bce: 0.000370, dice: 1.001211\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 502/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000339, dice: 1.000647\n", "val: loss: 0.000151, bce: 0.000370, dice: 1.001215\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 503/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000339, dice: 1.000649\n", "val: loss: 0.000151, bce: 0.000370, dice: 1.001211\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 504/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000647\n", "val: loss: 0.000151, bce: 0.000370, dice: 1.001215\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 505/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000339, dice: 1.000648\n", "val: loss: 0.000151, bce: 0.000370, dice: 1.001211\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 506/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000339, dice: 1.000646\n", "val: loss: 0.000151, bce: 0.000369, dice: 1.001217\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 507/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000648\n", "val: loss: 0.000151, bce: 0.000369, dice: 1.001215\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 508/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000647\n", "val: loss: 0.000151, bce: 0.000369, dice: 1.001214\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 509/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000648\n", "val: loss: 0.000151, bce: 0.000369, dice: 1.001210\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 510/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000648\n", "val: loss: 0.000151, bce: 0.000369, dice: 1.001207\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 511/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000646\n", "val: loss: 0.000151, bce: 0.000369, dice: 1.001212\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 512/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000647\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001204\n", "0m 9s\n", "\n", "\n", "Epoch 513/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000645\n", "val: loss: 0.000151, bce: 0.000369, dice: 1.001213\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 514/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000648\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001207\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 515/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000647\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001206\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 516/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000338, dice: 1.000646\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001209\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 517/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000338, dice: 1.000646\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001210\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 518/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000147, bce: 0.000337, dice: 1.000645\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001212\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 519/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000646\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001211\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 520/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000646\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001209\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 521/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000646\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001208\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 522/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000645\n", "val: loss: 0.000151, bce: 0.000368, dice: 1.001208\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 523/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000646\n", "val: loss: 0.000151, bce: 0.000367, dice: 1.001205\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 524/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000645\n", "val: loss: 0.000151, bce: 0.000367, dice: 1.001203\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 525/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000645\n", "val: loss: 0.000150, bce: 0.000367, dice: 1.001203\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 526/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000645\n", "val: loss: 0.000150, bce: 0.000367, dice: 1.001201\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 527/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000337, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000367, dice: 1.001204\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 528/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000645\n", "val: loss: 0.000150, bce: 0.000367, dice: 1.001204\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 529/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000366, dice: 1.001203\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 530/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000367, dice: 1.001205\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 531/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000645\n", "val: loss: 0.000150, bce: 0.000366, dice: 1.001203\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 532/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000366, dice: 1.001202\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 533/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000366, dice: 1.001205\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 534/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000645\n", "val: loss: 0.000150, bce: 0.000366, dice: 1.001203\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 535/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000366, dice: 1.001204\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 536/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001201\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 537/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000335, dice: 1.000643\n", "val: loss: 0.000150, bce: 0.000366, dice: 1.001207\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 538/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000335, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000366, dice: 1.001201\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 539/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000335, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001203\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 540/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000335, dice: 1.000644\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001201\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 541/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000336, dice: 1.000643\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001199\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 542/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000335, dice: 1.000643\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001201\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 543/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000335, dice: 1.000643\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001200\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 544/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000335, dice: 1.000643\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001195\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 545/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000335, dice: 1.000643\n", "val: loss: 0.000150, bce: 0.000364, dice: 1.001194\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 546/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000335, dice: 1.000642\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001198\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 547/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000146, bce: 0.000334, dice: 1.000642\n", "val: loss: 0.000150, bce: 0.000365, dice: 1.001199\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 548/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000335, dice: 1.000643\n", "val: loss: 0.000149, bce: 0.000365, dice: 1.001199\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 549/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000334, dice: 1.000643\n", "val: loss: 0.000149, bce: 0.000364, dice: 1.001194\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 550/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000334, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000364, dice: 1.001197\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 551/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000335, dice: 1.000642\n", "val: loss: 0.000149, bce: 0.000364, dice: 1.001197\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 552/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000334, dice: 1.000642\n", "val: loss: 0.000149, bce: 0.000364, dice: 1.001193\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 553/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000334, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000364, dice: 1.001195\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 554/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000334, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000364, dice: 1.001194\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 555/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000334, dice: 1.000642\n", "val: loss: 0.000149, bce: 0.000364, dice: 1.001193\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 556/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000334, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000364, dice: 1.001195\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 557/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000334, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000363, dice: 1.001195\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 558/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000363, dice: 1.001194\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 559/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000363, dice: 1.001193\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 560/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000640\n", "val: loss: 0.000149, bce: 0.000363, dice: 1.001194\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 561/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000363, dice: 1.001190\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 562/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000640\n", "val: loss: 0.000149, bce: 0.000363, dice: 1.001193\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 563/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000640\n", "val: loss: 0.000149, bce: 0.000363, dice: 1.001194\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 564/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000640\n", "val: loss: 0.000149, bce: 0.000362, dice: 1.001192\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 565/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000641\n", "val: loss: 0.000149, bce: 0.000362, dice: 1.001190\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 566/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000639\n", "val: loss: 0.000149, bce: 0.000362, dice: 1.001191\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 567/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000640\n", "val: loss: 0.000149, bce: 0.000362, dice: 1.001191\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 568/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000640\n", "val: loss: 0.000149, bce: 0.000362, dice: 1.001186\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 569/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000333, dice: 1.000640\n", "val: loss: 0.000149, bce: 0.000362, dice: 1.001188\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 570/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000332, dice: 1.000639\n", "val: loss: 0.000149, bce: 0.000362, dice: 1.001190\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 571/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000332, dice: 1.000640\n", "val: loss: 0.000148, bce: 0.000362, dice: 1.001188\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 572/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000332, dice: 1.000639\n", "val: loss: 0.000148, bce: 0.000362, dice: 1.001191\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 573/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000332, dice: 1.000639\n", "val: loss: 0.000148, bce: 0.000362, dice: 1.001189\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 574/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000332, dice: 1.000639\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001188\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 575/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000332, dice: 1.000638\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001191\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 576/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000145, bce: 0.000332, dice: 1.000639\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001184\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 577/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000332, dice: 1.000638\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001187\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 578/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000332, dice: 1.000638\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001187\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 579/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000332, dice: 1.000639\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001185\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 580/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000637\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001190\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 581/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000639\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001185\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 582/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000638\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001187\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 583/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000637\n", "val: loss: 0.000148, bce: 0.000361, dice: 1.001188\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 584/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000638\n", "val: loss: 0.000148, bce: 0.000360, dice: 1.001185\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 585/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000638\n", "val: loss: 0.000148, bce: 0.000360, dice: 1.001182\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 586/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000636\n", "val: loss: 0.000148, bce: 0.000360, dice: 1.001190\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 587/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000638\n", "val: loss: 0.000148, bce: 0.000360, dice: 1.001183\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 588/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000637\n", "val: loss: 0.000148, bce: 0.000360, dice: 1.001188\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 589/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000637\n", "val: loss: 0.000148, bce: 0.000360, dice: 1.001183\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 590/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000637\n", "val: loss: 0.000148, bce: 0.000359, dice: 1.001182\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 591/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000331, dice: 1.000637\n", "val: loss: 0.000148, bce: 0.000359, dice: 1.001181\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 592/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000637\n", "val: loss: 0.000148, bce: 0.000359, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 593/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000148, bce: 0.000359, dice: 1.001184\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 594/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000637\n", "val: loss: 0.000148, bce: 0.000359, dice: 1.001177\n", "0m 9s\n", "\n", "\n", "Epoch 595/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000637\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001182\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 596/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000637\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 597/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001184\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 598/799\n", "----------\n", "LR 1.0000000000000002e-06\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 599/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 600/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 601/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 602/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 603/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 604/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 605/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 606/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 607/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 608/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 609/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000359, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 610/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 611/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 612/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 613/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 614/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 615/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 616/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000330, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 617/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 618/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 619/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 620/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 621/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 622/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 623/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 624/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001180\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 625/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 626/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 627/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 628/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 629/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 630/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 631/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 632/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 633/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 634/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 635/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 636/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 637/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 638/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 639/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 640/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 641/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 642/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 643/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 644/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 645/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 646/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 647/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 648/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 649/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 650/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 651/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000144, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 652/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 653/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 654/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 655/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 656/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 657/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001179\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 658/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 659/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 660/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000636\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 661/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 662/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 663/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 664/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 665/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 666/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 667/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 668/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 669/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 670/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 671/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 672/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 673/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 674/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 675/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 676/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 677/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 678/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 679/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 680/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001178\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 681/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 682/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 683/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 684/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 685/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000358, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 686/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 687/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 688/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 689/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 690/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 691/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 692/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 693/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 694/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 695/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 696/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 697/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 698/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 699/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 700/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 701/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 702/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 703/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 704/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001177\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 705/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 706/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 707/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 708/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 709/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 710/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000329, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 711/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 712/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 713/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 714/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 715/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 716/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 717/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 718/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 719/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 720/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 721/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 722/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 723/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 724/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 725/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 726/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 727/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 728/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 729/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 730/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 731/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000635\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 732/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 733/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 734/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 735/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001176\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 736/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 737/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 738/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 739/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 740/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 741/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 742/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 743/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 744/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 745/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 746/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 747/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 748/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 749/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 750/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 751/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 752/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 753/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 754/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 755/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 756/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 757/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 758/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001175\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 759/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 760/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 761/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 762/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 763/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 764/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 765/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 766/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 767/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000357, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 768/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 769/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 770/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 771/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 772/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 773/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 774/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 775/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 776/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 777/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 778/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 779/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 780/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 781/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 782/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 783/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 784/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 785/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 786/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 787/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 788/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 789/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000147, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 790/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001174\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 791/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 792/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 793/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 794/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 795/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 796/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 797/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 798/799\n", "----------\n", "LR 1.0000000000000002e-07\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "\n", "\n", "Epoch 799/799\n", "----------\n", "LR 1.0000000000000004e-08\n", "train: loss: 0.000143, bce: 0.000328, dice: 1.000634\n", "val: loss: 0.000146, bce: 0.000356, dice: 1.001173\n", "saving best model\n", "0m 9s\n", "Best val loss: 0.000146\n" ] } ], "source": [ "import torch\n", "import torch.optim as optim\n", "from torch.optim import lr_scheduler\n", "import time\n", "import copy\n", "\n", "device = torch.device(\"cuda:1\" if torch.cuda.is_available() else \"cpu\")\n", "# device = torch.device(\"cpu\")\n", "# print(torch.cuda.is_available())\n", "print(device)\n", "# print(next(model.parameters()).is_cuda)\n", "\n", "# num_class = 1\n", "\n", "model = pytorch_unet.UNet(n_out_class).to(device, dtype=torch.float)\n", "# model = pytorch_unet.UNet(n_out_class).to(device)\n", "\n", "# model = torch.hub.load('mateuszbuda/brain-segmentation-pytorch', 'unet',\n", "# in_channels=3, out_channels=1, init_features=32, pretrained=True).to(device, dtype=torch.float32)\n", "# model = torch.hub.load('mateuszbuda/brain-segmentation-pytorch', 'unet',\n", "# in_channels=3, out_channels=1, init_features=32, pretrained=True).to(device, dtype=torch.float64)\n", "\n", "# model = NewUnet(1, 1, bilinear=False)\n", "# model = NewUnet(dimensions=1)\n", "\n", "\n", "# r1 = model(inputs)\n", "# if torch.cuda.device_count() > 1:\n", "# print(\"Let's use\", torch.cuda.device_count(), \"GPUs!\")\n", "# # dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs\n", "# model = nn.DataParallel(model)\n", "\n", "model.to(device)\n", "# model = model.to(device, dtype=torch.float32)\n", "\n", "print(next(model.parameters()).is_cuda)\n", "\n", "# Observe that all parameters are being optimized\n", "# optimizer_ft = optim.SGD(model.parameters(), lr=10)\n", "optimizer_ft = optim.RMSprop(model.parameters(), lr=1e-4)\n", "\n", "\n", "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=200, gamma=0.1)\n", "\n", "model = train_model(model, optimizer_ft, exp_lr_scheduler, num_epochs=800, load_model=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def printImages(entering):\n", " for im in entering:\n", " print(np.amin(im), np.amax(im))\n", " print(im.sum())\n", " print(unravel_index(im.argmax(), im.shape))\n", "# unique, counts = np.unique(img, return_counts=True)\n", "# print(dict(zip(unique, counts)))\n", " print()\n", " plt.figure()\n", " plt.imshow(im)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-0.22008087 4.898781\n", "19362.621\n", "(240, 211)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "470\n", "(355, 318)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-0.21926743 4.912501\n", "18525.77\n", "(247, 212)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "803\n", "(351, 314)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-0.20158166 4.0491223\n", "19594.232\n", "(243, 203)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "806\n", "(349, 312)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-0.212795 3.0631254\n", "19324.09\n", "(227, 206)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "274\n", "(358, 317)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-0.22025777 4.047913\n", "19420.662\n", "(234, 201)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "689\n", "(351, 315)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-0.22168608 4.574376\n", "19171.67\n", "(244, 203)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "941\n", "(344, 302)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-0.22013587 4.8883753\n", "18554.22\n", "(246, 213)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "902\n", "(349, 312)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-0.220452 4.805774\n", "18979.846\n", "(244, 207)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "673\n", "(355, 309)\n", "\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# prediction\n", "from numpy import unravel_index\n", "import math\n", "%matplotlib notebook\n", "# %matplotlib widget\n", "\n", "\n", "model.eval() # Set model to evaluate mode\n", "\n", "# test_dataset = SimDataset(2, transform = trans)\n", "test_set = SimDataset(\n", " main_dir=val_dataset_path, \n", "# main_dir=train_dataset_path,\n", " transform=None\n", ")\n", "\n", "test_batch_size = 8\n", "test_loader = DataLoader(test_set, batch_size=test_batch_size , shuffle=True, num_workers=num_workers)\n", "inputs, labels = next(iter(test_loader))\n", "\n", "# for i in range(4):\n", "mask_prob = 0.4\n", "outputs = []\n", "\n", "for i in range(test_batch_size):\n", " img_num = i\n", " test_image = inputs.cpu()[img_num][0].numpy()\n", " test_mask = labels.cpu()[img_num][0].numpy()\n", "\n", " inputs = inputs.to(device, dtype=torch.float)\n", " labels = labels.to(device, dtype=torch.float)\n", "# pred = F.sigmoid(pred)\n", "\n", " pred = model(inputs)\n", " pred = F.sigmoid(pred)\n", " pred = pred.data.cpu().numpy()\n", " # pred = pred.data.cpu()\n", "\n", "\n", "\n", " predImg = pred[img_num][0]\n", " predMask = np.where(predImg > mask_prob, 1, 0)\n", "\n", " imgs = []\n", " imgs.append(test_image)\n", " imgs.append(test_mask)\n", " imgs.append(predMask)\n", " outputs.append(predMask)\n", " imgs.append(predImg)\n", " printImages(imgs)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "SMOOTH = 1e-6\n", "\n", "def iou_pytorch(outputs: torch.Tensor, labels: torch.Tensor):\n", " # You can comment out this line if you are passing tensors of equal shape\n", " # But if you are passing output from UNet or something it will most probably\n", " # be with the BATCH x 1 x H x W shape\n", "# outputs = outputs.squeeze(1) # BATCH x 1 x H x W => BATCH x H x W\n", " labels = labels.squeeze(1)\n", " \n", " intersection = (outputs & labels).float().sum((1, 2)) # Will be zero if Truth=0 or Prediction=0\n", "# intersection = (outputs & labels).float().sum() # Will be zero if Truth=0 or Prediction=0\n", " \n", " union = (outputs | labels).float().sum((1, 2)) # Will be zzero if both are 0\n", " iou = (intersection + SMOOTH) / (union + SMOOTH) # We smooth our devision to avoid 0/0\n", "\n", " \n", " thresholded = torch.clamp(20 * (iou - 0.5), 0, 10).ceil() / 10 # This is equal to comparing with thresolds\n", " \n", "# return thresholded # Or thresholded.mean() if you are interested in average across the batch\n", " return iou * 100\n", " \n", "# Numpy version\n", "# Well, it's the same function, so I'm going to omit the comments\n", "\n", "def iou_numpy(outputs: np.array, labels: np.array):\n", " outputs = outputs.squeeze(1)\n", " \n", " intersection = (outputs & labels).sum((1, 2))\n", " union = (outputs | labels).sum((1, 2))\n", " \n", " iou = (intersection + SMOOTH) / (union + SMOOTH)\n", " \n", " thresholded = np.ceil(np.clip(20 * (iou - 0.5), 0, 10)) / 10\n", " \n", " return thresholded # Or thresholded.mean()\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([95.1684, 95.1100, 95.9519, 91.4286, 96.5347, 94.8798, 93.9828, 92.2917])\n", "tensor(94.4185)\n" ] } ], "source": [ "# print(labels.cpu().shape)\n", "# print(len(outputs))\n", "outputs = np.array(outputs)\n", "# print(labels.shape)\n", "# print(outputs.shape)\n", "\n", "outputs = torch.from_numpy(outputs)\n", "outputs = outputs.cpu().long()\n", "labels = labels.cpu().long()\n", "\n", "iou = iou_pytorch(outputs.cpu(), labels.cpu())\n", "print(iou)\n", "print(iou.mean())\n", "# taret.cpu().long()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# torch.save(model.state_dict(), './best_model.pt')\n", "# m = pytorch_unet.UNet(n_out_class).to(device, dtype=torch.float)\n", "# m.load_state_dict(torch.load('./best_model.pt'))\n", "# print(m)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# print(np.amax(pred[0][0]))\n", "# plt.imshow(img)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# inputs, masks = next(iter(dataloaders['train']))\n", "# inputs = inputs.to(device)\n" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# import logging\n", "\n", "\n", "# # img_grid = torchvision.utils.make_grid(inputs)\n", "# # writer.add_image(\"train image\", img_grid)\n", "# writer.add_graph(model, inputs)\n", "# writer.close()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.9" } }, "nbformat": 4, "nbformat_minor": 4 }