Encog/neuroph 保存神经网络

Posted

技术标签:

【中文标题】Encog/neuroph 保存神经网络【英文标题】:Encog/neuroph save Neural Network 【发布时间】:2012-10-18 12:56:29 【问题描述】:

我是神经网络领域的新手(说实话,我几天前才开始)。我想在我的 OCR 应用程序中使用神经网络来识别手写文本。

我想知道的是,是否可以在初始训练后训练网络。换句话说,我一开始只训练几个字符,但我想稍后在网络中添加更多字符而不影响先前训练的数据的存在。(假设我已经创建了具有足够输出神经元的神经网络以用于附加字符)。如果这是可能的,我该如何使用 encog 来完成这项工作。

谢谢你

【问题讨论】:

【参考方案1】:

是和不是。如果你训练相同的神经网络来识别新字符,权重 (θ) 肯定会在层之间改变以适应新字符。由于您的 X / Y 值已更改,因此成本函数可能也需要更改以更准确地适应新数据。但是,只要您的错误率在可接受的范围内,您应该没有问题。

另一方面,您可以使用 2 个神经网络 - 一个用于您的初始设置,另一个用于您的新字符集。 Neuroph 允许您将每个神经网络保存到一个文件中,您可以根据需要加载相应的。

PS:我在这里假设字符是指“A”/“B”/“C”,而不是神经网络变量,例如 x1/x2/x3(网络特征)

【讨论】:

如果我第二次训练并保存为以前的文件,我将丢失第一个训练集,我可以使用第二个训练集代替 ryt?? encog 是否允许这样做? 假设您的第二个训练集也包含初始字符,是的,您可以使用新网络。我没有使用encog,所以我不知道第二个问题的答案。但是任何神经网络都可以根据一组输入再次训练,所以我看不出框架不支持它的任何原因。 其实这清除了我对这种情况的大部分疑虑:)【参考方案2】:

您可以将神经网络保存到磁盘,稍后使用 Encog 中的 TriningContinuation 类对其进行重新训练。下面是来自 Encog 示例的代码示例。

public void TestRPROPContPersistEG()

    IMLDataSet trainingSet = XOR.CreateXORDataSet();
    BasicNetwork net1 = XOR.CreateUnTrainedXOR();
    BasicNetwork net2 = XOR.CreateUnTrainedXOR();

    ResilientPropagation rprop1 = new ResilientPropagation(net1, trainingSet);
    ResilientPropagation rprop2 = new ResilientPropagation(net2, trainingSet);

    rprop1.Iteration();
    rprop1.Iteration();

    rprop2.Iteration();
    rprop2.Iteration();

    TrainingContinuation cont = rprop2.Pause();

    EncogDirectoryPersistence.SaveObject(EG_FILENAME, cont);
    TrainingContinuation cont2 = (TrainingContinuation)EncogDirectoryPersistence.LoadObject(EG_FILENAME);

    ResilientPropagation rprop3 = new ResilientPropagation(net2, trainingSet);
    rprop3.Resume(cont2);

    rprop1.Iteration();
    rprop3.Iteration();


    for (int i = 0; i < net1.Flat.Weights.Length; i++)
    
        Assert.AreEqual(net1.Flat.Weights[i], net2.Flat.Weights[i], 0.0001);
    

【讨论】:

以上是关于Encog/neuroph 保存神经网络的主要内容,如果未能解决你的问题,请参考以下文章

可视化神经网络的网络结构并保存

学习神经网络并保存结果

Tensorflow保存神经网络参数有妙招:Saver和Restore

PyTorch学习网络的保存与提取

如何保存表示在 Tensorflow 中构建的神经网络的对象

TensorFlow学习笔记--网络模型的保存和读取