神经网络-训练具有多个条目的MLP



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

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

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

我没有办法做到这一点。假设我有1000个划时代,在这种情况下,我需要为250个划时代训练每个条目?用一个条目训练一个时期,然后用另一个条目来训练下一个时期?

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

至少对于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(

此外,神经网络架构与使用单个条目相比没有任何根本性的变化,只有输入到其中的数据发生了变化,因此您不必废弃您编写的代码,只需进行一些小的更改(很可能是(

最新更新