为什么不使用Matlab的全部能力训练一个神经网络的时候我的电脑?

8视图(30天)
我的目标是训练一个神经网络分类对象形式的照片我的摄像头。我和Alexnet使用转移学习,我有一个标记的训练数据集有25000图片。
训练脚本非常完美,但迭代在训练的进展非常缓慢。我有并行计算工具箱安装和培训运行在GPU。但是当查看任务管理器,Matlab只使用13%的CPU和GPU的仅为2%。为什么不Matlab使用更多的资源加快训练过程?
该软件的最新版本Windows 10和我有Matlab 64位安装。

接受的答案

约翰D 'Errico
约翰D 'Errico 2019年2月28日
编辑:约翰D 'Errico 2019年2月28日
我不认为这个问题是单线程的。不客气。
你一定不要在内存中保存所有的25000张图片。相反,您可能使用和重用它们。一遍又一遍。所以,你可能应该做的事情是看你的磁盘访问速率。阅读一个图像需要相对大量的时间,但它不是真正的消耗的CPU时间。CPU花很多的时间等待数据。所以没有显示CPU繁忙。当然,这只是我预测你所报告的统计数据就证明了这一点。
你能确认这个事实吗?当然!你需要了解MATLAB提供的概要托波尔。它允许您打开分析器,然后运行您的代码。然后检查MATLAB是最花时间的地方。这是一个重要的事情对于任何代码。我的预测是,当你做这个概要文件在你的代码,它将显示大部分时间消耗在一行代码——也许一个简单imread电话。
现在,为什么我认识到问题不是单线程和多线程?
例如,我的电脑有4个核心。我可以很容易地强迫MATLAB访问所有4核手术,因为我知道哪些操作MATLAB会自动多线程。同样,我可以轻松地迫使MATLAB runflat,但只有一个线程,因为,我知道有些操作是不会自动并行化。
前者的一个例子将两个非常大的矩阵的乘法。MATLAB将这样做尽可能多的核心。在后一种情况下,一个非常大的符号计算是一个很好的例子。这是一个问题,通常似乎不那么容易并行,所以不管有多大,它将只运行在一个核心。
同样,您可以看到,这种情况也发生在den的监视,可以报告你所有的内核。在第一种情况下的矩阵乘法,它将显示核心使用的400%。(好吧,我的系统风扇将热量时生成消散,做了多少工作。)但在后一种情况下的单线程的符号计算,只会看到一个核心,运行在100%。
但你看到了什么?你看到13%。你可能会看着你的磁盘访问速度。我敢打赌这是高为整个时间运行您的代码。
你能解决这个问题吗?很多事情是可以解决的通过使用更好的编码技巧。有时你需要完全改变你的算法,使更多的信息在内存中,试图避免这些重复图像加载。问题是你没有那么多的记忆。嗯,你可能。那可能是一种选择。你能买得起足够的内存来存储它们在系统内存中,而不是硬盘吗?
另一个选择是确保你使用最快的磁盘。固态硬盘很便宜的这些天,他们快。
是的,我知道,花钱在您的计算机上可能不是一个选项。但是你要知道问题是什么。的一个方法来解决它,如果我是正确的在我的评估,是让那些图像读取要快得多。或者,你也可以找到一种方式写更好,更高效的代码。无论如何,这将开始与MATLAB的概要文件实用程序。
当一切失败,你可以认识到大问题花大时间。可以减少所需的时间,解决小问题。或者你可以改变你使用的算法计算效率更高。
1评论
Christoph Mußig
Christoph Mußig 2019年3月2日
非常感谢你花时间详细讨论我的问题。我也假设局限性在于加载图片,需要一次又一次地导入到Matlab的培训。但当我查看任务管理器,硬盘的利用率也很低。我有一个三星960 evo 250 gb,这应该足够快。
我加快了过程通过减少进口规模和特征提取,它并没有充分利用计算机的资源,现在快到足以完成培训几天。

登录置评。

下载188bet金宝搏


释放

R2018b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!