-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixes #4292 about using PFI with BPT and CMPB #4306
Conversation
…oblem of 'create' method not being called
…runtime with the correct type parameters
…MixingCalibratedModelParameters class
… the previous casts used internal classes, so a regular user wouldn't have been able to use those casts.
Codecov Report
@@ Coverage Diff @@
## master #4306 +/- ##
==========================================
+ Coverage 70.08% 74.75% +4.66%
==========================================
Files 706 907 +201
Lines 122440 159437 +36997
Branches 15235 17153 +1918
==========================================
+ Hits 85809 119181 +33372
- Misses 32130 35450 +3320
- Partials 4501 4806 +305
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this approach is better than the previous method of using Reflection to look for a special static field on the type.
Don't forget to apply the attribute to the other places as necessary.
…e called by its create method, so that it was the same as the previous existing constructor.
So, as discussed offline, I will open other separate issues to address the problems mentioned on Question 1 and Question 2 of this comment Regarding Question 3 on that comment, and the answers that @yaeldekel provided, as well as suggestions made by @eerhardt offline, it will be better to not make any change on the So there are some minor fixes that I will want to make on this PR, and after that I will remove the Draft status, and I would appreciate for people to review this and approve it.Thanks. #Resolved |
Thank you! Can you please add a link to these new issues in this PR? In reply to: 545562898 [](ancestors = 545562898) |
@yaeldekel Yes, I've opened the following issues and made a reference there to this PR: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
commit a5e274ef8869576190bbb794360a5f56d998b470 Merge: b7db4fa d7f9996 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Nov 14 14:51:21 2019 -0800 Merge branch 'onnx_bin_classifiers' of https://github.com/Lynx1820/machinelearning into onnx_bin_classifiers commit b7db4fa Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 17:41:12 2019 +0000 Added onnx export support for KeyToValueMappingTransformer (dotnet#4455) commit f3e0f6b Author: Eric Erhardt <eric.erhardt@microsoft.com> Date: Thu Nov 14 07:22:12 2019 -0600 Fix a flaky Extensions.ML test. (dotnet#4458) * Fix a flaky Extensions.ML test. Make the reload model tests more resistant to timing changes. * PR feedback. commit c1e190a Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 05:24:14 2019 +0000 Added onnx export support for OptionalColumnTransform (dotnet#4454) * Initial work for adding onnx export support for OptionalColumnTransform * Implemented support for optional initializers in OnnxTranformer to support OptionalColumnTransform * Fixed handling of double values and non-long numeric types * Removed redundant line * Updated review comment commit f96761b Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 03:17:12 2019 +0000 Fixed model saving and loading of OneVersusAllTrainer to include SoftMax (dotnet#4472) * Fixed model saving and loading of OneVersusAllTrainer to include SoftMax * Modified existing test to include SoftMax option * Modified test to verify both cases: when UseSoftmax is true and false commit d45cc8a Author: Jake <31937616+JakeRadMSFT@users.noreply.github.com> Date: Wed Nov 13 17:26:49 2019 -0800 Add InternalsVisibleTo in AutoML and CodeGenerator for the assembly Microsoft.ML.ModelBuilder.AutoMLService.Gpu (dotnet#4474) commit 5e83e23 Author: Eric Erhardt <eric.erhardt@microsoft.com> Date: Wed Nov 13 16:09:05 2019 -0600 CpuMathNative assembly is not getting copied when using packages.config. (dotnet#4465) When we refactored CpuMath to support netcoreapp3.0, we broke the packages.config support to copy the native assembly. This fixes it again by copying the file from the correct location. Fix dotnet#93 commit 693250b Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Wed Nov 13 21:58:07 2019 +0000 Added onnx export support for WordTokenizingTransformer and NgramExtractingTransformer (dotnet#4451) * Added onnx export support for string related transforms * Updated baseline test files A large portion of this commit is upgrading the baseline test files. The rest of the fixes deal with build breaks resulting from the upgrade of ORT version. * Fixed bugs in ValueToKeyMappingTransformer and added additional tests commit 5910910 Author: Antonio Velázquez <38739674+antoniovs1029@users.noreply.github.com> Date: Mon Nov 11 17:19:39 2019 -0800 Fixes dotnet#4292 about using PFI with BPT and CMPB (dotnet#4306) *Changes in PredictionTransformer.cs and Calibrator.cs to fix the problem of the create methods not being called, to make CMP load its internal calibrator and predictor first so to assign the correct paramaters types and runtimes, and added a PredictionTransformerLoadTypeAttribute so that the binary prediction transformer knows what type to assign when loading a CMP as its internal model. *Added a working sample for using PFI with BPT and CMPB while loading a model from disk. This is based entirely in the original sample. *Added file CalibratedModelParametersTests.cs with tests that the CMPs modified in this PR are now being correctly loaded from disk. *Changed a couple of tests in LbfgsTests.cs that failed because they used casts that now return 'null'. commit bcdac55 Author: Brian Stark <54910472+bpstark@users.noreply.github.com> Date: Mon Nov 11 13:42:42 2019 -0800 Stabilize the LR test (dotnet#4446) * Stabilize the LR test Found issue with how we were using random for our ImageClassificationTrainer. This caused instability in our unit test, as we were not able to control the random seed. Modified the code to now use the same random object throughout, the trainer, thus allowing us to control the seed and therefor have predictable output. commit d7f9996 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:33:17 2019 -0800 workaround Scores commit 7fba31c Merge: 93388b6 c96d690 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:25:28 2019 -0800 merging changes commit 93388b6 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:19:59 2019 -0800 Added extraction of score column before node creation commit ea71828 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Fri Nov 8 15:53:11 2019 -0800 fix for binary classification trainers export to onnx commit 6fad293 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:26:43 2019 -0700 Revert "draft regression test" This reverts commit 1ad45c995516b9d39fc05aca855ce2abe96c407b. commit 83c1c80 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:24:23 2019 -0700 draft regression test commit 8884161 Author: frank-dong-ms <55860649+frank-dong-ms@users.noreply.github.com> Date: Fri Nov 8 20:20:53 2019 -0800 nightly build pipeline (dotnet#4444) * nightly build pipeline commit c96d690 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Fri Nov 8 15:53:11 2019 -0800 fix for binary classification trainers export to onnx commit 8100364 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:26:43 2019 -0700 Revert "draft regression test" This reverts commit 1ad45c995516b9d39fc05aca855ce2abe96c407b. commit 81381e2 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:24:23 2019 -0700 draft regression test
commit a5e274ef8869576190bbb794360a5f56d998b470 Merge: b7db4fa d7f9996 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Nov 14 14:51:21 2019 -0800 Merge branch 'onnx_bin_classifiers' of https://github.com/Lynx1820/machinelearning into onnx_bin_classifiers commit b7db4fa Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 17:41:12 2019 +0000 Added onnx export support for KeyToValueMappingTransformer (dotnet#4455) commit f3e0f6b Author: Eric Erhardt <eric.erhardt@microsoft.com> Date: Thu Nov 14 07:22:12 2019 -0600 Fix a flaky Extensions.ML test. (dotnet#4458) * Fix a flaky Extensions.ML test. Make the reload model tests more resistant to timing changes. * PR feedback. commit c1e190a Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 05:24:14 2019 +0000 Added onnx export support for OptionalColumnTransform (dotnet#4454) * Initial work for adding onnx export support for OptionalColumnTransform * Implemented support for optional initializers in OnnxTranformer to support OptionalColumnTransform * Fixed handling of double values and non-long numeric types * Removed redundant line * Updated review comment commit f96761b Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 03:17:12 2019 +0000 Fixed model saving and loading of OneVersusAllTrainer to include SoftMax (dotnet#4472) * Fixed model saving and loading of OneVersusAllTrainer to include SoftMax * Modified existing test to include SoftMax option * Modified test to verify both cases: when UseSoftmax is true and false commit d45cc8a Author: Jake <31937616+JakeRadMSFT@users.noreply.github.com> Date: Wed Nov 13 17:26:49 2019 -0800 Add InternalsVisibleTo in AutoML and CodeGenerator for the assembly Microsoft.ML.ModelBuilder.AutoMLService.Gpu (dotnet#4474) commit 5e83e23 Author: Eric Erhardt <eric.erhardt@microsoft.com> Date: Wed Nov 13 16:09:05 2019 -0600 CpuMathNative assembly is not getting copied when using packages.config. (dotnet#4465) When we refactored CpuMath to support netcoreapp3.0, we broke the packages.config support to copy the native assembly. This fixes it again by copying the file from the correct location. Fix dotnet#93 commit 693250b Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Wed Nov 13 21:58:07 2019 +0000 Added onnx export support for WordTokenizingTransformer and NgramExtractingTransformer (dotnet#4451) * Added onnx export support for string related transforms * Updated baseline test files A large portion of this commit is upgrading the baseline test files. The rest of the fixes deal with build breaks resulting from the upgrade of ORT version. * Fixed bugs in ValueToKeyMappingTransformer and added additional tests commit 5910910 Author: Antonio Velázquez <38739674+antoniovs1029@users.noreply.github.com> Date: Mon Nov 11 17:19:39 2019 -0800 Fixes dotnet#4292 about using PFI with BPT and CMPB (dotnet#4306) *Changes in PredictionTransformer.cs and Calibrator.cs to fix the problem of the create methods not being called, to make CMP load its internal calibrator and predictor first so to assign the correct paramaters types and runtimes, and added a PredictionTransformerLoadTypeAttribute so that the binary prediction transformer knows what type to assign when loading a CMP as its internal model. *Added a working sample for using PFI with BPT and CMPB while loading a model from disk. This is based entirely in the original sample. *Added file CalibratedModelParametersTests.cs with tests that the CMPs modified in this PR are now being correctly loaded from disk. *Changed a couple of tests in LbfgsTests.cs that failed because they used casts that now return 'null'. commit bcdac55 Author: Brian Stark <54910472+bpstark@users.noreply.github.com> Date: Mon Nov 11 13:42:42 2019 -0800 Stabilize the LR test (dotnet#4446) * Stabilize the LR test Found issue with how we were using random for our ImageClassificationTrainer. This caused instability in our unit test, as we were not able to control the random seed. Modified the code to now use the same random object throughout, the trainer, thus allowing us to control the seed and therefor have predictable output. commit d7f9996 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:33:17 2019 -0800 workaround Scores commit 7fba31c Merge: 93388b6 c96d690 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:25:28 2019 -0800 merging changes commit 93388b6 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:19:59 2019 -0800 Added extraction of score column before node creation commit ea71828 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Fri Nov 8 15:53:11 2019 -0800 fix for binary classification trainers export to onnx commit 6fad293 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:26:43 2019 -0700 Revert "draft regression test" This reverts commit 1ad45c995516b9d39fc05aca855ce2abe96c407b. commit 83c1c80 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:24:23 2019 -0700 draft regression test commit 8884161 Author: frank-dong-ms <55860649+frank-dong-ms@users.noreply.github.com> Date: Fri Nov 8 20:20:53 2019 -0800 nightly build pipeline (dotnet#4444) * nightly build pipeline commit c96d690 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Fri Nov 8 15:53:11 2019 -0800 fix for binary classification trainers export to onnx commit 8100364 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:26:43 2019 -0700 Revert "draft regression test" This reverts commit 1ad45c995516b9d39fc05aca855ce2abe96c407b. commit 81381e2 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:24:23 2019 -0700 draft regression test
* Squashed commit of the following: commit a5e274ef8869576190bbb794360a5f56d998b470 Merge: b7db4fa d7f9996 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Nov 14 14:51:21 2019 -0800 Merge branch 'onnx_bin_classifiers' of https://github.com/Lynx1820/machinelearning into onnx_bin_classifiers commit b7db4fa Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 17:41:12 2019 +0000 Added onnx export support for KeyToValueMappingTransformer (#4455) commit f3e0f6b Author: Eric Erhardt <eric.erhardt@microsoft.com> Date: Thu Nov 14 07:22:12 2019 -0600 Fix a flaky Extensions.ML test. (#4458) * Fix a flaky Extensions.ML test. Make the reload model tests more resistant to timing changes. * PR feedback. commit c1e190a Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 05:24:14 2019 +0000 Added onnx export support for OptionalColumnTransform (#4454) * Initial work for adding onnx export support for OptionalColumnTransform * Implemented support for optional initializers in OnnxTranformer to support OptionalColumnTransform * Fixed handling of double values and non-long numeric types * Removed redundant line * Updated review comment commit f96761b Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Thu Nov 14 03:17:12 2019 +0000 Fixed model saving and loading of OneVersusAllTrainer to include SoftMax (#4472) * Fixed model saving and loading of OneVersusAllTrainer to include SoftMax * Modified existing test to include SoftMax option * Modified test to verify both cases: when UseSoftmax is true and false commit d45cc8a Author: Jake <31937616+JakeRadMSFT@users.noreply.github.com> Date: Wed Nov 13 17:26:49 2019 -0800 Add InternalsVisibleTo in AutoML and CodeGenerator for the assembly Microsoft.ML.ModelBuilder.AutoMLService.Gpu (#4474) commit 5e83e23 Author: Eric Erhardt <eric.erhardt@microsoft.com> Date: Wed Nov 13 16:09:05 2019 -0600 CpuMathNative assembly is not getting copied when using packages.config. (#4465) When we refactored CpuMath to support netcoreapp3.0, we broke the packages.config support to copy the native assembly. This fixes it again by copying the file from the correct location. Fix #93 commit 693250b Author: Harish Kulkarni <harishsk@users.noreply.github.com> Date: Wed Nov 13 21:58:07 2019 +0000 Added onnx export support for WordTokenizingTransformer and NgramExtractingTransformer (#4451) * Added onnx export support for string related transforms * Updated baseline test files A large portion of this commit is upgrading the baseline test files. The rest of the fixes deal with build breaks resulting from the upgrade of ORT version. * Fixed bugs in ValueToKeyMappingTransformer and added additional tests commit 5910910 Author: Antonio Velázquez <38739674+antoniovs1029@users.noreply.github.com> Date: Mon Nov 11 17:19:39 2019 -0800 Fixes #4292 about using PFI with BPT and CMPB (#4306) *Changes in PredictionTransformer.cs and Calibrator.cs to fix the problem of the create methods not being called, to make CMP load its internal calibrator and predictor first so to assign the correct paramaters types and runtimes, and added a PredictionTransformerLoadTypeAttribute so that the binary prediction transformer knows what type to assign when loading a CMP as its internal model. *Added a working sample for using PFI with BPT and CMPB while loading a model from disk. This is based entirely in the original sample. *Added file CalibratedModelParametersTests.cs with tests that the CMPs modified in this PR are now being correctly loaded from disk. *Changed a couple of tests in LbfgsTests.cs that failed because they used casts that now return 'null'. commit bcdac55 Author: Brian Stark <54910472+bpstark@users.noreply.github.com> Date: Mon Nov 11 13:42:42 2019 -0800 Stabilize the LR test (#4446) * Stabilize the LR test Found issue with how we were using random for our ImageClassificationTrainer. This caused instability in our unit test, as we were not able to control the random seed. Modified the code to now use the same random object throughout, the trainer, thus allowing us to control the seed and therefor have predictable output. commit d7f9996 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:33:17 2019 -0800 workaround Scores commit 7fba31c Merge: 93388b6 c96d690 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:25:28 2019 -0800 merging changes commit 93388b6 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Mon Nov 11 11:19:59 2019 -0800 Added extraction of score column before node creation commit ea71828 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Fri Nov 8 15:53:11 2019 -0800 fix for binary classification trainers export to onnx commit 6fad293 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:26:43 2019 -0700 Revert "draft regression test" This reverts commit 1ad45c995516b9d39fc05aca855ce2abe96c407b. commit 83c1c80 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:24:23 2019 -0700 draft regression test commit 8884161 Author: frank-dong-ms <55860649+frank-dong-ms@users.noreply.github.com> Date: Fri Nov 8 20:20:53 2019 -0800 nightly build pipeline (#4444) * nightly build pipeline commit c96d690 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Fri Nov 8 15:53:11 2019 -0800 fix for binary classification trainers export to onnx commit 8100364 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:26:43 2019 -0700 Revert "draft regression test" This reverts commit 1ad45c995516b9d39fc05aca855ce2abe96c407b. commit 81381e2 Author: Keren Fuentes <dkeren@seas.upenn.edu> Date: Thu Oct 31 15:24:23 2019 -0700 draft regression test * update name and remove some dependency code * baseline file changes * Refactored function
Fixes #4292 about using PFI with a
BinaryPredictionTransformer<>
and classes derived fromCalibratedModelParametersBase<>
.Approach of the solution
Regarding the 3 problems listed in #4292 the solutions were the following:
(IHostEnvironment env, ModelLoadContext ctx)
from thePMCMP<,>
class, since its not needed after the changes on this PR. Without that constructor, the 'create' method gets called directly byCreateInstanceCore
without changing anything else.PMCMP
object with the correct parameter types: I used a similar approach as the one explained in my previous pull request Addresses #3976 about using PFI with a model loaded from disk #4262. That is, the calibrator and submodel of thePMCMP<>
are loaded first, and then they are used to create a generic type at runtime forPMCMP<>
but now using the correct parameter types.BPT<CMPB<>>
object whereas aPMCMP<>
was loaded: After trying different approaches that didn't work, and following the suggestions of @eerhardt the best way to fix this was to create a new attribute calledPredictionTransformerLoadTypeAttribute
, that would help the prediction transformer to know what's the correct type to use as a TModel when loading a model from disk. This attribute is applied to thePMCMP<>
class, and it's used inPredictionTransformer.cs
to decide the correct type for the BPT.Also, after discussing it with @eerhardt , I also fixed these 3 problems for the classes that inherit from
CalibratedModelParametersBase<,>
; those are:ValueMapperCalibratedModelParameters<,>
, andFeatureWeightsCalibratedModelParameters<,>
. Notice thatSchemaBindableCalibratedModelParameters<,>
also inherits from CMPB<,>, but, as discussed here, it was decided not to fix it.Changes implemented
PredictionTransformer.cs
andCalibrator.cs
to implement the approach previously describedCalibratedModelParametersTests.cs
with tests that the CMPs modified in this PR are now being correctly loaded from disk.LbfgsTests.cs
that failed because they used casts that now return 'null'. Notice that those casts involved using classes such asIPredictorProducing
andPMCMP
which are internal classes, so a regular user wouldn't have been able to use those casts. They have now been replaced with casts to the public classesBPT<CMPB<>>
andCMPB<>
using the correct type parameters of the model.