P2P原理
关键字 stun协议\P2P\UDP打洞\NAT 常用方法 中继 使用中继服务器连接两台内网设备,受限于中继节点性能。 逆向连接 当客户端A、B之一有公网地址时可以使用该方法。 UDP打洞 最常见的方法 利用锥形NAT(下文将介绍NAT分类)会将 内网ip+端口 绑定一个 外网ip+端口 的特性实现。理论上来说,利用该特性就可以实现任意主机间的通信,但往往 …
Section
关键字 stun协议\P2P\UDP打洞\NAT 常用方法 中继 使用中继服务器连接两台内网设备,受限于中继节点性能。 逆向连接 当客户端A、B之一有公网地址时可以使用该方法。 UDP打洞 最常见的方法 利用锥形NAT(下文将介绍NAT分类)会将 内网ip+端口 绑定一个 外网ip+端口 的特性实现。理论上来说,利用该特性就可以实现任意主机间的通信,但往往 …
防止过拟合 深度学习模型实际上是在拟合一个函数 f(x1, x2, x3…),可以想象,特征x的系数越小,函数整体就越平滑,即模型对特征x越不敏感,这就是防止过拟合的基本原理。 已知损失函数f(x),求在使得w越小的条件下,f(x)的极小值,这就是约束条件下的极值问题,可以使用拉格朗日乘子法。 要使w小,即让其接近0,则可以设g(w)=|w|→0(L1正则) …
一个模型的输入可能很大,每个数都可以看作是一个特征,那么神经网络在训练时怎么知道哪些特征重要哪些不重要呢? 这就好比是我为了考试而复习,我怎么知道哪些知识点重要哪些不重要呢? 事实上也很简单,考试前我确实不知道哪些重要(forward),但考试后我一定是知道的(backward)。第一次考试前我啥都不知道,所以第一次考试时我就记录下考察的知识点,下来就专门针 …
之前一直把容器理解成虚拟机,容器内的用户是独立的,与宿主机无关的,容器内的进程也是完全和宿主机隔离的。今天才知道这基本上是错误的,这是被vmware这类虚拟机形成思维定势了。 使用vmware创建一个虚拟机就好像在现实世界中,使用计算机完全模拟出来一个虚拟世界,这个虚拟世界的环境和真实世界一模一样,只不过它是用计算机模拟的。这个虚拟世界中出现任何问题都不会对 …
linux中的/proc是一个虚拟目录,里面都是系统在运行过程中的各种状态,例如内存使用情况,网络情况,各个进程的运行情况等等。它是一个虚拟目录,只有在系统运行起来后才有而且仅存在于内存中。有点类似于MySQL的视图。 查看当前内存的使用情况: 查看网络的使用情况: 由此可知,如果想要计算当前的网络流速,则只需要在间隔1秒前后分别得到bytes列的数据,然后 …
transformer论文:https://arxiv.org/pdf/1706.03762.pdf 简述 transformer是一个encoder-decoder结构,也就是说,它需要先将所有的输入序列(例如一句话)都输入到encoder中,得到一个context向量,该向量包含了原始输入序列的全部信息并进行编码后的结果,然后再使用decoder将其解码 …
有两点不同 1. class method 会自动将当前class作为参数传入,但我觉得这并不能让它和 static method 产生差异,因为你完全可以这样写: class F(): @staticmethod def sm(cls): print(cls) @classmethod def cm(cls): print(cls) F.sm(S) # …
api 和 spi 的区别:api 就是别人写好一些函数,然后规定一个调用这些函数的声明集合,spi 简单理解就是回调函数的集合,例如在android或web等需要响应交互情况下,会有很多回调函数,例如 on_key_down() 用于监听键盘按下事件,on_mouse_move() 用于监听鼠标移动事件,这些函数都有一个特点,就是只会在特定的情况下自动触发 …
两者功能类似,甚至可以说是相同,都是用于多进程通信。两者可以认为是Hibernate和JPA的关系,即Queue可以看作是对Pipe的进一步封装 Pipe的基本形式为: pipe1, pipe2 = multiprocessing.Pipe() def task1(p1, p2): p1.send("bingo") # 进程1向pipe1发送一条数据 def …
默认的figure和axes 首先明确概念,figure可以看作整个窗口,而axes只是其中的一个chart组件,figure中除了axes外,还有标题、按钮等组件 如果直接使用 plt.plot([1,2,3]),则会自动创建一个 figure,并且自动向该figure中添加一个 axes,画图就是在该axes中画 plt.plot([1,2,3]) # …