dotnet/machinelearning · error · ArgumentException
Training data and validation data schemas do not match. Colu
Error message
Training data and validation data schemas do not match. Column '{trainCol.Name}' is of type {trainCol.Type} in train data, and type {validCol.Value.Type} in validation data. What it means
This ArgumentException is thrown when a column present in both train and validation data has different DataViewTypes (e.g. Single vs String, or different key/vector types). The message reports both types so the mismatched column is easy to spot.
Source
Thrown at src/Microsoft.ML.AutoML/Utils/UserInputValidationUtil.cs:222
// Validate that every active column in the train data corresponds to an active column in the validation data.
// (Indirectly, since we asserted above that the train and validation data have the same number of active columns, this also
// ensures the reverse -- that every active column in the validation data corresponds to an active column in the train data.)
foreach (var trainCol in trainData.Schema)
{
if (trainCol.IsHidden)
{
continue;
}
var validCol = validationData.Schema.GetColumnOrNull(trainCol.Name);
if (validCol == null)
{
throw new ArgumentException($"{schemaMismatchError} Column '{trainCol.Name}' exists in train data, but not in validation data.", nameof(validationData));
}
if (trainCol.Type != validCol.Value.Type && !trainCol.Type.Equals(validCol.Value.Type))
{
throw new ArgumentException($"{schemaMismatchError} Column '{trainCol.Name}' is of type {trainCol.Type} in train data, and type " +
$"{validCol.Value.Type} in validation data.", nameof(validationData));
}
}
}
private static void ValidateTrainDataColumns(IDataView trainData, IEnumerable<string> columnNames, string columnPurpose,
IEnumerable<DataViewType> allowedTypes = null)
{
if (columnNames == null)
{
return;
}
foreach (var columnName in columnNames)
{
ValidateTrainDataColumn(trainData, columnName, columnPurpose, allowedTypes);
}
}View on GitHub (pinned to 7b76e69cf9)
Solutions
- Use one explicit TextLoader.Options/schema for both train and validation loads so types agree.
- Convert validation column with ConvertTransform to the training column's type.
- Inspect and compare `trainData.Schema["col"].Type` vs validation before Execute.
Example fix
// before
var valData = mlContext.Data.LoadFromTextFile("val.csv", hasHeader: true); // inferred string for Amount
// after
var opts = new TextLoader.Options { Columns = new[]{ new TextLoader.Column("Amount", DataKind.Single, 3) } };
var valData = mlContext.Data.LoadFromTextFile("val.csv", opts); Defensive patterns
Strategy: validation
Validate before calling
foreach (var col in trainData.Schema.Where(c => !c.IsHidden))
{
var v = validationData.Schema.GetColumnOrNull(col.Name);
if (v != null && col.Type != v.Value.Type && !col.Type.Equals(v.Value.Type))
throw new InvalidOperationException($"type mismatch on {col.Name}: {col.Type} vs {v.Value.Type}");
} Try / catch
try { result = experiment.Execute(trainData, validationData, ...); }
catch (ArgumentException ex) when (ex.Message.Contains("is of type")) { /* convert types and retry */ } Prevention
- Share one explicit TextLoader schema between both loads
- Beware type inference differences across files
- Convert mismatched columns with Conversion.ConvertType
When it happens
Trigger: Column typed as string in training file but numeric in validation file (or vice versa) because loaders inferred different types; KeyType/VectorType differing due to different loader options.
Common situations: Validation CSV has quoted numbers parsed as text; one file has missing values changing inferred type; TextLoader schema explicitly specified for one file but inferred for the other.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- {DefaultColumnNames.Features} column must be of data type {N
- Training data and validation data schemas do not match. Trai
- Training data and validation data schemas do not match. Colu
- Exception of type 'System.ArgumentException' was thrown.
- Cannot cast elements of column '{0}' type of {1} to type {2}
AI-assisted analysis of dotnet/machinelearning@7b76e69cf9 (2026-09-11).
Data as JSON: /api/errors/4a8f20816bfaa693.
Report an issue: GitHub.