From 095bf33d7cdc3a0e31e65252c6b1d9361f1adeb1 Mon Sep 17 00:00:00 2001 From: Yaohui Liu Date: Sun, 5 Mar 2023 11:14:58 +0800 Subject: [PATCH] Refine the keras SavedModel unittest. --- .../SaveModel/SequentialModelLoad.cs | 22 ++--- .../SaveModel/SequentialModelSave.cs | 80 +++++++++---------- 2 files changed, 45 insertions(+), 57 deletions(-) diff --git a/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelLoad.cs b/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelLoad.cs index 73f99bbc..f4cbccf5 100644 --- a/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelLoad.cs +++ b/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelLoad.cs @@ -1,20 +1,10 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.Collections.Generic; -using System.Diagnostics; using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tensorflow.Keras.Engine; -using Tensorflow.Keras.Saving.SavedModel; -using Tensorflow.Keras.Losses; -using Tensorflow.Keras.Metrics; using Tensorflow; using Tensorflow.Keras.Optimizers; -using static Tensorflow.KerasApi; -using Tensorflow.NumPy; using Tensorflow.Keras.UnitTest.Helpers; -using static TensorFlowNET.Keras.UnitTest.SaveModel.SequentialModelSave; +using Tensorflow.NumPy; +using static Tensorflow.Binding; namespace TensorFlowNET.Keras.UnitTest.SaveModel; @@ -24,10 +14,10 @@ public class SequentialModelLoad [TestMethod] public void SimpleModelFromAutoCompile() { - var model = keras.models.load_model(@"Assets/simple_model_from_auto_compile"); + var model = tf.keras.models.load_model(@"Assets/simple_model_from_auto_compile"); model.summary(); - model.compile(new Adam(0.0001f), new LossesApi().SparseCategoricalCrossentropy(), new string[] { "accuracy" }); + model.compile(new Adam(0.0001f), tf.keras.losses.SparseCategoricalCrossentropy(), new string[] { "accuracy" }); // check the weights var kernel1 = np.load(@"Assets/simple_model_from_auto_compile/kernel1.npy"); @@ -54,10 +44,10 @@ public class SequentialModelLoad public void AlexnetFromSequential() { new SequentialModelSave().AlexnetFromSequential(); - var model = keras.models.load_model(@"./alexnet_from_sequential"); + var model = tf.keras.models.load_model(@"./alexnet_from_sequential"); model.summary(); - model.compile(new Adam(0.001f), new LossesApi().SparseCategoricalCrossentropy(from_logits: true), new string[] { "accuracy" }); + model.compile(new Adam(0.001f), tf.keras.losses.SparseCategoricalCrossentropy(from_logits: true), new string[] { "accuracy" }); var num_epochs = 1; var batch_size = 8; diff --git a/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelSave.cs b/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelSave.cs index e68fa9b4..0c912607 100644 --- a/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelSave.cs +++ b/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelSave.cs @@ -1,10 +1,8 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; -using System.Diagnostics; using Tensorflow; using Tensorflow.Keras; using Tensorflow.Keras.Engine; -using Tensorflow.Keras.Losses; using Tensorflow.Keras.Optimizers; using Tensorflow.Keras.UnitTest.Helpers; using static Tensorflow.Binding; @@ -18,15 +16,15 @@ public class SequentialModelSave [TestMethod] public void SimpleModelFromAutoCompile() { - var inputs = keras.layers.Input((28, 28, 1)); - var x = keras.layers.Flatten().Apply(inputs); - x = keras.layers.Dense(100, activation: tf.nn.relu).Apply(x); - x = keras.layers.Dense(units: 10).Apply(x); - var outputs = keras.layers.Softmax(axis: 1).Apply(x); - var model = keras.Model(inputs, outputs); - - model.compile(new Adam(0.001f), - keras.losses.SparseCategoricalCrossentropy(), + var inputs = tf.keras.layers.Input((28, 28, 1)); + var x = tf.keras.layers.Flatten().Apply(inputs); + x = tf.keras.layers.Dense(100, activation: tf.nn.relu).Apply(x); + x = tf.keras.layers.Dense(units: 10).Apply(x); + var outputs = tf.keras.layers.Softmax(axis: 1).Apply(x); + var model = tf.keras.Model(inputs, outputs); + + model.compile(new Adam(0.001f), + tf.keras.losses.SparseCategoricalCrossentropy(), new string[] { "accuracy" }); var data_loader = new MnistModelLoader(); @@ -48,18 +46,18 @@ public class SequentialModelSave [TestMethod] public void SimpleModelFromSequential() { - Model model = KerasApi.keras.Sequential(new List() + Model model = keras.Sequential(new List() { - keras.layers.InputLayer((28, 28, 1)), - keras.layers.Flatten(), - keras.layers.Dense(100, "relu"), - keras.layers.Dense(10), - keras.layers.Softmax() + tf.keras.layers.InputLayer((28, 28, 1)), + tf.keras.layers.Flatten(), + tf.keras.layers.Dense(100, "relu"), + tf.keras.layers.Dense(10), + tf.keras.layers.Softmax() }); model.summary(); - model.compile(new Adam(0.001f), new LossesApi().SparseCategoricalCrossentropy(), new string[] { "accuracy" }); + model.compile(new Adam(0.001f), tf.keras.losses.SparseCategoricalCrossentropy(), new string[] { "accuracy" }); var data_loader = new MnistModelLoader(); var num_epochs = 1; @@ -80,39 +78,39 @@ public class SequentialModelSave [TestMethod] public void AlexnetFromSequential() { - Model model = KerasApi.keras.Sequential(new List() + Model model = keras.Sequential(new List() { - keras.layers.InputLayer((227, 227, 3)), - keras.layers.Conv2D(96, (11, 11), (4, 4), activation:"relu", padding:"valid"), - keras.layers.BatchNormalization(), - keras.layers.MaxPooling2D((3, 3), strides:(2, 2)), + tf.keras.layers.InputLayer((227, 227, 3)), + tf.keras.layers.Conv2D(96, (11, 11), (4, 4), activation:"relu", padding:"valid"), + tf.keras.layers.BatchNormalization(), + tf.keras.layers.MaxPooling2D((3, 3), strides:(2, 2)), - keras.layers.Conv2D(256, (5, 5), (1, 1), "same", activation: "relu"), - keras.layers.BatchNormalization(), - keras.layers.MaxPooling2D((3, 3), (2, 2)), + tf.keras.layers.Conv2D(256, (5, 5), (1, 1), "same", activation: "relu"), + tf.keras.layers.BatchNormalization(), + tf.keras.layers.MaxPooling2D((3, 3), (2, 2)), - keras.layers.Conv2D(384, (3, 3), (1, 1), "same", activation: "relu"), - keras.layers.BatchNormalization(), + tf.keras.layers.Conv2D(384, (3, 3), (1, 1), "same", activation: "relu"), + tf.keras.layers.BatchNormalization(), - keras.layers.Conv2D(384, (3, 3), (1, 1), "same", activation: "relu"), - keras.layers.BatchNormalization(), + tf.keras.layers.Conv2D(384, (3, 3), (1, 1), "same", activation: "relu"), + tf.keras.layers.BatchNormalization(), - keras.layers.Conv2D(256, (3, 3), (1, 1), "same", activation: "relu"), - keras.layers.BatchNormalization(), - keras.layers.MaxPooling2D((3, 3), (2, 2)), + tf.keras.layers.Conv2D(256, (3, 3), (1, 1), "same", activation: "relu"), + tf.keras.layers.BatchNormalization(), + tf.keras.layers.MaxPooling2D((3, 3), (2, 2)), - keras.layers.Flatten(), - keras.layers.Dense(4096, activation: "relu"), - keras.layers.Dropout(0.5f), + tf.keras.layers.Flatten(), + tf.keras.layers.Dense(4096, activation: "relu"), + tf.keras.layers.Dropout(0.5f), - keras.layers.Dense(4096, activation: "relu"), - keras.layers.Dropout(0.5f), + tf.keras.layers.Dense(4096, activation: "relu"), + tf.keras.layers.Dropout(0.5f), - keras.layers.Dense(1000, activation: "linear"), - keras.layers.Softmax(1) + tf.keras.layers.Dense(1000, activation: "linear"), + tf.keras.layers.Softmax(1) }); - model.compile(new Adam(0.001f), new LossesApi().SparseCategoricalCrossentropy(from_logits: true), new string[] { "accuracy" }); + model.compile(new Adam(0.001f), tf.keras.losses.SparseCategoricalCrossentropy(from_logits: true), new string[] { "accuracy" }); var num_epochs = 1; var batch_size = 8;