如何实际教 ANN 不同训练输入的权重?

人工智能 神经网络 训练
2021-10-18 18:32:39

我以为我已经为人工神经网络(该领域的第一次尝试)实现了代码(从头开始,没有库)。但我觉得我错过了一些非常基本或明显的东西。

简而言之:代码对一对输入/输出值有效,但对一组值对无效。我不太了解培训过程。所以我想先解决这个问题。以下是我在伪代码中的即兴训练(也就是我能想到的所有内容)。

trainingData = [{in: [0,0], out:[0]}, {in: [0,1], out:[0]}, ...];
iterations = 10000

network = graphNodesToNetwork()
links = graphLinksToNetwork()
randomiseLinkWeights(links)


while(trainingData not empty) {
  for(0<iterations) { 
     set = trainingData.pop()

     updateInput(network, set.in)

     forwardPropagate(network, links) 

     linkUpdate = backPropagate(network, links, set.out)

     updateLinks(linkUpdate, links)}
}

这是它应该如何工作的吗?您是否按集(while-loop)输入您的训练数据集?

编辑1:因为我的最后评论确实分散了手头的问题。

编辑 2:更少罗嗦,更多代码

2个回答

你的网络必须有一些持续存在的东西,比如权重增加偏差

您的新实现将是这样的:

trainingData = [{in: [0,0], out:[0]}, {in: [0,1], out:[0]}, ...];
iterations = 10000

network = graphNodesToNetwork()
links = graphLinksToNetwork()
randomiseLinkWeights(links)
weights = []


while(trainingData not empty) {
    for(0<iterations) { 
       set = trainingData.pop()

       weights = updateInput(network, set.in)

       forwardPropagate(network, links) 

       linkUpdate = backPropagate(network, links, set.out, weights)

       updateLinks(linkUpdate, links)}
}

Inshort 保留权重和反向传播。

看起来您正在对一个数据进行 10,000 次模型训练,然后丢弃该数据并转移到下一个数据。

这是行不通的:模型将非常擅长学习一段数据,但在优化下一段数据时会忘记它。

相反,要么在每次迭代中随机选择一个示例,要么计算所有 4 个示例的梯度,然后只在那个方向上更新。