如何解决神经网络 - 训练具有多个条目的 MLP
我使用反向传播算法实现了一个 MLP,它仅适用于一个条目,例如,如果输入是 1 和 1,则最后一层的答案将是 1 和 0。
假设不是只有一个条目(例如 1,1),而是有四个条目(1,1; 1,0; 0,0; 0,1),它们都有不同的预期答案。
我需要训练这个 MLP,它需要正确回答所有条目。
我找不到办法做到这一点。假设我有 1000 个 epoch,在这种情况下,我需要将每个条目训练 250 个 epoch?用 1 个条目训练一个 epoch,然后用另一个条目训练下一个 epoch?
如何正确训练 MLP 正确回答所有条目?
解决方法
至少对于 python 实现,你可以简单地使用多维训练数据
# training a neural network to behave like an XOR gate
import numpy as np
X = np.array([[1,0],[0,1],[1,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)
此外,神经网络架构没有从使用单个条目从根本上改变,只是输入到其中的数据发生了变化,因此您不必废弃您编写的代码,只需制作一些小的最有可能发生变化
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。