예제 #1
0
    def _call_model_fn(self):
        """运行 model_fn 来构建模型。"""
        model_fn_handler = self._model_fn(False, 1)
        if not isinstance(model_fn_handler, ModelFnHandler):
            raise ValueError('model_fn must return a ModeFnHandler instance.')
        self._model_fn_handler = model_fn_handler

        if model_fn_handler.global_step is None:
            self._global_step = tf.train.get_global_step()
        else:
            self._global_step = model_fn_handler.global_step
        if self._global_step is None:
            raise ValueError(
                'Cannot find global_step variable, '
                'please add it into the collection GLOBAL_STEP or '
                'names it with "global_step".')

        if model_fn_handler.model_metric_ops is not None and (not isinstance(
                model_fn_handler.model_metric_ops, dict)):
            raise ValueError(
                'model_metric_ops of ModelFnHandler returned from '
                'model_fn() must be None or dict')

        if model_fn_handler.model_export_spec is not None:
            self._model_exporter = model_exporter.ModelExporter(
                model_fn_handler.model_export_spec)
예제 #2
0
    def init_model_exporter(
            self,
            export_dir,
            input_tensors,
            output_tensors,
            assets_collection=None,
            legacy_init_op=None,
            main_op=None):
        """初始化模型导出器。

        导出的模型将适用于 Caicloud 大数据平台启动 Serving 服务。
        该方法必须是在 build_model() 构建模型时调用进行初始化,
        在模型训练之后,在自定义的after_train() 方法中调用 export_model() 方法中来实际导出模型。

        具体样例如下:

        ########################
        # in build_ model()
        ########################
        def build_model(self, global_step, is_chief, sync, num_replicas):
          ...
          images = tf.placeholder(tf.float32, [None, 784], name='images')
          labels_ = tf.placeholder(tf.float32, shape=[None, 10], name='labels')
          w = tf.Variable(tf.zeros([784, 10]))
          b = tf.Variable(tf.zeros([10]))
          logits = tf.nn.softmax(tf.matmul(x, w) + b, name='y')
          cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
          train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

          export_dir = ...
          self.init_model_exporter(
             export_dir,
             {"images", images},
             {"logits", logits})
          ...
          return optimizer

        #######################
        # in after_train()
        #######################
        def after_train(self, sess, is_chief):
           ...
           self.export_model(sess)

        Args:
          export_dir: 模型导出路径。
          input_tensors: 导出模型的输入的别名和 Tensors 之间的字典。
          output_tensors: 导出模型的输出的别名和 Tensors 之间的字。,
          assets_collection: 附加资产文件列表,可选。
            资产文件会在模型导出和导入时被当作模型的一部分进行处理。
            资产文件主要应用场景:训练模型的某些操作需要外部附加文件进行初始化等。
            在导出模型的时候,资产文件会被拷贝到模型导出路径的 assets 目录下。
          legacy_init_op: 在导出模型被加载要被执行的初始化操作,可选。
          main_op: 导出模型在被加载时执行的操作,可选。
        Returns:
          None
        """
        self._model_exporter = model_exporter.ModelExporter(export_dir)
        self._model_exporter.add_graph_and_variables(
            input_tensors,
            output_tensors,
            assets_collection = assets_collection,
            legacy_init_op = legacy_init_op,
            main_op = main_op)