diff --git a/TensorFlow.NET.sln b/TensorFlow.NET.sln index ffc39b5a..8cf330e0 100644 --- a/TensorFlow.NET.sln +++ b/TensorFlow.NET.sln @@ -19,6 +19,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tensorflow.Recommenders", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tensorflow.Native.UnitTest", "test\TensorFlowNET.Native.UnitTest\Tensorflow.Native.UnitTest.csproj", "{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tensorflow.Keras.UnitTest", "test\TensorFlowNET.Keras.UnitTest\Tensorflow.Keras.UnitTest.csproj", "{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -227,6 +229,30 @@ Global {84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x64.Build.0 = Release|Any CPU {84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x86.ActiveCfg = Release|Any CPU {84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x86.Build.0 = Release|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug|x64.ActiveCfg = Debug|x64 + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug|x64.Build.0 = Debug|x64 + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug|x86.ActiveCfg = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug|x86.Build.0 = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug-Minimal|Any CPU.ActiveCfg = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug-Minimal|Any CPU.Build.0 = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug-Minimal|x64.ActiveCfg = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug-Minimal|x64.Build.0 = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug-Minimal|x86.ActiveCfg = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug-Minimal|x86.Build.0 = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Publish|Any CPU.ActiveCfg = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Publish|Any CPU.Build.0 = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Publish|x64.ActiveCfg = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Publish|x64.Build.0 = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Publish|x86.ActiveCfg = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Publish|x86.Build.0 = Debug|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|Any CPU.Build.0 = Release|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x64.ActiveCfg = Release|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x64.Build.0 = Release|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x86.ActiveCfg = Release|Any CPU + {79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/TensorFlowNET.Core/Tensorflow.Binding.csproj b/src/TensorFlowNET.Core/Tensorflow.Binding.csproj index 635ef5d0..aea2ac4f 100644 --- a/src/TensorFlowNET.Core/Tensorflow.Binding.csproj +++ b/src/TensorFlowNET.Core/Tensorflow.Binding.csproj @@ -82,7 +82,7 @@ TensorFlow .NET v0.3x is focused on making more Keras API works - + diff --git a/test/TensorFlowNET.Keras.UnitTest/EagerModeTestBase.cs b/test/TensorFlowNET.Keras.UnitTest/EagerModeTestBase.cs new file mode 100644 index 00000000..566ade30 --- /dev/null +++ b/test/TensorFlowNET.Keras.UnitTest/EagerModeTestBase.cs @@ -0,0 +1,50 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using static Tensorflow.Binding; + +namespace TensorFlowNET.Keras.UnitTest +{ + public class EagerModeTestBase + { + [TestInitialize] + public void TestInit() + { + if (!tf.executing_eagerly()) + tf.enable_eager_execution(); + tf.Context.ensure_initialized(); + } + + [TestCleanup] + public void TestClean() + { + } + + public bool Equal(float[] f1, float[] f2) + { + bool ret = false; + var tolerance = .000001f; + for (var i = 0; i < f1.Length; i++) + { + ret = Math.Abs(f1[i] - f2[i]) <= tolerance; + if (!ret) + break; + } + + return ret; + } + + public bool Equal(double[] d1, double[] d2) + { + bool ret = false; + var tolerance = .000000000000001f; + for (var i = 0; i < d1.Length; i++) + { + ret = Math.Abs(d1[i] - d2[i]) <= tolerance; + if (!ret) + break; + } + + return ret; + } + } +} diff --git a/test/TensorFlowNET.UnitTest/Keras/ActivationTest.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/ActivationTest.cs similarity index 56% rename from test/TensorFlowNET.UnitTest/Keras/ActivationTest.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/ActivationTest.cs index d26a2ac7..62e8ae28 100644 --- a/test/TensorFlowNET.UnitTest/Keras/ActivationTest.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/ActivationTest.cs @@ -6,7 +6,7 @@ using NumSharp; using static Tensorflow.KerasApi; using Tensorflow; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class ActivationTest : EagerModeTestBase @@ -16,11 +16,7 @@ namespace TensorFlowNET.UnitTest.Keras { var layer = keras.layers.LeakyReLU(); Tensor output = layer.Apply(np.array(-3.0f, -1.0f, 0.0f, 2.0f)); - var outputArray = output.ToArray(); - assertFloat32Equal(-0.9f, outputArray[0], "Not equal"); - assertFloat32Equal(-0.3f, outputArray[1], "Not equal"); - assertFloat32Equal(0.0f, outputArray[2], "Not equal"); - assertFloat32Equal(2.0f, outputArray[3], "Not equal"); + Equal(new[] { -0.9f, -0.3f, 0.0f, 2.0f }, output.ToArray()); } } } diff --git a/test/TensorFlowNET.UnitTest/Keras/CosineSimilarity.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/CosineSimilarity.Test.cs similarity index 98% rename from test/TensorFlowNET.UnitTest/Keras/CosineSimilarity.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/CosineSimilarity.Test.cs index 70e07264..5d2fa9e5 100644 --- a/test/TensorFlowNET.UnitTest/Keras/CosineSimilarity.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/CosineSimilarity.Test.cs @@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; using static Tensorflow.Binding; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class CosineSimilarity diff --git a/test/TensorFlowNET.UnitTest/Keras/Huber.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/Huber.Test.cs similarity index 98% rename from test/TensorFlowNET.UnitTest/Keras/Huber.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/Huber.Test.cs index cbc16eab..538c281f 100644 --- a/test/TensorFlowNET.UnitTest/Keras/Huber.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/Huber.Test.cs @@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; using static Tensorflow.Binding; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class Huber diff --git a/test/TensorFlowNET.UnitTest/Keras/Layers.Merging.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/Layers.Merging.Test.cs similarity index 93% rename from test/TensorFlowNET.UnitTest/Keras/Layers.Merging.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/Layers.Merging.Test.cs index 5dad1390..785bd2b6 100644 --- a/test/TensorFlowNET.UnitTest/Keras/Layers.Merging.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/Layers.Merging.Test.cs @@ -3,7 +3,7 @@ using NumSharp; using Tensorflow; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class LayersMergingTest : EagerModeTestBase diff --git a/test/TensorFlowNET.UnitTest/Keras/Layers.Reshaping.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/Layers.Reshaping.Test.cs similarity index 96% rename from test/TensorFlowNET.UnitTest/Keras/Layers.Reshaping.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/Layers.Reshaping.Test.cs index 6ce816d6..74f19a08 100644 --- a/test/TensorFlowNET.UnitTest/Keras/Layers.Reshaping.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/Layers.Reshaping.Test.cs @@ -3,7 +3,7 @@ using NumSharp; using static Tensorflow.Binding; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class LayersReshapingTest : EagerModeTestBase diff --git a/test/TensorFlowNET.UnitTest/Keras/LayersTest.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs similarity index 94% rename from test/TensorFlowNET.UnitTest/Keras/LayersTest.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs index c6858ba0..57af6b16 100644 --- a/test/TensorFlowNET.UnitTest/Keras/LayersTest.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs @@ -3,7 +3,7 @@ using NumSharp; using Tensorflow; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { /// /// https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/keras/layers @@ -24,7 +24,7 @@ namespace TensorFlowNET.UnitTest.Keras var layers = keras.layers; var inputs = keras.Input(shape: 784); - Assert.AreEqual((None, 784), inputs.TensorShape); + Assert.AreEqual((-1, 784), inputs.TensorShape); var dense = layers.Dense(64, activation: keras.activations.Relu); var x = dense.Apply(inputs); @@ -59,7 +59,7 @@ namespace TensorFlowNET.UnitTest.Keras }); // model.compile("rmsprop", "mse"); var output_array = model.predict(input_array); - Assert.AreEqual((32, 10, 64), output_array.TensorShape); + Assert.AreEqual((32, 10, 64), output_array.shape); } /// diff --git a/test/TensorFlowNET.UnitTest/Keras/LogCosh.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/LogCosh.Test.cs similarity index 98% rename from test/TensorFlowNET.UnitTest/Keras/LogCosh.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/LogCosh.Test.cs index 48d2d862..8cbbfbae 100644 --- a/test/TensorFlowNET.UnitTest/Keras/LogCosh.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/LogCosh.Test.cs @@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; using static Tensorflow.Binding; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class LogCosh diff --git a/test/TensorFlowNET.UnitTest/Keras/MeanAbsoluteError.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/MeanAbsoluteError.Test.cs similarity index 98% rename from test/TensorFlowNET.UnitTest/Keras/MeanAbsoluteError.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/MeanAbsoluteError.Test.cs index 2b7a2504..5055efdf 100644 --- a/test/TensorFlowNET.UnitTest/Keras/MeanAbsoluteError.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/MeanAbsoluteError.Test.cs @@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; using static Tensorflow.Binding; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class MeanAbsoluteError diff --git a/test/TensorFlowNET.UnitTest/Keras/MeanAbsolutePercentageError.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/MeanAbsolutePercentageError.Test.cs similarity index 98% rename from test/TensorFlowNET.UnitTest/Keras/MeanAbsolutePercentageError.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/MeanAbsolutePercentageError.Test.cs index 97b43503..acd9a142 100644 --- a/test/TensorFlowNET.UnitTest/Keras/MeanAbsolutePercentageError.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/MeanAbsolutePercentageError.Test.cs @@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; using static Tensorflow.Binding; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class MeanAbsolutePercentageError diff --git a/test/TensorFlowNET.UnitTest/Keras/MeanSquaredError.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/MeanSquaredError.Test.cs similarity index 98% rename from test/TensorFlowNET.UnitTest/Keras/MeanSquaredError.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/MeanSquaredError.Test.cs index f1c782f8..4d94d119 100644 --- a/test/TensorFlowNET.UnitTest/Keras/MeanSquaredError.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/MeanSquaredError.Test.cs @@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; using static Tensorflow.Binding; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class MeanSquaredErrorTest diff --git a/test/TensorFlowNET.UnitTest/Keras/MeanSquaredLogarithmicError.Test.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/MeanSquaredLogarithmicError.Test.cs similarity index 98% rename from test/TensorFlowNET.UnitTest/Keras/MeanSquaredLogarithmicError.Test.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/MeanSquaredLogarithmicError.Test.cs index 28499143..e5b0cf3b 100644 --- a/test/TensorFlowNET.UnitTest/Keras/MeanSquaredLogarithmicError.Test.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/MeanSquaredLogarithmicError.Test.cs @@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; using static Tensorflow.Binding; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { [TestClass] public class MeanSquaredLogarithmicError diff --git a/test/TensorFlowNET.UnitTest/Keras/ModelSaveTest.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/ModelSaveTest.cs similarity index 95% rename from test/TensorFlowNET.UnitTest/Keras/ModelSaveTest.cs rename to test/TensorFlowNET.Keras.UnitTest/Layers/ModelSaveTest.cs index 901ecf02..0a1098af 100644 --- a/test/TensorFlowNET.UnitTest/Keras/ModelSaveTest.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/ModelSaveTest.cs @@ -2,7 +2,7 @@ using Tensorflow.Keras.Engine; using static Tensorflow.KerasApi; -namespace TensorFlowNET.UnitTest.Keras +namespace TensorFlowNET.Keras.UnitTest { /// /// https://www.tensorflow.org/guide/keras/save_and_serialize diff --git a/test/TensorFlowNET.Keras.UnitTest/Tensorflow.Keras.UnitTest.csproj b/test/TensorFlowNET.Keras.UnitTest/Tensorflow.Keras.UnitTest.csproj new file mode 100644 index 00000000..e9d5b8ef --- /dev/null +++ b/test/TensorFlowNET.Keras.UnitTest/Tensorflow.Keras.UnitTest.csproj @@ -0,0 +1,28 @@ + + + + netcoreapp3.1 + + false + + AnyCPU;x64 + + + + DEBUG;TRACE + x64 + + + + + + + + + + + + + + +