Torch 中的神经网络精度取决于计算能力?

数据挖掘 神经网络 准确性 朱庇特 火炬
2022-02-15 13:47:07

我是机器学习的新手,对基本概念有很好的理解。

我在 MNIST 数据集上实现了一个 3 层神经网络,输入层、隐藏层、输出层分别有 784、100、10 个神经元。我在这里没有使用任何正则化。

首先,我在 Intel i5 第 4 代四核 CPU 和 4GB 内存上训练了网络,这给了我 64% 的准确率。然后我训练了完全相同的网络,在 Intel i5 第 7 代四核 CPU 和 8gb 内存上使用完全相同的代码,准确率约为 89% 这是实现的链接

我的问题是 Torch,计算能力会影响网络的准确性吗?还是我遗漏的其他东西导致了这种巨大的变化。

我没有使用与火炬库中提供的默认值不同的权重初始化方法,因此排除了这种情况。我也没有使用任何其他可能影响网络在这种程度上改变其准确性的东西。

1个回答

可用计算能力不会直接影响神经网络的准确性。如果您的不同网络运行具有:

  • 相同的架构和元参数
  • 相同的代码(包括库代码)
  • 所有训练数据都是相同的
  • 训练的所有随机部分都使用相同的随机种子和生成器
  • 所有数据类型都具有相同的精度(例如,所有向量和矩阵都是 32 位或 64 位浮点数)

那么每次运行中神经网络训练的行为是完全确定的和可重复的。拥有更快的处理器只会让您更快地获得结果*。

您的测试之间最可能的差异是由于没有播种在训练过程中使用的随机数生成器。对您而言,这包括权重初始化、可能的训练/测试拆分以及可能在每个 epoch 中改组训练数据。由于您没有使用任何正则化,因此训练网络的准确性可能会因过度拟合而有很大差异。

为了验证这一点,您可以在每个 CPU 上训练第二次或第三次。无论您在哪台机器上运行它,我希望您会看到最终精度的很多变化。


* 这确实意味着,当您调整参数时,拥有更快的机器可以让您在实践中拥有更准确的最终网络,因为您可以通过多个训练会话尝试更多元参数的变体。