Delta

地图开发中WebGL着色器32位浮点数精度损失问题

前提是你 提交于 2020-08-05 10:45:12
以下内容转载自木的树的文章《WebGL着色器32位浮点数精度损失问题》 作者:木的树 链接: https://www.cnblogs.com/dojo-lzz/p/11250327.html 来源:博客园 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 前言 Javascript API GL 是基于WebGL技术打造的3D版地图API,3D化的视野更为自由,交互更加流畅。 提供丰富的功能接口,包括点、线、面绘制,自定义图层、个性化样式及绘图、测距工具等,使开发者更加容易的实现产品构思。 充分发挥GPU的并行计算能力,同时结合WebWorker多线程技术,大幅度提升了大数据量的渲染性能。最高支持百万级点、线、面绘制,同时可以保持高帧率运行。 同步推出基于Javascript API GL的 位置数据可视化API库 ,欢迎体验。 问题 WebGL浮点数精度最大的问题是就是因为js是64位精度的,js往着色器里面穿的时候只能是32位浮点数,有效数是8位,精度丢失比较严重。 分析 在基础底图中,所有的要素拿到的都是瓦片里面的相对坐标,坐标范围在0-256之间。在每次渲染时都会重新实时计算瓦片相对中心点的一个偏移来计算瓦片自己的矩阵,这种情况下精度损失比较小,而且每个zoom级别都会加载新的瓦片,不会出现精度损失过大问题。 但是对于一些覆盖物,比如marker

深度神经网络(DNN)的正则化

好久不见. 提交于 2020-08-05 07:52:17
    和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结。 1. DNN的L1&L2正则化     想到正则化,我们首先想到的就是L1正则化和L2正则化。L1正则化和L2正则化原理类似,这里重点讲述DNN的L2正则化。     而DNN的L2正则化通常的做法是只针对与线性系数矩阵$W$,而不针对偏倚系数$b$。利用我们之前的机器学习的知识,我们很容易可以写出DNN的L2正则化的损失函数。     假如我们的每个样本的损失函数是均方差损失函数,则所有的m个样本的损失函数为:$$J(W,b) = \frac{1}{2m}\sum\limits_{i=1}^{m}||a^L-y||_2^2$$     则加上了L2正则化后的损失函数是:$$J(W,b) = \frac{1}{2m}\sum\limits_{i=1}^{m}||a^L-y||_2^2 + \frac{\lambda}{2m}\sum\limits_{l=2}^L||w||_2^2$$     其中,$\lambda$即我们的正则化超参数,实际使用时需要调参。而$w$为所有权重矩阵$W$的所有列向量。     如果使用上式的损失函数,进行反向传播算法时,流程和没有正则化的反向传播算法完全一样,区别仅仅在于进行梯度下降法时,$W$的更新公式。     回想我们在

深度学习——优化算法细谈(梯度下降/随机梯度下降/小批量梯度下降/动量法/Adagrad/RMSprop/Adadealt/Adam)及时实现

