Train AGAT model

Python script

import os
import torch.nn as nn
from agat.model import Fit

train_config = {
    'verbose': 1, # `0`: no train and validation output; `1`: Validation and test output; `2`: train, validation, and test output.
    'dataset_path': os.path.join('dataset', 'all_graphs.bin'),
    'model_save_dir': 'agat_model',
    'epochs': 1000,
    'output_files': 'out_file',
    'device': 'cuda:0',
    'validation_size': 0.15,
    'test_size': 0.15,
    'early_stop': True,
    'stop_patience': 300,
    'head_list': ['mul', 'div', 'free'],
    'gat_node_dim_list': [len(default_elements), 100, 100, 100],
    'energy_readout_node_list': [len(head_list)*gat_node_dim_list[-1], 100, 50, 30, 10, 3, FIX_VALUE[0]],
    'force_readout_node_list': [len(head_list)*gat_node_dim_list[-1], 100, 50, 30, 10, FIX_VALUE[1]],
    'stress_readout_node_list': [len(head_list)*gat_node_dim_list[-1], 100, 50, 30, 10, FIX_VALUE[2]],
    'bias': True,
    'negative_slope': 0.2,
    'criterion': nn.MSELoss(),
    'a': 1.0,
    'b': 1.0,
    'c': 0.0,
    # 'optimizer': 'adam',
    'learning_rate': 0.0001,
    'weight_decay': 0.0, # weight decay (L2 penalty)
    'batch_size': 64,
    'val_batch_size': 400,
    'transfer_learning': False,
    'trainable_layers': -4,
    'mask_fixed': False,
    'tail_readout_no_act': [3,3,3],
    # 'adsorbate': False, #  or not when building graphs.
    'adsorbate_coeff': 20.0 # indentify and specify the importance of adsorbate atoms with respective to surface atoms. zero for equal importance.
    }

f = Fit(**train_config)
f.fit()

See default_train_config to know how to use the parameter settings.

Output

The file structure:

.
├── agat_model
│   ├── agat_model.json
│   ├── agat.pth
│   └── agat_state_dict.pth
├── dataset
│   ├── all_graphs.bin
│   ├── fname_prop.csv
│   └── graph_build_scheme.json
├── fit.log
├── out_file
│   ├── energy_test_pred_true.txt
│   ├── energy_val_pred_true.txt
│   ├── force_test_pred_true.txt
│   ├── force_val_pred_true.txt
│   ├── stress_test_pred_true.txt
│   └── stress_val_pred_true.txt
└── train.py
Folder/File File Explanation
agat_model ─── A directory for saving well-trained model.
├── agat_model.json An information file tells you how to build an AGAT model.
├── agat.pth The saved AGAT model including model structure and parameters.
└── agat_state_dict.pth Model and optimizer state dict file including model parameters only. You will need to construct a model or optimizer before using this file.
dataset ─── A directory for the database.
├── all_graphs.bin Binary file of the DGL graphs
├── fname_prop.csv A file storing the structural file name, properties, and paths. This file will not be used in the training, but is useful for checking the raw data.
└── graph_build_scheme.json An information file tells you how to build the database. When deploying the well-trained model, this file is useful to construct new graphs.
fit.log The training log file. The train_config['verbose'] controls the verbosity.
out_file ─── A directory to store ouputs of true and predicted properties. Folder name specified by train_config['output_files'].
├── energy_test_pred_true.txt Predicted and true energy on the test dataset.
├── energy_val_pred_true.txt Predicted and true energy on the validation dataset.
├── force_test_pred_true.txt Predicted and true force on the test dataset.
├── force_val_pred_true.txt Predicted and true force on the validation dataset.
├── stress_test_pred_true.txt Predicted and true stress on the test dataset.
└── stress_val_pred_true.txt Predicted and true stress on the validation dataset.
train.py The training script.