'System.Threading.CancellationToken'...未标记为可序列化
'System.Threading.CancellationToken'...is not marked as serializable
我正在使用 Accord.NET 创建并保存一个 StepwiseLogisticRegressionModel
。当我尝试序列化和保存模型时,出现以下错误:
Type 'System.Threading.CancellationToken' in Assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
保存其他模型(例如 NaiveBayes)似乎工作正常。
这是我试过的代码:
StepwiseLogisticRegressionAnalysis model;
string file = Path.Combine(path, filename);
Serializer.Save(obj: model, path: file);
和
StepwiseLogisticRegressionAnalysis model;
string file = Path.Combine(path, filename);
using(FileStream stream = new FileStream(filename, FileMode.Create))
{
var binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(stream, best);
}
我该如何解决这个问题?
编辑:这是一个工作示例:
double[][] inputs =
{
// Age Smoking
new double[] { 55, 0 }, // 1
new double[] { 28, 0 }, // 2
new double[] { 65, 1 }, // 3
new double[] { 46, 0 }, // 4
new double[] { 86, 1 }, // 5
new double[] { 56, 1 }, // 6
new double[] { 85, 0 }, // 7
new double[] { 33, 0 }, // 8
new double[] { 21, 1 }, // 9
new double[] { 42, 1 }, // 10
new double[] { 33, 0 }, // 11
new double[] { 20, 1 }, // 12
new double[] { 43, 1 }, // 13
new double[] { 31, 1 }, // 14
new double[] { 22, 1 }, // 15
new double[] { 43, 1 }, // 16
new double[] { 46, 0 }, // 17
new double[] { 86, 1 }, // 18
new double[] { 56, 1 }, // 19
new double[] { 55, 0 }, // 20
};
double[] output =
{
0, 0, 0, 1, 1, 1, 0, 0, 0, 1,
0, 1, 1, 1, 1, 1, 0, 1, 1, 0
};
var regression = new StepwiseLogisticRegressionAnalysis(inputs, output,
new[] { "Age", "Smoking" }, "Cancer");
regression.Learn(inputs, output);
var path = $@"C:\";
var filename = "StepWiseRegressionModel.accord";
string file = Path.Combine(path, filename);
Serializer.Save(regression, file);
看起来 StepwiseLogisticRegressionAnalysis
(或子对象)中某处有一个私有字段,其中包含一个 CancellationToken
,无法序列化。
您应该尝试序列化分析的输出模型(参见 regression.Current.Regression
属性)。
请记住,对象的二进制序列化相当脆弱,除非它得到特别支持。反序列化环境必须与序列化完全相同(相同的库版本、C# 版本、OS 版本等)。序列化数据,然后从中重建对象会更好。
我正在使用 Accord.NET 创建并保存一个 StepwiseLogisticRegressionModel
。当我尝试序列化和保存模型时,出现以下错误:
Type 'System.Threading.CancellationToken' in Assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
保存其他模型(例如 NaiveBayes)似乎工作正常。
这是我试过的代码:
StepwiseLogisticRegressionAnalysis model;
string file = Path.Combine(path, filename);
Serializer.Save(obj: model, path: file);
和
StepwiseLogisticRegressionAnalysis model;
string file = Path.Combine(path, filename);
using(FileStream stream = new FileStream(filename, FileMode.Create))
{
var binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(stream, best);
}
我该如何解决这个问题?
编辑:这是一个工作示例:
double[][] inputs =
{
// Age Smoking
new double[] { 55, 0 }, // 1
new double[] { 28, 0 }, // 2
new double[] { 65, 1 }, // 3
new double[] { 46, 0 }, // 4
new double[] { 86, 1 }, // 5
new double[] { 56, 1 }, // 6
new double[] { 85, 0 }, // 7
new double[] { 33, 0 }, // 8
new double[] { 21, 1 }, // 9
new double[] { 42, 1 }, // 10
new double[] { 33, 0 }, // 11
new double[] { 20, 1 }, // 12
new double[] { 43, 1 }, // 13
new double[] { 31, 1 }, // 14
new double[] { 22, 1 }, // 15
new double[] { 43, 1 }, // 16
new double[] { 46, 0 }, // 17
new double[] { 86, 1 }, // 18
new double[] { 56, 1 }, // 19
new double[] { 55, 0 }, // 20
};
double[] output =
{
0, 0, 0, 1, 1, 1, 0, 0, 0, 1,
0, 1, 1, 1, 1, 1, 0, 1, 1, 0
};
var regression = new StepwiseLogisticRegressionAnalysis(inputs, output,
new[] { "Age", "Smoking" }, "Cancer");
regression.Learn(inputs, output);
var path = $@"C:\";
var filename = "StepWiseRegressionModel.accord";
string file = Path.Combine(path, filename);
Serializer.Save(regression, file);
看起来 StepwiseLogisticRegressionAnalysis
(或子对象)中某处有一个私有字段,其中包含一个 CancellationToken
,无法序列化。
您应该尝试序列化分析的输出模型(参见 regression.Current.Regression
属性)。
请记住,对象的二进制序列化相当脆弱,除非它得到特别支持。反序列化环境必须与序列化完全相同(相同的库版本、C# 版本、OS 版本等)。序列化数据,然后从中重建对象会更好。