Exemplo n.º 1
0
def predict_densenet(model_name, csv_pred):
    """
    A function to allow for quickly generating prediction using densenet
    after a model has been trained.

    Parameters
    ----------
    model_name : str
        The name of your trained model.
    csv_pred : str
        The name of a .csv file located in "data/user_properties". This is
        the data you are predicting. This file needs to have two columns:
        "formula" and "target".

    Returns
    -------
    input_values : list
        List containing original 'target' values.
    predicted_values : list
        List containing predicted values.
    """
    mat_props_root = r'data/user_properties/'
    csv_pred = f'{mat_props_root}{csv_pred}'
    batch_size = 2**10
    data_loaders = EDM_CsvLoader(csv_data=csv_pred, batch_size=batch_size)
    loaders = data_loaders.get_data_loaders(inference=True)
    data_loader = loaders

    pretrained_models = cons.mps
    if model_name in pretrained_models:
        info = f'{model_name}'
        weights_pth = ('data/user_properties/trained_weights/'
                       f'DenseNet-{model_name}.pth')
    else:
        info = f'CUSTOM_{model_name}'
        weights_pth = ('data/user_properties/trained_weights/'
                       f'DenseNet-CUSTOM_{model_name}.pth')

    model = load_densenet(info, batch_size)
    compute_device = get_compute_device()
    checkpoint = torch.load(weights_pth, map_location=compute_device)

    model.load_checkpoint(checkpoint, model_name)
    input_values, predicted_values = model.predict(data_loader)
    return (input_values, predicted_values)
Exemplo n.º 2
0
import os
import numpy as np
import pandas as pd
import torch

from sklearn.metrics import roc_auc_score

from crabnet.kingcrab import CrabNet
from crabnet.model import Model
from utils.get_compute_device import get_compute_device

compute_device = get_compute_device(prefer_last=False)
RNG_SEED = 42
torch.manual_seed(RNG_SEED)
np.random.seed(RNG_SEED)


# %%
def get_model(mat_prop,
              i,
              classification=False,
              batch_size=None,
              transfer=None,
              verbose=True):
    # Get the TorchedCrabNet architecture loaded
    model = Model(CrabNet(compute_device=compute_device).to(compute_device),
                  model_name=f'{mat_prop}{i}',
                  verbose=verbose)

    # Train network starting at pretrained weights
    if transfer is not None:
Exemplo n.º 3
0
from torch import nn

from sklearn.model_selection import KFold
from sklearn.metrics import roc_auc_score

from crabnet.kingcrab import CrabNet
from crabnet.model import Model
from utils.get_compute_device import get_compute_device

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.cm as cm
from matplotlib.ticker import AutoMinorLocator
from matplotlib.colors import Normalize

compute_device = get_compute_device()
data_type = torch.float

# %%
all_symbols = [
    'None', 'H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg',
    'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn',
    'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb',
    'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In',
    'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm',
    'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta',
    'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At',
    'Rn', 'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk',
    'Cf', 'Es', 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt',
    'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og'
]
Exemplo n.º 4
0
import os
import numpy as np
import pandas as pd
import torch

from sklearn.metrics import roc_auc_score

from crabnet.kingcrab import CrabNet
from crabnet.model import Model
from utils.get_compute_device import get_compute_device

compute_device = get_compute_device(prefer_last=True)
RNG_SEED = 42
torch.manual_seed(RNG_SEED)
np.random.seed(RNG_SEED)


# %%
def get_model(data_dir,
              mat_prop,
              classification=False,
              batch_size=None,
              transfer=None,
              verbose=True):
    # Get the TorchedCrabNet architecture loaded
    model = Model(CrabNet(compute_device=compute_device).to(compute_device),
                  model_name=f'{mat_prop}',
                  verbose=verbose)

    # Train network starting at pretrained weights
    if transfer is not None:
Exemplo n.º 5
0
    def __init__(self,
                 model_type,
                 elem_prop,
                 mat_prop,
                 input_dims,
                 hidden_dims,
                 output_dims,
                 out_dir,
                 edm=False,
                 batch_size=1,
                 random_seed=None,
                 save_network_info=True):
        super(NeuralNetWrapper, self).__init__()

        self.model_type = model_type
        self.elem_prop = elem_prop
        self.mat_prop = mat_prop

        self.input_dims = input_dims
        self.hidden_dims = hidden_dims
        self.output_dims = output_dims

        self.out_dir = out_dir
        self.edm = edm
        self.batch_size = batch_size
        self.random_seed = random_seed
        self.data_type = torch.float

        self.save_network_info = save_network_info

        # Default to using the last GPU available
        self.CUDA_count = torch.cuda.device_count()
        self.compute_device = get_compute_device()

        print(f'Creating Model of type {self.model_type}')
        if self.model_type == 'CrabNet':
            self.model = CrabNet(self.compute_device,
                                 input_dims=self.input_dims,
                                 d_model=201,
                                 nhead=3,
                                 num_layers=3,
                                 dim_feedforward=64,
                                 dropout=0.1,
                                 edm=self.edm)
        elif self.model_type == 'DenseNet':
            self.model = DenseNet(self.compute_device,
                                  input_dims=self.input_dims,
                                  hidden_dims=self.hidden_dims,
                                  output_dims=self.output_dims,
                                  dropout=0.1,
                                  edm=self.edm)

        self.model.to(self.compute_device,
                      dtype=self.data_type,
                      non_blocking=True)

        self.num_network_params = count_parameters(self.model)
        print(f'number of network params: {self.num_network_params}')

        # self.criterion = nn.MSELoss()
        self.criterion = nn.L1Loss()
        # self.optim_lr = 1e-3
        # self.optimizer = optim.Adam(self.model.parameters(), lr=self.optim_lr)
        self.optim_lr = 5e-4
        # self.optimizer = optim.AdamW(self.model.parameters(), lr=1e-3)
        self.optimizer = optim.AdamW(self.model.parameters(),
                                     lr=self.optim_lr,
                                     weight_decay=1e-6)

        # Logging
        self.start_time = datetime.now()
        self.start_datetime = self.start_time.strftime('%Y-%m-%d-%H%M%S.%f')
        self.log_filename = (f'{self.start_datetime}-{self.model_type}-'
                             f'{self.elem_prop}-{self.mat_prop}.log')
        self.sub_dir = (f'{self.start_datetime}-{xstrh(self.random_seed)}'
                        f'{self.model_type}-'
                        f'{self.elem_prop}-{self.mat_prop}')
        self.log_dir = os.path.join(self.out_dir, self.sub_dir)

        if 'CUSTOM' in self.mat_prop:
            os.makedirs(self.log_dir, exist_ok=True)

        if self.save_network_info:
            os.makedirs(self.log_dir, exist_ok=True)
            self.log_file = os.path.join(self.out_dir, self.sub_dir,
                                         self.log_filename)

            print(56 * '*')
            print(f'creating and writing to log file {self.log_file}')
            print(56 * '*')
            with open(self.log_file, 'a') as f:
                try:
                    f.write('Start time: ')
                    f.write(f'{self.start_datetime}\n')
                    f.write(f'random seed: {self.random_seed}\n')
                    f.write('Model type: ')
                    f.write(f'{self.model_type}\n')
                    f.write('Material property: ')
                    f.write(f'{self.mat_prop}\n')
                    f.write('Element property: ')
                    f.write(f'{self.elem_prop}\n')
                    f.write(f'EDM input: {self.edm}\n')
                    f.write('Network architecture:\n')
                    f.write(f'{self.model}\n')
                    f.write(f'Number of params: ')
                    f.write(f'{self.num_network_params}\n')
                    f.write(f'CUDA count: {self.CUDA_count}\n')
                    f.write(f'Compute device: {self.compute_device}\n')
                    f.write('Criterion and Optimizer:\n')
                    f.write(f'{self.criterion}\n')
                    f.write(f'{self.optimizer}\n')
                    f.write(56 * '*' + '\n')
                except:
                    pass