计算给定神经网络的触发器数量?

时间:2019-04-24 13:28:33

标签: python-3.x deep-learning conv-neural-network

我有一个用Keras编写的神经网络(ALEXnet或VGG16),用于图像分类,我想计算网络的浮点运算数。数据集中图像的大小可能会有所不同。 通用代码可以用python编写,可以自动计算翻牌吗?还是有天秤座可用。

我正在使用spyderAnaconda,并且定义的网络是一个顺序模型。

谢谢。

3 个答案:

答案 0 :(得分:0)

没有这样的代码,因为FLOP的数量取决于硬件和软件的实现。您当然可以通过扩展每个参数和权重的逐层操作来得出典型数量。并为每个激活功能做出合理的实现假设。

输入尺寸将按比例影响第一层的计算。

我不确定您打算使用“ Python中的通用代码”吗?您是否打算使用Keras模型的形式作为输入?这是可能的,但是您需要编写模块,以从Keras表示中提取内核特征和连接逻辑。

您的操作量将因一个实现而异。现在,硬件体系结构直接支持并行操作和稀疏矩阵的捷径。有些具有调整浮点表示的额外功能,以提高训练速度。软件平台包括控制和数据流分析,以优化功能流。这些都会改变FLOP的计算。

答案 1 :(得分:0)

FLOP是模型执行的浮点运算。通常使用模型执行的乘法加法运算次数来计算。顾名思义,乘加运算是涉及两个或多个变量的乘法和加法的运算。例如,表达式a * b + c * d有2个触发器,而a * b + c * d + e * f + f * h有4个触发器。

现在让我们以一个简单的线性回归模型为例。假设该模型具有4个参数w1,w2,w3和w4,以及偏差b0。对输入数据进行推论,X = [x1,x2,x3,x4]得出输出= x1 * h1 + x2 * h2 + x3 * h3 + x4 * h4 + b0。该操作有4个触发器

CNN中的FLOPs测量涉及了解每一层的输入张量,滤波器和输出张量的大小。使用此信息,可为每一层计算触发器,并将其相加以获得总触发器。让我们看一下VGG16中的第一层,其输入张量大小为224x224x3,64个过滤器大小为3x3x3,输出大小为224x224x64。输出中的每个元素都是在滤波器和输入张量之间进行(3x3x3)乘加运算的结果。因此,VGG16第一层的触发器数量为(3x3x3)x(224x224x64)= 86,704,128

答案 2 :(得分:0)

许多论文使用他们自己的 flops 计数代码。 它是通过输入某些操作的张量的输入大小来制作的。 所以他们手动计算失败率

您可以在 github 中使用诸如 'flops constraint' 或 'flops counter' 之类的关键字找到它。

或者有“torchstat”工具可以计算失败和内存使用情况等。