浅谈深度学习:如何计算模型以及中间变量的显存占用大小

前言

亲,显存炸了,你的显卡快冒烟了!

torch.FatalError: cuda runtime error (2) : out of memory at /opt/conda/conda-bld/pytorch_1524590031827/work/aten/src/THC/generic/THCStorage.cu:58

想必这是所有炼丹师们最不想看到的错误,没有之一。

OUT OF MEMORY,显然是显存装不下你那么多的模型权重还有中间变量,然后程序奔溃了。怎么办,其实办法有很多,及时清空中间变量,优化代码,减少batch,等等等等,都能够减少显存溢出的风险。

但是这篇要说的是上面这一切优化操作的基础,如何去计算我们所使用的显存。学会如何计算出来我们设计的模型以及中间变量所占显存的大小,想必知道了这一点,我们对自己显存也就会得心应手了。

{
本文转载自:Oldpan的个人博客
浅谈深度学习:如何计算模型以及中间变量的显存占用大小(https://oldpan.me/archives/how-to-calculate-gpu-memory)
}

继续阅读“浅谈深度学习:如何计算模型以及中间变量的显存占用大小”

ASRT:一个中文语音识别系统

ASRT是一套基于深度学习实现的语音识别系统,全称为Auto Speech Recognition Tool,由AI柠檬博主开发并在GitHub上开源(GPL 3.0协议)。本项目声学模型通过采用卷积神经网络(CNN)和连接性时序分类(CTC)方法,使用大量中文语音数据集进行训练,将声音转录为中文拼音,并通过语言模型,将拼音序列转换为中文文本。算法模型在测试集上已经获得了80%的正确率。基于该模型,在Windows平台上实现了一个基于ASRT的语音识别应用软件,取得了较好应用效果。这个应用软件包含Windows 10 UWP商店应用和Windows 版.Net平台桌面应用,也一起开源在GitHub上了。

继续阅读“ASRT:一个中文语音识别系统”

深度学习:基于keras的mnist手写数字识别

在深度学习方面,Keras提供了这样一个能够非常方便地搭建神经网络的工具,而且很容易快速上手。mnist手写数字识别是神经网络入门后的一个非常容易上手做的一个程序,尤其是在使用了深度学习框架后,不论是DNN还是CNN,都很简单。这篇文章里,我将介绍一下,使用keras实现mnist手写数字识别的程序。通过这篇文章,你应该就能够学会如何通过keras搭建自己的神经网络了。

继续阅读“深度学习:基于keras的mnist手写数字识别”

深度学习:欠拟合问题的几种解决方案

我最近做深度学习在连续中文语音识别方向的应用的时候,根据一些论文和网上一些公开代码和模型结构,设计了一个神经网络的模型。但是在训练的时候,就首先遇到了很让人头疼的欠拟合问题。神经网络欠拟合的特征是,训练了很长时间,但是在训练集上,loss值仍然很大甚至与初始值没有太大区别,而且精确度也很低,几乎接近于0,在测试集上亦如此。且先不管模型结构配置的优劣,就欠拟合问题来说,需要从如下方面来着手。

继续阅读“深度学习:欠拟合问题的几种解决方案”

TensorFlow学习笔记:相关API

本文为我学习著名机器学习框架TensorFlow的过程中,对我通过一些教学资料所学到知识的笔记。本文也许看起来会跟一些教程有些相似,这实为我阅读观看实践后,对其内容进行的记录。

鉴于相关内容较多,我将在接下来对本文进行持续更新,直到本文所应当涉及的内容范围全部覆盖为止。

(20180317 最后更新)

继续阅读“TensorFlow学习笔记:相关API”

机器学习:神经网络模型

不论是线性回归还是对数几率回归,都有一个缺点,那就是,当特征太多的时候,计算量会变得非常的大。假如我们有100个特征,如果仅仅考虑多项式函数中两两组合的二次交叉项的时候,那么我们会得到组合数C2100 的数量,即4950个二次交叉项,这对于一般的统计回归来说徐要计算的特征数太多了。我们需要一种既简单又强大的模型,神经网络(Neutral Network)就是这样。神经网络是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似[参考资料1]。其实,简单来说,神经网络就是一个分层的有向图,每一层的节点称为一个神经元。

继续阅读“机器学习:神经网络模型”