Пример #1
0
    def on_train_begin(self, logs=None):  # pylint: disable=unused-argument
        if not self.run:
            return
        params = dict(
            num_layers=len(self.model.layers),
            optimizer_name=type(self.model.optimizer).__name__,
        )

        if hasattr(self.model.optimizer, "lr"):
            params["learning_rate"] = sanitize_np_types(
                self.model.optimizer.lr if type(self.model.optimizer.lr) is
                float else keras.backend.eval(self.model.optimizer.lr))
        if hasattr(self.model.optimizer, "epsilon"):
            params["epsilon"] = sanitize_np_types(
                self.model.optimizer.epsilon
                if type(self.model.optimizer.epsilon) is float else keras.
                backend.eval(self.model.optimizer.epsilon))

        self.run.log_inputs(**params)
        sum_list = []
        self.model.summary(print_fn=sum_list.append)
        summary = "\n".join(sum_list)
        rel_path = self.run.get_outputs_path("model_summary.txt")
        with open(rel_path, "w") as f:
            f.write(summary)
        self.run.log_file_ref(path=rel_path)
Пример #2
0
    def _get_step_summary(self) -> Optional[Dict]:
        _count = self.df.step.count()
        if _count == 0:
            return None

        return {
            "count": sanitize_np_types(_count),
            "min": sanitize_np_types(self.df.step.iloc[0]),
            "max": sanitize_np_types(self.df.step.iloc[-1]),
        }
Пример #3
0
    def on_train_begin(self, logs=None):  # pylint: disable=unused-argument
        if not self.run:
            return

        params = {}

        try:
            params["num_layers"] = len(self.model.layers)
        except Exception:  # noqa
            pass

        try:
            params["optimizer_name"] = type(self.model.optimizer).__name__
        except Exception:  # noqa
            pass

        try:
            if hasattr(self.model.optimizer, "lr"):
                params["optimizer_lr"] = sanitize_np_types(
                    self.model.optimizer.lr
                    if type(self.model.optimizer.lr) is float
                    else keras.backend.eval(self.model.optimizer.lr)
                )
        except Exception:  # noqa
            pass

        try:
            if hasattr(self.model.optimizer, "epsilon"):
                params["optimizer_epsilon"] = sanitize_np_types(
                    self.model.optimizer.epsilon
                    if type(self.model.optimizer.epsilon) is float
                    else keras.backend.eval(self.model.optimizer.epsilon)
                )
        except Exception:  # noqa
            pass

        if params:
            self.run.log_inputs(**params)

        try:
            sum_list = []
            self.model.summary(print_fn=sum_list.append)
            summary = "\n".join(sum_list)
            rel_path = self.run.get_outputs_path("model_summary.txt")
            with open(rel_path, "w") as f:
                f.write(summary)
            self.run.log_file_ref(path=rel_path)
        except Exception:  # noqa
            pass
Пример #4
0
    def handler():
        runs = (
            client.list(
                query=search.query,
                sort=search.sort,
                limit=search.limit,
                offset=search.offset,
            ).results
            or []
        )
        configs = []
        metrics = []
        run_uuids = []
        for run in runs:
            if optimization_metric in run.outputs:
                run_uuids.append(run.uuid)
                configs.append(run.inputs)
                metrics.append(run.outputs[optimization_metric])

        if configs or metrics or run_uuids:
            artifact_run = V1RunArtifact(
                name=name or "in-iteration-{}".format(iteration),
                kind=V1ArtifactKind.ITERATION,
                summary={
                    "iteration": iteration,
                    "configs": [sanitize_dict(s) for s in configs],
                    "metrics": [sanitize_np_types(s) for s in metrics],
                    "uuid": run_uuids,
                },
                is_input=True,
            )
            client.log_artifact_lineage(artifact_run)

        return run_uuids, configs, metrics
Пример #5
0
    def get_summary(self) -> Dict:
        summary = {"is_event": True}
        step_summary = self._get_step_summary()
        if step_summary:
            summary["step"] = step_summary

        ts_summary = self._get_ts_summary()
        if ts_summary:
            summary["timestamp"] = ts_summary

        if self.kind == V1ArtifactKind.METRIC:
            summary[self.kind] = {
                k: sanitize_np_types(v)
                for k, v in self.df.metric.describe().to_dict().items()
            }
            summary[self.kind]["last"] = sanitize_np_types(
                self.df.metric.iloc[-1])

        return summary
Пример #6
0
    def get_summary(self) -> Dict:
        summary = {
            "step": {
                "count": sanitize_np_types(self.df.step.count()),
                "min": sanitize_np_types(self.df.step.iloc[0]),
                "max": sanitize_np_types(self.df.step.iloc[-1]),
            },
            "timestamp": {
                "min": self.df.timestamp.iloc[0].isoformat(),
                "max": self.df.timestamp.iloc[-1].isoformat(),
            },
        }
        if self.kind == V1ArtifactKind.METRIC:
            summary[self.kind] = {
                k: sanitize_np_types(v)
                for k, v in self.df.metric.describe().to_dict().items()
            }
            summary[self.kind]["last"] = sanitize_np_types(self.df.metric.iloc[-1])

        return summary
Пример #7
0
 def get_event_at(self, index):
     event = self.df.iloc[index].to_dict()
     event["timestamp"] = event["timestamp"].isoformat()
     event["step"] = sanitize_np_types(event["step"])
     return V1Event.from_dict(event)