时间计算

在次线性时间内计算线性递归数列

最后都变了- 提交于 2019-12-11 00:07:48
date: 2019-09-13 简介 标题看着很高端,其实就是在 \(O(\log_2 N)\) 内计算出线性递归数列的某一项 (好像什么都没有解释清楚啊) 。 斐波那契数列的快速计算 我们先来看一个题目: 题目描述: ​ 给你一个数字 \(n\) ,你需要输出斐波那契数列的第n项。 ​ 注意: 第一项和第二项都为 \(1\) 。 题目输入: ​ 第一行一个整数 \(n\) ,保证$1 \leq n \leq 1e18 $。 题目输出: ​ 输出斐波那契数列的第n项,对 \(1e9+7\) 取模。 这道题目小数据范围内很简单 (一道水题) ,但是当数据范围扩展到 \(1 \leq n \leq 1e18\) 时,一切都不一样了。你需要一个 \(O(N \log_2 N)\) 的算法来解决它。这里我们需要用到矩阵运算。 递推式 斐波那契数列的递推式这个大家应该都会写吧。。。 算了我还是来写一下好了: \[ f_{i}=f_{i-1}+f_{i-2}\\ f_{0}=1\\ f_{1}=1 \] 转化为矩阵计算 这里我们把计算 \(f_0\) 和 \(f_1\) 包含在一个2行1列的矩阵中: \[ \begin{pmatrix} f_{0}\\ f_{1} \end{pmatrix} \] 之后我们可以得出如下的式子: \[ \begin{pmatrix} 0&1\\ 1&1

tensorflow学习笔记——AlexNet

断了今生、忘了曾经 提交于 2019-12-10 16:19:04
  2012年,Alex Krizhevsky、Ilya Sutskever在多伦多大学Geoff Hinton的实验室设计出了一个深层的卷积神经网络AlexNet,夺得了2012年ImageNet LSVRC的冠军,且准确率远超第二名(top5错误率为15.3%,第二名为26.2%),引起了很大的轰动。AlexNet可以说是具有历史意义的一个网络结构,在此之前,深度学习已经沉寂了很长时间,自2012年AlexNet诞生之后,后面的ImageNet冠军都是用卷积神经网络(CNN)来做的,并且层次越来越深,使得CNN成为在图像识别分类的核心算法模型,带来了深度学习的大爆发。   下面首先学习AlexNet网络的创新点,然后在学习AlexNet的网络结构,最后在用代码实现AlexNet。 1,AlexNet网络的创新点   AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。AlexNet主要使用到的新技术点如下:    (1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但直到AlexNet的出现才将其发扬光大。   在最初的感知机模型中,输入和输出的关系如下:   虽然只是单纯的线性关系,这样的网络结构有很大的局限性

tensorflow学习笔记——AlexNet

帅比萌擦擦* 提交于 2019-12-10 10:51:54
1,AlexNet网络的创新点   AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。AlexNet主要使用到的新技术点如下:    (1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但直到AlexNet的出现才将其发扬光大。   在最初的感知机模型中,输入和输出的关系如下:   虽然只是单纯的线性关系,这样的网络结构有很大的局限性:即使用很多这样结构的网络层叠加,其输出和输入仍然是线性关系,无法处理有非线性关系的输入输出。因此,对每个神经元的输出做个非线性的转换也就是,将上面的加权求和的结果输入到一个非线性函数,也就是激活函数中。这样,由于激活函数的引入,多个网络层的叠加就不再是单纯的线性变换,而是具有更强的表现能力。   在网络层较少时,Sigmoid函数的特性能够很好的满足激活函数的作用:它把一个实数压缩至0到1之间,当输入的数字非常大的时候,结果会接近1,;当输入非常大的负数时,则会得到接近0的结果。这种特性,能够很好的模拟神经元在受刺激后,是否被激活向后传递信息(输出为0,几乎不被激活;输出为1,完全被激活)。Sigmoid函数一个很大的问题就是梯度饱和。观察Sigmoid函数的曲线,当输入的数字较大

GIL以及协程

左心房为你撑大大i 提交于 2019-12-09 19:25:08
GIL以及协程 一、GIL全局解释器锁 演示 ''' python解释器: - Cpython c语言 - Jpython java 1、GIL:全局解释器锁 - 翻译:在同一个进程下开启的多个线程,同一时刻只能有一个线程执行,因为Cpython的内存管理不是线程安全。 - GIL全局解释器锁,本质上就是一把互斥锁,保证数据安全 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.) 结论:在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多多核优势。 GIL全局解释器的优缺点: 优点: 保证数据的安全 缺点: 单个进程下,开启多个线程

Prometheus学习系列(六)之Prometheus PromQL说明

ε祈祈猫儿з 提交于 2019-12-06 01:09:26
前言 本文来自 Prometheus官网手册1 、 2 、 3 和 Prometheus简介1 、 2 、 3 PromQL操作符 一、二元操作符 Prometheus的查询语言支持基本的逻辑运算和算术运算。对于两个瞬时向量, 匹配行为 可以被改变。 1.1 算术二元运算符 在Prometheus支持下面的二元算术操作符: + 加法 - 减法 * 乘法 / 除法 % 模 ^ 幂等 二元运算操作符定义在 scalar/scalar(标量/标量) 、 vector/scalar(向量/标量) 、和 vector/vector(向量/向量) 之间。 在两个标量之间: 评估另一个标量,这是运算符应用于两个标量操作数的结果。 在瞬时向量和标量之间: 将运算符应用于向量中的每个数据样本的值。 如果时间序列即时向量乘以2,则结果是另一个向量,其中原始向量的每个样本值乘以2。 在两个瞬时向量之间: 应用于左侧向量中的每个条目及其右侧向量中的 匹配元素 。 结果将传播到结果向量中。 右侧向量中(没有匹配条目)不是结果的一部分。 1.2 比较二元操作符 在Prometheus系统中,比较二元操作符有: == 等于 != 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 比较二元操作符定义在 scalar/scalar(标量/标量) 、 vector/scalar(向量/标量) ,和

adam调参

坚强是说给别人听的谎言 提交于 2019-12-05 22:00:51
微调 #阿尔法 "learning_rate": 3e-5, #学习率衰减 "weight_decay": 0.1, // "weight_decay": 0.01, "clip_grad": 2, "batch_size": 30, "epoch_num": 1, "min_epoch_num": 1, "patience": 0.02, "patience_num": 3, "epsilon": 10e-8 # 防止除以零 如果不是微调 学习率和学习率的衰减率 都要增大 https://juejin.im/entry/5983115f6fb9a03c50227fd4 深度学习最常用的算法:Adam优化算法 阅读 15278 收藏 7 2017-08-03 原文链接: dataunion.org 从带宽扩展到丢包隐藏,实时音频中的 AI juejin.im 深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但所需的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam 算法正为此而生! Adam 优化算法是随机梯度下降算法的扩展式,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务。本文分为两部分,前一部分简要介绍了

一些大家(除了我)应该都认为比较easy的题目qwq

耗尽温柔 提交于 2019-12-05 17:32:05
agc038E Gachapon 根据$minmax$容斥:$E_{max}(S)=\sum_{T\subseteq S,T\neq \emptyset}(-1)^{|T|-1}E_{min}(T)$. 证明: 考虑计算右侧,把所有情况下的元素按照全部的出现的时间从小往大排序,显然$E_{min}(T)$的贡献是记录在最小的那个元素上的,即考虑最小元素是$i$,那么所有贡献是它的集合的$(-1)^{|T|-1}$之和是$\sum_{i=0}^{x}{x\choose i}(-1)^i=(1-1)^x=0^x$其中$x$表示在$i$之后的元素个数,当$x=0$时有$1$的贡献,否则有$0$的贡献,所以只有最后一个元素有贡献,即总贡献与左侧一样. 来源: https://www.cnblogs.com/alonefight/p/11937196.html

java8时间搓计算代码运行时间

孤者浪人 提交于 2019-12-05 17:28:51
Instant start = Instant.now(); // XXXXXXXX(你的代码) Instant end = Instant.now(); //时间搓对象 Duration timeElapsed = Duration.between(start, end); //不同格式展示,下面是分钟和秒的样子,还有小时天这些 long l = timeElapsed.toMinutes(); long ls = timeElapsed.toMillis(); System.out.println("l = " + l); System.out.println("ls = " + ls); 来源: https://www.cnblogs.com/asusdell/p/11937040.html

时间序列分析和预测 (转载)

霸气de小男生 提交于 2019-12-05 12:41:48
一、时间序列及其分解 时间序列(time series)是同一现象在不同时间上的相继观察值排列而成的序列。根据观察时间的不同,时间序列中的时间可以是可以是年份、季度、月份或其他任何时间形式。 时间序列: (1)平稳序列(stationary series) 是基本上不存在趋势的序列,序列中的各观察值基本上在某个固定的水平上波动,在不同时间段波动程度不同,但不存在某种规律,随机波动 (2)非平稳序列(non-stationary series) 是包含趋势、季节性或周期性的序列,只含有其中一种成分,也可能是几种成分的组合。可分为:有趋势序列、有趋势和季节性序列、几种成分混合而成的复合型序列。 趋势(trend):时间序列在长时期内呈现出来的某种持续上升或持续下降的变动,也称长期趋势。时间序列中的趋势可以是线性和非线性。 季节性(seasonality):季节变动(seasonal fluctuation),是时间序列在一年内重复出现的周期波动。销售旺季,销售淡季,旅游旺季、旅游淡季,因季节不同而发生变化。季节,不仅指一年中的四季,其实是指任何一种周期性的变化。含有季节成分的序列可能含有趋势,也可能不含有趋势。 周期性(cyclicity):循环波动(cyclical fluctuation),是时间序列中呈现出来的围绕长期趋势的一种波浪形或振荡式波动。周期性是由商业和经济活动引起的

[NLP] Adaptive Softmax

扶醉桌前 提交于 2019-12-05 07:26:48
1. Overview Adaptive softmax 算法在链接1中的论文中提出,该算法目的是为了提高softmax函数的运算效率,适用于一些具有非常大词汇量的神经网络。 在NLP的大部分任务中,都会用到softmax,但是对于词汇量非常大的任务,每次进行完全的softmax会有非常大的计算量,很耗时(每次预测一个token都需要O(|V|)的时间复杂度)。 所以paper中提出adaptive softmax来提升softmax的运算效率。 1) 该算法的提出利用到了 单词分布不均衡的特点 (unbalanced word distribution)来形成 clusters , 这样在计算softmax时可以避免对词汇量大小的线性依赖关系,降低计算时间; 2) 另外通过结合 现代架构和矩阵乘积操作的特点 ,通过使其更适合GPU单元的方式进一步加速计算。 2. Introduction 2.1 一般降低softmax计算复杂度的两种方式 1) 考虑原始分布:近似原始概率分布或近似原始概率分布的子集 2) 构造近似模型,但是产生准确的概率分布。比如:hierarchical softmax. (上述两个方法可以大致区分为:一是准确的模型产生近似概率分布,二是用近似模型产生准确的概率分布) 2.2 本文贡献点 paper中主要采用的上述(2)的方式