"server/vscode:/vscode.git/clone" did not exist on "a2cf1bdb2fc0570dfca8b9ed2c8322f2040c3c07"
Unverified Commit d07bd02c authored by Gao, Xiang's avatar Gao, Xiang Committed by GitHub
Browse files

add tqdm and tensorboard support on example (#35)

parent f6b193bd
...@@ -14,3 +14,5 @@ a.out ...@@ -14,3 +14,5 @@ a.out
.ipynb_checkpoints .ipynb_checkpoints
benchmark_xyz benchmark_xyz
*.pyc *.pyc
*checkpoint*
/runs
\ No newline at end of file
FROM zasdfgbnm/pytorch-master FROM zasdfgbnm/pytorch-master
RUN pacman -Sy --noconfirm python-sphinx python2-sphinx flake8 RUN pacman -Sy --noconfirm python-sphinx python2-sphinx python-tqdm python2-tqdm flake8
RUN pip install tensorboardX && pip2 install tensorboardX
COPY . /torchani COPY . /torchani
RUN cd torchani && pip install . RUN cd torchani && pip install .
RUN cd torchani && pip2 install . RUN cd torchani && pip2 install .
...@@ -3,12 +3,20 @@ import torch ...@@ -3,12 +3,20 @@ import torch
import ignite import ignite
import torchani import torchani
import model import model
import tqdm
import timeit
import tensorboardX
import math
chunk_size = 256 chunk_size = 256
batch_chunks = 4 batch_chunks = 4
dataset_path = sys.argv[1] dataset_path = sys.argv[1]
dataset_checkpoint = 'dataset-checkpoint.dat' dataset_checkpoint = 'dataset-checkpoint.dat'
model_checkpoint = 'checkpoint.pt' model_checkpoint = 'checkpoint.pt'
max_epochs = 10
writer = tensorboardX.SummaryWriter()
start = timeit.default_timer()
shift_energy = torchani.EnergyShifter() shift_energy = torchani.EnergyShifter()
training, validation, testing = torchani.data.load_or_create( training, validation, testing = torchani.data.load_or_create(
...@@ -40,26 +48,44 @@ evaluator = ignite.engine.create_supervised_evaluator(container, metrics={ ...@@ -40,26 +48,44 @@ evaluator = ignite.engine.create_supervised_evaluator(container, metrics={
}) })
def hartree2kcal(x):
return 627.509 * x
@trainer.on(ignite.engine.Events.EPOCH_STARTED)
def init_tqdm(trainer):
trainer.state.tqdm = tqdm.tqdm(total=len(training), desc='epoch')
@trainer.on(ignite.engine.Events.ITERATION_COMPLETED) @trainer.on(ignite.engine.Events.ITERATION_COMPLETED)
def log_training_loss(trainer): def update_tqdm(trainer):
print("Epoch[{}] Loss: {:.2f}".format(trainer.state.epoch, trainer.state.tqdm.update(1)
trainer.state.output))
@trainer.on(ignite.engine.Events.EPOCH_COMPLETED) @trainer.on(ignite.engine.Events.EPOCH_COMPLETED)
def log_training_results(trainer): def finalize_tqdm(trainer):
evaluator.run(training) trainer.state.tqdm.close()
metrics = evaluator.state.metrics
print("Training Results - Epoch: {} RMSE: {:.2f}"
.format(trainer.state.epoch, metrics['RMSE']))
@trainer.on(ignite.engine.Events.EPOCH_COMPLETED) @trainer.on(ignite.engine.Events.EPOCH_STARTED)
def log_validation_results(trainer): def log_validation_results(trainer):
evaluator.run(validation) evaluator.run(validation)
metrics = evaluator.state.metrics metrics = evaluator.state.metrics
print("Validation Results - Epoch: {} RMSE: {:.2f}" rmse = hartree2kcal(metrics['RMSE'])
.format(trainer.state.epoch, metrics['RMSE'])) writer.add_scalar('validation_rmse_vs_epoch', rmse, trainer.state.epoch)
@trainer.on(ignite.engine.Events.EPOCH_STARTED)
def log_time(trainer):
elapsed = round(timeit.default_timer() - start, 2)
writer.add_scalar('time_vs_epoch', elapsed, trainer.state.epoch)
@trainer.on(ignite.engine.Events.ITERATION_COMPLETED)
def log_loss_and_time(trainer):
iteration = trainer.state.iteration
rmse = hartree2kcal(math.sqrt(trainer.state.output))
writer.add_scalar('training_rmse_vs_iteration', rmse, iteration)
trainer.run(training, max_epochs=10) trainer.run(training, max_epochs=max_epochs)
...@@ -4,6 +4,7 @@ import ignite ...@@ -4,6 +4,7 @@ import ignite
import torchani import torchani
import timeit import timeit
import model import model
import tqdm
chunk_size = 256 chunk_size = 256
batch_chunks = 4 batch_chunks = 4
...@@ -33,6 +34,22 @@ optimizer = torch.optim.Adam(nnp.parameters()) ...@@ -33,6 +34,22 @@ optimizer = torch.optim.Adam(nnp.parameters())
trainer = ignite.engine.create_supervised_trainer( trainer = ignite.engine.create_supervised_trainer(
container, optimizer, torchani.ignite.energy_mse_loss) container, optimizer, torchani.ignite.energy_mse_loss)
@trainer.on(ignite.engine.Events.EPOCH_STARTED)
def init_tqdm(trainer):
trainer.state.tqdm = tqdm.tqdm(total=len(dataloader), desc='epoch')
@trainer.on(ignite.engine.Events.ITERATION_COMPLETED)
def update_tqdm(trainer):
trainer.state.tqdm.update(1)
@trainer.on(ignite.engine.Events.EPOCH_COMPLETED)
def finalize_tqdm(trainer):
trainer.state.tqdm.close()
start = timeit.default_timer() start = timeit.default_timer()
trainer.run(dataloader, max_epochs=1) trainer.run(dataloader, max_epochs=1)
elapsed = round(timeit.default_timer() - start, 2) elapsed = round(timeit.default_timer() - start, 2)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment