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