예제 #1
0
    def test_saving_with_tf_optimizer(self):
        with self.cached_session():
            model = keras.models.Sequential()
            model.add(keras.layers.Dense(2, input_shape=(3, )))
            model.add(keras.layers.Dense(3))
            model.compile(loss='mse',
                          optimizer=training_module.RMSPropOptimizer(0.1),
                          metrics=['acc'])

            x = np.random.random((1, 3))
            y = np.random.random((1, 3))
            model.train_on_batch(x, y)
            ref_y = model.predict(x)

            temp_saved_model = self._save_model_dir()
            output_path = keras_saved_model.export(model, temp_saved_model)
            loaded_model = keras_saved_model.load_from_saved_model(output_path)
            loaded_model.compile(
                loss='mse',
                optimizer=training_module.RMSPropOptimizer(0.1),
                metrics=['acc'])
            y = loaded_model.predict(x)
            self.assertAllClose(ref_y, y, atol=1e-05)

            # test that new updates are the same with both models
            x = np.random.random((1, 3))
            y = np.random.random((1, 3))

            ref_loss = model.train_on_batch(x, y)
            loss = loaded_model.train_on_batch(x, y)
            self.assertAllClose(ref_loss, loss, atol=1e-05)

            ref_y = model.predict(x)
            y = loaded_model.predict(x)
            self.assertAllClose(ref_y, y, atol=1e-05)

            # test saving/loading again
            temp_saved_model2 = self._save_model_dir('saved_model_2')
            output_path2 = keras_saved_model.export(loaded_model,
                                                    temp_saved_model2)
            loaded_model = keras_saved_model.load_from_saved_model(
                output_path2)
            y = loaded_model.predict(x)
            self.assertAllClose(ref_y, y, atol=1e-05)
예제 #2
0
  def test_saving_with_tf_optimizer(self):
    model = keras.models.Sequential()
    model.add(keras.layers.Dense(2, input_shape=(3,)))
    model.add(keras.layers.Dense(3))
    model.compile(
        loss='mse',
        optimizer=training_module.RMSPropOptimizer(0.1),
        metrics=['acc'])

    x = np.random.random((1, 3))
    y = np.random.random((1, 3))
    model.train_on_batch(x, y)
    ref_y = model.predict(x)

    saved_model_dir = self._save_model_dir()
    keras_saved_model.export_saved_model(model, saved_model_dir)
    loaded_model = keras_saved_model.load_from_saved_model(saved_model_dir)
    loaded_model.compile(
        loss='mse',
        optimizer=training_module.RMSPropOptimizer(0.1),
        metrics=['acc'])
    y = loaded_model.predict(x)
    self.assertAllClose(ref_y, y, atol=1e-05)

    # test that new updates are the same with both models
    x = np.random.random((1, 3))
    y = np.random.random((1, 3))

    ref_loss = model.train_on_batch(x, y)
    loss = loaded_model.train_on_batch(x, y)
    self.assertAllClose(ref_loss, loss, atol=1e-05)

    ref_y = model.predict(x)
    y = loaded_model.predict(x)
    self.assertAllClose(ref_y, y, atol=1e-05)

    # test saving/loading again
    saved_model_dir2 = self._save_model_dir('saved_model_2')
    keras_saved_model.export_saved_model(loaded_model, saved_model_dir2)
    loaded_model = keras_saved_model.load_from_saved_model(saved_model_dir2)
    y = loaded_model.predict(x)
    self.assertAllClose(ref_y, y, atol=1e-05)
예제 #3
0
def _save_restore_saved_model(model):
    tmpdir = tempfile.mkdtemp()
    saved_model.export_saved_model(model, tmpdir)

    with prune.prune_scope():
        loaded_model = saved_model.load_from_saved_model(tmpdir)

    loaded_model.compile(loss='categorical_crossentropy',
                         optimizer='sgd',
                         metrics=['accuracy'])
    return loaded_model
예제 #4
0
  def test_saving_sequential_model_without_compile(self):
    with self.cached_session():
      model = keras.models.Sequential()
      model.add(keras.layers.Dense(2, input_shape=(3,)))
      model.add(keras.layers.RepeatVector(3))
      model.add(keras.layers.TimeDistributed(keras.layers.Dense(3)))

      x = np.random.random((1, 3))
      ref_y = model.predict(x)

      saved_model_dir = self._save_model_dir()
      keras_saved_model.export_saved_model(model, saved_model_dir)
      loaded_model = keras_saved_model.load_from_saved_model(saved_model_dir)

      y = loaded_model.predict(x)
      self.assertAllClose(ref_y, y, atol=1e-05)
