NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #1522 most downloaded on NuGet
Contains the IDataView system which is a set of interfaces and components that provide efficient, compositional processing of schematized data for machine learning and advanced analytics applications.
Last release 11 months ago
11 Nov 2025
Release timing varies
gaps range from 2 weeks to 10 months
Most releases are documented
notes for 18 of 22 stable releases
1 version withdrawn
withdrawn after publishing
127 years old
28 releases · first in 1900
[GenAI] Introduce CausalLMPipelineChatClient for MEAI.IChatClient
cgmanifest.json for tokenizer's vocab files (#7283)One column per quarter.
[release/4.0] Improve unique directory generation for temp files
Compatibility note: This change resolves a performance problem where past versions of ML.NET would leave behind folders with the pattern ml_dotnet\d+ in the temp directory, which would cause model opening performance to degrade. This fixes the problem. You may also wish to delete these empty folders once after updating.
Using powershell:
Get-ChildItem "$env:TEMP" -Directory -Filter "ml_dotnet*" | Remove-Item -Recurse -ForceUsing Bash:
find "$TEMP" -type d -name "ml_dotnet*" -exec rm -rf {} +[release/4.0] Support O3 OpenAI model mapping #7395
Fix the BERT tokenizer to handle special tokens correctly. ( #7330 ) - Thanks @shaltielshmid
Nothing published for this version
Add support for Apache.Arrow.Types.TimestampType to DataFrame ( #6871 ) - Thanks @asmirnov82 !
Update to latest version of TorchSharp ( #6636 ) - Updated to the latest version of TorchSharp and fixed any breaking changes so we can take advantage…
Prediction (Microsoft.ML.Core) (#6792) - Thanks @Lehonti!ComponentModel (Microsoft.ML.Core) (#6788) - Thanks @Lehonti!Data (Microsoft.ML.Core) (#6789) - Thanks @Lehonti!EntryPoints (Microsoft.ML.Core) (#6790) - Thanks @Lehonti!Environment (Microsoft.ML.Core) (#6791) - Thanks @Lehonti!Nothing published for this version
This release is going out alongside .NET 7 continuing with our plan to align with the broader .NET release cycle.
This release is going out alongside .NET 7 continuing with our plan to align with the broader .NET release cycle.
The main themes for this release are:
Below are some of the highlights from this release:
EnglishRoberta tokenization model used by the text classification and sentence similarity APIs is supported. For more generic scenarios other than EnglishRoberta, there's also support for Byte-Pair Encoding (BPE) algorithm which means you can load custom vocabulary files and use them to process your text. These tokenization APIs are available as part of the Microsoft.ML.Tokenizers NuGet package.DateTime type as a PrimitiveDataFrameColumn. This allows better conversion between IDataView and the DataFrame.DataFrame in notebooks. Thanks @colombod!System.Drawing is only supported on Windows. As a result, we've replaced it with the MLImage class for image handing. In code where you previously represented image data as Bitmap, use MLImage instead.TransformerScope depending on the purpose. Prior to this change, calling Transform to apply the transformations to data defaulted to use the Everything scope unless otherwise specified. As of this release, the scope has changed to Scoring which means for scoring scenarios, you no longer need to provide an empty label as part of your inputs.Nothing published for this version
Moving forward, we are going to be aligning more with the overall .NET release schedule. As such, this is a smaller release since we had a larger one
Moving forward, we are going to be aligning more with the overall .NET release schedule. As such, this is a smaller release since we had a larger one just about 3 months ago but it aligns us with the release of .NET 6.
Support for Arm/Arm64/Apple Silicon has been added. (#5789) You can now use most ML.NET on Arm/Arm64/Apple Silicon devices. Anything without a hard de
New API allowing confidence parameter to be a double.(#5623) . A new API has been added to accept double type for the confidence level. This helps whe
New API for exporting models to Onnx. (#5544). A new API has been added to Onnx converter to specify the output columns you care about. This will expo
Nothing published for this version
New API and algorithms for time series data. In this release ML.NET introduces new capabilities for working with time series data.
Nothing published for this version
New anomaly detection algorithm (#5135). ML.NET has previously supported anomaly detection through DetectAnomalyBySrCnn. This function operates in a s
DetectEntireAnomalyBySrCnn that computes anomalies by considering the entire dataset and also supports the ability to set sensitivity and output margin.In this release we have traced down every bug that would occur randomly and sporadically and fixed many subtle bugs. As a result, we have also re-enabled a lot of tests listed in the Test Updates section below.
Onnx bug fixes
AutoML fixes
TimeSeriesImputer (#4623) This data transformer can be used to impute missing rows in time series data.
Export-to-ONNX for below components:
Export-to-ONNX for below components:
DateTime Transformer (#4521)
Loader and Saver for SVMLight file format (#4190)
Expression transformer (#4548) The expression transformer takes the expression in the form of text using syntax of a simple expression language, and performs the operation defined in the expression on the input columns in each row of the data. The transformer supports having a vector input column, in which case it applies the expression to each slot of the vector independently. The expression language is extendable to user defined operations.
None
General Availability of [Image Classification API](https://docs.microsoft.com/en-us/dotnet/api/microsoft.ml.visioncatalog.imageclassification?view=ml-
General Availability of Image Classification API
Introduces Microsoft.ML.Vision package that enables image classification by leveraging an existing pre-trained deep neural network model. Here the API trains the last classification layer using TensorFlow by using its C# bindings from TensorFlow .NET. This is a high level API that is simple yet powerful. Below are some of the key features:
GPU training: Supported on Windows and Linux, more information here.Early stopping: Saves time by stopping training automatically when model has been stabelized.Learning rate scheduler: Learning rate is an integral and potentially difficult part of deep learning. By providing learning rate schedulers, we give users a way to optimize the learning rate with high initial values which can decay over time. High initial learning rate helps to introduce randomness into the system, allowing the Loss function to better find the global minima. While the decayed learning rate helps to stabilize the loss over time. We have implemented Exponential Decay Learning rate scheduler and Polynomial Decay Learning rate scheduler.Pre-trained DNN Architectures: The supported DNN architectures used internally for transfer learning are below:
var pipeline = mlContext.MulticlassClassification.Trainers.ImageClassification(
featureColumnName: "Image", labelColumnName: "Label");
ITransformer trainedModel = pipeline.Fit(trainDataView);
General Availability of Database Loader
The database loader enables to load data from databases into the IDataView and therefore enables model training directly against relational databases. This loader supports any relational database provider supported by System.Data in .NET Core or .NET Framework, meaning that you can use any RDBMS such as SQL Server, Azure SQL Database, Oracle, SQLite, PostgreSQL, MySQL, Progress, etc.
It is important to highlight that in the same way as when training from files, when training with a database ML .NET also supports data streaming, meaning that the whole database doesn’t need to fit into memory, it’ll be reading from the database as it needs so you can handle very large databases (i.e. 50GB, 100GB or larger).
//Lines of code for loading data from a database into an IDataView for a later model training
//...
string connectionString = @"Data Source=YOUR_SERVER;Initial Catalog= YOUR_DATABASE;Integrated Security=True";
string commandText = "SELECT * from SentimentDataset";
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader();
DbProviderFactory providerFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
DatabaseSource dbSource = new DatabaseSource(providerFactory, connectionString, commandText);
IDataView trainingDataView = loader.Load(dbSource);
// ML.NET model training code using the training IDataView
//...
public class SentimentData
{
public string FeedbackText;
public string Label;
}
General Availability of PredictionEnginePool for scalable deployment When deploying an ML model into multi-threaded and scalable .NET Core web applications and services (such as ASP .NET Core web apps, WebAPIs or an Azure Function) it is recommended to use the PredictionEnginePool instead of directly creating the PredictionEngine object on every request due to performance and scalability reasons. For further background information on why the PredictionEnginePool is recommended, read this blog post.
General Availability of Enhanced for .NET Core 3.0 This means ML .NET can take advantage of the new features when running in a .NET Core 3.0 application. The first new feature we are using is the new hardware intrinsics feature, which allows .NET code to accelerate math operations by using processor specific instructions.
OnnxSequenceType attribute without specifing sequence type. (#4272)PredictionEngine breaks after saving/loading a Model. (#4321)None
Deep Neural Networks Training (0.16.0-preview2)
Deep Neural Networks Training (0.16.0-preview2)
Improves the in-preview ImageClassification API further:
PredictedLabel output column now contains actual class labels instead of uint32 class index values (#4228)In-memory image inferencing sample Early stopping sample GPU samples
New ONNX Exporters (1.4.0-preview2)
IsSavedModel returns true when loaded TensorFlow model is a frozen model (#4262)OnnxSequenceType attribute directly without specify sequence type (#4272, #4297)None.
None.
None.
Deep Neural Networks Training (0.16.0-preview)
Deep Neural Networks Training (0.16.0-preview) (#4151)
Improves the in-preview ImageClassification API further:
public static ImageClassificationEstimator ImageClassification(
this ModelOperationsCatalog catalog,
string featuresColumnName,
string labelColumnName,
string scoreColumnName = "Score",
string predictedLabelColumnName = "PredictedLabel",
Architecture arch = Architecture.InceptionV3,
int epoch = 100,
int batchSize = 10,
float learningRate = 0.01f,
ImageClassificationMetricsCallback metricsCallback = null,
int statisticFrequency = 1,
DnnFramework framework = DnnFramework.Tensorflow,
string modelSavePath = null,
string finalModelPrefix = "custom_retrained_model_based_on_",
IDataView validationSet = null,
bool testOnTrainSet = true,
bool reuseTrainSetBottleneckCachedValues = false,
bool reuseValidationSetBottleneckCachedValues = false,
string trainSetBottleneckCachedValuesFilePath = "trainSetBottleneckFile.csv",
string validationSetBottleneckCachedValuesFilePath = "validationSetBottleneckFile.csv"
)
Database Loader (0.16.0-preview) (#4070,#4091,#4138)
Additional DatabaseLoader support:
CreateDatabaseLoader<TInput> to map columns from a .NET Type. string connectionString = "YOUR_RELATIONAL_DATABASE_CONNECTION_STRING";
string commandText = "SELECT * from URLClicks";
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<UrlClick>();
DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance,
connectionString,
commandText);
IDataView dataView = loader.Load(dbSource);
Enhanced .NET Core 3.0 Support
None.
None
None.
None.
Deep Neural Networks Training (PREVIEW) (#4057) Introduces in-preview 0.15.1 Microsoft.ML.DNN package that enables full DNN model retraining and trans
Deep Neural Networks Training (PREVIEW) (#4057)
Introduces in-preview 0.15.1 Microsoft.ML.DNN package that enables full DNN model retraining and transfer learning in .NET using C# bindings for tensorflow provided by Tensorflow .NET. The goal of this package is to allow high level DNN training and scoring tasks such as image classification, text classification, object detection, etc using simple yet powerful APIs that are framework agnostic but currently they only uses Tensorflow as the backend. The below APIs are in early preview and we hope to get customer feedback that we can incorporate in the next iteration.
public static DnnEstimator RetrainDnnModel(
this ModelOperationsCatalog catalog,
string[] outputColumnNames,
string[] inputColumnNames,
string labelColumnName,
string tensorFlowLabel,
string optimizationOperation,
string modelPath,
int epoch = 10,
int batchSize = 20,
string lossOperation = null,
string metricOperation = null,
string learningRateOperation = null,
float learningRate = 0.01f,
bool addBatchDimensionInput = false,
DnnFramework dnnFramework = DnnFramework.Tensorflow)
public static DnnEstimator ImageClassification(
this ModelOperationsCatalog catalog,
string featuresColumnName,
string labelColumnName,
string outputGraphPath = null,
string scoreColumnName = "Score",
string predictedLabelColumnName = "PredictedLabel",
string checkpointName = "_retrain_checkpoint",
Architecture arch = Architecture.InceptionV3,
DnnFramework dnnFramework = DnnFramework.Tensorflow,
int epoch = 10,
int batchSize = 20,
float learningRate = 0.01f,
bool measureTrainAccuracy = false)
Database Loader (PREVIEW) (#4035)
Introduces Database loader that enables training on databases. This loader supports any relational database supported by System.Data in .NET Framework or .NET Core, meaning that you can use many RDBMS such as SQL Server, Azure SQL Database, Oracle, PostgreSQL, MySQL, etc. This feature is in early preview and can be accessed via Microsoft.ML.Experimental nuget.
public static DatabaseLoader CreateDatabaseLoader(this DataOperationsCatalog catalog,
params DatabaseLoader.Column[] columns)
SaveOnnxCommand appears to ignore predictors when saving a model to ONNX format: This broke export to ONNX functionality. (3974)
Unable to use fasterrcnn onnx model. (3963)
PredictedLabel is always true for Anomaly Detection: This bug disabled scenarios like fraud detection using binary classification/PCA. (#4039)
Update build certifications: This bug broke the official builds because of outdated certificates that were being used. (#4059)
Warning Unknown parameter metric= is produced when the default metric is used. (#3965)None
Anomaly detection algorithms (Spike and Change Point):
Microsoft.ML.TimeSeries
Microsoft.ML.OnnxTransformer Enables scoring of ONNX models in the learning pipeline. Uses ONNX Runtime v0.4.
Microsoft.ML.TensorFlow Enables scoring of TensorFlow models in the learning pipeline. Uses TensorFlow v1.13. Very useful for image and text classification. Users can featurize images or text using DNN models and feed the result into a classical machine learning model like a decision tree or logistic regression trainer.
Tree-based featurization (#3812)
Generating features using tree structure has been a popular technique in data mining. Useful for capturing feature interactions when creating a stacked model, dimensionality reduction, or featurizing towards an alternative label. ML.NET's tree featurization trains a tree-based model and then maps input feature vector to several non-linear feature vectors. Those generated feature vectors are:
Here are two references.
Microsoft.Extensions.ML integration package. (#3827)
This package makes it easier to use ML.NET with app models that support Microsoft.Extensions - i.e. ASP.NET and Azure Functions.
Specifically it contains functionality for:
Time series Sequential Transform needs to have a binding mechanism: This bug made it impossible to use time series in NimbusML. (#3875)
Build errors resulting from upgrading to VS2019 compilers: The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. (#3894)
LightGBM Evaluation metric parameters: In LightGbm EvaluateMetricType where if a user specified EvaluateMetricType.Default, the metric would not get added to the options Dictionary, and LightGbmWrappedTraining would throw because of that. (#3815)
Change default EvaluationMetric for LightGbm: In ML.NET, the default EvaluationMetric for LightGbm is set to EvaluateMetricType.Error for multiclass, EvaluationMetricType.LogLoss for binary etc. This leads to inconsistent behavior from the user's perspective. (#3859)
None
Fixes the Hardcoded Sigmoid value from -0.5 to the value specified during training. (#3850)
Fix TextLoader constructor and add exception message. (#3788)
Introduce the FixZero argument to the LogMeanVariance normalizer. (#3916)
Ensembles trainer now work with ITrainerEstimators instead of ITrainers. (#3796)
LightGBM Unbalanced Data Argument. (#3925)
Tree based trainers implement ICanGetSummaryAsIDataView. (#3892)
CLI and AutoML API
Image type support in IDataView PR#3263 added support for in-memory image as a type in IDataView. Previously it was not possible to use an image direc
Image type support in IDataView PR#3263 added support for in-memory image as a type in IDataView. Previously it was not possible to use an image directly in IDataView, and the user had to specify the file path as a string and load the image using a transform. The feature resolved the following issues: 3162, 3723, 3369, 3274, 445, 3460, 2121, 2495, 3784.
Image type support in IDataView was a much requested feature by the users.
Sample to convert gray scale image in-Memory | Sample for custom mapping with in-memory using custom type
Super-Resolution based Anomaly Detector (preview, please provide feedback) PR#3693 adds a new anomaly detection algorithm to the Microsoft.ML.TimeSeries nuget. This algorithm is based on Super-Resolution using Deep Convolutional Networks and also got accepted in KDD'2019 conference as an oral presentation. One of the advantages of this algorithm is that it does not require any prior training and based on benchmarks using grid parameter search to find upper bounds it out performs the Independent and identically distributed(IID) and Singular Spectrum Analysis(SSA) based anomaly detection algorithms in accuracy. This contribution comes from the Azure Anomaly Detector team.
| Algo | Precision | Recall | F1 | #TruePositive | #Positives | #Anomalies | Fine tuned parameters |
|---|---|---|---|---|---|---|---|
| SSA (requires training) | 0.582 | 0.585 | 0.583 | 2290 | 3936 | 3915 | Confidence=99, PValueHistoryLength=32, Season=11, and use half the data of each series to do the training. |
| IID | 0.668 | 0.491 | 0.566 | 1924 | 2579 | 3915 | Confidence=99, PValueHistoryLength=56 |
| SR | 0.601 | 0.670 | 0.634 | 2625 | 4370 | 3915 | WindowSize=64, BackAddWindowSize=5, LookaheadWindowSize=5, AveragingWindowSize=3, JudgementWindowSize=64, Threshold=0.45 |
Sample for anomaly detection by SRCNN | Sample for anomaly detection by SRCNN using batch prediction
Time Series Forecasting (preview, please provide feedback) PR#1900 introduces a framework for time series forecasting models and exposes an API for Singular Spectrum Analysis(SSA) based forecasting model in the Microsoft.ML.TimeSeries nuget. This framework allows to forecast w/o confidence intervals, update model with new observations and save/load the model to/from persistent storage. This closes following issues 929 and 3151 and was a much requested feature by the github community since September 2018. With this change Microsoft.ML.TimeSeries nuget is feature complete for RTM.
Sample for forecasting | Sample for forecasting using confidence intervals
Math Kernel Library fails to load with latest libomp: Fixed by PR#3721 this bug made it impossible for anyone to check code into main branch because it was causing build failures.
Transform Wrapper fails at deserialization: Fixed by PR#3700 this bug affected first party(1P) customer. A model trained using NimbusML(Python bindings for ML.NET) and then loaded for scoring/inferencing using ML.NET will hit this bug.
Index out of bounds exception in KeyToVector transformer: Fixed by PR#3763 this bug closes following github issues: 3757,1751,2678. It affected first party customer and also github users.
None
ML.NET has turned 1. After 12 preview releases over the last year and implementing many enhancements and API improvements, this release brings you the
ML.NET has turned 1. After 12 preview releases over the last year and implementing many enhancements and API improvements, this release brings you the version 1.0.0 of ML.NET. Thank you wholeheartedly for being an awesome community. Please continue to use and provide feedback on what should be improved. We will ensure that going forward no breaking API changes are introduced.
ML.NET supports Windows, MacOS, and Linux. See supported OS versions of .NET Core 2.0 for more details.
You can install ML.NET NuGet from the CLI using:
dotnet add package Microsoft.ML
From package manager:
Install-Package Microsoft.ML
Shoutout to all these amazing contributors who have helped us along the way,
amiteshenoy, beneyal, bojanmisic, Caraul, dan-drews, DAXaholic, dhilmathy, dzban2137, elbruno, endintiers, f1x3d, feiyun0112, forki, harshsaver, helloguo, hvitved, Jongkeun, JorgeAndd, JoshuaLight, jwood803, kant2002, kilick, Ky7m, llRandom, malik97160, MarcinJuraszek, mareklinka, Matei13, mfaticaearnin, mnboos, nandaleite, Nepomuceno nihitb06, Niladri24dutta, PaulTFreedman, Pielgrin, pkulikov, Potapy4, Racing5372, rantri, rantri, rauhs, robosek, ross-p-smith, SolyarA, Sorrien, suhailsinghbains, terop, ThePiranha, Thomas-S-B, timitoc, tincann, v-tsymbalistyi, van-tienhoang, veikkoeeva, yamachu, and the ML.NET team for making this happen!
…critical issues. The goal is to avoid any new breaking changes going forward. One change in this release is that we have moved IDataView back into Mic…
This release is Release Candidate for version 1.0.0 of ML.NET. We have closed our main API project. The next release will be 1.0.0 and during this sprint we are focusing on improving documentation and samples and consider addressing major critical issues. The goal is to avoid any new breaking changes going forward. One change in this release is that we have moved IDataView back into Microsoft.ML namespace based on some feedback that we received.
ML.NET supports Windows, MacOS, and Linux. See supported OS versions of .NET Core 2.0 for more details.
You can install ML.NET NuGet from the CLI using:
dotnet add package Microsoft.ML
From package manager:
Install-Package Microsoft.ML
Below are a few of the highlights from this release. There are many other improvements in the API.
IDataView into Microsoft.ML namespace. (#2987)ML.DataView. (#3022)IHostEnvironment. (#2846)ColumnOptions. (#2959)Shoutout to MarcinJuraszek, llRandom, jwood803, Potapy4 and the ML.NET team for their contributions as part of this release!
Your coding agent can read these notes before it upgrades. Set up the MCP server →