@@ -19,6 +19,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tensorflow.Recommenders", " | |||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tensorflow.Native.UnitTest", "test\TensorFlowNET.Native.UnitTest\Tensorflow.Native.UnitTest.csproj", "{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tensorflow.Native.UnitTest", "test\TensorFlowNET.Native.UnitTest\Tensorflow.Native.UnitTest.csproj", "{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}" | ||||
EndProject | 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 | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
Debug|Any CPU = Debug|Any CPU | 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|x64.Build.0 = Release|Any CPU | ||||
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x86.ActiveCfg = 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 | {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 | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
@@ -82,7 +82,7 @@ TensorFlow .NET v0.3x is focused on making more Keras API works</PackageReleaseN | |||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="MethodBoundaryAspect.Fody" Version="2.0.138" /> | <PackageReference Include="MethodBoundaryAspect.Fody" Version="2.0.138" /> | ||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" /> | <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" /> | ||||
<PackageReference Include="NumSharp.Lite" Version="0.1.10" /> | |||||
<PackageReference Include="NumSharp.Lite" Version="0.1.11" /> | |||||
<PackageReference Include="Protobuf.Text" Version="0.4.0" /> | <PackageReference Include="Protobuf.Text" Version="0.4.0" /> | ||||
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" /> | <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -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; | |||||
} | |||||
} | |||||
} |
@@ -6,7 +6,7 @@ using NumSharp; | |||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
using Tensorflow; | using Tensorflow; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class ActivationTest : EagerModeTestBase | public class ActivationTest : EagerModeTestBase | ||||
@@ -16,11 +16,7 @@ namespace TensorFlowNET.UnitTest.Keras | |||||
{ | { | ||||
var layer = keras.layers.LeakyReLU(); | var layer = keras.layers.LeakyReLU(); | ||||
Tensor output = layer.Apply(np.array(-3.0f, -1.0f, 0.0f, 2.0f)); | Tensor output = layer.Apply(np.array(-3.0f, -1.0f, 0.0f, 2.0f)); | ||||
var outputArray = output.ToArray<float>(); | |||||
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<float>()); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; | |||||
using static Tensorflow.Binding; | using static Tensorflow.Binding; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class CosineSimilarity | public class CosineSimilarity |
@@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; | |||||
using static Tensorflow.Binding; | using static Tensorflow.Binding; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class Huber | public class Huber |
@@ -3,7 +3,7 @@ using NumSharp; | |||||
using Tensorflow; | using Tensorflow; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class LayersMergingTest : EagerModeTestBase | public class LayersMergingTest : EagerModeTestBase |
@@ -3,7 +3,7 @@ using NumSharp; | |||||
using static Tensorflow.Binding; | using static Tensorflow.Binding; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class LayersReshapingTest : EagerModeTestBase | public class LayersReshapingTest : EagerModeTestBase |
@@ -3,7 +3,7 @@ using NumSharp; | |||||
using Tensorflow; | using Tensorflow; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/keras/layers | /// 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 layers = keras.layers; | ||||
var inputs = keras.Input(shape: 784); | 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 dense = layers.Dense(64, activation: keras.activations.Relu); | ||||
var x = dense.Apply(inputs); | var x = dense.Apply(inputs); | ||||
@@ -59,7 +59,7 @@ namespace TensorFlowNET.UnitTest.Keras | |||||
}); | }); | ||||
// model.compile("rmsprop", "mse"); | // model.compile("rmsprop", "mse"); | ||||
var output_array = model.predict(input_array); | var output_array = model.predict(input_array); | ||||
Assert.AreEqual((32, 10, 64), output_array.TensorShape); | |||||
Assert.AreEqual((32, 10, 64), output_array.shape); | |||||
} | } | ||||
/// <summary> | /// <summary> |
@@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; | |||||
using static Tensorflow.Binding; | using static Tensorflow.Binding; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class LogCosh | public class LogCosh |
@@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; | |||||
using static Tensorflow.Binding; | using static Tensorflow.Binding; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class MeanAbsoluteError | public class MeanAbsoluteError |
@@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; | |||||
using static Tensorflow.Binding; | using static Tensorflow.Binding; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class MeanAbsolutePercentageError | public class MeanAbsolutePercentageError |
@@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; | |||||
using static Tensorflow.Binding; | using static Tensorflow.Binding; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class MeanSquaredErrorTest | public class MeanSquaredErrorTest |
@@ -5,7 +5,7 @@ using Tensorflow.Keras.Losses; | |||||
using static Tensorflow.Binding; | using static Tensorflow.Binding; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
[TestClass] | [TestClass] | ||||
public class MeanSquaredLogarithmicError | public class MeanSquaredLogarithmicError |
@@ -2,7 +2,7 @@ | |||||
using Tensorflow.Keras.Engine; | using Tensorflow.Keras.Engine; | ||||
using static Tensorflow.KerasApi; | using static Tensorflow.KerasApi; | ||||
namespace TensorFlowNET.UnitTest.Keras | |||||
namespace TensorFlowNET.Keras.UnitTest | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// https://www.tensorflow.org/guide/keras/save_and_serialize | /// https://www.tensorflow.org/guide/keras/save_and_serialize |
@@ -0,0 +1,28 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<TargetFramework>netcoreapp3.1</TargetFramework> | |||||
<IsPackable>false</IsPackable> | |||||
<Platforms>AnyCPU;x64</Platforms> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> | |||||
<DefineConstants>DEBUG;TRACE</DefineConstants> | |||||
<PlatformTarget>x64</PlatformTarget> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" /> | |||||
<PackageReference Include="MSTest.TestAdapter" Version="2.1.1" /> | |||||
<PackageReference Include="MSTest.TestFramework" Version="2.1.1" /> | |||||
<PackageReference Include="coverlet.collector" Version="1.3.0" /> | |||||
<PackageReference Include="SciSharp.TensorFlow.Redist" Version="2.3.1" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\..\src\TensorFlowNET.Keras\Tensorflow.Keras.csproj" /> | |||||
</ItemGroup> | |||||
</Project> |