예제 #5
0
    def test_saving_sequential_model_without_compile(self):
        with self.cached_session():
            model = keras.models.Sequential()
            model.add(keras.layers.Dense(2, input_shape=(3, )))
            model.add(keras.layers.RepeatVector(3))
            model.add(keras.layers.TimeDistributed(keras.layers.Dense(3)))

            x = np.random.random((1, 3))
            ref_y = model.predict(x)

            temp_saved_model = self._save_model_dir()
            output_path = keras_saved_model.export(model, temp_saved_model)
            loaded_model = keras_saved_model.load_from_saved_model(output_path)

            y = loaded_model.predict(x)
            self.assertAllClose(ref_y, y, atol=1e-05)
예제 #6
0
  def test_saving_functional_model_without_compile(self):
    with self.cached_session():
      inputs = keras.layers.Input(shape=(3,))
      x = keras.layers.Dense(2)(inputs)
      output = keras.layers.Dense(3)(x)

      model = keras.models.Model(inputs, output)

      x = np.random.random((1, 3))
      y = np.random.random((1, 3))

      ref_y = model.predict(x)

      saved_model_dir = self._save_model_dir()
      keras_saved_model.export_saved_model(model, saved_model_dir)
      loaded_model = keras_saved_model.load_from_saved_model(saved_model_dir)

      y = loaded_model.predict(x)
      self.assertAllClose(ref_y, y, atol=1e-05)
예제 #7
0
    def test_saving_functional_model_without_compile(self):
        with self.cached_session():
            inputs = keras.layers.Input(shape=(3, ))
            x = keras.layers.Dense(2)(inputs)
            output = keras.layers.Dense(3)(x)

            model = keras.models.Model(inputs, output)

            x = np.random.random((1, 3))
            y = np.random.random((1, 3))

            ref_y = model.predict(x)

            temp_saved_model = self._save_model_dir()
            output_path = keras_saved_model.export(model, temp_saved_model)
            loaded_model = keras_saved_model.load_from_saved_model(output_path)

            y = loaded_model.predict(x)
            self.assertAllClose(ref_y, y, atol=1e-05)
예제 #8
0
    def test_saving_functional_model(self):
        with self.cached_session():
            inputs = keras.layers.Input(shape=(3, ))
            x = keras.layers.Dense(2)(inputs)
            output = keras.layers.Dense(3)(x)

            model = keras.models.Model(inputs, output)
            model.compile(loss=keras.losses.MSE,
                          optimizer=keras.optimizers.RMSprop(lr=0.0001),
                          metrics=[keras.metrics.categorical_accuracy])
            x = np.random.random((1, 3))
            y = np.random.random((1, 3))
            model.train_on_batch(x, y)

            ref_y = model.predict(x)

            temp_saved_model = self._save_model_dir()
            output_path = keras_saved_model.export(model, temp_saved_model)
            loaded_model = keras_saved_model.load_from_saved_model(output_path)

            y = loaded_model.predict(x)
            self.assertAllClose(ref_y, y, atol=1e-05)
예제 #9
0
    def test_saving_sequential_model(self):
        with self.cached_session():
            model = keras.models.Sequential()
            model.add(keras.layers.Dense(2, input_shape=(3, )))
            model.add(keras.layers.RepeatVector(3))
            model.add(keras.layers.TimeDistributed(keras.layers.Dense(3)))
            model.compile(loss=keras.losses.MSE,
                          optimizer=keras.optimizers.RMSprop(lr=0.0001),
                          metrics=[keras.metrics.categorical_accuracy],
                          sample_weight_mode='temporal')
            x = np.random.random((1, 3))
            y = np.random.random((1, 3, 3))
            model.train_on_batch(x, y)

            ref_y = model.predict(x)

            temp_saved_model = self._save_model_dir()
            output_path = keras_saved_model.export(model, temp_saved_model)

            loaded_model = keras_saved_model.load_from_saved_model(output_path)
            y = loaded_model.predict(x)
            self.assertAllClose(ref_y, y, atol=1e-05)
