Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

yapf fixes deepchem/models #3186

Merged
merged 1 commit into from
Jan 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 44 additions & 43 deletions deepchem/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,68 +13,69 @@

# Tensorflow Dependency Models
try:
from deepchem.models.keras_model import KerasModel
from deepchem.models.keras_model import KerasModel

from deepchem.models.IRV import MultitaskIRVClassifier
from deepchem.models.robust_multitask import RobustMultitaskClassifier
from deepchem.models.robust_multitask import RobustMultitaskRegressor
from deepchem.models.progressive_multitask import ProgressiveMultitaskRegressor, ProgressiveMultitaskClassifier
from deepchem.models.graph_models import WeaveModel, DTNNModel, DAGModel, GraphConvModel, MPNNModel
from deepchem.models.scscore import ScScoreModel
from deepchem.models.IRV import MultitaskIRVClassifier
from deepchem.models.robust_multitask import RobustMultitaskClassifier
from deepchem.models.robust_multitask import RobustMultitaskRegressor
from deepchem.models.progressive_multitask import ProgressiveMultitaskRegressor, ProgressiveMultitaskClassifier
from deepchem.models.graph_models import WeaveModel, DTNNModel, DAGModel, GraphConvModel, MPNNModel
from deepchem.models.scscore import ScScoreModel

from deepchem.models.seqtoseq import SeqToSeq
from deepchem.models.gan import GAN, WGAN
from deepchem.models.molgan import BasicMolGANModel
from deepchem.models.text_cnn import TextCNNModel
from deepchem.models.atomic_conv import AtomicConvModel
from deepchem.models.chemnet_models import Smiles2Vec, ChemCeption
from deepchem.models.seqtoseq import SeqToSeq
from deepchem.models.gan import GAN, WGAN
from deepchem.models.molgan import BasicMolGANModel
from deepchem.models.text_cnn import TextCNNModel
from deepchem.models.atomic_conv import AtomicConvModel
from deepchem.models.chemnet_models import Smiles2Vec, ChemCeption
except ModuleNotFoundError as e:
logger.warning(
f'Skipped loading some Tensorflow models, missing a dependency. {e}')
logger.warning(
f'Skipped loading some Tensorflow models, missing a dependency. {e}')

# scikit-learn model
from deepchem.models.sklearn_models import SklearnModel
from deepchem.models.gbdt_models import GBDTModel

# PyTorch models
try:
from deepchem.models.torch_models import TorchModel
from deepchem.models.torch_models import AttentiveFP, AttentiveFPModel
from deepchem.models.torch_models import CGCNN, CGCNNModel
from deepchem.models.torch_models import GAT, GATModel
from deepchem.models.torch_models import GCN, GCNModel
from deepchem.models.torch_models import LCNN, LCNNModel
from deepchem.models.torch_models import Pagtn, PagtnModel
from deepchem.models.fcnet import MultitaskRegressor, MultitaskClassifier, MultitaskFitTransformRegressor
from deepchem.models.torch_models import MEGNetModel
from deepchem.models.torch_models import CNN
from deepchem.models.torch_models import TorchModel
from deepchem.models.torch_models import AttentiveFP, AttentiveFPModel
from deepchem.models.torch_models import CGCNN, CGCNNModel
from deepchem.models.torch_models import GAT, GATModel
from deepchem.models.torch_models import GCN, GCNModel
from deepchem.models.torch_models import LCNN, LCNNModel
from deepchem.models.torch_models import Pagtn, PagtnModel
from deepchem.models.fcnet import MultitaskRegressor, MultitaskClassifier, MultitaskFitTransformRegressor
from deepchem.models.torch_models import MEGNetModel
from deepchem.models.torch_models import CNN
except ModuleNotFoundError as e:
logger.warning(
f'Skipped loading some PyTorch models, missing a dependency. {e}')
logger.warning(
f'Skipped loading some PyTorch models, missing a dependency. {e}')

