GT

Pytorch_LSTM与GRU

半腔热情 提交于 2020-03-23 17:55:30
3 月,跳不动了?>>> RNN循环网络在序列问题处理中得到了广泛的应用。但使用标准版本的RNN模型时,常遇到梯度消失gradient vanishing和梯度爆炸gradient explosion问题。 RNN的缺点 RNN的梯度消失和梯度爆炸不同于其它网络,全连接网络和卷积网络每一层有不同参数,而RNN 的每个处理单元Cell(处理单个序列元素的操作称为处理单元Cell)共用同一组权重矩阵W。在上一篇介绍RNN网络算法时可以看到,处理单元之间是全连接关系,序列向前传播的过程中将不断乘以权重矩阵W,从而构成了连乘Wn,当W<1时,如果序列很长,则结果趋近0;当w>1时,经过多次迭代,数值将迅速增长。反向传播也有同样问题。 梯度爆炸问题一般通过“梯度裁剪”方法改善,而梯度消失则使得序列前面的数据无法起到应有的作用,造成“长距离依赖”(Long-Term Dependencies)问题,也就是说RNN只能处理短距离的依赖关系。 这类似于卷积神经网络在处理图像问题时加深网络层数,无法改进效果。尽管理论上可以通过调参改进,但难度很大,最后图像处理通过修改网络结构使用残差网络解决了这一问题。同样,RNN也改进了结构,使用LSTM和GRU网络。作为RNN的变种,它们使用率更高。 LSTM长短时记忆网络 LSTM是Long Short Term Memory Networks的缩写

使用Github Packages功能上传nuget包到Github

坚强是说给别人听的谎言 提交于 2020-03-23 17:50:06
3 月,跳不动了?>>> 前几天微软收购npm的新闻对于软粉来收很是振奋。微软收购npm很可能是为了加强Github Packages。目前Github,Typescript,VSCode,npm这些开源社区的重磅工具全部都在微软旗下,显示出了微软对开源的态度,微软已经不是以前那个封闭的微软。Github推出Github Packages功能有一段时间了,一直没使用过,今天有空打算折腾一下,体验一下。 什么是Github Packages Github Packages是一个包承载服务,它完全跟Github集成。Github Packages使你的源码和包在同一个地方进行统一的管理,使你可以集中的在Github上开发跟发布。你可以发布公共包(public packages)跟所有人分享,也可以发布私有包(private packages)提供给个人或者组织使用。以上是对官方文档的简单翻译。说简单点就是以前你代码是在Github,但是包可能是在npm,maven或者nuget上,现在你在Github上传代码后还可以直接把包也上传到Github,方便统一管理,发布。 在Github Packages上发布包 下面让我们开始尝试使用Github Packages发布一个包吧。 在Github上新建一个仓库HiGithubPackage 新建一个公共的仓库命名HiGithubPackage

异步编程二三事 | Promise/async/Generator实现原理解析 | 9k字

