-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrain.py
60 lines (55 loc) · 1.56 KB
/
train.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# based on https://github.com/Project-MONAI/tutorials/blob/master/3d_segmentation/spleen_segmentation_3d_lightning.ipynb
from monai.utils import set_determinism
from monai.transforms import (
AsDiscrete,
AddChanneld,
Compose,
CropForegroundd,
LoadImaged,
Orientationd,
RandCropByPosNegLabeld,
ScaleIntensityRanged,
Spacingd,
ToTensord,
)
from monai.networks.nets import UNet
from monai.networks.layers import Norm
from monai.metrics import compute_meandice
from monai.losses import DiceLoss
from monai.inferers import sliding_window_inference
from monai.data import CacheDataset, list_data_collate
from monai.config import print_config
from monai.apps import download_and_extract
import torch
import pytorch_lightning
from pytorch_lightning.callbacks.model_checkpoint import ModelCheckpoint
import matplotlib.pyplot as plt
import tempfile
import shutil
import os
import glob
from model import Net
# initialise the LightningModule
net = Net()
# set up loggers and checkpoints
log_dir = os.path.join(root_dir, "logs")
tb_logger = pytorch_lightning.loggers.TensorBoardLogger(
save_dir=log_dir
)
checkpoint_callback = ModelCheckpoint(
filepath=os.path.join(
log_dir, "{epoch}-{val_loss:.2f}-{val_dice:.2f}")
)
# initialise Lightning's trainer.
trainer = pytorch_lightning.Trainer(
gpus=[0],
max_epochs=600,
logger=tb_logger,
checkpoint_callback=checkpoint_callback,
num_sanity_val_steps=1,
)
# train
trainer.fit(net)
print(
f"train completed, best_metric: {net.best_val_dice:.4f} "
f"at epoch {net.best_val_epoch}")