예제 #10
0
def load_model(filepath, custom_objects=None, compile=True):  # pylint: disable=redefined-builtin
    """Loads a model saved via `save_model`.

  Arguments:
      filepath: One of the following:
          - String, path to the saved model
          - `h5py.File` object from which to load the model
      custom_objects: Optional dictionary mapping names
          (strings) to custom classes or functions to be
          considered during deserialization.
      compile: Boolean, whether to compile the model
          after loading.

  Returns:
      A Keras model instance. If an optimizer was found
      as part of the saved model, the model is already
      compiled. Otherwise, the model is uncompiled and
      a warning will be displayed. When `compile` is set
      to False, the compilation is omitted without any
      warning.

  Raises:
      ImportError: if loading from an hdf5 file and h5py is not available.
      IOError: In case of an invalid savefile.
  """
    if not tf2.enabled() or (h5py is not None and
                             (isinstance(filepath, h5py.File)
                              or h5py.is_hdf5(filepath))):
        return hdf5_format.load_model_from_hdf5(filepath, custom_objects,
                                                compile)

    if isinstance(filepath, six.string_types):
        loader_impl.parse_saved_model(filepath)
        return saved_model.load_from_saved_model(filepath)

    raise IOError(
        'Unable to load model. Filepath is not an hdf5 file (or h5py is not '
        'available) or SavedModel.')
예제 #11
0
  def test_saving_functional_model(self):
    with self.cached_session():
      inputs = keras.layers.Input(shape=(3,))
      x = keras.layers.Dense(2)(inputs)
      output = keras.layers.Dense(3)(x)

      model = keras.models.Model(inputs, output)
      model.compile(
          loss=keras.losses.MSE,
          optimizer=keras.optimizers.RMSprop(lr=0.0001),
          metrics=[keras.metrics.categorical_accuracy])
      x = np.random.random((1, 3))
      y = np.random.random((1, 3))
      model.train_on_batch(x, y)

      ref_y = model.predict(x)

      saved_model_dir = self._save_model_dir()
      keras_saved_model.export_saved_model(model, saved_model_dir)
      loaded_model = keras_saved_model.load_from_saved_model(saved_model_dir)

      y = loaded_model.predict(x)
      self.assertAllClose(ref_y, y, atol=1e-05)
예제 #12
0
  def test_saving_sequential_model(self):
    with self.cached_session():
      model = keras.models.Sequential()
      model.add(keras.layers.Dense(2, input_shape=(3,)))
      model.add(keras.layers.RepeatVector(3))
      model.add(keras.layers.TimeDistributed(keras.layers.Dense(3)))
      model.compile(
          loss=keras.losses.MSE,
          optimizer=keras.optimizers.RMSprop(lr=0.0001),
          metrics=[keras.metrics.categorical_accuracy],
          sample_weight_mode='temporal')
      x = np.random.random((1, 3))
      y = np.random.random((1, 3, 3))
      model.train_on_batch(x, y)

      ref_y = model.predict(x)

      saved_model_dir = self._save_model_dir()
      keras_saved_model.export_saved_model(model, saved_model_dir)

      loaded_model = keras_saved_model.load_from_saved_model(saved_model_dir)
      y = loaded_model.predict(x)
      self.assertAllClose(ref_y, y, atol=1e-05)
예제 #13
0
def load_model(filepath, custom_objects=None, compile=True):  # pylint: disable=redefined-builtin
  """Loads a model saved via `save_model`.

  Arguments:
      filepath: One of the following:
          - String, path to the saved model
          - `h5py.File` object from which to load the model
      custom_objects: Optional dictionary mapping names
          (strings) to custom classes or functions to be
          considered during deserialization.
      compile: Boolean, whether to compile the model
          after loading.

  Returns:
      A Keras model instance. If an optimizer was found
      as part of the saved model, the model is already
      compiled. Otherwise, the model is uncompiled and
      a warning will be displayed. When `compile` is set
      to False, the compilation is omitted without any
      warning.

  Raises:
      ImportError: if loading from an hdf5 file and h5py is not available.
      IOError: In case of an invalid savefile.
  """
  if not tf2.enabled() or (
      h5py is not None and (
          isinstance(filepath, h5py.File) or h5py.is_hdf5(filepath))):
    return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)

  if isinstance(filepath, six.string_types):
    loader_impl.parse_saved_model(filepath)
    return saved_model.load_from_saved_model(filepath)

  raise IOError(
      'Unable to load model. Filepath is not an hdf5 file (or h5py is not '
      'available) or SavedModel.')
 def _load_and_run_model(self, distribution, saved_dir, predict_dataset,
                         output_name):
   restored_keras_model = saved_model.load_from_saved_model(saved_dir)
   return restored_keras_model.predict(
       predict_dataset, steps=test_base.PREDICT_STEPS)
 def _load_and_run_model(self, distribution, saved_dir, predict_dataset,
                         output_name):
   restored_keras_model = saved_model.load_from_saved_model(saved_dir)
   return restored_keras_model.predict(
       predict_dataset, steps=test_base.PREDICT_STEPS)