machine-learning - Torch - 神经网络的大输入和输出

标签 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 个值。神经网络可以处理这么大的张量吗?我听说我需要两倍数量的隐藏层单元。

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

最佳

最佳答案

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

您可以通过您选择的 NN 风格来解决一些问题。例如,分成单独的 channel (例如,60 个 channel ,每个 channel 有 1000 个特征)可以显着节省内存,尽管代价是训练速度(更多层)以及可能的一些准确性(尽管交叉可以解决很多问题) 。卷积还可以节省整体内存,但同样以训练速度为代价。


600K => 4 => 600K

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

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

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

关于machine-learning - Torch - 神经网络的大输入和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37918762/

相关文章:

python - 我如何知道哪个预测针对哪个数据?那么,如何评估预测呢?

python - 更快的 pytorch 数据集文件

r - 使用多项式内核调整 svm 时出现奇怪的错误消息 : "WARNING: reaching max number of iterations"

python - 在预测类别概率时检查 GradientBoostingClassifier 的准确性

scala - DMLC 在 Spark-1.6.1 上的 XGBoost-4j

java - Weka 的 PCA 运行时间太长

machine-learning - 如何在CNTK中实现序列分类LSTM网络?

input - 卷积神经网络Conv1d输入形状

pytorch - 为什么大于 1 的小批量不起作用,但更大的累积梯度却起作用?

machine-learning - 模型训练后的 Keras 预测