【问题标题】:Torch - Large input and output sizes into neural networkTorch - 神经网络的大输入和输出大小
【发布时间】:2016-10-21 11:41:34
【问题描述】:

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

参考:[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 个。神经网络能否处理如此大的张量,我听说我需要两倍的隐藏层单元数量。

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

最好的

【问题讨论】:

    标签: machine-learning neural-network prediction torch


    【解决方案1】:

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

    您可以使用您选择的 NN 样式来解决其中的一些问题。例如,拆分成单独的通道(例如,60 个通道,每个通道有 1000 个特征)可以显着节省内存,尽管以训练速度(更多层)和一些准确性为代价(尽管交叉可以解决很多问题) .卷积还可以节省您的整体内存,但也会以训练速度为代价。


    600K => 4 => 600K

    这一澄清解决了我的主要担忧:您在两个地方各有 600,000 * 4 个权重:1,200,004 个参数和 480 万个权重。那是 6M 的总浮点数,这不会对任何现代通用计算机的 RAM 造成压力。

    通道的想法是当您尝试在层之间建立更胖的连接时,例如 600K => 600K FC。在这种情况下,您将数据分成更小的组(通常只有 2-12 个),并创建一堆并行的全连接流。例如,您可以获取输入并制作 10 个流,每个流是 60K => 60K FC。在您的下一层,您交换组织,“分发”每组 60K,以便 1/10 进入每个下一个通道。

    这样,你只有 10 * 60K * 60K 的权重,只有以前的 10%……但现在有 3 层。尽管如此,它还是节省了 5 倍的权重所需内存,这就是组合爆炸的地方。

    【讨论】:

    • 您好 Prune,非常感谢您花时间回答!就机器学习语言而言,我还没有到那个阶段;)到目前为止,我使用的是 Torch,我的 NN 如下:顺序容器:线性(600K,4HU)-> ReLu->线性(4,600K)->软最大。学习率为 0.01,迭代次数(通过数据集)为 100。它也是一个 FC 网络(顺序)。我认为 CNN 更适合图像处理而不是一维序列数据……通过使用 600 个通道和 1000 个特征,我的数据应该如何组织?再次感谢
    • 什么是“4HU”?这看起来像你有一个只有 4 个神经元的隐藏层?
    • 是的 4 个神经元,我的意思是隐藏单元,抱歉。我现在正在尝试使用 SparseLinea
    • 感谢您的更新(抱歉没有收到通知)。我对您的解释并不完全满意(我对神经网络和特征建模不熟悉,这很糟糕)。所以基本上你建议改用并行FC网络?和你的第一个提议有什么不同吗?
    • 如果当前拓扑为您提供适当的输出,请坚持使用。我担心只有 4 个 HU 可以正确预测一组 600k 输入的添加,如果它确实有效,请坚持下去;那将是一个伟大的、有效的拓扑。我的建议有两个基本点:(1)您确实不想想要使用这种规模的 FC 层; (2) 如果您目前的拓扑不起作用,有办法解决这个量级。
    猜你喜欢
    • 2021-04-05
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2016-12-30
    • 2021-07-15
    相关资源
    最近更新 更多