diff --git a/python/ray/tune/logger.py b/python/ray/tune/logger.py index 2aa30ceb5..6095cfb4d 100644 --- a/python/ray/tune/logger.py +++ b/python/ray/tune/logger.py @@ -5,10 +5,12 @@ from __future__ import print_function import csv import json import logging -import numpy as np import os import yaml import distutils.version +import numbers + +import numpy as np import ray.cloudpickle as cloudpickle from ray.tune.log_sync import get_syncer @@ -255,11 +257,19 @@ class _SafeFallbackEncoder(json.JSONEncoder): def default(self, value): try: if np.isnan(value): - return None - if np.issubdtype(value, float): - return float(value) - if np.issubdtype(value, int): + return self.nan_str + + if (type(value).__module__ == np.__name__ + and isinstance(value, np.ndarray)): + return value.tolist() + + if issubclass(type(value), numbers.Integral): return int(value) + if issubclass(type(value), numbers.Number): + return float(value) + + return super(_SafeFallbackEncoder, self).default(value) + except Exception: return str(value) # give up, just stringify it (ok for logs)