Encog / neuroph save神经网络

时间:2012-10-29 07:53:49

标签: java neural-network encog

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

我想知道的是,是否有可能在初始培训后培训网络。换句话说,我将在开始时训练几个字符,但我想稍后在网络中添加更多字符,而不会影响先前训练数据的存在。(假设我创建了具有足够输出神经元的神经网络用于其他字符)。如果这是可能的,我怎么能用encog来完成这个。

谢谢

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您可以将神经网络保存到磁盘中,然后使用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);
    }
}