【问题标题】:Neural Network - Train a MLP with multiple entries神经网络 - 训练具有多个条目的 MLP
【发布时间】:2021-09-02 07:53:53
【问题描述】:

我用反向传播算法实现了一个 MLP,它只适用于一个条目,例如,如果输入是 1 和 1,那么最后一层的答案将是 1 和 0。

假设我有四个条目(1,1; 1,0; 0,0; ​​0,1),而不是只有一个条目(如 1,1),它们都有不同的预期答案。

我需要训练这个 MLP,它需要正确回答所有条目。

我没有找到方法来做到这一点。假设我有 1000 个 epoch,在这种情况下,我需要为每个条目训练 250 个 epoch?用 1 个条目训练一个 epoch,然后用另一个条目训练下一个 epoch?

如何正确训练 MLP 以正确回答所有条目?

【问题讨论】:

    标签: neural-network backpropagation mlp


    【解决方案1】:

    至少对于python实现来说,你可以简单地使用多维训练数据

    # training a neural network to behave like an XOR gate
    import numpy as np
    
    X = np.array([[1,0],[0,1],[1,1],[0,0]]) # entries
    y = np.array([[1],[1],[0],[0]]) # expected answers
    
    INPUTS = X.shape[1]
    HIDDEN = 12
    OUTPUTS = y.shape[1]
    
    w1 = np.random.randn(INPUTS, HIDDEN) * np.sqrt(2 / INPUTS)
    w2 = np.random.randn(HIDDEN, OUTPUTS) * np.sqrt(2 / HIDDEN)
    
    ALPHA = 0.5
    EPOCHS = 1000
    
    for e in range(EPOCHS):
        z1 = sigmoid(X.dot(w1))
        o = sigmoid(z1.dot(w2))
        
        o_error = o - y
        o_delta = o_error * sigmoidPrime(o)
        
        w2 -= z1.T.dot(o_delta) * ALPHA
        w2_error = o_delta.dot(w2.T)
        w2_delta = w2_error * sigmoidPrime(z1)
        
        w1 -= X.T.dot(w2_delta) * ALPHA
        print(np.mean(np.abs(o_error))) # prints the loss of the NN
    

    这种方法可能不适用于某些神经网络库,但这没关系,因为神经网络库通常会自己处理类似的东西

    这样做的原因是,在输入和隐藏层之间的点积过程中,每个训练条目都单独与整个隐藏层进行矩阵相乘,因此结果是一个矩阵,其中包含通过隐藏层转发的每个样本的结果层

    这个过程在整个网络中持续进行,所以你实际上在做的是并行运行同一个神经网络的多个实例

    训练条目的数量不必是四个,它可以是任意大的数字,只要其内容的大小与 X 的输入层和 y 和 X 的输出层相同y 的长度相同(并且您有足够的 RAM)

    此外,与使用单个条目相比,神经网络架构从根本上没有改变,只是输入其中的数据发生了变化,因此您不必废弃您编写的代码,只需制作一些小的最有可能发生变化

    【讨论】:

      猜你喜欢
      • 2014-06-23
      • 2011-04-07
      • 1970-01-01
      • 2010-11-20
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      相关资源
      最近更新 更多