一位中国博士把整个 CNN 给可视化后,火了!

公众号关注 “GitHubDaily”

设为 “星标”,每天带你逛 GitHub!

转自机器之心

终于等到了这个交互式学习神器,把 CNN 的工作过程画得明明白白,帮助萌新轻松入门。

什么是 CNN?Convolutional Neural Network,中文译为「卷积神经网络」。

这个常见但有些深奥的词汇,只可意会,不能言传。如果打开教材,会看到这样一些解释:

卷积层是深度神经网络在处理图像时十分常用的一种层。当一个深度神经网络以卷积层为主体时,我们也称之为卷积神经网络。

神经网络中的卷积层就是用卷积运算对原始图像或者上一层的特征进行变换的层……

说得很有道理,但如果将一张图片作为输入,这张图片究竟会在卷积神经网络中经历什么?这可真是太考验想象力了。

最近,来自佐治亚理工学院与俄勒冈州立大学的研究者们,考虑到初学者和非专业人士的学习痛点,合作开发出了一款卷积神经网络交互式可视化工具 ——CNN 解释器(CNN Explainer)。这个解释器展示了一个 10 层的神经网络,包含卷积层、激活函数、池化层等多个 CNN 初学者无论如何也绕不开的概念。

这个工具到底把 CNN 展示得有多明白?简单来说,项目作者已经给你做好了一个可以交互的界面,各种层、激活函数都铺在眼前。你只需要打开浏览器加载出这个界面,移动鼠标点来点去就可以了。

CNN Explainer 使用 TensorFlow.js 加载预训练模型进行可视化效果,交互方面则使用 Svelte 作为框架并使用 D3.js 进行可视化。最终的成品即使对于完全不懂的新手来说,也没有使用门槛。下面我们来看一下具体的效果。

卷积层

既然是卷积网络,我们就先来看一下卷积层是怎么工作的。卷积层包含学习的卷积核,可以提取出每张图像独有的特征,因此是 CNN 的基础。

当你与卷积层进行交互的时候,前面的层与卷积层之间会出现很多连线,其中的每条线都代表一个独特的卷积核。这些卷积核用于卷积运算,以生成当前卷积神经元的输出或激活图。

以交互图中的 Tiny VGG 架构为例。可以看到,它的第一个卷积层有 10 个神经元,但前一层只有 3 个神经元。聚焦于第一个卷积层顶端卷积神经元的输出,如果我们将鼠标悬停在激活图上,就可以看到这里有 3 个独特的卷积核。

图 1:如果将鼠标悬停在第一个卷积层最前面的激活图上,就可以看到此处应用了 3 个卷积核来得到此激活图。点击此激活图,可以看到每个卷积核都进行了卷积运算。

图 2:用来生成上述激活图顶端中间结果的卷积核。

激活函数

ReLU

ReLu 是 CNN 中的非常常用的一种非线性激活函数,可以加快 CNN 的训练速度。它是一种一对一的数学运算:

点击交互图中的 ReLU 神经元就能观察到这个激活函数是如何工作的:

Softmax

在卷积神经网络中,Softmax 函数通常用于分类模型输出。在这个 CNN 解释器里,点击最后一层,即可显示网络中的 Softmax 运算过程:

在 Softmax 的这部分视图中,用户可以体验不同颜色的 logit 和公式交互,从而了解在 Flatten 层之后,预测分数是如何归一化从而产生分类结果的。

池化层

不同的 CNN 架构有很多不同类型的池化层,但它们的目的都是逐渐缩小网络的空间范围,从而降低网络的参数量和整体计算量。

这个交互图里使用的池化类型是 Max-Pooling,其过程可以通过点击图中的池化神经元来观察:

Flatten 层

这一层将网络中一个三维的层转变为一个一维向量,之后将其输入到全连接层用于分类。因为用于分类的 softmax 函数需要一维向量作为输入(此处不包括 batch 维),因此需要用到 Flatten 层。

通过点击任意一个输出类别可查看该层是如何工作的。

作者简介

这个贴心的项目出自佐治亚理工和俄勒冈州立大学的研究者之手。其中,一作是该校的机器学习博士生 Zijie Wang。他的研究兴趣是机器学习的可解释性、公平性、安全性和可视化分析。

目前,该项目已经登上了 GitHub 热榜,感兴趣的同学可以点击文末链接了解详情。

项目地址:https://github.com/poloclub/cnn-explainer

网页地址:https://poloclub.github.io/cnn-explainer/

arXiv 地址:https://arxiv.org/abs/2004.15004

---

另外,由 GitHubDaily 原班人马打造的公众号:GitCube,现已正式上线!
接下来我们将会在该公众号上,为大家分享优质的计算机学习资源与开发者工具,坚持每天一篇原创文章的输出,感兴趣的小伙伴可以关注一下哈!

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值