有关您正在处理的内容和/或代码示例的一些特定附加信息会有所帮助。
但是,这是我的建议:
听起来您有一个包含 100k 行的数据集。其中一些数据行可能是重复的。通常使用人工神经网络,程序在激活时会增加网络的两个节点之间的连接强度。
与其一次用一条输入线训练你的人工神经网络,不如说一种更快的策略是:
识别输入中的唯一行并计算它们出现的频率。当您训练人工神经网络时,使用该输入的计数作为您增加节点连接强度的因素。
无需进行 100k 次迭代训练网络,您将能够进行较少次数的训练迭代。结果应该是整个过程将花费更少的时间和处理器功率。
(如果您不想以编程方式识别和计算数据集中的唯一项目,则可以使用 Microsoft Excel 的数据透视表功能在几分钟内完成此操作。)
希望这可以帮助!
编辑:我添加了以下文本作为编辑,因为添加为评论太长了。
感谢您添加有关您尝试解决的问题的其他详细信息。这是一个非常复杂的问题,没有简单的答案。
在人工神经网络中有节点,它们是可以被激活的点。然后节点之间有连接。这些连接既可以用于激活另一个节点,也可以用于抑制另一个节点。最后,这些联系的强度可以根据反馈增加或减弱。换句话说,每个连接都有一个描述其强度的因素。一个节点是否被其他节点激活是与它的连接强度之和的函数,其中连接到一个已经激活的节点,连接强度是正还是负取决于连接是否激活或抑制。
人工神经网络背后的想法是,与其确切定义它们的工作方式,不如设置基本规则,然后对其进行训练以有机地发展工具。现实情况是,有一些设计必须涉及人工神经元相互连接的方式。
我提到识别 3D 螺旋需要非常复杂的人工神经网络。在创建基本设计时,更容易定义基本的工作最终产品想要什么,然后以此为基础进行构建。
具体来说,让我们定义人工神经网络如何查看螺旋线的横截面以确定它是否是一条线。一条线的一维横截面可能由三个节点组成(想象三个并排的像素)。把它想象成一个数组中的三个变量,其中的值可以是 0(未激活)或 1(已激活)。我们称这些节点为 1a、2a 和 3a。
我们希望我们的人工神经网络最小示例查看这三个像素并确定中间是否有一条线。中间的一条线可以定义为:中间节点激活而两个外部节点未激活(黑色背景上的白线),或者两个外部节点激活而中间节点未激活(黑色背景上的一条黑线)白色背景)。
然后我们需要第二层节点来确定所识别的横截面是白线还是黑线。该层需要两个节点。我们称它们为节点 1b(白线)和 2b(黑线)。
最后,我们想要只有一个节点的第三层也是最后一层。如果识别出一条线,则应激活该节点。我们称这个节点为 3。
现在让我们定义节点之间的连接。
节点 2a 应该具有到节点 1b 的激活连接。节点 2a 应该具有到节点 2b 的抑制连接。节点 1a 和 3a 应该具有到节点 1b 的抑制连接。节点 1a 和 3a 应该具有到节点 2b 的激活连接。节点 1b 和 2b 都应该具有到节点 3 的激活连接。
回想一下,如果节点 3 被激活,就会检测到一条线的横截面。节点 3 的激活意味着数据中的这个特定点看起来像一条线的横截面。
以下是此函数神经网络示例处理某些数据的方式:
**当存在线横截面时
0,1,0(节点 1a 未激活;节点 2a 已激活;节点 3a 未激活)
在此数据集示例中,仅激活了节点 2a。这将触发连接到节点 1b 的激活和连接到节点 1a 的抑制连接。
在神经网络的第二层,节点 1b 被激活。这将触发连接到节点 3 的 Activating。
节点 3 的激活表明在该点存在一条线的横截面。
**当不存在线横截面时
0,1,1(节点 1a 未激活;节点 2a 已激活;节点 3a 已激活)
在此数据集示例中,节点 2a 和 3a 被激活。节点 2a 将触发连接到节点 1b 的激活和连接到节点 1a 的抑制连接。节点 3a 将触发连接到节点 1b 的抑制和连接到节点 1a 的激活连接。
节点 1b 或 2b 都不会被激活,因为 Activating 和 Suppressing 连接将相互平衡(假设连接的强度相等)。
节点 3 将不会被激活,表明在该位置没有线段。
这是一个例子,说明在这个问题中一个正常工作的神经网络的一小部分会是什么样子。
在自然界中,有数以百万计的神经元在许多层中致力于解决这样的问题。将有激活和抑制连接,它们最初是在相邻层的神经元之间随机排列的。
要训练神经网络,您将根据数据输入激活第 1 层。如果末端节点(简化示例中的第 3 层)被激活并且输入是螺旋形,那么您将增加激活神经元之间所有激活连接的强度。如果末端节点(简化示例中的第 3 层)被激活并且输入是螺旋形的,那么您还将增加激活较早层且连接到的神经元被抑制的神经元之间的所有抑制连接的强度。
经过足够的训练,这个想法是你的神经网络中的连接值会自然地演变成一个螺旋。
回答您的具体后续问题:“所以没有办法使用所有数据集进行实时训练?”
是的,您可以实时训练数据集。我理解你最初的问题是什么是训练一个非常大的数据集的更快方法。
如果您的程序使用所有训练会话的加权平均值来定义神经元的连接强度,那么先前训练输入的知识已经被整合到网络中。