笑着哭i 提交于 2020-08-05 01:18:23
优化算法集锦 梯度下降法 原理 可视化过程 系统实现 随机梯度下降法 原理 可视化过程 系统实现 小批量梯度下降法 原理 可视化过程 系统实现 动量法 提出原因 原理 指数加权平均 动量法原理 可视化过程 系统实现 AdaGrad 法 提出原因 原理 可视化过程 系统实现 RMSprop法 提出原因 原理 可视化过程 系统实现 Adadealt 法 提出原因 原理 可视化过程 系统实现 Adam 法 提出原因 原理 可视化过程 系统实现 小结 本文是对于深度学习中优化算法的解释与实现 首先需要明确:优化算法是为了尽可能低降低训练误差(Loss function)而不是泛化误差。 梯度下降法 原理 梯度下降法是深度学习值最常使用到的优化算法,也是后续算法的基石。下面以多维梯度下降法为例简述其原理: 假设对于损失函数 f ( x ) f(x) f ( x ) ,其输入 x = [ x 1 , x 2 , x 3 , . . . . . . , x n ] T x=[x_{1},x_{2},x_{3},......,x_{n} ]^{T} x = [ x 1 ​ , x 2 ​ , x 3 ​ , . . . . . . , x n ​ ] T 是一个n维向量,其输入为标量(即一个实数)。 则损失函数的梯度可表示为: ▽ f ( x ) = [ ∂ f ( x ) ∂ x 1 , ∂ f

数据库系统浅出

六月ゝ 毕业季﹏ 提交于 2020-08-04 21:58:51
世界上只有两种开发人员,一种使用数据库系统的,一种开发数据库系统的。 数据是系统最重要的信息。大部分系统都是对数据的管理。应用系统通过数据模型来构建现实世界,通过算法操作对象或数据结构,来改变数据模型的状态。数据被组织在操作系统文件中,我们通过数据系统来组织,查询,搜索,处理数据。 本文将从数据库的发展、数据库的分类、常见数据库架构,数据库常见概念和技术等方面探讨这个我们接触最多的底层系统,并通过穿插不同数据库的实现原理,来了解数据库的具体实现。 本文分为五个大章节。 探古溯源 ,从数据库的诞生,发展,现状和展望来了解数据库存在的意义,以及数据库设计的历史与现实原因。 百家争鸣 ,本节从不同分类方式,讲解一些不同的数据库系统实现,有助于拓展我们的视野,在技术选型时可以作为参考( 底层数据库系统的选型对整个系统的架构实在太重要了 )。 承上启下 ,本节是整篇文章的中间章节,前两章以兴趣点,纯理论展开,在本节中将对前两章做一个总结,有了前两章知识,我们已经可以去选择适合项目需求的数据库系统,对那些想更深入了解底层存储的同学也可以选择自己感兴趣的数据库类型和方案找到相应的实现,从而进入下一步学习。下面两章将讲解更多具体的技术点。 知行合一 ,这一章节将讲解数据库的实现,分析一些数据库架构,分布式问题和解决方案,透析具体的数据库常见的技术点。 针对不同兴趣,大家可以按需取之,跳过不感兴趣的

【算法题】两个链表的第一个公共结点

末鹿安然 提交于 2020-08-04 16:07:48
题目描述 输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 分析 先遍历一次两个链表,找到较长的,让该链表指针先走delta步,较短链表从头开始走,最终两指针必然会在第一个公共结点相遇。 代码 public class Solution { public ListNode FindFirstCommonNode ( ListNode pHead1 , ListNode pHead2 ) { int len1 = getLength ( pHead1 ) , len2 = getLength ( pHead2 ) ; if ( len1 == 0 || len2 == 0 ) return null ; ListNode work1 = pHead1 , work2 = pHead2 ; if ( len1 > len2 ) { int delta = len1 - len2 ; for ( int i = 0 ; i < delta ; i ++ ) work1 = work1 . next ; while ( work1 != work2 ) { work1 = work1 . next ; work2 = work2 . next ; } return work1 ; } else { int

基于车辆模型的横向控制方法

心已入冬 提交于 2020-08-04 15:09:06
基于车辆模型的横向控制方法 1. 简介 1.1. 无人驾驶车辆 1.2. 横向控制和纵向控制 1.3. 横向控制 1.3.1. 无模型横向控制 1.3.2. 基于模型横向控制 2. 基于车辆运动学模型的控制方法 2.1. 车辆运动学模型 2.2. 纯跟踪控制算法 2.3. 后轮反馈控制算法 2.4. 前轮反馈控制算法 3. 基于车辆动力学模型的横向控制 3.1. 车辆线性二自由度动力学模型 3.2. 车辆路径跟踪偏差状态方程的构建 3.3. LQR 横向控制算法的求解 4. 总结 1. 简介 1.1. 无人驾驶车辆 大到类似百度apollo无人车,无人配送车 小到扫地机器人,其实都是无人驾驶车辆 都是一个复杂的软硬件结合系统 其软件算法模块主要包含:感知、定位、轨迹预测、行为决策、运动规划 及 反馈控制 等 在这里介绍和补充的是 反馈控制部分 部分软件实现可参考: 个人开源项目 path-following-control 1.2. 横向控制和纵向控制 反馈控制是无人车 最底层 的软件算法模块,包括: 横向控制,主要用于车辆方向盘的控制 纵向控制,主要用于车辆油门、刹车的控制 两者协同工作以 使无人车按照预定的参考轨迹行驶 其中,横向控制根据上层运动规划输出的 路径 、 曲率 等信息进行跟踪控制,以减少跟踪误差 同时保证车辆行驶的 稳定性 和 舒适性 1.3. 横向控制

循环神经网络(RNN)模型与前向反向传播算法

依然范特西╮ 提交于 2020-07-29 09:09:09
    在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系。今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Recurrent Neural Networks ,以下简称RNN),它广泛的用于自然语言处理中的语音识别,手写书别以及机器翻译等领域。 1. RNN概述     在前面讲到的DNN和CNN中,训练样本的输入和输出是比较的确定的。但是有一类问题DNN和CNN不好解决,就是训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段段连续的语音,一段段连续的手写文字。这些序列比较长,且长度不一,比较难直接的拆分成一个个独立的样本来通过DNN/CNN进行训练。     而对于这类问题,RNN则比较的擅长。那么RNN是怎么做到的呢?RNN假设我们的样本是基于序列的。比如是从序列索引1到序列索引$\tau$的。对于这其中的任意序列索引号$t$,它对应的输入是对应的样本序列中的$x^{(t)}$。而模型在序列索引号$t$位置的隐藏状态$h^{(t)}$,则由$x^{(t)}$和在$t-1$位置的隐藏状态$h^{(t-1)}$共同决定。在任意序列索引号$t$,我们也有对应的模型预测输出$o^{(t)}$。通过预测输出$o^{(t)}$和训练序列真实输出$y^{(t)}$,以及损失函数

自动驾驶定位技术-粒子滤波实践

ぃ、小莉子 提交于 2020-07-28 13:24:21
点击上方“ 3D视觉工坊 ”,选择“星标” 干货第一时间送达 作者:william 链接:https://zhuanlan.zhihu.com/p/128521630 本文转载自知乎专栏:自动驾驶全栈工程师,作者已授权,未经许可请勿二次转载。 Particle Filter - Kidnapped vehicle project Github: https://github.com/williamhyin/CarND-Kidnapped-Vehicle Email: williamhyin@outlook.com 1. Definition of Particle Filter 粒子滤波器是贝叶斯滤波器或马尔可夫定位滤波器的实现。粒子过滤器基于“适者生存的原理”主要用于解决定位问题。粒子滤波的优势在于易于编程并且灵活。 三种滤波器的性能对比: 正如你在上面的图片中看到的,红点是对机器人可能位置的离散猜测。每个红点都有 x 坐标、 y 坐标和方向。粒子滤波器是由几千个这样的猜测组成的机器人后验信度表示。一开始,粒子是均匀分布的,但过滤器使他们生存的比例正比于粒子与传感器测量的一致性。 1.权重(Weights): 粒子滤波器通常携带离散数量的粒子。每个粒子都是一个包含 x 坐标、 y 坐标和方向的矢量。颗粒的存活取决于它们与传感器测量结果的一致性

Spark 背后的商业公司收购的 Redash 是个啥?

人走茶凉 提交于 2020-07-28 12:29:03
在2020年6月24日的 Spark AI summit Keynote 上,数砖的首席执行官 Ali Ghodsi 宣布其收购了 Redash 开源产品 的背后公司 Redash! 如果想及时了解 Spark 、Hadoop或者HBase相关的文章,欢迎关注微信公众号: iteblog_hadoop 通过这次收购,Redash 加入了 Apache Spark、Delta Lake 和 MLflow,创建了一个更大、更繁荣的开源系统,为数据团队提供了同类中最好的工具。为什么数砖会收购 Redash 公司? Redash 是什么? Redash 是一个可以协作的可视化和仪表盘平台,旨在让任何人,无论其技术水平如何,都可以在团队内部或跨团队共享见解。 一直使用 SQL 的用户可以利用Redash 来探索、查询、可视化和共享来自任何数据源的数据。世界各地每天有数千个组织的数百万用户使用 Redash 来做出数据驱动的决策。 Redash 主要包含以下特点: Query editor: 使用模式浏览器和代码提示来快速编写 SQL 和 NoSQL 查询。 可视化和仪表盘: 使用拖放创建漂亮的可视化界面,并将它们合并到单个仪表板中。 分享: 通过共享可视化仪表盘及其关联的查询,可以轻松实现协作,并支持对报告和查询的同行审查。 进度刷新: 在用户定义的间隔内自动更新图表和仪表板。 报警:

GDOI2020 划水记

一笑奈何 提交于 2020-07-27 18:58:35
因为 CSP 挂了 120 分,所以除了这里哪里都没能去...惨惨... 今年虽然就在我们学校,但是我还是只能划水...不像 ntf 和 pb 如果 GDOI 死掉就直接进队了... Day -2 首先打了一遍可持久化平衡树 FHQTreap真的比Splay好写多了 P6577 【模板】二分图最大权完美匹配 大概就是给每个点分配一个标记 \(A_i,B_j\) 。称满足 \(A_i+B_j\ge dis(i,j)\) 的为 可行顶标 ,由 \(A_i+B_j=dis(i,j)\) 的边构成的子图称为 相等子图 。如果相等子图有完美匹配就做完了,所以关键就在于如何分配顶标,顺便用 KM 随便求一种匹配就完事了。 对于一条增广路,计算出一个 \(\Delta\) ,将左部点顶标减去 \(\Delta\) ,右部点顶标加上 \(\Delta\) 。因为不会有一条边左点不在交错树上,右点在交错树上。于是 \(\Delta\) 只要保证它仍然可行即可,取 \(\Delta=\min(A_i+B_j-dis(i,j))\) 。 由于奇奇怪怪的原因,你需要写 BFS 版 KM。实现上面你还可以假装有一个虚点去匹配,再把虚点删掉就可以空出一个位置... 这东西太神必了...抄完一遍代码之后仍然没怎么弄懂。 int n, m, pre[M], mat[M], a, b; bool vis[M];