From d9988d7ccd4f04ada843ce0730efeafb92e058be Mon Sep 17 00:00:00 2001 From: Rinne Date: Tue, 2 May 2023 08:50:51 +0800 Subject: [PATCH] ci: add ci for test and auto-release. (#1047) * Add unittest redist holder for all test projects. * Move redist holder to another folder. * Create dotnet.yml to config github action * Revise the sln file. * Update dotnet.yml * Add version to tensorflow.hub. * Create release.yml * Update dotnet.yml * Update and rename dotnet.yml to build_and_test.yml * Update release.yml * Update release.yml * Revise project using. * Update build_and_test.yml * Update release.yml * Update the package info of Tensorflow.Hub. * Add a tolorance to equivalence of NDArray. * Create semantic.yml * fix: run code clean. * Update release.yml * Update release.yml * ci: revise the auto release ci. * ci: update release ci. * ci: update release ci. * ci: update ci files. * ci: update ci files. * ci: update ci files. * ci: update ci files. * ci: update ci files. * ci: update release ci and hub package info. * ci: revise build_and_test ci. * test: add tolorance to float NDArray comparison. * ci: disable linux test. * ci: update release ci. * Update release.yml * ci: update release ci. * ci: revise auto-release ci. * ci: update auto-release ci. * Update release.yml * ci: specify packed project names of auto-release. * ci: revise auto release ci file. * ci: revise auto-release ci file. * ci: revise auto-release ci file. * ci: revise auto-release ci file. * Update release.yml * ci: revise auto-release ci file. * ci: revise auto-release ci file. * ci: revise auto-release ci file. --- .github/workflows/build_and_test.yml | 66 ++++++++++++ .github/workflows/release.yml | 100 ++++++++++++++++++ .github/workflows/semantic.yml | 17 +++ TensorFlow.NET.sln | 25 ++++- .../EmptyClass.cs | 3 + .../Tensorflow.UnitTest.RedistHolder.csproj | 12 +++ .../NumPy/NDArray.Operators.cs | 45 +++++--- .../Tensorflow.Binding.csproj | 1 + .../Tensorflow.Keras.csproj | 1 + src/TensorflowNET.Hub/Tensorflow.Hub.csproj | 19 ++++ .../TensorFlowNET.Graph.UnitTest.csproj | 2 +- .../Layers/ActivationTest.cs | 2 +- .../Layers/AttentionTest.cs | 2 +- .../Losses/LossesTest.cs | 2 +- .../Tensorflow.Keras.UnitTest.csproj | 2 +- .../Tensorflow.Native.UnitTest.csproj | 3 +- .../Tensorflow.Binding.UnitTest.csproj | 2 +- .../Tensorflow.Hub.Unittest.csproj | 4 +- 18 files changed, 280 insertions(+), 28 deletions(-) create mode 100644 .github/workflows/build_and_test.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/semantic.yml create mode 100644 helpers/Tensorflow.UnitTest.RedistHolder/EmptyClass.cs create mode 100644 helpers/Tensorflow.UnitTest.RedistHolder/Tensorflow.UnitTest.RedistHolder.csproj diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml new file mode 100644 index 00000000..070c7cbd --- /dev/null +++ b/.github/workflows/build_and_test.yml @@ -0,0 +1,66 @@ +# This workflow will build a .NET project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net + +name: build_and_test + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + types: ["opened", "reopened", "synchronize", "ready_for_review", "auto_merge_enabled"] + +jobs: + windows: + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v3 + - name: Setup .NET 6 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + - name: Restore dependencies + run: dotnet restore + - name: Build CPU version + run: dotnet build --no-restore + - name: Test CPU version + run: dotnet test --no-build --verbosity normal + - name: uninstall redist cpu for unit tests + run: dotnet remove helpers/Tensorflow.UnitTest.RedistHolder package SciSharp.TensorFlow.Redist + - name: install redist gpu for unit tests + run: dotnet add helpers/Tensorflow.UnitTest.RedistHolder package SciSharp.TensorFlow.Redist-Windows-GPU + - name: Restore dependencies + run: dotnet restore + - name: Build GPU version + run: dotnet build --no-restore +# - name: Test GPU version +# run: dotnet test --no-build --verbosity normal + + linux: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + - name: Restore dependencies + run: dotnet restore + - name: Build CPU version + run: dotnet build --no-restore + # - name: Test CPU version + # run: dotnet test --no-build --verbosity normal + - name: uninstall redist cpu for unit tests + run: dotnet remove helpers/Tensorflow.UnitTest.RedistHolder package SciSharp.TensorFlow.Redist + - name: install redist gpu for unit tests + run: dotnet add helpers/Tensorflow.UnitTest.RedistHolder package SciSharp.TensorFlow.Redist-Linux-GPU + - name: Restore dependencies + run: dotnet restore + - name: Build GPU version + run: dotnet build --no-restore +# - name: Test GPU version +# run: dotnet test --no-build --verbosity normal diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..2f6e9f07 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,100 @@ +name: auto-release + +on: + label: + types: [created, edited] + pull_request: + branches: + - master + types: [ labeled, opened, reopened, synchronize ] + +env: + MYGET_API_TOKEN: ${{ SECRETS.RINNE_MYGET_KEY }} + GITHUB_TOKEN: ${{ SECRETS.RINNE_GITHUB_TOKEN }} + +jobs: + build: + if: contains(github.event.pull_request.labels.*.name, 'auto-release') + runs-on: windows-latest + + steps: + - uses: actions/checkout@v3 + - name: Setup .NET 6.0.x SDK + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + + - name: Check .NET info + run: dotnet --info + + - name: Install dependencies + run: dotnet restore + + - name: Build solution + run: dotnet build -c Release --no-restore + +# run-semantic-release: +# runs-on: ubuntu-latest +# needs: build + +# steps: +# - name: Checkout +# uses: actions/checkout@v2 + +# - name: Run semantic-release +# run: | +# export PATH=$PATH:$(yarn global bin) +# yarn global add semantic-release@17.4.3 +# semantic-release + + release: + runs-on: windows-latest +# needs: run-semantic-release + needs: build + + steps: + - uses: actions/checkout@v3 + - name: Setup .NET 6.0.x SDK + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + + - name: Check .NET info + run: dotnet --info + + - name: Install dependencies + run: dotnet restore + + - name: Build solution + run: dotnet build -c Release --no-restore + + - name: Pack packages + run: | + git fetch --unshallow; + git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; + git fetch origin; + $LastTag = git describe --tags; + echo "Last tag is: $LastTag"; + $Version = ($LastTag).TrimStart('v') + "-preview"; + echo "Publishing version: $Version"; + dotnet pack ./src/TensorFlowNET.Core/Tensorflow.Binding.csproj -c Release -o packages /p:PackageVersion=$Version /p:Version=$Version; + dotnet pack ./src/TensorFlowNET.Keras/Tensorflow.Keras.csproj -c Release -o packages /p:PackageVersion=$Version /p:Version=$Version; + dotnet pack ./src/TensorflowNET.Hub/Tensorflow.Hub.csproj -c Release -o packages /p:PackageVersion=$Version /p:Version=$Version; + + if($LastExitCode -ne 0) + { + Write-Warning -Message "Pack packages warming, last exit code is ${LastExitCode}." + $LastExitCode = 0; + } + + - name: Upload packages artifacts + uses: actions/upload-artifact@v1.0.0 + with: + name: "drop-ci-packages" + path: './packages' + + - name: Add myget nuget source + run: dotnet nuget add source https://www.myget.org/F/rinne/api/v2/package --name myget.org + + - name: Push TensorFlow.NET to myget.org + run: dotnet nuget push .\packages\TensorFlow*.nupkg -s myget.org -k $env:MYGET_API_TOKEN --skip-duplicate diff --git a/.github/workflows/semantic.yml b/.github/workflows/semantic.yml new file mode 100644 index 00000000..db8c06a3 --- /dev/null +++ b/.github/workflows/semantic.yml @@ -0,0 +1,17 @@ +name: Semantic + +on: + pull_request: + branches: [ "master" ] + +jobs: + semantic-pull-request: + name: Semantic check + runs-on: windows-latest + steps: + - name: semantic-pull-request + uses: amannn/action-semantic-pull-request@v4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + validateSingleCommit: true diff --git a/TensorFlow.NET.sln b/TensorFlow.NET.sln index ab95b47a..0c7d6e3c 100644 --- a/TensorFlow.NET.sln +++ b/TensorFlow.NET.sln @@ -31,7 +31,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{01A1787F-A9B EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{1B0918B9-65AD-4F34-A287-AF4597B27DBD}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "console", "console", "{E1A5D2B7-10AF-4876-85C0-7714EF274214}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "helpers", "helpers", "{E1A5D2B7-10AF-4876-85C0-7714EF274214}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tensorflow.UnitTest.RedistHolder", "helpers\Tensorflow.UnitTest.RedistHolder\Tensorflow.UnitTest.RedistHolder.csproj", "{62D543A2-8846-45A3-829B-5754B094A8E2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -262,13 +264,31 @@ Global {7DEA8760-E401-4872-81F3-405F185A13A0}.Release|x64.Build.0 = Release|Any CPU {7DEA8760-E401-4872-81F3-405F185A13A0}.Release|x86.ActiveCfg = Release|Any CPU {7DEA8760-E401-4872-81F3-405F185A13A0}.Release|x86.Build.0 = Release|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Debug|x64.ActiveCfg = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Debug|x64.Build.0 = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Debug|x86.ActiveCfg = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Debug|x86.Build.0 = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.GPU|Any CPU.ActiveCfg = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.GPU|Any CPU.Build.0 = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.GPU|x64.ActiveCfg = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.GPU|x64.Build.0 = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.GPU|x86.ActiveCfg = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.GPU|x86.Build.0 = Debug|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Release|Any CPU.Build.0 = Release|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Release|x64.ActiveCfg = Release|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Release|x64.Build.0 = Release|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Release|x86.ActiveCfg = Release|Any CPU + {62D543A2-8846-45A3-829B-5754B094A8E2}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {FD682AC0-7B2D-45D3-8B0D-C6D678B04144} = {01A1787F-A9BE-4221-84E8-6360DD010AB6} - {3A6EB896-604F-4E25-B677-B8103BCF3D2E} = {1B0918B9-65AD-4F34-A287-AF4597B27DBD} + {3A6EB896-604F-4E25-B677-B8103BCF3D2E} = {E1A5D2B7-10AF-4876-85C0-7714EF274214} {23C28035-2FCE-41F3-9A12-E73CE8A5AE32} = {1B0918B9-65AD-4F34-A287-AF4597B27DBD} {03F06299-3F4B-4449-A709-3A647657BC0C} = {E1A5D2B7-10AF-4876-85C0-7714EF274214} {49D71826-C03D-4FA7-9BAC-22C1327E65CF} = {01A1787F-A9BE-4221-84E8-6360DD010AB6} @@ -279,6 +299,7 @@ Global {3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3} = {1B0918B9-65AD-4F34-A287-AF4597B27DBD} {9738D16A-CFA0-405C-A7DF-D3D203B0CB18} = {01A1787F-A9BE-4221-84E8-6360DD010AB6} {7DEA8760-E401-4872-81F3-405F185A13A0} = {1B0918B9-65AD-4F34-A287-AF4597B27DBD} + {62D543A2-8846-45A3-829B-5754B094A8E2} = {E1A5D2B7-10AF-4876-85C0-7714EF274214} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2DEAD3CC-486B-4918-A607-50B0DE7B114A} diff --git a/helpers/Tensorflow.UnitTest.RedistHolder/EmptyClass.cs b/helpers/Tensorflow.UnitTest.RedistHolder/EmptyClass.cs new file mode 100644 index 00000000..563f18b8 --- /dev/null +++ b/helpers/Tensorflow.UnitTest.RedistHolder/EmptyClass.cs @@ -0,0 +1,3 @@ +internal class EmptyClass +{ +} diff --git a/helpers/Tensorflow.UnitTest.RedistHolder/Tensorflow.UnitTest.RedistHolder.csproj b/helpers/Tensorflow.UnitTest.RedistHolder/Tensorflow.UnitTest.RedistHolder.csproj new file mode 100644 index 00000000..87807758 --- /dev/null +++ b/helpers/Tensorflow.UnitTest.RedistHolder/Tensorflow.UnitTest.RedistHolder.csproj @@ -0,0 +1,12 @@ + + + + netstandard2.0 + + + + + + + + diff --git a/src/TensorFlowNET.Core/NumPy/NDArray.Operators.cs b/src/TensorFlowNET.Core/NumPy/NDArray.Operators.cs index ef3b76f7..dd457709 100644 --- a/src/TensorFlowNET.Core/NumPy/NDArray.Operators.cs +++ b/src/TensorFlowNET.Core/NumPy/NDArray.Operators.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using static Tensorflow.Binding; +using static Tensorflow.Binding; namespace Tensorflow.NumPy { @@ -14,35 +10,52 @@ namespace Tensorflow.NumPy public static NDArray operator -(NDArray lhs, NDArray rhs) => new NDArray(BinaryOpWrapper("sub", lhs, rhs)); [AutoNumPy] public static NDArray operator *(NDArray lhs, NDArray rhs) => new NDArray(BinaryOpWrapper("mul", lhs, rhs)); - [AutoNumPy] + [AutoNumPy] public static NDArray operator /(NDArray lhs, NDArray rhs) => new NDArray(BinaryOpWrapper("div", lhs, rhs)); [AutoNumPy] public static NDArray operator %(NDArray lhs, NDArray rhs) => new NDArray(BinaryOpWrapper("mod", lhs, rhs)); - [AutoNumPy] + [AutoNumPy] public static NDArray operator >(NDArray lhs, NDArray rhs) => new NDArray(gen_math_ops.greater(lhs, rhs)); - [AutoNumPy] + [AutoNumPy] public static NDArray operator <(NDArray lhs, NDArray rhs) => new NDArray(gen_math_ops.less(lhs, rhs)); - [AutoNumPy] + [AutoNumPy] public static NDArray operator -(NDArray lhs) => new NDArray(gen_math_ops.neg(lhs)); [AutoNumPy] public static NDArray operator ==(NDArray lhs, NDArray rhs) { - if(ReferenceEquals(lhs, rhs)) + if (ReferenceEquals(lhs, rhs)) return Scalar(true); - if(lhs is null) + if (lhs is null) return Scalar(false); - if(rhs is null) + if (rhs is null) return Scalar(false); - return new NDArray(math_ops.equal(lhs, rhs)); + // TODO(Rinne): use np.allclose instead. + if (lhs.dtype.is_floating() || rhs.dtype.is_floating()) + { + var diff = tf.abs(lhs - rhs); + return new NDArray(gen_math_ops.less(diff, new NDArray(1e-5).astype(diff.dtype))); + } + else + { + return new NDArray(math_ops.equal(lhs, rhs)); + } } [AutoNumPy] public static NDArray operator !=(NDArray lhs, NDArray rhs) { - if(ReferenceEquals(lhs, rhs)) + if (ReferenceEquals(lhs, rhs)) return Scalar(false); - if(lhs is null || rhs is null) + if (lhs is null || rhs is null) return Scalar(true); - return new NDArray(math_ops.not_equal(lhs, rhs)); + if (lhs.dtype.is_floating() || rhs.dtype.is_floating()) + { + var diff = tf.abs(lhs - rhs); + return new NDArray(gen_math_ops.greater_equal(diff, new NDArray(1e-5).astype(diff.dtype))); + } + else + { + return new NDArray(math_ops.not_equal(lhs, rhs)); + } } } } diff --git a/src/TensorFlowNET.Core/Tensorflow.Binding.csproj b/src/TensorFlowNET.Core/Tensorflow.Binding.csproj index 53184c73..d6c039c9 100644 --- a/src/TensorFlowNET.Core/Tensorflow.Binding.csproj +++ b/src/TensorFlowNET.Core/Tensorflow.Binding.csproj @@ -41,6 +41,7 @@ https://tensorflownet.readthedocs.io 1.0.0.0 LICENSE true + packages true Open.snk AnyCPU;x64 diff --git a/src/TensorFlowNET.Keras/Tensorflow.Keras.csproj b/src/TensorFlowNET.Keras/Tensorflow.Keras.csproj index adb7be0c..a5254edf 100644 --- a/src/TensorFlowNET.Keras/Tensorflow.Keras.csproj +++ b/src/TensorFlowNET.Keras/Tensorflow.Keras.csproj @@ -34,6 +34,7 @@ Keras is an API designed for human beings, not machines. Keras follows best prac true tensorflow, keras, deep learning, machine learning true + packages Git true Open.snk diff --git a/src/TensorflowNET.Hub/Tensorflow.Hub.csproj b/src/TensorflowNET.Hub/Tensorflow.Hub.csproj index f347e767..3c09f808 100644 --- a/src/TensorflowNET.Hub/Tensorflow.Hub.csproj +++ b/src/TensorflowNET.Hub/Tensorflow.Hub.csproj @@ -4,6 +4,25 @@ netstandard2.0;net6 10 enable + 1.0.0 + TensorFlow.Hub + Apache2.0 + true + true + Yaohui Liu, Haiping Chen + SciSharp STACK + true + Apache 2.0, Haiping Chen $([System.DateTime]::UtcNow.ToString(yyyy)) + https://github.com/SciSharp/TensorFlow.NET + git + http://scisharpstack.org + https://avatars3.githubusercontent.com/u/44989469?s=200&v=4 + TensorFlow, SciSharp, Machine Learning, Deep Learning, Transfer Learning, TensorFlow Hub, TensorFlow.NET, TF.NET, AI + packages + + Google's TensorFlow Hub full binding in .NET Standard. + A library for transfer learning with TensorFlow.NET. + diff --git a/test/TensorFlowNET.Graph.UnitTest/TensorFlowNET.Graph.UnitTest.csproj b/test/TensorFlowNET.Graph.UnitTest/TensorFlowNET.Graph.UnitTest.csproj index f91530f8..1385f861 100644 --- a/test/TensorFlowNET.Graph.UnitTest/TensorFlowNET.Graph.UnitTest.csproj +++ b/test/TensorFlowNET.Graph.UnitTest/TensorFlowNET.Graph.UnitTest.csproj @@ -31,10 +31,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/test/TensorFlowNET.Keras.UnitTest/Layers/ActivationTest.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/ActivationTest.cs index 75fcc023..cc99f4a0 100644 --- a/test/TensorFlowNET.Keras.UnitTest/Layers/ActivationTest.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/ActivationTest.cs @@ -49,7 +49,7 @@ namespace Tensorflow.Keras.UnitTest.Layers Tensor input = tf.constant(new float[] { -3f, -2f, -1f, 0f, 1f, 2f }); Tensor output = keras.layers.Softplus().Apply(input); NDArray expected = new NDArray(new float[] { 0.04858733f, 0.12692805f, 0.31326166f, 0.6931472f, 1.3132616f, 2.126928f }); - Assert.AreEqual(expected, output.numpy()); + Assert.IsTrue(expected == output.numpy()); } [TestMethod] diff --git a/test/TensorFlowNET.Keras.UnitTest/Layers/AttentionTest.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/AttentionTest.cs index 162a10d2..95ef923e 100644 --- a/test/TensorFlowNET.Keras.UnitTest/Layers/AttentionTest.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Layers/AttentionTest.cs @@ -94,7 +94,7 @@ namespace Tensorflow.Keras.UnitTest.Layers { 7.6400003f, 12.24f, 16.84f }, { 14.24f, 22.84f, 31.439999f } } }, dtype: np.float32); - Assert.AreEqual(expected, actual.numpy()); + Assert.IsTrue(expected == actual.numpy()); } [TestMethod] diff --git a/test/TensorFlowNET.Keras.UnitTest/Losses/LossesTest.cs b/test/TensorFlowNET.Keras.UnitTest/Losses/LossesTest.cs index 3bec2f17..0bb1d011 100644 --- a/test/TensorFlowNET.Keras.UnitTest/Losses/LossesTest.cs +++ b/test/TensorFlowNET.Keras.UnitTest/Losses/LossesTest.cs @@ -39,7 +39,7 @@ public class LossesTest : EagerModeTestBase // Using 'none' reduction type. bce = tf.keras.losses.BinaryCrossentropy(from_logits: true, reduction: Reduction.NONE); loss = bce.Call(y_true, y_pred); - Assert.AreEqual(new float[] { 0.23515666f, 1.4957594f }, loss.numpy()); + Assert.IsTrue(new NDArray(new float[] { 0.23515666f, 1.4957594f }) == loss.numpy()); } /// diff --git a/test/TensorFlowNET.Keras.UnitTest/Tensorflow.Keras.UnitTest.csproj b/test/TensorFlowNET.Keras.UnitTest/Tensorflow.Keras.UnitTest.csproj index 9c4adab2..b964d117 100644 --- a/test/TensorFlowNET.Keras.UnitTest/Tensorflow.Keras.UnitTest.csproj +++ b/test/TensorFlowNET.Keras.UnitTest/Tensorflow.Keras.UnitTest.csproj @@ -20,10 +20,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/test/TensorFlowNET.Native.UnitTest/Tensorflow.Native.UnitTest.csproj b/test/TensorFlowNET.Native.UnitTest/Tensorflow.Native.UnitTest.csproj index 357ac139..61373d2d 100644 --- a/test/TensorFlowNET.Native.UnitTest/Tensorflow.Native.UnitTest.csproj +++ b/test/TensorFlowNET.Native.UnitTest/Tensorflow.Native.UnitTest.csproj @@ -51,11 +51,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + diff --git a/test/TensorFlowNET.UnitTest/Tensorflow.Binding.UnitTest.csproj b/test/TensorFlowNET.UnitTest/Tensorflow.Binding.UnitTest.csproj index 40a67e04..3a5562e2 100644 --- a/test/TensorFlowNET.UnitTest/Tensorflow.Binding.UnitTest.csproj +++ b/test/TensorFlowNET.UnitTest/Tensorflow.Binding.UnitTest.csproj @@ -45,10 +45,10 @@ - + diff --git a/test/TensorflowNET.Hub.Unittest/Tensorflow.Hub.Unittest.csproj b/test/TensorflowNET.Hub.Unittest/Tensorflow.Hub.Unittest.csproj index e6854934..35cb9f16 100644 --- a/test/TensorflowNET.Hub.Unittest/Tensorflow.Hub.Unittest.csproj +++ b/test/TensorflowNET.Hub.Unittest/Tensorflow.Hub.Unittest.csproj @@ -1,4 +1,4 @@ - + net6 @@ -13,10 +13,10 @@ - +