如何存储神经网络知识数据?

时间:2016-02-24 22:30:53

标签: javascript python machine-learning neural-network

我是那个地区的新手,所以这个问题可能看起来很奇怪。然而,在询问之前,我已经阅读了大量关于机器学习的关键点以及神经网络的作用部分的介绍性文章。包括非常有用的一个What is machine learning。基本上我得到了它 - 一个受过教育的NN(纠正我,如果它错了):

  1. 神经元之间的连接集(可能是自连接的,可能有门等)
  2. 在每个连接上形成激活概率。
  3. 在训练期间调整两件事以尽可能接近预期输出。然后,我们用受过教育的NN做什么 - 我们将测试数据子集加载到其中并检查它的执行情况。但是,如果我们对测试结果感到满意并且我们希望存储教育结果而不是在数据集获得新值时再次运行培训,会发生什么。

    所以我的问题是 - 教育知识存储在RAM以外的某个地方吗?可以被抛弃(在某种程度上考虑对象序列化),这样你就不需要用你明天或以后得到的数据来教育你的NN。

    现在我正在尝试使用synaptic.js使用我的数据集进行简单演示,但我无法发现在项目维基中保存教育的那种概念。 那个库只是一个例子,如果你引用一些python lib会很好!

2 个答案:

答案 0 :(得分:6)

我会在答案中假设你正在处理一个简单的multi-layer perceptron (MLP),尽管我的答案也适用于其他网络。

“训练”MLP的目的是找到正确的突触权重,以最大限度地减少网络输出上的错误。

当神经元连接到另一个神经元时,其输入被赋予权重。神经元执行一个函数,例如所有输入的加权和,然后输出结果。

培训完网络并找到这些权重后,您可以使用验证集验证结果。

如果您对网络运行良好感到满意,只需记录应用于每个连接的权重即可。您可以将这些权重存储在任何位置(以及网络结构的描述),然后再检索它们。每次您想要使用它时都无需重新训练网络。

希望这有帮助。

答案 1 :(得分:6)

关于通过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);