火炬 - 大输入和输出大小到神经网络

时间:2016-06-20 09:18:16

标签: machine-learning neural-network prediction torch

我是机器学习的新手并寻求帮助。 我想训练一个网络来预测我期望的下一个值:

参考:[val1 val2 ... val 15]

如果不存在,则为val = 0,如果存在,则为1。

输入:[1 1 1 0 0 0 0 0 1 1 1 0 0 0 0]

输出:[1 1 1 0 0 0 0 0 1 1 1 0 0 1 1](最后两个值出现)

所以我的神经网络将有15个输入和15个输出

我想知道是否有更好的方法来进行这种预测。我的数据是否也需要标准化?

现在的问题是,我没有15个值,但实际上是600'000。神经网络可以处理如此大的张量,我听说我需要两倍于隐藏层单位的数量。

非常感谢你的帮助,你是机器学习专家!

最佳

1 个答案:

答案 0 :(得分:2)

这对于神经网络的概念来说不是问题:问题是您的计算配置和框架实现是否提供了所需的内存。由于您还没有描述您的拓扑结构,因此我们无法帮助您解决这个问题。你对参数和重量计数有什么看法?每个都至少是一个短浮点(4个字节)。例如,直接FC(完全连接)层将为您提供(6e5)^ 2个权重,或3.6e11 * 4个字节=> 1.44e12字节。是的,那就是为该层的重量推动了1.5TB。

您可以使用您选择的NN风格来解决其中一些问题。例如,分成不同的通道(例如,60个通道,每个1000个功能)可以节省大量内存,虽然以培训速度(更多层)为代价,也许还有一些准确性(尽管交叉可以解决很多问题) 。卷积也可以节省你的整体记忆,再次以训练速度为代价。

600K => 4 => 600K

这个澄清照顾了我的主要担忧:你在两个地方都有600,000 * 4个重量:1,200,004个参数和4.8M重量。这个6M的总浮动,不应该对任何现代通用计算机的RAM造成压力。

当您尝试在图层之间建立更丰富的连接时,如今600K => 600K FC。在这种情况下,您将数据拆分为较小的组(通常只有2-12),并创建一堆并行的完全连接的流。例如,您可以接受输入并制作10个流,每个流都是60K => 60K FC。在下一个图层中,您将交换组织,"处理"每组60K,以便1/10进入下一个频道。

这样,你只有10 * 60K * 60K的重量,只有之前的10%...但是现在有3层。不过,它可以节省5倍的重量所需的内存,这是你发生组合爆炸的地方。