【发布时间】:2022-01-07 02:02:20
【问题描述】:
我正在使用 Accord.NET 创建并保存StepwiseLogisticRegressionModel。当我尝试序列化和保存模型时,我收到以下错误:
Assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 中的类型'System.Threading.CancellationToken' 未标记为可序列化。
保存其他模型,如 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);
【问题讨论】:
-
在第一个代码块中你在初始化它的值之前使用
model,而在第二个代码块中你甚至没有使用model。我在您发布的代码中没有看到任何CancellationToken的迹象。可以发minimal reproducible example吗? -
@gunr2171 我刚刚添加了一个工作示例。
-
该类被标记为可序列化,但该类中的令牌不可序列化。也许这是一个疏忽。如果要序列化,则应使用
NonSerialized装饰一个属性。
标签: c# serialization accord.net cancellation-token