From f22876aca0dd288bfa5a89272f07503ce16354a7 Mon Sep 17 00:00:00 2001 From: Yaohui Liu Date: Sun, 5 Mar 2023 02:11:22 +0800 Subject: [PATCH 1/2] Reduce the time of keras unittest. --- .../{Gradient.cs => GradientTest.cs} | 0 .../SaveModel/SequentialModelLoad.cs | 2 +- .../SaveModel/SequentialModelSave.cs | 18 +++++++++--------- 3 files changed, 10 insertions(+), 10 deletions(-) rename test/TensorFlowNET.Keras.UnitTest/{Gradient.cs => GradientTest.cs} (100%) diff --git a/test/TensorFlowNET.Keras.UnitTest/Gradient.cs b/test/TensorFlowNET.Keras.UnitTest/GradientTest.cs similarity index 100% rename from test/TensorFlowNET.Keras.UnitTest/Gradient.cs rename to test/TensorFlowNET.Keras.UnitTest/GradientTest.cs diff --git a/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelLoad.cs b/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelLoad.cs index e778a5a4a..685d641c7 100644 --- a/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelLoad.cs +++ b/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelLoad.cs @@ -43,7 +43,7 @@ public void SimpleModelFromAutoCompile() { TrainDir = "mnist", OneHot = false, - ValidationSize = 50000, + ValidationSize = 58000, }).Result; model.fit(dataset.Train.Data, dataset.Train.Labels, batch_size, num_epochs); diff --git a/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelSave.cs b/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelSave.cs index 15823b9f4..1ba40f073 100644 --- a/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelSave.cs +++ b/test/TensorFlowNET.Keras.UnitTest/SaveModel/SequentialModelSave.cs @@ -18,15 +18,15 @@ public class SequentialModelSave [TestMethod] public void SimpleModelFromAutoCompile() { - 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); + 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), - tf.keras.losses.SparseCategoricalCrossentropy(), + keras.losses.SparseCategoricalCrossentropy(), new string[] { "accuracy" }); var data_loader = new MnistModelLoader(); @@ -37,7 +37,7 @@ public void SimpleModelFromAutoCompile() { TrainDir = "mnist", OneHot = false, - ValidationSize = 10000, + ValidationSize = 58000, }).Result; model.fit(dataset.Train.Data, dataset.Train.Labels, batch_size, num_epochs); @@ -69,7 +69,7 @@ public void SimpleModelFromSequential() { TrainDir = "mnist", OneHot = false, - ValidationSize = 50000, + ValidationSize = 58000, }).Result; model.fit(dataset.Train.Data, dataset.Train.Labels, batch_size, num_epochs); From 151ef066ccb4add92288b61be8f96b0408175967 Mon Sep 17 00:00:00 2001 From: Yaohui Liu Date: Sun, 5 Mar 2023 11:14:58 +0800 Subject: [PATCH 2/2] 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 73f99bbcd..f4cbccf58 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 void SimpleModelFromAutoCompile() 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 e68fa9b4e..0c912607c 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 void SimpleModelFromAutoCompile() [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 void SimpleModelFromSequential() [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;