神经网络知识数据如何存储?
How to store neural network knowledge data?
我是那个领域的新手,所以这个问题可能看起来很奇怪。但是,在提问之前,我已经阅读了很多介绍性文章,内容涉及机器学习的关键点是什么以及神经网络的作用部分是什么。包括非常有用的那个What is machine learning。基本上正如我所理解的那样 - 受过教育的 NN 是(如果错误请纠正我):
- 神经元之间的一组连接(可能是自连接的,可能有门等)
- 在每个连接上形成激活概率。
这两件事都在训练过程中进行了调整,以尽可能接近预期的输出。然后,我们对受过教育的 NN 所做的事情 - 我们将数据的测试子集加载到其中并检查它的性能。但是,如果我们对测试结果感到满意并且我们想要存储 教育结果 而不是稍后在数据集获得新值时再次 运行 训练,会发生什么。
所以我的问题是 - 教育知识是否存储在 RAM 之外的某个地方?可以被转储(以某种方式考虑对象序列化),这样您就不需要用明天或以后获得的数据来训练您的神经网络。
现在我正在尝试使用 synaptic.js 对我的数据集进行简单演示,但我无法在项目的 wiki 中发现那种保存教育的概念。
该库只是一个示例,如果您引用一些 python 库会很好!
虽然我的回答也适用于其他网络,但我会在我的回答中假设您使用的是简单的 multi-layer perceptron (MLP)。
'training' MLP 的目的是找到正确的突触权重,以最小化网络输出的错误。
当一个神经元连接到另一个神经元时,它的输入被赋予一个权重。神经元执行一个函数,比如所有输入的加权和,然后输出结果。
训练网络并找到这些权重后,您可以使用验证集验证结果。
如果您对网络运行良好感到满意,只需记录您应用于每个连接的权重。您可以将这些权重存储在任何您喜欢的地方(连同网络结构的描述),然后在以后检索它们。无需每次使用时都重新训练网络。
希望对您有所帮助。
关于通过 synaptic.js 存储它:
这很容易做到!它实际上有一个内置的功能。有两种方法可以做到这一点。
如果你想使用网络而不需要再次训练它
这将为您的网络创建一个独立的功能,您可以在任何地方使用 javascript 而无需 synaptic.js! Wiki
var standalone = myNetwork.standalone();
如果以后要修改网络
只需将您的网络转换为 JSON。这可以随时用 synaptic.js 再次加载! Wiki
// Export the network to a JSON which you can save as plain text
var exported = myNetwork.toJSON();
// Conver the network back to useable network
var imported = Network.fromJSON(exported);
我是那个领域的新手,所以这个问题可能看起来很奇怪。但是,在提问之前,我已经阅读了很多介绍性文章,内容涉及机器学习的关键点是什么以及神经网络的作用部分是什么。包括非常有用的那个What is machine learning。基本上正如我所理解的那样 - 受过教育的 NN 是(如果错误请纠正我):
- 神经元之间的一组连接(可能是自连接的,可能有门等)
- 在每个连接上形成激活概率。
这两件事都在训练过程中进行了调整,以尽可能接近预期的输出。然后,我们对受过教育的 NN 所做的事情 - 我们将数据的测试子集加载到其中并检查它的性能。但是,如果我们对测试结果感到满意并且我们想要存储 教育结果 而不是稍后在数据集获得新值时再次 运行 训练,会发生什么。
所以我的问题是 - 教育知识是否存储在 RAM 之外的某个地方?可以被转储(以某种方式考虑对象序列化),这样您就不需要用明天或以后获得的数据来训练您的神经网络。
现在我正在尝试使用 synaptic.js 对我的数据集进行简单演示,但我无法在项目的 wiki 中发现那种保存教育的概念。 该库只是一个示例,如果您引用一些 python 库会很好!
虽然我的回答也适用于其他网络,但我会在我的回答中假设您使用的是简单的 multi-layer perceptron (MLP)。
'training' MLP 的目的是找到正确的突触权重,以最小化网络输出的错误。
当一个神经元连接到另一个神经元时,它的输入被赋予一个权重。神经元执行一个函数,比如所有输入的加权和,然后输出结果。
训练网络并找到这些权重后,您可以使用验证集验证结果。
如果您对网络运行良好感到满意,只需记录您应用于每个连接的权重。您可以将这些权重存储在任何您喜欢的地方(连同网络结构的描述),然后在以后检索它们。无需每次使用时都重新训练网络。
希望对您有所帮助。
关于通过 synaptic.js 存储它:
这很容易做到!它实际上有一个内置的功能。有两种方法可以做到这一点。
如果你想使用网络而不需要再次训练它
这将为您的网络创建一个独立的功能,您可以在任何地方使用 javascript 而无需 synaptic.js! Wiki
var standalone = myNetwork.standalone();
如果以后要修改网络
只需将您的网络转换为 JSON。这可以随时用 synaptic.js 再次加载! Wiki
// Export the network to a JSON which you can save as plain text
var exported = myNetwork.toJSON();
// Conver the network back to useable network
var imported = Network.fromJSON(exported);