# Pytorch models with torch-geometric dependency
try:
# TODO We should clean up DMPNN and remove torch_geometric dependency during import
from deepchem.models.torch_models import DMPNN, DMPNNModel
# TODO We should clean up DMPNN and remove torch_geometric dependency during import
from deepchem.models.torch_models import DMPNN, DMPNNModel
except ImportError as e:
logger.warning(
f'Skipped loading modules with pytorch-geometric dependency, missing a dependency. {e}'
)
logger.warning(
f'Skipped loading modules with pytorch-geometric dependency, missing a dependency. {e}'
)

# Pytorch-lightning modules import
try:
from deepchem.models.lightning import DCLightningModule, DCLightningDatasetModule
from deepchem.models.lightning import DCLightningModule, DCLightningDatasetModule
except ModuleNotFoundError as e:
logger.warning(
f'Skipped loading modules with pytorch-lightning dependency, missing a dependency. {e}'
)
logger.warning(
f'Skipped loading modules with pytorch-lightning dependency, missing a dependency. {e}'
)

# Jax models
try:
from deepchem.models.jax_models import JaxModel
from deepchem.models.jax_models import PINNModel
from deepchem.models.jax_models import JaxModel
from deepchem.models.jax_models import PINNModel
except ModuleNotFoundError as e:
logger.warning(f'Skipped loading some Jax models, missing a dependency. {e}')
logger.warning(
f'Skipped loading some Jax models, missing a dependency. {e}')

#####################################################################################
# Compatibility imports for renamed XGBoost models. Remove below with DeepChem 3.0.
Expand All @@ -86,8 +87,8 @@
# Compatibility imports for renamed TensorGraph models. Remove below with DeepChem 3.0.
########################################################################################
try:
from deepchem.models.text_cnn import TextCNNTensorGraph
from deepchem.models.graph_models import WeaveTensorGraph, DTNNTensorGraph, DAGTensorGraph, GraphConvTensorGraph, MPNNTensorGraph
from deepchem.models.IRV import TensorflowMultitaskIRVClassifier
from deepchem.models.text_cnn import TextCNNTensorGraph
from deepchem.models.graph_models import WeaveTensorGraph, DTNNTensorGraph, DAGTensorGraph, GraphConvTensorGraph, MPNNTensorGraph
from deepchem.models.IRV import TensorflowMultitaskIRVClassifier
except ModuleNotFoundError:
pass
pass
196 changes: 98 additions & 98 deletions deepchem/models/callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,109 +5,109 @@


class ValidationCallback(object):
"""Performs validation while training a KerasModel.
"""Performs validation while training a KerasModel.

This is a callback that can be passed to fit(). It periodically computes a
set of metrics over a validation set, writes them to a file, and keeps track
of the best score. In addition, it can save the best model parameters found
so far to a directory on disk, updating them every time it finds a new best
validation score.
This is a callback that can be passed to fit(). It periodically computes a
set of metrics over a validation set, writes them to a file, and keeps track
of the best score. In addition, it can save the best model parameters found
so far to a directory on disk, updating them every time it finds a new best
validation score.

If Tensorboard logging is enabled on the KerasModel, the metrics are also
logged to Tensorboard. This only happens when validation coincides with a
step on which the model writes to the log. You should therefore make sure
that this callback's reporting interval is an even fraction or multiple of
the model's logging interval.
"""
If Tensorboard logging is enabled on the KerasModel, the metrics are also
logged to Tensorboard. This only happens when validation coincides with a
step on which the model writes to the log. You should therefore make sure
that this callback's reporting interval is an even fraction or multiple of
the model's logging interval.
"""

def __init__(self,
dataset,
interval,
metrics,
output_file=sys.stdout,
save_dir=None,
save_metric=0,
save_on_minimum=True,
transformers=[]):
"""Create a ValidationCallback.
def __init__(self,
dataset,
interval,
metrics,
output_file=sys.stdout,
save_dir=None,
save_metric=0,
save_on_minimum=True,
transformers=[]):
"""Create a ValidationCallback.