耗尽温柔 提交于 2020-03-23 17:45:27
3 月,跳不动了?>>> 笔者刚接触 async/await 时,就被其暂停执行的特性吸引了,心想在没有原生API支持的情况下,await居然能挂起当前方法,实现暂停执行,我感到十分好奇。好奇心驱使我一层一层剥开有关JS异步编程的一切。阅读完本文,读者应该能够了解: Promise 的实现原理 async/await 的实现原理 Generator 的实现原理 Promise实现 在成文过程中,笔者查阅了很多讲解Promise实现的文章,但感觉大多文章都很难称得上条理清晰,有的上来就放大段Promise规范翻译,有的在Promise基础使用上浪费篇幅,又或者把一个简单的东西长篇大论,过度讲解,我推荐头铁的同学直接拉到本章小结看最终实现,结合着注释直接啃代码也能理解十之八九 回归正题,文章开头我们先点一下Promise为我们解决了什么问题:在传统的异步编程中,如果异步之间存在依赖关系,我们就需要通过层层嵌套回调来满足这种依赖,如果嵌套层数过多,可读性和可维护性都变得很差,产生所谓“回调地狱”,而Promise将回调嵌套改为链式调用,增加可读性和可维护性。下面我们就来一步步实现一个Promise: 1. 观察者模式 我们先来看一个最简单的Promise使用: const p1 = new Promise ( ( resolve, reject ) => { setTimeout( ()

Linux-包教包会系列之-shell

若如初见. 提交于 2020-03-22 12:37:19
3 月,跳不动了?>>> 前言 还记得当年被 bat 支配的恐惧。比起 shell 脚本写 bat 脚本真的很费劲。 既然你能搞明白 java js 等这些高级语言,弄明白 shell 也是很简单的。学会简单的语法,再看看 tomcat 和 nacos 等你熟悉的应用中的脚本,学学别人的技巧,差不多就入门了,对于开发来说,足够用了。 主要内容: 常用语法 运算符 特殊变量 for,while,case,select 等 在线运行 shell ,为了效率还是自己整个虚拟机吧。 基本语法 解析器 编写脚本的时候,可以使用 vs code ,安装相应的插件 shell-format ,可以进行语法提示和格式化。 写脚本的时候一定要定义脚本的解析器,不然会出现怪问题。最好给系统内部的解析器一样。 我的系统使用的 bash 解析,我写的定义了 #!/bin/sh 解析脚本。 我调用 openssl 算法来计算路径的 md5 怎么都不正确。最后发现是解析器定义的不一样。 #!/bin/sh #!/bin/bash sudo cat /etc/shells 可以查看系统的解析器。 运行 echo ${SHELL} 可以查看系统默认解析器。 我的系统是 Centos 默认 bash 解析。 # 打印出来 /bin/bash echo ${SHELL} 注释 使用 # 来注释一行内容。 echo

「异」曲同工 —— Generator

孤街醉人 提交于 2020-03-21 04:10:26
3 月,跳不动了?>>> 介绍 大家都知道,JS是一门单线程语言,所谓"单线程"就是一次只能完成一件任务。若是多个任务,就要排队执行,前面一个任务完成,后面一个任务再去执行。如果加入某个任务耗时过长,那么后面的任务就要一直等待下去,这样就会拖慢了整个程序,例如:一段死循环代码,就会使得进程卡在这。这就是同步的缺点。而解决这类问题就需要另一种任务处理方式: "异步",这种模式可以参考 ajax 、setTimeout 这类方法,调用方法后不会等到它执行完成,而是直接执行后续代码。 ajax 方法执行完成后通过状态通知主线程,或者通过回调处理 ajax 的执行结果。 背景 现在前端与后台通信,一般都是采用的异步请求的方式,这样接口互不干扰,页面各部分渲染自己的数据,就好比我们定时蒸米饭,蒸饭过程中去炒菜了,焖饭在进行,时间到了后,我们收到通知饭闷好了。目前前端主要使用 ES6 的 promise , ES7 中的 async await 去实现异步方法。 对于异步编程的核心思想,我们先了解下他的运行机制: 程序中所有同步任务都会在主线程上执行,形成一个执行栈。 在主线程之外存在一个"任务队列"。当我们的异步任务有了结果,他就会往"任务队列"中放一个事件。 当"执行栈"中的所有同步任务执行完成后,他会自动去读取"任务队列"中的事件,里面的这些事件都是等待状态的。取出对应的异步事件

Apache Tomcat 远程文件包含漏洞深入分析

只愿长相守 提交于 2020-03-21 03:45:56
3 月,跳不动了?>>> 作者:天融信阿尔法实验室 原文链接: https://mp.weixin.qq.com/s/hH0dpRWml0Rt7FxFOsWcMg 文章内容简介 本篇文章针对Apache Tomcat Ajp(CVE-2020-1938)漏洞的文件包含和RCE的利用方式以及原理进行的深入的分析,同时包括漏洞复现和分析环境搭建的详细步骤,大家可以根据文中所写,自己搭建环境,然后通过在代码中下断点来自己进行调试,从而更好地理解漏洞的原理。 漏洞简介 2020年02月20日,于CNVD公开的漏洞公告中发现Apache Tomcat文件包含漏洞(CVE-2020-1938)。 Apache Tomcat为Apache开源组织开发的用于处理HTTP服务的项目。Apache Tomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapps目录下的任意文件。 本次漏洞是一个单独的文件包含漏洞,该漏洞依赖于Tomcat的AJP(定向包协议)协议。AJP协议自身存在一定的缺陷,导致存在可控参数,通过可控参数可以导致文件包含漏洞。AJP协议使用率约为7.8%,鉴于Tomcat作为中间件被大范围部署在服务器上,本次漏洞危害较大。 AJP13协议介绍 我们对Tomcat的普遍认识主要有两大功能,一是充当web服务器

Vue源码探秘(一)

…衆ロ難τιáo~ 提交于 2020-03-21 03:37:20
3 月,跳不动了?>>> 引言 Vue 作为当前前端开发中比较重要的框架,在企业级开发中应用十分广泛。目前也是我的主要技术栈之一。在接下来的系列文章中,我将带大家一起探秘 Vue.js 底层源码。 本篇文章是 Vue源码探秘 的第一篇。在这一篇中,我主要是带大家做一些准备工作,介绍一下 flow 、 源码目录 和 源码构建流程 。 认识flow flow 是 facebook 出品的 JavaScript 静态类型检查工具。 Vue.js 的源码利用了 flow 来做静态类型检查,所以了解 flow 有助于我们阅读源码。 为什么用 flow JavaScript 是动态类型语言,它的灵活性有目共睹,但是过于灵活的副作用就是很容易就写出非常隐蔽的隐患代码,在编译期甚至运行时看上去都不会报错,但是可能会发生各种各样奇怪的和难以解决的 bug。 项目越复杂就越需要通过工具的手段来保证项目的维护性和增强代码的可读性。 Vue.js 在做 2.0 重构的时候,在 ES2015 的基础上,除了 ESLint 保证代码风格之外,也引入了 flow 做静态类型检查。 flow 在 Vue.js 源码中的应用 flow 常用的两种类型检查方式是: 类型推断 :通过变量的使用上下文来推断出变量类型,然后根据这些推断来检查类型。 类型注释 :事先注释好我们期待的类型,flow 会基于这些注释来判断。 在

伊朗最强仿人机器人:踢球、写字、对话啥都会

拥有回忆 提交于 2020-03-21 03:33:54
3 月,跳不动了?>>> 近日,伊朗机器人专家研发出了一种人形机器人Surena IV,能抓住水瓶还会写字,号称史上最先进的仿人机器人。Surena IV高1.7米重68公斤,是在人形机器人Surena的基础上迭代的第四代产品,新增了模仿功能,四肢运动也变得更加灵活。 在总体设计上Surena IV十分类似本田的Asimo机器人,它的全身共有43个自由度,能用手操纵各种物体,甚至能操作电动工具。 一、会操作电动工具,崎岖路面也能行走自如 德黑兰大学先进系统和技术中心(CAST)的50多名研究人员组成了专门的研究小组,在机械工程学教授Aghil Yousefi-Koma的带领下,花费了四年时间才将Surena IV研制出来。 <iframe src="https://v.qq.com/txp/iframe/player.html?vid=h3066mj2nnr" width="300" height="150" frameborder="0" allowfullscreen="allowfullscreen"> Aghil Yousefi-Koma称,改善机器人与环境的互动是他们做Surena IV项目的主要目标之一。他说:“Surena IV现在可以精确的跟踪物体,而且运动的灵活性很高,它不仅能拿起水瓶,甚至可以操纵各种物体,包括电动工具。” 研究人员表示,Surena

图论——迪杰斯特拉算法和最小生成树

时光总嘲笑我的痴心妄想 提交于 2020-03-21 03:26:03
3 月,跳不动了?>>> 前言 复习一下迪杰斯特拉算法,由于最小生成树的Prim算法与迪杰斯特拉算法极其类似,再顺便复习下最小生成树,顺便找两道水题验证代码正确性。 迪杰斯特拉算法 目的 该算法用于单源最短路,求一个图中,从起点S,到终点E的最短路径 思路 算法基于贪心思想,简单来讲就是两步: 找出起点距离其他点的最短距离中的最小的那个 用最小的来更新其他点的最短距离,更新完后舍弃 依我所见,迪杰斯特拉类似于排序,假设从起点到其他点的路径为边。 选出最短的边,通过最短的边来更新其他的边。 再通过第二短的边,更新其他的边。 整个过程就是从小到大依次找出从起点到其他点的最短边 题目 牛客网: https://ac.nowcoder.com/acm/problem/17511 普通方法 先遍历顶点,再遍历该顶点到其他顶点的边,时间复杂度: \(O(n^2)\) 。 #include <bits/stdc++.h> #define ll long long #define MAX 1005 using namespace std; int mp[MAX][MAX],ans[MAX],n,m,s,t; bool used[MAX]; void init(){ scanf("%d%d%d%d",&n,&m,&s,&t); memset(mp,0x3f,sizeof(mp)); memset

总结vue知识体系之高级应用篇

对着背影说爱祢 提交于 2020-03-21 03:24:56
3 月,跳不动了?>>> vue 作为目前前端三大框架之一,对于前端开发者可以说是必备技能。那么怎么系统地学习和掌握 vue 呢?为此,我做了简单的知识体系体系总结,不足之处请各位大佬多多包涵和指正,如果喜欢的可以点个小赞!本文主要讲述一些vue开发中的几个高级应用,希望能对大家有所帮助。 相关推荐 总结vue 知识体系之基础入门篇 总结vue知识体系之实用技巧 总结几个vue-router的使用技巧 搭建一个vue-cli的移动端H5开发模板 Vue.use 我们使用的第三方 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。 install 方法调用时,会将 Vue 作为参数传入。该方法需要在调用 new Vue() 之前被调用。 我们在使用插件或者第三方组件库的时候用到 Vue.use 这个方法,比如 import iView from 'iview' Vue.use(iView) 复制代码 那么 Vue.use 到底做了些什么事情呢?我们先来看一下源码 import { toArray } from '../util/index' export function initUse ( Vue: GlobalAPI ) { Vue.use = function ( plugin: Function |