diff --git a/tfjs-converter/python/tensorflowjs/converters/converter.py b/tfjs-converter/python/tensorflowjs/converters/converter.py index 79fa720eb9d..24ba313cc81 100644 --- a/tfjs-converter/python/tensorflowjs/converters/converter.py +++ b/tfjs-converter/python/tensorflowjs/converters/converter.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== -"""Artifact conversion to and from Python TensorFlow and Keras.""" +"""Artifact conversion to and from Python TensorFlow and tf.keras.""" from __future__ import absolute_import from __future__ import division @@ -28,7 +28,6 @@ import h5py import numpy as np import tensorflow as tf -from tensorflow import keras from tensorflowjs import quantization from tensorflowjs import version @@ -49,7 +48,7 @@ def dispatch_keras_h5_to_tfjs_layers_model_conversion( - A weights-only HDF5 (e.g., generated with Keras Model's `save_weights()` method), - A topology+weights combined HDF5 (e.g., generated with - `keras.model.save_model`). + `tf.keras.model.save_model`). Args: h5_path: path to an HDF5 file containing keras model data as a `str`. @@ -130,7 +129,7 @@ def dispatch_keras_h5_to_tfjs_graph_model_conversion( 'directory: %s' % h5_path) temp_savedmodel_dir = tempfile.mktemp(suffix='.savedmodel') - model = keras.models.load_model(h5_path, compile=False) + model = tf.keras.models.load_model(h5_path, compile=False) model.save(temp_savedmodel_dir, include_optimizer=False, save_format='tf') # NOTE(cais): This cannot use `tf.compat.v1` because @@ -155,7 +154,7 @@ def dispatch_keras_saved_model_to_tensorflowjs_conversion( """Converts keras model saved in the SavedModel format to tfjs format. Note that the SavedModel format exists in keras, but not in - keras-team/keras. + keras-team/tf.keras. Args: keras_saved_model_path: path to a folder in which the @@ -455,7 +454,7 @@ def get_arg_parser(): help='Input format. ' 'For "keras", the input path can be one of the two following formats:\n' ' - A topology+weights combined HDF5 (e.g., generated with' - ' `keras.model.save_model()` method).\n' + ' `tf.keras.model.save_model()` method).\n' ' - A weights-only HDF5 (e.g., generated with Keras Model\'s ' ' `save_weights()` method). \n' 'For "keras_saved_model", the input_path must point to a subfolder ' @@ -533,7 +532,7 @@ def convert(arguments): if args.show_version: print('\ntensorflowjs %s\n' % version.version) print('Dependency versions:') - print(' keras %s' % keras.__version__) + print(' keras %s' % tf.keras.__version__) print(' tensorflow %s' % tf.__version__) return diff --git a/tfjs-converter/python/tensorflowjs/converters/converter_test.py b/tfjs-converter/python/tensorflowjs/converters/converter_test.py index c8e4bf53e36..3a8ecaf20f4 100644 --- a/tfjs-converter/python/tensorflowjs/converters/converter_test.py +++ b/tfjs-converter/python/tensorflowjs/converters/converter_test.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== -"""Unit tests for artifact conversion to and from Python keras.""" +"""Unit tests for artifact conversion to and from Python tf.keras.""" from __future__ import absolute_import from __future__ import division @@ -27,7 +27,6 @@ import numpy as np import tensorflow.compat.v2 as tf -from tensorflow import keras from tensorflowjs import version from tensorflowjs.converters import converter @@ -50,13 +49,13 @@ def tearDown(self): def testWeightsOnly(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - input_tensor = keras.layers.Input((3,)) - dense1 = keras.layers.Dense( + input_tensor = tf.keras.layers.Input((3,)) + dense1 = tf.keras.layers.Dense( 4, use_bias=True, kernel_initializer='ones', bias_initializer='zeros', name='MyDense1')(input_tensor) - output = keras.layers.Dense( + output = tf.keras.layers.Dense( 2, use_bias=False, kernel_initializer='ones', name='MyDense2')(dense1) - model = keras.models.Model(inputs=[input_tensor], outputs=[output]) + model = tf.keras.models.Model(inputs=[input_tensor], outputs=[output]) h5_path = os.path.join(self._tmp_dir, 'MyModel.h5') model.save_weights(h5_path) @@ -80,14 +79,14 @@ def testWeightsOnly(self): def testConvertSavedKerasModelNoSplitByLayer(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - input_tensor = keras.layers.Input((3,)) - dense1 = keras.layers.Dense( + input_tensor = tf.keras.layers.Input((3,)) + dense1 = tf.keras.layers.Dense( 4, use_bias=True, kernel_initializer='ones', bias_initializer='zeros', name='MergedDense1')(input_tensor) - output = keras.layers.Dense( + output = tf.keras.layers.Dense( 2, use_bias=False, kernel_initializer='ones', name='MergedDense2')(dense1) - model = keras.models.Model(inputs=[input_tensor], outputs=[output]) + model = tf.keras.models.Model(inputs=[input_tensor], outputs=[output]) h5_path = os.path.join(self._tmp_dir, 'MyModelMerged.h5') model.save(h5_path) @@ -101,7 +100,7 @@ def testConvertSavedKerasModelNoSplitByLayer(self): self.assertIn('layers', model_json['model_config']['config']) # Check the loaded weights. - self.assertEqual(keras.__version__, model_json['keras_version']) + self.assertEqual(tf.keras.__version__, model_json['keras_version']) self.assertEqual('tensorflow', model_json['backend']) self.assertEqual(1, len(groups)) self.assertEqual(3, len(groups[0])) @@ -116,14 +115,14 @@ def testConvertSavedKerasModelNoSplitByLayer(self): def testConvertSavedKerasModelSplitByLayer(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - input_tensor = keras.layers.Input((3,)) - dense1 = keras.layers.Dense( + input_tensor = tf.keras.layers.Input((3,)) + dense1 = tf.keras.layers.Dense( 4, use_bias=True, kernel_initializer='ones', bias_initializer='zeros', name='MergedDense1')(input_tensor) - output = keras.layers.Dense( + output = tf.keras.layers.Dense( 2, use_bias=False, kernel_initializer='ones', name='MergedDense2')(dense1) - model = keras.models.Model(inputs=[input_tensor], outputs=[output]) + model = tf.keras.models.Model(inputs=[input_tensor], outputs=[output]) h5_path = os.path.join(self._tmp_dir, 'MyModelMerged.h5') model.save(h5_path) @@ -137,7 +136,7 @@ def testConvertSavedKerasModelSplitByLayer(self): self.assertIn('layers', model_json['model_config']['config']) # Check the loaded weights. - self.assertEqual(keras.__version__, model_json['keras_version']) + self.assertEqual(tf.keras.__version__, model_json['keras_version']) self.assertEqual('tensorflow', model_json['backend']) self.assertEqual(2, len(groups)) self.assertEqual(2, len(groups[0])) @@ -153,8 +152,8 @@ def testConvertSavedKerasModelSplitByLayer(self): def testConvertSavedKerasModeltoTfLayersModelSharded(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - sequential_model = keras.models.Sequential([ - keras.layers.Dense( + sequential_model = tf.keras.models.Sequential([ + tf.keras.layers.Dense( 3, input_shape=(2,), use_bias=True, kernel_initializer='ones', name='Dense1')]) h5_path = os.path.join(self._tmp_dir, 'SequentialModel.h5') @@ -182,11 +181,11 @@ def testConvertSavedKerasModeltoTfLayersModelSharded(self): def testConvertWeightsFromSequentialModel(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - sequential_model = keras.models.Sequential([ - keras.layers.Dense( + sequential_model = tf.keras.models.Sequential([ + tf.keras.layers.Dense( 3, input_shape=(2,), use_bias=True, kernel_initializer='ones', name='Dense1'), - keras.layers.Dense( + tf.keras.layers.Dense( 1, use_bias=False, kernel_initializer='ones', name='Dense2')]) h5_path = os.path.join(self._tmp_dir, 'SequentialModel.h5') sequential_model.save_weights(h5_path) @@ -212,8 +211,8 @@ def testConvertWeightsFromSequentialModel(self): def testConvertModelForNonexistentDirCreatesDir(self): with tf.Graph().as_default(), tf.compat.v1.Session(): output_dir = os.path.join(self._tmp_dir, 'foo_model') - sequential_model = keras.models.Sequential([ - keras.layers.Dense( + sequential_model = tf.keras.models.Sequential([ + tf.keras.layers.Dense( 3, input_shape=(2,), use_bias=True, kernel_initializer='ones', name='Dense1')]) h5_path = os.path.join(self._tmp_dir, 'SequentialModel.h5') @@ -234,8 +233,8 @@ def testOutpuDirAsAnExistingFileLeadsToValueError(self): f.write('\n') with tf.Graph().as_default(), tf.compat.v1.Session(): - sequential_model = keras.models.Sequential([ - keras.layers.Dense( + sequential_model = tf.keras.models.Sequential([ + tf.keras.layers.Dense( 3, input_shape=(2,), use_bias=True, kernel_initializer='ones', name='Dense1')]) h5_path = os.path.join(self._tmp_dir, 'SequentialModel.h5') @@ -248,11 +247,11 @@ def testOutpuDirAsAnExistingFileLeadsToValueError(self): def testTensorflowjsToKerasConversionSucceeds(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - sequential_model = keras.models.Sequential([ - keras.layers.Dense( + sequential_model = tf.keras.models.Sequential([ + tf.keras.layers.Dense( 3, input_shape=(2,), use_bias=True, kernel_initializer='ones', name='Dense1'), - keras.layers.Dense( + tf.keras.layers.Dense( 1, use_bias=False, kernel_initializer='ones', name='Dense2')]) h5_path = os.path.join(self._tmp_dir, 'SequentialModel.h5') sequential_model.save(h5_path) @@ -267,7 +266,7 @@ def testTensorflowjsToKerasConversionSucceeds(self): # Load the new H5 and compare the model JSONs. with tf.Graph().as_default(), tf.compat.v1.Session(): - new_model = keras.models.load_model(new_h5_path) + new_model = tf.keras.models.load_model(new_h5_path) self.assertEqual(old_model_json, new_model.to_json()) def testTensorflowjsToKerasConversionFailsOnDirInputPath(self): @@ -278,11 +277,11 @@ def testTensorflowjsToKerasConversionFailsOnDirInputPath(self): def testTensorflowjsToKerasConversionFailsOnExistingDirOutputPath(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - sequential_model = keras.models.Sequential([ - keras.layers.Dense( + sequential_model = tf.keras.models.Sequential([ + tf.keras.layers.Dense( 3, input_shape=(2,), use_bias=True, kernel_initializer='ones', name='Dense1'), - keras.layers.Dense( + tf.keras.layers.Dense( 1, use_bias=False, kernel_initializer='ones', name='Dense2')]) h5_path = os.path.join(self._tmp_dir, 'SequentialModel.h5') sequential_model.save(h5_path) @@ -318,8 +317,8 @@ def tearDown(self): def testConvertKerasModelToTfGraphModel(self): output_dir = os.path.join(self._tmp_dir, 'foo_model') - sequential_model = keras.models.Sequential([ - keras.layers.Dense( + sequential_model = tf.keras.models.Sequential([ + tf.keras.layers.Dense( 3, input_shape=(2,), use_bias=True, kernel_initializer='ones', name='Dense1')]) h5_path = os.path.join(self._tmp_dir, 'SequentialModel.h5') @@ -349,8 +348,8 @@ def testConvertKerasModelToTfGraphModel(self): def testConvertKerasModelToTfGraphModelSharded(self): output_dir = os.path.join(self._tmp_dir, 'foo_model') - sequential_model = keras.models.Sequential([ - keras.layers.Dense( + sequential_model = tf.keras.models.Sequential([ + tf.keras.layers.Dense( 3, input_shape=(2,), use_bias=True, kernel_initializer='ones', name='Dense1')]) h5_path = os.path.join(self._tmp_dir, 'SequentialModel.h5') @@ -394,29 +393,29 @@ def tearDown(self): super(ConvertTfKerasSavedModelTest, self).tearDown() def _createSimpleSequentialModel(self): - model = keras.Sequential() - model.add(keras.layers.Reshape([2, 3], input_shape=[6])) - model.add(keras.layers.LSTM(10)) - model.add(keras.layers.Dense(1, activation='sigmoid')) + model = tf.keras.Sequential() + model.add(tf.keras.layers.Reshape([2, 3], input_shape=[6])) + model.add(tf.keras.layers.LSTM(10)) + model.add(tf.keras.layers.Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict(tf.ones((1, 6)), steps=1) tf.keras.backend.set_learning_phase(0) return model def _createNestedSequentialModel(self): - model = keras.Sequential() - model.add(keras.layers.Dense(6, input_shape=[10], activation='relu')) + model = tf.keras.Sequential() + model.add(tf.keras.layers.Dense(6, input_shape=[10], activation='relu')) model.add(self._createSimpleSequentialModel()) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict(tf.ones((1, 10)), steps=1) return model def _createFunctionalModelWithWeights(self): - input1 = keras.Input(shape=[8]) - input2 = keras.Input(shape=[10]) - y = keras.layers.Concatenate()([input1, input2]) - y = keras.layers.Dense(4, activation='softmax')(y) - model = keras.Model([input1, input2], y) + input1 = tf.keras.Input(shape=[8]) + input2 = tf.keras.Input(shape=[10]) + y = tf.keras.layers.Concatenate()([input1, input2]) + y = tf.keras.layers.Dense(4, activation='softmax')(y) + model = tf.keras.Model([input1, input2], y) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict([tf.ones((1, 8)), tf.ones((1, 10))], steps=1) return model diff --git a/tfjs-converter/python/tensorflowjs/converters/keras_tfjs_loader.py b/tfjs-converter/python/tensorflowjs/converters/keras_tfjs_loader.py index 94568906dd3..72792ad7d07 100644 --- a/tfjs-converter/python/tensorflowjs/converters/keras_tfjs_loader.py +++ b/tfjs-converter/python/tensorflowjs/converters/keras_tfjs_loader.py @@ -24,7 +24,6 @@ import six import tensorflow.compat.v2 as tf -from tensorflow import keras from tensorflowjs import read_weights from tensorflowjs.converters import keras_h5_conversion @@ -60,9 +59,9 @@ def _deserialize_keras_model(model_topology_json, unique_name_scope = uuid.uuid4().hex if use_unique_name_scope else None with tf.compat.v1.name_scope(unique_name_scope): if is_tf_keras: - model = keras.models.model_from_json(json.dumps(model_topology_json)) + model = tf.keras.models.model_from_json(json.dumps(model_topology_json)) else: - model = keras.models.model_from_json(json.dumps(model_topology_json)) + model = tf.keras.models.model_from_json(json.dumps(model_topology_json)) if weight_entries: weights_dict = dict() @@ -174,7 +173,7 @@ def load_keras_model(config_json_path, same TensorFlow Graph or Session context. Default: `False`. Returns: - The loaded instance of `keras.Model`. + The loaded instance of `tf.keras.Model`. Raises: TypeError, if the format of the JSON content of `config_json_path` has an diff --git a/tfjs-converter/python/tensorflowjs/converters/keras_tfjs_loader_test.py b/tfjs-converter/python/tensorflowjs/converters/keras_tfjs_loader_test.py index bb374cdcbd5..a0bad5def7d 100644 --- a/tfjs-converter/python/tensorflowjs/converters/keras_tfjs_loader_test.py +++ b/tfjs-converter/python/tensorflowjs/converters/keras_tfjs_loader_test.py @@ -28,7 +28,6 @@ import numpy as np import tensorflow.compat.v2 as tf -from tensorflow import keras from tensorflowjs.converters import keras_h5_conversion from tensorflowjs.converters import keras_tfjs_loader @@ -47,12 +46,12 @@ def tearDown(self): super(LoadKerasModelTest, self).tearDown() def _saveKerasModelForTest(self, path): - model = keras.Sequential() - model.add(keras.layers.Dense( + model = tf.keras.Sequential() + model.add(tf.keras.layers.Dense( 2, input_shape=[12], bias_initializer='random_normal', name='dense')) - model.add(keras.layers.Dense( + model.add(tf.keras.layers.Dense( 8, bias_initializer='random_normal', name='foo/dense')) - model.add(keras.layers.Dense( + model.add(tf.keras.layers.Dense( 4, bias_initializer='random_normal', name='foo/bar/dense')) keras_h5_conversion.save_keras_model(model, path) return model @@ -311,12 +310,12 @@ def testLoadKerasModelFromDataBuffers(self): def testLoadNestedKerasModel(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - inner_model = keras.Sequential([ - keras.layers.Dense(4, input_shape=[3], activation='relu'), - keras.layers.Dense(3, activation='tanh')]) - outer_model = keras.Sequential() + inner_model = tf.keras.Sequential([ + tf.keras.layers.Dense(4, input_shape=[3], activation='relu'), + tf.keras.layers.Dense(3, activation='tanh')]) + outer_model = tf.keras.Sequential() outer_model.add(inner_model) - outer_model.add(keras.layers.Dense(1, activation='sigmoid')) + outer_model.add(tf.keras.layers.Dense(1, activation='sigmoid')) x = np.ones([1, 3], dtype=np.float32) predict_out = outer_model.predict(x) @@ -331,12 +330,12 @@ def testLoadNestedKerasModel(self): def testLoadNestedTfKerasModel(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - inner_model = keras.Sequential([ - keras.layers.Dense(4, input_shape=[3], activation='relu'), - keras.layers.Dense(3, activation='tanh')]) - outer_model = keras.Sequential() + inner_model = tf.keras.Sequential([ + tf.keras.layers.Dense(4, input_shape=[3], activation='relu'), + tf.keras.layers.Dense(3, activation='tanh')]) + outer_model = tf.keras.Sequential() outer_model.add(inner_model) - outer_model.add(keras.layers.Dense(1, activation='sigmoid')) + outer_model.add(tf.keras.layers.Dense(1, activation='sigmoid')) outer_model.compile(loss='binary_crossentropy', optimizer='sgd') x = np.ones([1, 3], dtype=np.float32) @@ -389,18 +388,18 @@ def testInvalidJSONRaisesError(self): def testLoadFunctionalKerasModel(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - input1 = keras.Input([4]) - x1 = keras.layers.Dense(2, activation='relu')(input1) - x1 = keras.layers.BatchNormalization()(x1) + input1 = tf.keras.Input([4]) + x1 = tf.keras.layers.Dense(2, activation='relu')(input1) + x1 = tf.keras.layers.BatchNormalization()(x1) - input2 = keras.Input([10]) - x2 = keras.layers.Dense(5, activation='relu')(input2) - x2 = keras.layers.BatchNormalization()(x2) + input2 = tf.keras.Input([10]) + x2 = tf.keras.layers.Dense(5, activation='relu')(input2) + x2 = tf.keras.layers.BatchNormalization()(x2) - y = keras.layers.Concatenate()([x1, x2]) - y = keras.layers.Dense(1, activation='sigmoid')(y) + y = tf.keras.layers.Concatenate()([x1, x2]) + y = tf.keras.layers.Dense(1, activation='sigmoid')(y) - model = keras.Model([input1, input2], y) + model = tf.keras.Model([input1, input2], y) model.compile(loss='binary_crossentropy', optimizer='sgd') input1_val = np.ones([1, 4]) @@ -418,18 +417,18 @@ def testLoadFunctionalKerasModel(self): def testLoadFunctionalTfKerasModel(self): with tf.Graph().as_default(), tf.compat.v1.Session(): - input1 = keras.Input([4]) - x1 = keras.layers.Dense(2, activation='relu')(input1) - x1 = keras.layers.BatchNormalization()(x1) + input1 = tf.keras.Input([4]) + x1 = tf.keras.layers.Dense(2, activation='relu')(input1) + x1 = tf.keras.layers.BatchNormalization()(x1) - input2 = keras.Input([10]) - x2 = keras.layers.Dense(5, activation='relu')(input2) - x2 = keras.layers.BatchNormalization()(x2) + input2 = tf.keras.Input([10]) + x2 = tf.keras.layers.Dense(5, activation='relu')(input2) + x2 = tf.keras.layers.BatchNormalization()(x2) - y = keras.layers.Concatenate()([x1, x2]) - y = keras.layers.Dense(1, activation='sigmoid')(y) + y = tf.keras.layers.Concatenate()([x1, x2]) + y = tf.keras.layers.Dense(1, activation='sigmoid')(y) - model = keras.Model([input1, input2], y) + model = tf.keras.Model([input1, input2], y) model.compile(loss='binary_crossentropy', optimizer='sgd') input1_val = np.ones([1, 4]) diff --git a/tfjs-converter/python/tensorflowjs/converters/wizard_test.py b/tfjs-converter/python/tensorflowjs/converters/wizard_test.py index 4b61bac5eb0..c37160a90f7 100644 --- a/tfjs-converter/python/tensorflowjs/converters/wizard_test.py +++ b/tfjs-converter/python/tensorflowjs/converters/wizard_test.py @@ -22,7 +22,6 @@ import os import shutil import tensorflow.compat.v2 as tf -from tensorflow import keras from tensorflow.python.eager import def_function from tensorflow.python.ops import variables from tensorflow.python.training.tracking import tracking @@ -53,22 +52,22 @@ def _create_layers_model(self): json.dump(data, model_file) def _create_hd5_file(self): - input_tensor = keras.layers.Input((3,)) - dense1 = keras.layers.Dense( + input_tensor = tf.keras.layers.Input((3,)) + dense1 = tf.keras.layers.Dense( 4, use_bias=True, kernel_initializer='ones', bias_initializer='zeros', name='MyDense10')(input_tensor) - output = keras.layers.Dense( + output = tf.keras.layers.Dense( 2, use_bias=False, kernel_initializer='ones', name='MyDense20')(dense1) - model = keras.models.Model(inputs=[input_tensor], outputs=[output]) + model = tf.keras.models.Model(inputs=[input_tensor], outputs=[output]) h5_path = os.path.join(self._tmp_dir, HD5_FILE_NAME) print(h5_path) model.save_weights(h5_path) def _create_keras_saved_model(self): - model = keras.Sequential() - model.add(keras.layers.Reshape([2, 3], input_shape=[6])) - model.add(keras.layers.LSTM(10)) - model.add(keras.layers.Dense(1, activation='sigmoid')) + model = tf.keras.Sequential() + model.add(tf.keras.layers.Reshape([2, 3], input_shape=[6])) + model.add(tf.keras.layers.LSTM(10)) + model.add(tf.keras.layers.Dense(1, activation='sigmoid')) save_dir = os.path.join(self._tmp_dir, SAVED_MODEL_DIR) tf.keras.models.save_model(model, save_dir) diff --git a/tfjs-converter/python/test_pip_package.py b/tfjs-converter/python/test_pip_package.py index 644a182ed08..8926417e8e4 100644 --- a/tfjs-converter/python/test_pip_package.py +++ b/tfjs-converter/python/test_pip_package.py @@ -29,7 +29,6 @@ import numpy as np import tensorflow.compat.v2 as tf from tensorflow.compat.v1 import saved_model -from tensorflow import keras from tensorflow.python.eager import def_function from tensorflow.python.framework import constant_op from tensorflow.python.ops import variables @@ -51,21 +50,21 @@ def _createKerasModel(layer_name_prefix, h5_path=None): in. Returns: - An instance of keras.Model. + An instance of tf.keras.Model. """ - input_tensor = keras.layers.Input((3, )) - dense1 = keras.layers.Dense( + input_tensor = tf.keras.layers.Input((3, )) + dense1 = tf.keras.layers.Dense( 4, use_bias=True, kernel_initializer='ones', bias_initializer='zeros', name=layer_name_prefix + '1')(input_tensor) - output = keras.layers.Dense( + output = tf.keras.layers.Dense( 2, use_bias=False, kernel_initializer='ones', name=layer_name_prefix + '2')(dense1) - model = keras.models.Model(inputs=[input_tensor], outputs=[output]) + model = tf.keras.models.Model(inputs=[input_tensor], outputs=[output]) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict(tf.ones((1, 3)), steps=1) @@ -617,7 +616,7 @@ def testConvertTensorflowjsArtifactsToKerasH5(self): # 4. Load the model back from the new HDF5 file and compare with the # original model. with tf.Graph().as_default(), tf.compat.v1.Session(): - model_2 = keras.models.load_model(new_h5_path) + model_2 = tf.keras.models.load_model(new_h5_path) model_2_json = model_2.to_json() self.assertEqual(model_json, model_2_json) @@ -637,7 +636,7 @@ def testLoadTensorflowjsArtifactsAsKerasModel(self): process.communicate() self.assertEqual(0, process.returncode) - # 3. Load the tensorflowjs artifacts as a keras.Model instance. + # 3. Load the tensorflowjs artifacts as a tf.keras.Model instance. with tf.Graph().as_default(), tf.compat.v1.Session(): model_2 = tfjs.converters.load_keras_model( os.path.join(self._tmp_dir, 'model.json')) @@ -678,28 +677,28 @@ def tearDown(self): super(ConvertTfKerasSavedModelTest, self).tearDown() def _createSimpleSequentialModel(self): - model = keras.Sequential() - model.add(keras.layers.Reshape([2, 3], input_shape=[6])) - model.add(keras.layers.LSTM(10)) - model.add(keras.layers.Dense(1, activation='sigmoid')) + model = tf.keras.Sequential() + model.add(tf.keras.layers.Reshape([2, 3], input_shape=[6])) + model.add(tf.keras.layers.LSTM(10)) + model.add(tf.keras.layers.Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict(tf.ones((1, 6)), steps=1) return model def _createNestedSequentialModel(self): - model = keras.Sequential() - model.add(keras.layers.Dense(6, input_shape=[10], activation='relu')) + model = tf.keras.Sequential() + model.add(tf.keras.layers.Dense(6, input_shape=[10], activation='relu')) model.add(self._createSimpleSequentialModel()) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict(tf.ones((1, 10)), steps=1) return model def _createFunctionalModelWithWeights(self): - input1 = keras.Input(shape=[8]) - input2 = keras.Input(shape=[10]) - y = keras.layers.Concatenate()([input1, input2]) - y = keras.layers.Dense(4, activation='softmax')(y) - model = keras.Model([input1, input2], y) + input1 = tf.keras.Input(shape=[8]) + input2 = tf.keras.Input(shape=[10]) + y = tf.keras.layers.Concatenate()([input1, input2]) + y = tf.keras.layers.Dense(4, activation='softmax')(y) + model = tf.keras.Model([input1, input2], y) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict([tf.ones((1, 8)), tf.ones((1, 10))], steps=1) return model @@ -713,7 +712,7 @@ def testConvertTfKerasNestedSequentialSavedModelIntoTfjsFormat(self): model = self._createNestedSequentialModel() y = model.predict(x) - keras.models.save_model(model, self._tmp_dir) + tf.keras.models.save_model(model, self._tmp_dir) # 2. Convert the keras saved model to tfjs format. tfjs_output_dir = os.path.join(self._tmp_dir, 'tfjs') @@ -740,7 +739,7 @@ def testConvertTfKerasNestedSequentialSavedModelIntoTfjsFormat(self): # 4. Load the model back and assert on the equality of the predict # results. - model_prime = keras.models.load_model(new_h5_path) + model_prime = tf.keras.models.load_model(new_h5_path) new_y = model_prime.predict(x) self.assertAllClose(y, new_y) @@ -782,7 +781,7 @@ def testConvertTfKerasFunctionalSavedModelIntoTfjsFormat(self): # 4. Load the model back and assert on the equality of the predict # results. - model_prime = keras.models.load_model(new_h5_path) + model_prime = tf.keras.models.load_model(new_h5_path) new_y = model_prime.predict([x1, x2]) self.assertAllClose(y, new_y) @@ -868,7 +867,7 @@ def testConvertTfjsLayersModelIntoShardedWeights(self): with tf.Graph().as_default(), tf.compat.v1.Session(): # 6. Load the keras model and check the predict() output is close to # before. - new_model = keras.models.load_model(new_h5_path) + new_model = tf.keras.models.load_model(new_h5_path) new_y = new_model.predict(x) self.assertAllClose(new_y, y) @@ -915,9 +914,9 @@ def testConvertTfjsLayersModelWithQuantization(self): def testConvertTfjsLayersModelToTfjsGraphModel(self): with tf.Graph().as_default(), tf.compat.v1.Session(): # 1. Create a model for testing. - model = keras.Sequential() - model.add(keras.layers.Dense(10, activation='relu', input_shape=[4])) - model.add(keras.layers.Dense(1, activation='sigmoid')) + model = tf.keras.Sequential() + model.add(tf.keras.layers.Dense(10, activation='relu', input_shape=[4])) + model.add(tf.keras.layers.Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict(tf.ones((1, 4)), steps=1) @@ -953,9 +952,9 @@ def testConvertTfjsLayersModelToTfjsGraphModel(self): def testConvertTfjsLayersModelToKerasSavedModel(self): with tf.Graph().as_default(), tf.compat.v1.Session(): # 1. Create a model for testing. - model = keras.Sequential() - model.add(keras.layers.Dense(10, activation='relu', input_shape=[4])) - model.add(keras.layers.Dense(1, activation='sigmoid')) + model = tf.keras.Sequential() + model.add(tf.keras.layers.Dense(10, activation='relu', input_shape=[4])) + model.add(tf.keras.layers.Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy') model.predict(tf.ones((1, 4)), steps=1)