我需要有关保存神经网络的帮助。
我将解释...我在C#中编程了多层网络。.该应用程序的一部分用于培训,另一部分用于测试神经网络。一切都按预期进行。当我想训练我的网络时,我会从文件中加载一组数据。培训结束后,我将在较小的数据样本上对其进行测试,它会为我提供正确的输出。但是现在我希望能够训练我的网络并保存它,以便我可以再次加载它并将其用于进一步测试。
我假设您有一个称为Bayes(或类似名称)的机器学习课程。通常,您会将其标记为[Serializable]
using System.IO;
[Serializable]
public class NaiveBayes
{
...
}
Run Code Online (Sandbox Code Playgroud)
在这一节课中,您可以找到一种保存方法
public void Save(Stream stream)
{
YourBinaryFormatter b = new YourBinaryFormatter();
b.Serialize(stream, this);
}
Run Code Online (Sandbox Code Playgroud)
YourBinarySerializer这只是您选择的一些串行器,您可以根据需要使用另一个串行器。读取这些文件是相反的,并且同样容易。
是的,您可以如上所述使用可序列化。但在机器人技术中,通常需要独立于语言(即易于解析)的知识存储,这就是我添加这个答案的原因。
那么,如何保存任何数据类型的当前状态呢?
1) 写入类型、其状态和可能的描述符 2) 读取它。
对于整数int a = 3,您可以编写一个包含以下内容的文件:
integer
a
3
Run Code Online (Sandbox Code Playgroud)
神经网络是一种抽象数据类型,就像整数一样。它由拓扑和训练后的最终权重定义。假设您有一个 MLP,其中 in=3、hid=6、out=2,那么您可以编写一个包含以下内容的文件:
3-6-2 // topology
test1 // name of neural network, could also be in filename (or timestamp)
weight matrix [in->hid]
weight matrix [hid->out]
Run Code Online (Sandbox Code Playgroud)
当然,您会编写实际权重而不是“权重矩阵”。您可以在程序的初始化部分获取拓扑,或者在训练阶段结束时与权重一起获取拓扑。
如果您想重建网络,只需解析写入的文件并使用您所阅读的所有内容来像以前一样初始化网络,但现在跳过训练。您应该能够在机器人上写入文件。如果您无法执行此操作,请通过 Wi-Fi 将信息发送到您的本地计算机并写入其中。