Parameters
----------
dataset: dc.data.Dataset
the validation set on which to compute the metrics
interval: int
the interval (in training steps) at which to perform validation
metrics: list of dc.metrics.Metric
metrics to compute on the validation set
output_file: file
to file to which results should be written
save_dir: str
if not None, the model parameters that produce the best validation score
will be written to this directory
save_metric: int
the index of the metric to use when deciding whether to write a new set
of parameters to disk
save_on_minimum: bool
if True, the best model is considered to be the one that minimizes the
validation metric. If False, the best model is considered to be the one
that maximizes it.
transformers: List[Transformer]
List of `dc.trans.Transformer` objects. These transformations
must have been applied to `dataset` previously. The dataset will
be untransformed for metric evaluation.
"""
self.dataset = dataset
self.interval = interval
self.metrics = metrics
self.output_file = output_file
self.save_dir = save_dir
self.save_metric = save_metric
self.save_on_minimum = save_on_minimum
self._best_score = None
self.transformers = transformers
Parameters
----------
dataset: dc.data.Dataset
the validation set on which to compute the metrics
interval: int
the interval (in training steps) at which to perform validation
metrics: list of dc.metrics.Metric
metrics to compute on the validation set
output_file: file
to file to which results should be written
save_dir: str
if not None, the model parameters that produce the best validation score
will be written to this directory
save_metric: int
the index of the metric to use when deciding whether to write a new set
of parameters to disk
save_on_minimum: bool
if True, the best model is considered to be the one that minimizes the
validation metric. If False, the best model is considered to be the one
that maximizes it.
transformers: List[Transformer]
List of `dc.trans.Transformer` objects. These transformations
must have been applied to `dataset` previously. The dataset will
be untransformed for metric evaluation.
"""
self.dataset = dataset
self.interval = interval
self.metrics = metrics
self.output_file = output_file
self.save_dir = save_dir
self.save_metric = save_metric
self.save_on_minimum = save_on_minimum
self._best_score = None
self.transformers = transformers

def __call__(self, model, step):
"""This is invoked by the KerasModel after every step of fitting.
def __call__(self, model, step):
"""This is invoked by the KerasModel after every step of fitting.

Parameters
----------
model: KerasModel
the model that is being trained
step: int
the index of the training step that has just completed
"""
if step % self.interval != 0:
return
scores = model.evaluate(self.dataset, self.metrics, self.transformers)
message = 'Step %d validation:' % step
for key in scores:
message += ' %s=%g' % (key, scores[key])
print(message, file=self.output_file)
if model.tensorboard:
for key in scores:
model._log_scalar_to_tensorboard(key, scores[key],
model.get_global_step())
score = scores[self.metrics[self.save_metric].name]
if not self.save_on_minimum:
score = -score
if self._best_score is None or score < self._best_score:
self._best_score = score
if self.save_dir is not None:
model.save_checkpoint(model_dir=self.save_dir)
if model.wandb_logger is not None:
# Log data to Wandb
data = {'eval/' + k: v for k, v in scores.items()}
model.wandb_logger.log_data(data, step, dataset_id=id(self.dataset))
Parameters
----------
model: KerasModel
the model that is being trained
step: int
the index of the training step that has just completed
"""
if step % self.interval != 0:
return
scores = model.evaluate(self.dataset, self.metrics, self.transformers)
message = 'Step %d validation:' % step
for key in scores:
message += ' %s=%g' % (key, scores[key])
print(message, file=self.output_file)
if model.tensorboard:
for key in scores:
model._log_scalar_to_tensorboard(key, scores[key],
model.get_global_step())
score = scores[self.metrics[self.save_metric].name]
if not self.save_on_minimum:
score = -score
if self._best_score is None or score < self._best_score:
self._best_score = score
if self.save_dir is not None:
model.save_checkpoint(model_dir=self.save_dir)
if model.wandb_logger is not None:
# Log data to Wandb
data = {'eval/' + k: v for k, v in scores.items()}
model.wandb_logger.log_data(data, step, dataset_id=id(self.dataset))

def get_best_score(self):
"""This getter returns the best score evaluated on the validation set.
def get_best_score(self):
"""This getter returns the best score evaluated on the validation set.

Returns
-------
float
The best score.
"""
if self.save_on_minimum:
return self._best_score
else:
return -self._best_score
Returns
-------
float
The best score.
"""
if self.save_on_minimum:
return self._best_score
else:
return -self._best_score
Loading