Skip to main content

· 5 min read
Gavin Gong

论文作者:Yongming Rao, Wenliang Zhao, Zheng Zhu Jiwen Lu, Jie Zhou。论文原文点此URL

本文提出概念简洁、计算性能优异的 Global Filter Network (GFNet),该模型主要结构框架基于 Vision Transformer ,在频域中学习空间长距离(long-term spatial dependencies)关系,其具有较小的对数线性复杂性。

image-20220408150918210

图:Global Filter Network 的整体结构

其主要创新是使用 Global Filter Layer 替换了 Vision Transformer 中的 self-attention 层中的每一个子层。该模型取得了可喜的高精度,同时仅具有 CNN 的复杂度。

· 2 min read
Gavin Gong

疼逊云服务器打折忍不住买了五年,刚装上 proxychains 写好配置文件之后第一次用就出现 ERROR: ld.so: object 'libproxychains.so.3' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored. Opening in existing browser session. 异常。看了一下 libproxychains.so.3 这个文件是在的:

in:

whereis libproxychains.so.3

out:

libproxychains.so: /usr/lib/x86_64-linux-gnu/libproxychains.so.3

后来发现其实是 proxychains 启动脚本文件里写的文件位置是这样的:

· 2 min read
Gavin Gong

ResNet 算得上是超经典的backbone了,其网络提出了残差结构,可有效缓解随网络层数的加深而导致的梯度消失和梯度爆炸现象。结构和设计在这里有讨论。这里主要尝试一下复现。ResNet的常见形式有:

NameTop-1 errorTop-5 error
ResNet-1830.4310.76
ResNet-3426.738.74
ResNet-5024.017.02
ResNet-10122.446.21
ResNet-15222.166.16

除了上述常见形式,也有将channel数减半的half形式,以及使用膨胀卷积的形式等。

· 6 min read
Gavin Gong

Promise 是一个对象,它代表了一个异步操作的最终完成或者失败。本质上 Promise 是一个函数返回的对象,我们可以在它上面绑定回调函数,这样我们就不需要在一开始把回调函数作为参数传入这个函数了。Promise 类存在于很多现代 JavaScript 引擎中,其主要目的是为异步/回调风格的代码带来同步风格的错误处理。

· 3 min read
Gavin Gong

在 React.Component 的子类中有个必须定义的 render() 函数。render() 方法是 class 组件中唯一必须实现的方法。当 render 被调用时,它会检查 this.props 和 this.state 的变化并返回以下类型之一:

  • React 元素。通常通过 JSX 创建。例如,<div /> 会被 React 渲染为 DOM 节点,<MyComponent /> 会被 React 渲染为自定义组件,无论是 <div /> 还是 <MyComponent /> 均为 React 元素。
  • 数组或 fragments。 使得 render 方法可以返回多个元素。
  • Portals。可以渲染子节点到不同的 DOM 子树中。
  • 字符串或数值类型。它们在 DOM 中会被渲染为文本节点
  • 布尔类型或 null。什么都不渲染。(主要用于支持返回 b && <Child /> 的模式,其中 b 为布尔类型。)

render() 函数应该为纯函数,这意味着在不修改组件 state 的情况下,每次调用时都返回相同的结果,并且它不会直接与浏览器交互。

· 5 min read
Gavin Gong

@lideming曾经向我举过几个setTimeout的有趣例子。我先前不是很了解 JavaScript 的并发模型和事件循环,这些例子对我来说都算得上是巨坑无比了。

setTimeout 和事件循环

函数 setTimeout 接受两个参数:待加入队列的消息和一个时间值(可选,默认为 0)。这个时间值代表了消息被实际加入到队列的最小延迟时间。如果队列中没有其它消息并且栈为空,在这段延迟时间过去之后,消息会被马上处理。但是,如果有其它消息,setTimeout 消息必须等待其它消息处理完。因此第二个参数仅仅表示最少延迟时间,而非确切的等待时间。

下面的例子演示了这个概念(setTimeout 并不会在计时器到期之后直接执行):

· 3 min read
Gavin Gong

简述

有时想给一个组件加一个style,结果之前写className的时候没弄好导致这个style出现在了一堆无关组件上,结果就得去疯狂refactor,或者到处加!important,或者通过什么其他肮脏的手段解决。之前光知道后缀为.module.css代替.css能防止手忙脚乱,但是一直不知道它有个专门的名字。

A CSS Module is a CSS file in which all class names and animation names are scoped locally by default.

使用 css modlues 能在javascript中像变量名那样使用css的className。

· 2 min read
Gavin Gong

字如其名,LINQ提供语言集成查询功能。不过在这之前理应预习一下C#的IEnumerable,这俩是脸贴脸的。

C#的迭代器

迭代器可用于逐步迭代集合,例如列表和数组。通过 foreach 语句或在 LINQ 查询中使用迭代器。

迭代器方法或 get 访问器可对集合执行自定义迭代。 迭代器方法使用 yield return 语句返回元素,每次返回一个。 到达 yield return 语句时,会记住当前在代码中的位置。 下次调用迭代器函数时,将从该位置重新开始执行。

可迭代的类型为public static System.Collections.IEnumerable。例如: