From f1ff27eb06f3d351a494d715d4d8c78913ce4aaa Mon Sep 17 00:00:00 2001 From: "REDMOND\\nakazmi" Date: Tue, 7 May 2019 15:05:23 -0700 Subject: [PATCH 1/3] Fix SoftMax precision by utilizing double in the internal calculations --- .../MulticlassClassification/OneVersusAllTrainer.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.ML.StandardTrainers/Standard/MulticlassClassification/OneVersusAllTrainer.cs b/src/Microsoft.ML.StandardTrainers/Standard/MulticlassClassification/OneVersusAllTrainer.cs index 2a423da192..602497f630 100644 --- a/src/Microsoft.ML.StandardTrainers/Standard/MulticlassClassification/OneVersusAllTrainer.cs +++ b/src/Microsoft.ML.StandardTrainers/Standard/MulticlassClassification/OneVersusAllTrainer.cs @@ -740,15 +740,17 @@ public override ValueMapper, VBuffer> GetMapper() private void NormalizeSoftmax(float[] scores, int count) { - float sum = 0; + double sum = 0; + var score = new double[count]; + for (int i = 0; i < count; i++) { - scores[i] = (float)Math.Exp(scores[i]); - sum += scores[i]; + score[i] = Math.Exp(scores[i]); + sum += score[i]; } for (int i = 0; i < count; i++) - scores[i] = scores[i] / sum; + scores[i] = (float)(score[i] / sum); } public override JToken SaveAsPfa(BoundPfaContext ctx, JToken input) From 822d4d8e7fdc6197c1ca6578768d87dd319a6d4a Mon Sep 17 00:00:00 2001 From: Zeeshan Siddiqui Date: Tue, 14 May 2019 21:46:21 -0700 Subject: [PATCH 2/3] Brew install libomp 7.0.0 only. (#3721) * Brew install libomp 7.0.0 only. * Brew install libomp 7.0.0 only. * Brew install libomp 7.0.0 only. * Brew install libomp 7.0.0 only. --- build/ci/phase-template.yml | 2 +- build/vsts-ci.yml | 2 +- docs/building/unix-instructions.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/ci/phase-template.yml b/build/ci/phase-template.yml index f018d9613c..6d70c14bda 100644 --- a/build/ci/phase-template.yml +++ b/build/ci/phase-template.yml @@ -34,7 +34,7 @@ phases: ${{ insert }}: ${{ parameters.queue }} steps: - ${{ if eq(parameters.queue.name, 'Hosted macOS') }}: - - script: brew update && brew install libomp && brew install mono-libgdiplus gettext && brew link gettext --force && brew link libomp --force + - script: brew update && brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f5b1ac99a7fba27c19cee0bc4f036775c889b359/Formula/libomp.rb && brew install mono-libgdiplus gettext && brew link gettext --force && brew link libomp --force displayName: Install build dependencies - script: $(_buildScript) -$(_configuration) -buildArch=$(_arch) displayName: Build diff --git a/build/vsts-ci.yml b/build/vsts-ci.yml index 05bfda32b0..c8091ea281 100644 --- a/build/vsts-ci.yml +++ b/build/vsts-ci.yml @@ -48,7 +48,7 @@ phases: demands: - agent.os -equals Darwin steps: - - script: brew update && brew install libomp && brew link libomp --force + - script: brew update && brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f5b1ac99a7fba27c19cee0bc4f036775c889b359/Formula/libomp.rb && brew link libomp --force displayName: Install build dependencies # Only build native assets to avoid conflicts. - script: ./build.sh -buildNative -$(BuildConfig) -skipRIDAgnosticAssets diff --git a/docs/building/unix-instructions.md b/docs/building/unix-instructions.md index ec7e27e8d4..f495b2c1bf 100644 --- a/docs/building/unix-instructions.md +++ b/docs/building/unix-instructions.md @@ -43,12 +43,12 @@ macOS 10.12 (Sierra) or higher is needed to build dotnet/machinelearning. On macOS a few components are needed which are not provided by a default developer setup: * cmake 3.10.3 -* libomp +* libomp 7 * libgdiplus * gettext * All the requirements necessary to run .NET Core 2.0 applications. To view macOS prerequisites click [here](https://docs.microsoft.com/en-us/dotnet/core/macos-prerequisites?tabs=netcore2x). One way of obtaining CMake and other required libraries is via [Homebrew](https://brew.sh): ```sh -$ brew install cmake libomp mono-libgdiplus gettext && brew link gettext --force +$ brew install cmake https://raw.githubusercontent.com/Homebrew/homebrew-core/f5b1ac99a7fba27c19cee0bc4f036775c889b359/Formula/libomp.rb mono-libgdiplus gettext && brew link gettext --force ``` From cfe66b98b79270eff4965031beb47dc8360286dd Mon Sep 17 00:00:00 2001 From: "REDMOND\\nakazmi" Date: Tue, 7 May 2019 15:05:23 -0700 Subject: [PATCH 3/3] Fix SoftMax precision by utilizing double in the internal calculations --- .../MulticlassClassification/OneVersusAllTrainer.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.ML.StandardTrainers/Standard/MulticlassClassification/OneVersusAllTrainer.cs b/src/Microsoft.ML.StandardTrainers/Standard/MulticlassClassification/OneVersusAllTrainer.cs index 2a423da192..602497f630 100644 --- a/src/Microsoft.ML.StandardTrainers/Standard/MulticlassClassification/OneVersusAllTrainer.cs +++ b/src/Microsoft.ML.StandardTrainers/Standard/MulticlassClassification/OneVersusAllTrainer.cs @@ -740,15 +740,17 @@ public override ValueMapper, VBuffer> GetMapper() private void NormalizeSoftmax(float[] scores, int count) { - float sum = 0; + double sum = 0; + var score = new double[count]; + for (int i = 0; i < count; i++) { - scores[i] = (float)Math.Exp(scores[i]); - sum += scores[i]; + score[i] = Math.Exp(scores[i]); + sum += score[i]; } for (int i = 0; i < count; i++) - scores[i] = scores[i] / sum; + scores[i] = (float)(score[i] / sum); } public override JToken SaveAsPfa(BoundPfaContext ctx, JToken input)