我在没有任何库的情况下用 C++ 制作了我的第一个神经网络。这是一个从 MNIST 数据集中识别数字的网络。在具有 sigmoid 函数的 784 - 784 - 10 网络中,每 60000 个样本需要 5 个 epoch,训练大约需要 2 个小时。无论如何它可能很慢,因为我在笔记本电脑上对其进行了训练,并且我使用了神经元和层的课程。
老实说,我从未使用过 TensorFlow,所以我想知道我的网络的性能与 TensorFlow 中的性能相比如何。不是太具体,只是一个粗略的近似。
我在没有任何库的情况下用 C++ 制作了我的第一个神经网络。这是一个从 MNIST 数据集中识别数字的网络。在具有 sigmoid 函数的 784 - 784 - 10 网络中,每 60000 个样本需要 5 个 epoch,训练大约需要 2 个小时。无论如何它可能很慢,因为我在笔记本电脑上对其进行了训练,并且我使用了神经元和层的课程。
老实说,我从未使用过 TensorFlow,所以我想知道我的网络的性能与 TensorFlow 中的性能相比如何。不是太具体,只是一个粗略的近似。
我想知道我的网络的性能如何与 Tensor Flow 中的性能进行比较。不具体,只是粗略的近似。
这很难用具体的术语来回答,因为基准测试非常困难并且经常是错误的。
在我看来,TensorFlow 的主要目的是让你更容易使用 GPU,并进一步允许你使用大量用 Python/JavaScript 编写的程序,这些程序仍然提供 C++ 级别的性能。
TensorFlow 与自写神经网络相比有多快?
这是在回答使用 TensorFlow/PyTorch 与自定义解决方案的一般问题,而不是您将获得多少加速的具体问题。
麻省理工学院有一篇相对较新的论文,Halide 中用于图像处理和深度学习的差分编程,试图讨论性能、灵活性和编写 3 种不同语言的解决方案所花费的时间。
具体来说,他们比较了他们的语言 Halide、PyTorch 和 CUDA 的解决方案。
考虑以下示例。最近基于神经网络的图像处理近似算法是围绕基于双边网格的新“双边切片”层构建的 [Chen et al. 2007;加尔比等人。2017]。在它发布时,PyTorch 和 TensorFlow 都无法实际表达这种计算。因此,作者不得不定义一个全新的算子,用大约 100 行 CUDA 的前向传播代码和 200 多行代码用于手动导出的梯度(图 2,右)。这是一项相当大的编程任务,需要大量时间和专业知识。虽然在提交本文前的最后六个月中添加了新操作,但现在可以在 42 行 PyTorch 中实现此操作,这在小输入上产生的性能不到 1/3,并且在实际大小的图像上内存不足(图 2,中间)。有效地为自定义节点推导和计算梯度的挑战仍然是深度学习的一个严重障碍。
因此,一般而言,使用 TensorFlow/PyTorch 可能会比自定义 C++ 实现获得更快的性能,但对于特定情况,如果您具备 C++ 之上的 CUDA 知识,那么您将能够编写性能更高的程序。
很多。有所有这些我们可能没有想到的优化,比如组合层、函数等。不过,我是一个 pytorch 人,它很干净,不会像 tensorflow 那样妨碍你。