神经网络时间复杂度和空间复杂度(参数量计算和计算量计算)

2023-05-16

 

在梳理CNN经典模型的过程中,我理解到其实经典模型演进中的很多创新点都与改善模型计算复杂度紧密相关,因此今天就让我们对卷积神经网络的复杂度分析简单总结一下下。

本文主要关注的是 针对模型本身的复杂度分析(其实并不是很复杂啦~)。如果想要进一步评估模型 在计算平台上的理论计算性能,则需要了解 Roofline Model 的相关理论,欢迎阅读本文的进阶版:  Roofline Model与深度学习模型的性能分析。

“复杂度分析”其实没有那么复杂啦~


1. 时间复杂度

即模型的运算次数,可用 \textbf{FLOPs} 衡量,也就是浮点运算次数(FLoating-point Operations)。一次浮点运算可以定义为一次乘法和一次加法(不过有的时候也会将一次浮点运算定义

 

1.1 单个卷积层的时间复杂度

\quad\quad\quad\quad\quad\quad\quad\quad\quad\textbf{Time} \sim O(M^2 \cdot K^2 \cdot C_{in} \cdot C_{out})\quad\quad\quad\quad\quad\quad\quad\quad\quad

  • M 每个卷积核输出特征图 (Feature~\color{red}{M}ap) 的边长
  • K 每个卷积核 (\color{red}{K}ernel) 的边长
  • C_{in} 每个卷积核的通道数,也即输入通道数,也即上一层的输出通道数。
  • C_{out} 本卷积层具有的卷积核个数,也即输出通道数。
  • 可见,每个卷积层的时间复杂度由输出特征图面积 M^2 、卷积核面积 K^2 、输入 C_{in} 和输出通道数 C_{out} 完全决定。
  • 其中,输出特征图尺寸本身又由输入矩阵尺寸 X 、卷积核尺寸 K 、Padding、 Stride 这四个参数所决定,表示如下:

\quad\quad\quad\quad\quad\quad\quad\quad M = (X - K + 2 * Padding) / Stride + 1 \quad\quad\quad\quad\quad\quad\quad\quad

  • 注1:为了简化表达式中的变量个数,这里统一假设输入和卷积核的形状都是正方形。
  • 注2:严格来讲每层应该还包含 1 个 Bias 参数,这里为了简洁就省略了。

 

1.2 卷积神经网络整体的时间复杂度

\quad\quad\quad\quad\quad\quad\quad\quad\quad \textbf{Time} \sim O\Bigg(\sum_{l=1}^{D} M_l^2 \cdot K_l^2 \cdot C_{l-1} \cdot C_{l}\Bigg) \quad\quad\quad\quad\quad\quad\quad\quad\quad

  • D 神经网络所具有的卷积层数,也即网络的深度
  • l 神经网络第 l 个卷积层
  • C_l 神经网络第 l 个卷积层的输出通道数 C_{out} ,也即该层的卷积核个数。
  • 对于第 l 个卷积层而言,其输入通道数 C_{in} 就是第 (l - 1) 个卷积层的输出通道数。
  • 可见,CNN整体的时间复杂度并不神秘,只是所有卷积层的时间复杂度累加而已。
  • 简而言之,层内连乘,层间累加。

 

示例:用 Numpy 手动简单实现二维卷积

假设 Stride = 1, Padding = 0, img 和 kernel 都是 np.ndarray.

def conv2d(img, kernel):
    height, width, in_channels = img.shape
    kernel_height, kernel_width, in_channels, out_channels = kernel.shape
    out_height = height - kernel_height + 1
    out_width = width - kernel_width + 1
    feature_maps = np.zeros(shape=(out_height, out_width, out_channels))
    for oc in range(out_channels):              # Iterate out_channels (# of kernels)
        for h in range(out_height):             # Iterate out_height
            for w in range(out_width):          # Iterate out_width
                for ic in range(in_channels):   # Iterate in_channels
                    patch = img[h: h + kernel_height, w: w + kernel_width, ic]
                    feature_maps[h, w, oc] += np.sum(patch * kernel[:, :, ic, oc])

    return feature_maps

2. 空间复杂度

空间复杂度(访存量),严格来讲包括两部分:总参数量 + 各层输出特征图。

  • 参数量:模型所有带参数的层的权重参数总量(即模型体积,下式第一个求和表达式)
  • 特征图:模型在实时运行过程中每层所计算出的输出特征图大小(下式第二个求和表达式)

\quad\quad\quad\quad\quad\quad\quad\quad\quad \textbf{Space} \sim O\Bigg(\sum_{l=1}^{D} K_l^2 \cdot C_{l-1} \cdot C_{l} + \sum_{l=1}^{D} M^2 \cdot C_l \Bigg) \quad\quad\quad\quad\quad\quad\quad\quad\quad

  • 总参数量只与卷积核的尺寸 K 、通道数 C 、层数 D 相关,而与输入数据的大小无关
  • 输出特征图的空间占用比较容易,就是其空间尺寸 M^2 和通道数 C 的连乘。
  • 注:实际上有些层(例如 ReLU)其实是可以通过原位运算完成的,此时就不用统计输出特征图这一项了。

3. 复杂度对模型的影响

  • 时间复杂度决定了模型的训练/预测时间。如果复杂度过高,则会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测。
  • 空间复杂度决定了模型的参数数量。由于维度诅咒的限制,模型的参数越多,训练模型所需的数据量就越大,而现实生活中的数据集通常不会太大,这会导致模型的训练更容易过拟合。
  • 当我们需要裁剪模型时,由于卷积核的空间尺寸通常已经很小(3x3),而网络的深度又与模型的表征能力紧密相关,不宜过多削减,因此模型裁剪通常最先下手的地方就是通道数。

4. Inception 系列模型是如何优化复杂度的

通过五个小例子说明模型的演进过程中是如何优化复杂度的。

 

4.1  \textbf{InceptionV1}  中的 1 \times 1 卷积降维同时优化时间复杂度和空间复杂度

(图像被压缩的惨不忍睹...)

  • InceptionV1 借鉴了 Network in Network 的思想,在一个 Inception Module 中构造了四个并行的不同尺寸的卷积/池化模块(上图左),有效的提升了网络的宽度。但是这么做也造成了网络的时间和空间复杂度的激增。对策就是添加 1 x 1 卷积(上图右红色模块)将输入通道数先降到一个较低的值,再进行真正的卷积。
  • 以 InceptionV1 论文中的 (3b) 模块为例(可以点击上图看超级精美的大图),输入尺寸为 28 \times 28 \times 256, 1 \times 1 卷积核 128 个, 3 \times 3 卷积核 192 个, 5 \times 5 卷积核 96 个,卷积核一律采用 Same Padding 确保输出不改变尺寸。
  • 在 3 \times 3 卷积分支上加入 64 个 1 \times 1 卷积前后的时间复杂度对比如下式:

\begin{aligned} \quad\quad\quad &\textbf{Before}\quad 28^2 \cdot 3^2 \cdot \color{blue}{256} \cdot \color{blue}{192} = 3.5 \times 10^8 \quad\quad\quad\\[2ex] \quad\quad\quad &\textbf{After} \quad~~ 28^2 \cdot 1^2 \cdot \color{blue}{256} \cdot \color{red}{64} + 28^2 \cdot 3^2 \cdot \color{red}{64} \cdot \color{blue}{192} = 1 \times 10^8 \quad\quad\quad \end{aligned}

  • 同理,在 5 \times 5 卷积分支上加入 64 个 1 \times 1 卷积前后的时间复杂度对比如下式:

\begin{aligned} \quad\quad\quad &\textbf{Before}\quad 28^2 \cdot 5^2 \cdot \color{blue}{256} \cdot \color{blue}{96} = 4.8 \times 10^8 \quad\quad\quad\\[2ex] \quad\quad\quad &\textbf{After} \quad~~ 28^2 \cdot 1^2 \cdot \color{blue}{256} \cdot \color{red}{64} + 28^2 \cdot 5^2 \cdot \color{red}{64} \cdot \color{blue}{96} = 1.3 \times 10^8 \quad\quad\quad \end{aligned}

  • 可见,使用 1 \times 1 卷积降维可以降低时间复杂度3倍以上。该层完整的运算量可以在论文中查到,为 300 M,即 3 \times 10^8 。
  • 另一方面,我们同样可以简单分析一下这一层参数量在使用 1 x 1 卷积前后的变化。可以看到,由于 1 x 1 卷积的添加,3 x 3 和 5 x 5 卷积核的参数量得以降低 4 倍,因此本层的参数量从 1000 K 降低到 300 K 左右。

\quad\quad\quad \textbf{Before} \begin{cases} 1^2 \cdot 256 \cdot 128 \\[1ex] 3^2 \cdot \color{red}{256} \cdot 192 \\[1ex] 5^2 \cdot \color{red}{256} \cdot 96 \end{cases} \quad\Longrightarrow\quad \textbf{After} \begin{cases} 1^2 \cdot 256 \cdot 128 \\[1ex] 1^2 \cdot 256 \cdot 64 \\[1ex] 3^2 \cdot \color{green}{64} \cdot 192 \\[1ex] 1^2 \cdot 256 \cdot 64 \\[1ex] 5^2 \cdot \color{green}{64} \cdot 96 \\[1ex] 1^2 \cdot 256 \cdot 64 \end{cases} \quad\quad\quad

 

4.2 \textbf{InceptionV1} 中使用  GAP  代替  Flatten
  • 全连接层可以视为一种特殊的卷积层,其卷积核尺寸 K 与输入矩阵尺寸 X 一模一样。每个卷积核的输出特征图是一个标量点,即 M = 1 。复杂度分析如下:

\begin{aligned} &\quad\quad\quad\quad\quad\quad\quad\quad\quad\textbf{Time} \sim O(1^2 \cdot X^2 \cdot C_{in} \cdot C_{out})\quad\quad\quad\quad\quad\quad\quad\quad\quad\\[2ex] &\quad\quad\quad\quad\quad\quad\quad\quad\quad\textbf{Space} \sim O(X^2 \cdot C_{in} \cdot C_{out})\quad\quad\quad\quad\quad\quad\quad\quad\quad \end{aligned}

  • 可见,与真正的卷积层不同,全连接层的空间复杂度与输入数据的尺寸密切相关。因此如果输入图像尺寸越大,模型的体积也就会越大,这显然是不可接受的。例如早期的VGG系列模型,其 90% 的参数都耗费在全连接层上。
  • InceptionV1 中使用的全局平均池化 GAP 改善了这个问题。由于每个卷积核输出的特征图在经过全局平均池化后都会直接精炼成一个标量点,因此全连接层的复杂度不再与输入图像尺寸有关,运算量和参数数量都得以大规模削减。复杂度分析如下:

\begin{aligned} &\quad\quad\quad\quad\quad\quad\quad\quad\quad\textbf{Time} \sim O(C_{in} \cdot C_{out})\quad\quad\quad\quad\quad\quad\quad\quad\quad\\[2ex] &\quad\quad\quad\quad\quad\quad\quad\quad\quad\textbf{Space} \sim O(C_{in} \cdot C_{out})\quad\quad\quad\quad\quad\quad\quad\quad\quad \end{aligned}

 

4.3 \textbf{InceptionV2} 中使用两个 3 \times 3 卷积级联替代 5 \times 5 卷积分支

感受野不变

  • 根据上面提到的二维卷积输入输出尺寸关系公式,可知:对于同一个输入尺寸,单个 5 \times 5 卷积的输出与两个 3 \times 3 卷积级联输出的尺寸完全一样,即感受野相同。
  • 同样根据上面提到的复杂度分析公式,可知:这种替换能够非常有效的降低时间和空间复杂度。我们可以把辛辛苦苦省出来的这些复杂度用来提升模型的深度和宽度,使得我们的模型能够在复杂度不变的前提下,具有更大的容量,爽爽的。
  • 同样以 InceptionV1 里的 (3b) 模块为例,替换前后的 5 \times 5 卷积分支复杂度如下:

\begin{aligned} \quad\quad\quad &\textbf{Before}\quad 28^2 \cdot 1^2 \cdot 256 \cdot 64 + 28^2 \cdot \color{green}{5}^2 \cdot 64 \cdot 96 = 1.3 \times 10^8 \quad\quad\quad\\[2ex] \quad\quad\quad &\textbf{After} \quad~~ 28^2 \cdot 1^2 \cdot 256 \cdot 64 + 28^2 \cdot \color{green}{3}^2 \cdot 64 \cdot 96 \cdot \color{red}{2} = 1.0 \times 10^8 \quad\quad\quad \end{aligned}

 

4.4 \textbf{InceptionV3} 中使用 N \times 1 与 1 \times N 卷积级联替代 N \times N 卷积

  • InceptionV3 中提出了卷积的 Factorization,在确保感受野不变的前提下进一步简化。
  • 复杂度的改善同理可得,不再赘述。

 

4.5 \textbf{Xception} 中使用 \textbf{Depth-wise Separable Convolution}

  • 我们之前讨论的都是标准卷积运算,每个卷积核都对输入的所有通道进行卷积。
  • Xception 模型挑战了这个思维定势,它让每个卷积核只负责输入的某一个通道,这就是所谓的 Depth-wise Separable Convolution。
  • 从输入通道的视角看,标准卷积中每个输入通道都会被所有卷积核蹂躏一遍,而 Xception 中每个输入通道只会被对应的一个卷积核扫描,降低了模型的冗余度。
  • 标准卷积与可分离卷积的时间复杂度对比:可以看到本质上是把连乘转化成为相加。

\begin{aligned} \textbf{Standard Convolution} \quad {Time} &\sim O\Big(M^2 \cdot K^2 \cdot C_{in} \cdot C_{out}\Big)\\[3ex] \textbf{Depth-wise Separable Convolution} \quad {Time} &\sim O\Big(M^2 \cdot K^2 \cdot C_{in} + M^2 \cdot C_{in} \cdot C_{out}\Big) \end{aligned}


5. 总结

通过上面的推导和经典模型的案例分析,我们可以清楚的看到其实很多创新点都是围绕模型复杂度的优化展开的,其基本逻辑就是乘变加。模型的优化换来了更少的运算次数和更少的参数数量,一方面促使我们能够构建更轻更快的模型(例如MobileNet),一方面促使我们能够构建更深更宽的网络(例如Xception),提升模型的容量,打败各种大怪兽,欧耶

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络时间复杂度和空间复杂度(参数量计算和计算量计算) 的相关文章

  • 使用org-mode生成晨检报告

    原文地址 https lujun9972 github io blog 2020 04 10 使用org mode生成晨检报告 index html 我们设置了每天8点多自动进行调用一次晨检脚本 xff0c 该脚本会将检查的一些数据存入本地
  • 使用Pi-hole屏蔽广告

    原文地址 https www lujun9972 win blog 2020 12 05 使用pi hole屏蔽广告 index html 目录 获取Pi的对外IP地址安装Pi hole配置DNS配置拦截域名 获取Pi的对外IP地址 我们一
  • 笑话理解之Mature

    原文地址 https www lujun9972 win blog 2020 12 09 笑话理解之mature index html 目录 The difference between government bonds and men T
  • 笑话理解之Hearing

    原文地址 https www lujun9972 win blog 2020 12 09 笑话理解之hearing index html 目录 The Hearing Problem The Hearing Problem In a chu
  • Emacs 作为 MPD 客户端

    原文地址 https www lujun9972 win blog 2022 06 26 emacs 作为 mpd 客户端 index html 今天才知道 xff0c Emacs居然内置了一个 mpc el 可以将 Emacs 转换为 M
  • 编译SONiC交换机镜像(转,参考2)

    sonic buildimage 编译SONiC交换机镜像 描述 以下是关于如何为网络交换机构建 ONIE 兼容网络操作系统 xff08 NOS xff09 安装程序镜像的说明 xff0c 以及如何构建在NOS内运行的Docker镜像 请注
  • Emacs 作为 MPD 客户端

    原文地址 https www lujun9972 win blog 2022 06 26 emacs 作为 mpd 客户端 index html 今天才知道 xff0c Emacs居然内置了一个 mpc el 可以将 Emacs 转换为 M
  • 使用 calc 计算保险实际收益率

    原文地址 https www lujun9972 win blog 2022 08 10 使用 calc 计算保险实际收益率 index html 今天某银行的客户经理来推销一个 增额终身寿险 xff0c 号称是能锁定3 5 的收益率 具体
  • Emacs使用Deft管理笔记

    1 Deft介绍 Deft是一款写作和管理纯文本格式笔记的工具 通过它可以快速的查到或新建笔记 Deft的下载地址是Deft 也可以通过浏览或者拷贝git仓库 xff1a git clone git jblevins org git def
  • linux挂载samba文件系统的方法

    1 手工挂载 有两个命令可以用来手工挂载samba文件系统 xff0c 一个是mount xff0c 一个是smbmount 1 1 使用mount命令挂载 mount就是用于挂载文件系统的 xff0c SMB做为网络文件系统的一种 xff
  • DB2里面如何进行快速分页?就像mysql的limit之类的

    从百度知道里看到的 xff0c 记录下来以防忘记了 只查询前10行 fetch first 10 rows only SELECT SALE DATE SUM SALE MONEY AS SUM MONEY FROM SALE REPORT
  • linux时间与Windows时间不一致的解决

    转载至http goodluck1982 blog sohu com 138950694 html 一 首先要弄清几个概念 xff1a 1 系统时间 与 硬件时间 系统时间 一般说来就是我们执行 date命令看到的时间 xff0c linu
  • java list中删除元素用remove()报错的fail-fast机制原理以及解决方案

    java list中删除元素用remove 报错的fail fast机制原理以及解决方案 现在有一个list 有6个元素 xff0c 值分别是1 5 5 8 5 10 xff0c 现需要删除值为5的元素 第一种 import java ut
  • PDF 缩略图无法正常显示 解决办法

    先交代一下配置 xff1a win10 43 福晰阅读器 43 Adobe Acrobat DC 有时候PDF无法显示缩略图 xff0c 像下面这样子 提前设置好两个点 xff1a 1 从不显示缩略图的复选框的勾 xff0c 取消 xff0
  • xmanager7开启Xstart 连接远程ubuntu虚拟机

    在想要建立连接的ubuntu虚拟机上安装xterm xff0c 此处我是用的是ubuntu20 04 sudo apt install xterm span class token operator span y 然后打开xmanager7
  • C#窗体应用程序常用控件介绍

    下面图片列出了我目前常用的一些控件 xff1a 1 窗体Form 新建一个C 窗体应用程序 xff0c 默认都会有一个窗体控件 xff0c 窗体就是我们应用程序最大的那个窗口了 窗体常用的属性有 xff1a xff08 1 xff09 St
  • docker load 报 Error processing tar file unexpected EOF 解决

    43 43 echo 201904 0 dirty 20191029 021252 43 43 sed 39 s g 39 43 sudo LANG 61 C chroot fsroot docker tag docker database
  • 论文翻译-Defending Against Universal Attacks Through Selective Feature Regeneration

    CVPR2020 通过选择性特征再生防御通用攻击 有一段时间自己看的论文都没有把相应的翻译或者笔记整理成文档的形式了 xff0c 虽然在PDF上会有一些标注 xff0c 但是觉得还是成稿的形式会方便很长一段时间之后回过头继续看及时回顾起来
  • 2020年3月24日360内推笔试

    考试时长2个半小时 xff0c 笔试题分为三个部分 xff1a 1 20道逻辑选择题 xff08 包括图形找规律 数字找规律 小学奥数 xff09 2 40道基础选择题 xff08 包括计算机网络 C 43 43 补全代码 查看输入输出 p
  • 【CVPR2020】CNN-generated images are surprisingly easy to spot... for now(假图检测/CNN合成图像的检测/图像取证)

    CVPR2020 ORAL 这篇论文的思路很简单 xff0c 就是涉及到的数据收集和用到的GAN太多了 xff0c 一般人可能都没精力去搞 简要概括 xff0c 实验量大 xff0c 效果好 xff0c 抓人眼球哈哈 这篇论文涉及到的GAN

随机推荐

  • Classication of Time-Series Images Using Deep Convolutional Neural Networks[用深度卷积神经网络对时序图分类]

    今天要分享的论文是ICMV2017的一篇非常巧妙的论文 作者是 论文下载链接 xff1a https arxiv org abs 1710 00886 关于论文的源码下载链接 xff1a https sites google com sit
  • 吴恩达机器学习+deeplearning课程笔记----干货链接分享

    分享两个GitHub链接 xff0c 今天看到的 xff0c 超赞超赞不能更赞了 xff0c 答应我一定要去看好吗 不论是笔记还是github中分享的其它资源 xff0c 课程视频链接 xff0c PPT下载 xff0c 作业布置等都超棒
  • 英文写作经典指导书--学术写作必备

    以下书籍文章已整理PDF版上传至我的CSDN下载资源中 xff0c 链接 资源审核不过 尴尬 xff0c 要的朋友在博客下面留言好啦 xff0c 我看到后会发送到你邮箱哒 2018 7 23 我把压缩包上传到了百度网盘里 xff0c 需要的
  • 图像处理和机器学习有什么关系?

    一篇很不错的文章 xff0c 分享给博客的朋友们 作者 xff1a 许铁 巡洋舰科技 链接 xff1a https www zhihu com question 21665775 answer 281946017 来源 xff1a 知乎 著
  • 【CVPR 2018】Learning Rich Features for Image Manipulation Detection(图像篡改检测)

    今天来给大家分享一篇CVPR2018的论文 xff0c 检测图像的篡改区域 xff0c 用更快的R CNN网络定位图像被篡改的部分 xff0c 练就PS检测的火眼金睛 让PS痕迹无处可逃 这就将图像鉴伪 xff0c 图像取证这方面与深度学习
  • 国内免费汉语语料库-NLP

    自转载https www sohu com a 196504864 236505 xff08 一 xff09 国家语委 1国家语委现代汉语语料库http www cncorpus org 现代汉语通用平衡语料库现在重新开放网络查询了 重开后
  • 【模糊数学】模糊逻辑,隶属度,模糊逻辑应用,模糊推理过程

    update 下一篇博客我将会讲如何用这篇博客的模糊推理过程构建一个图像边缘检测的模糊推理系统 链接 xff1a https blog csdn net luolan9611 article details 94296622 这是我的一项大
  • FRR BGP 协议分析 5 -- 路由更新(2)

    处理NLRI 获取NLRI的报文长度 xff0c 填入nlris NLRI UPDATE xff0c 到现在为止nlris里面的4种类型 如果有的话 xff0c 已经全部填写到nlris数组结构体里面 然后我们遍历这个数组 xff0c 处理
  • 从输入 URL 到页面加载完成中间都经历了什么

    摘要 目录 1 chrome浏览器资源加载时序分析2 w3c提供的接口performance timing分析3 一个完整的URL 解析过程细分介绍3 1 缓存相关3 1 1 URL解析 3 2 网络相关3 2 1 DNS解析3 2 2 建
  • ALC5621声卡调试记录

    转载请注明出处 xff1a https blog csdn net luomin5417 article details 80731790 平台 imx6q 内核版本 linux 3 14 1 硬件连接 图 1 1 硬件连接 2 设备树修改
  • Pytorch转Caffe最简单方法

    由于需要移植模型到比特大陆 xff0c 华为昇腾这些平台 他们基本都支持caffe的模型 xff0c 对其他模型支持不太好 用其他方法pytorch转caffe不然就是绕道太多 xff0c 不然就是很多坑 这里记录一个最简单的方法 xff1
  • No module named ‘index‘ after install pyflann

    如题 xff0c 墙内没有 I have some problems installing pyflann in python 3 7 3 after execute pip install pyflann The installation
  • 多维 opencv Mat访问

    你看完这篇文章之后 xff0c 将学会以下知识 xff1a 二维 三维 四维等任意维度的Mat的常用建立方法 xff1b 任意维度Mat中值的索引 xff1b 以及一些Mat常用的操作 下面是对各维度矩阵的介绍 xff1a 注意 xff1a
  • H264/H265码流的编码码率设置

    一 什么是视频码率 xff1f 视频码率是视频数据 xff08 视频色彩量 亮度量 像素量 xff09 每秒输出的位数 一般用的单位是kbps 二 设置视频码率的必要性 在视频会议应用中 xff0c 视频质量和网络带宽占用是矛盾的 xff0
  • 检测图像失焦、偏色、亮度异常

    要求通过算法检测监控设备是否存在失焦 偏色 亮度异常等问题 问题本身不难 xff0c 在网上查看了一些资料 xff0c 自己也做了一些思考 xff0c 方法如下 xff1a 1 失焦检测 失焦的主要表现就是画面模糊 xff0c 衡量画面模糊
  • Jupyter 安装与使用

    最近由于项目需要 xff0c 开始学习python xff0c 然后发现一个非常有用的python交互式编辑器 xff0c 非常容易上手而且非常有用和实在 xff0c 本博文是对学习jupyter notebook的一个汇总和记录 xff0
  • C语言 print()函数 规则,格式 意思

    C语言 print 函数 规则 xff0c 格式 意思 C语言格式字符print 函数 printf后面的参数包括 格式控制字符串 和输出变量的列表 格式控制字符串 由格式控制字符和普通字符 其中前者以 开始加某一个特殊字符 比如 d为输出
  • tensorflow C++ 环境搭建及实战

    摘要 xff1a 最近在研究如何使用tensorflow c 43 43 API调用tensorflow python环境下训练得到的网络模型文件 参考了很多博客 xff0c 文档 xff0c 一路上踩了很多坑 xff0c 现将自己的方法步
  • 关于Linux进程优先级数字混乱的彻底澄清

    Linux进程的调度优先级数字会在好几个地方出现 xff1a 内核 xff0c 用户 xff0c top命令 他们各自都有自己的表示法 我们用一个实际的例子来说明 xff0c 下面在Linux写一个最简单的程序 xff1a 编译它运行 xf
  • 神经网络时间复杂度和空间复杂度(参数量计算和计算量计算)

    在梳理CNN经典模型的过程中 xff0c 我理解到其实经典模型演进中的很多创新点都与改善模型计算复杂度紧密相关 xff0c 因此今天就让我们对卷积神经网络的复杂度分析简单总结一下下 本文主要关注的是 针对模型本身的复杂度分析 xff08 其