我正在培训ML.Net机器学习模型.我可以训练它并从中预测,并从磁盘中保存/加载它.但我需要能够将其从磁盘上加载,然后重新训练,或者添加新信息以便随着时间的推移对其进行改进.
有谁知道这是否可能?我在MS文档中没有找到任何关于如何做到这一点的内容,但对于ML来说这是一个非常标准的事情,所以如果不可能的话我会感到惊讶.
谢谢
只是尝试使用 C# 8.0 Beta 并更新一些代码以使用可为 null 的引用类型。
我有一个用于 Trie 实现的节点样式类。每个节点都有一个类型为 的值T
。根节点的构造函数不需要值,因此我将其设置为default
。
这是一个简短的版本:
public class Trie<T>
{
public readonly bool caseSensitive;
public readonly char? letter;
public readonly Dictionary<char, Trie<T>> children;
public readonly Trie<T>? parent;
public readonly int depth;
public bool completesString;
public T value;
public Trie(bool caseSensitive = false)
{
this.letter = null;
this.depth = 0;
this.parent = null;
this.children = new Dictionary<char, Trie<T>>();
this.completesString = false;
this.caseSensitive = caseSensitive;
this.value = default;
}
}
Run Code Online (Sandbox Code Playgroud)
如果 ctor …
我有一个扩展方法从字符串(电话号码)中删除某些字符,这些字符的执行速度比我认为应该比链接的替换调用慢得多.奇怪的是,如果循环运行大约3000次迭代,它会在循环中超过替换物,之后它会更快.低于此并且链接替换更快.这就像我的代码有一个固定的开销,而Replace没有.这可能是什么!?
快速浏览.当仅测试10个数字时,我的大约需要0.3毫秒,而替换只需要0.01毫秒.巨大的差异!但是当运行500万时,我需要大约1700毫秒,而替换需要大约2500毫秒.
电话号码只有0-9,+, - ,(,)
以下是相关代码:构建测试用例,我正在使用testNums.
int testNums = 5_000_000;
Console.WriteLine("Building " + testNums + " tests");
Random rand = new Random();
string[] tests = new string[testNums];
char[] letters =
{
'0','1','2','3','4','5','6','7','8','9',
'+','-','(',')'
};
for(int t = 0; t < tests.Length; t++)
{
int length = rand.Next(5, 20);
char[] word = new char[length];
for(int c = 0; c < word.Length; c++)
{
word[c] = letters[rand.Next(letters.Length)];
}
tests[t] = new string(word);
}
Console.WriteLine("Tests built");
string[] stripped = new string[tests.Length];
Run Code Online (Sandbox Code Playgroud)
使用我的扩展方法:
Stopwatch …
Run Code Online (Sandbox Code Playgroud) 我将.Net Core的版本从预览2升级到了预览6,这打破了两件事。最重要的是,我不能再使用newtonsoft JSON。
ConfigureServices中的AddNewtonsoftJson似乎什么也不做,新的Json序列化器似乎仅对属性起作用,而对字段不起作用。它没有看到JSONIgnoreAttribute。
在ConfigureServices中(在Startup中),我有一行
services.AddMvc(x => x.EnableEndpointRouting = false).AddNewtonsoftJson();
似乎没有做应做的事情。在我的应用程序中,仅属性被序列化,而不是字段,并且[JSONIgnore]
属性不执行任何操作。
我可以通过推广所有需要成为属性的公共领域来解决缺少的领域,但是我必须能够忽略一些领域。
还有其他人吗?如何获得新的JSON序列化程序以忽略某些属性并序列化公共字段,或者返回Newtonsoft?
使用 ML.Net,我使用分类器进行文本解释。预测有一个作为 float[] 的分数列和一个预测标签。这是因为最高分数与预测标签相关,但其他分数只是没有特定顺序的浮点数。我怎么知道哪个分数与哪个标签相关?我怎样才能看到权重第二高的标签是什么?
例如,我得到这个: 0.00005009 0.00893076 0.1274763 0.6209787 0.2425644
0.6 是我预测的标签,但我还需要查看 0.24 是哪个标签,这样我才能明白为什么它会被混淆。
标签是诸如“Greeting”或“Joke”之类的文本字符串,它们在管道中被字典化,所以也许这就是为什么它们的顺序不正确的原因?
ML.Net 有没有办法将两者联系在一起?显示哪个分数与哪个标签相关?
c# ×5
ml.net ×2
.net ×1
.net-core ×1
asp.net-mvc ×1
c#-8.0 ×1
generics ×1
json.net ×1
non-nullable ×1
optimization ×1