达美航空

PyTorch 目标检测(五)

我的未来我决定 提交于 2020-02-15 09:10:15
SSD实战 1. 先从跑别人的代码开始 https://github.com/amdegroot/ssd.pytorch 下载代码,markdown文件有教程,但是代码有一些问题 问题汇总 用的是VOC2012训练集 删除voc0712.py __init__函数中imageset参数里07的信息 运行Train.py RuntimeError: CUDA out of memory. Tried to allocate 176.00 MiB (GPU 0; 2.00 GiB total capacity; 1.23 GiB already allocated; 107.80 MiB free; 1.24 GiB reserved in total by PyTorch) 电脑太差,降低batch_size IndexError: The shape of the mask [8, 8732] at index 0 does not match the shape of the indexed tensor [69856, 1] at index 0 ssd.pytorch\layers\modules\multibox_loss.py中loss 维度不对应 layers/modules/multibox_loss.py 第97、98行调换 loss_c = loss_c.view

通过 Channel 实现 Goroutine Pool

守給你的承諾、 提交于 2020-02-14 19:42:45
最近用到了 Go 从 Excel 导数据到服务器内部 用的是 http 请求 但是发现一个问题 从文件读取之后 新开 Goroutine 会无限制新增 导致全部卡在初始化请求 于是乎就卡死了 问题模拟 模拟代码 func main() { pool := sync.WaitGroup{} for i := 0; i < 500; i++ { pool.Add(1) go func(i int) { resp, err := http.Get("http://ip.3322.org") if err != nil { fmt.Println(i, err) } else { defer resp.Body.Close() result, _ := ioutil.ReadAll(resp.Body) fmt.Println(i, string(result)) } pool.Done() }(i) } pool.Wait() } 数量小的情况下 没有问题 但是数量比较大的情况 就会发现程序直接卡死 一段时间之后报错 并且没有发出任何请求 问题解决 实际上看的出来 是应为同时发起了太多的HTTP请求 导致系统卡死 数据没有发送 想到我在Java中用Thread提交请求 我就考虑 可不可限制 Goroutine 的数量 使用强大的百度 果然找到了大佬已经写好的协程池 代码如下 我加上了注释

高等数学——复杂函数的求导方法

瘦欲@ 提交于 2020-02-14 08:57:08
本文始发于个人公众号: TechFlow,原创不易,求个关注 上一篇文章我们复习了函数求导的定义和一些常见函数的导数,今天这篇文章我们回顾一下复杂函数的求导方法。先强调一下,今天的文章很重要,想要看懂机器学习各种公式推导,想要能够自己推一推各种公式,函数求导是基础中的基础,在算法这个领域,它比积分要重要得多。 我们先来看第一种情况:多个函数进行四则运算的导数。 函数四则运算求导法则 我们假设 \(u=u(x)\) 和 \(v=v(x)\) 都在x点有导数,那么它们进行加减乘除四则运算之后的结果的导数有如下性质: \[ \begin{aligned} \left[u(x) \pm v(x)\right]'&= u'(x) \pm v'(x) \\ \left[u(x)v(x)\right]' &= u'(x)v(x) + u(x)v'(x) \\ \left[\frac{u(x)}{v(x)}\right] &= \frac{u'(x)v(x)-u(x)v'(x)}{v^2(x)} (v(x) \neq 0) \end{aligned} \] 我们来看一下证明过程,熟悉证明过程并不是炫技,除了能加深对公式的理解之外,更重要的是防止遗忘。即使以后真的不记得公式的细节了,也可以临时推导一下,这是学算法和数学很重要的技巧。 我们先来看第一个,第一个很容易证明,我们直接套一下导数的公式即可:

Hedging Strategy_TBC_有点超纲故推迟学习!

拟墨画扇 提交于 2020-02-11 03:25:59
*Catalog 1. Simulation for GBM Price Process 2. Simulation for Cost of Hedging 1. Simulation for GBM Price Process   (1) Pre-determine S0, drift mu, volatility sigma, (K, T) of call option, rebalancing period dt; set.seed(121) library(fOptions) price_simulation <- function(S0, mu, sigma, rf, K, Time, dt, plots = FALSE) { t <- seq(0, Time, by = dt) N <- length(t) # w~N(0,1) w <- c(0, cumsum(rnorm(N - 1))) S <- S0 * exp((mu - sigma^2 / 2) * t + sigma * sqrt(dt) * w) delta <- rep(0, N - 1) call_ <- rep(0, N - 1) for(i in 1:(N - 1)) { delta[i] <- GBSGreeks('Delta', 'c', S[i], K, Time - t[i], rf,

LeetCode第175周赛

吃可爱长大的小学妹 提交于 2020-02-10 00:22:36
5332. 检查整数及其两倍数是否存在 题目描述 给你一个整数数组 arr ,请你检查是否存在两个整数 N 和 M ,满足 N 是 M 的两倍(即, N = 2 * M )。 更正式地,检查是否存在两个下标 i 和 j 满足: i != j 0 <= i, j < arr.length arr[i] == 2 * arr[j] 题目解析 将 list 转换成 set 之后, 直接判断就可以了. 注意: 应为 0 * 2 = 0 , 所以 0 应该单独处理. 否则会错误 代码 class Solution: def checkIfExist(self, arr: List[int]) -> bool: memo = set(arr) if arr.count(0) > 1: return True for i in arr: if 2 * i in memo and i != 0: return True return False 复杂度分析 时间复杂度: O(n) , 构造 set 以及遍历 arr 都是 O(n) ; 空间复杂化: O(1) 5333. 制造字母异位词的最小步骤数 题目描述 给你两个长度相等的字符串 s 和 t 。每一个步骤中,你可以选择将 t 中的 任一字符 替换为 另一个字符 。 返回使 t 成为 s 的字母异位词的最小步骤数。 字母异位词 指字母相同

JavaSE编程题03

落爺英雄遲暮 提交于 2020-02-08 17:46:15
3.1 /* 数据: a b c delta r1 r2 步骤: 1.提示用户输入abc三个参数 2.计算delta delta=b*b-4*a*c 3.判断delta的值 3.1 delta>0 输出两个解 3.2 delta==0 输出一个解 3.3 delta<0 无实数解 */ import java.util.*; class Home03_01 { public static void main(String[] args) { //1. Scanner scanner = new Scanner(System.in); System.out.println("请输入a,b,c:"); double a=scanner.nextDouble(); double b=scanner.nextDouble(); double c=scanner.nextDouble(); //2. double delta=b*b-4*a*c; //3. if(delta>0) { double r1=(-b+Math.sqrt(delta))/(2*a); double r2=(-b-Math.sqrt(delta))/(2*a); System.out.printf("r1=%.2f,r2=%.2f",r1,r2); } else if(delta==0) { double r=(-b

插值(例题未完)

送分小仙女□ 提交于 2020-02-08 00:13:52
插值 标签(空格分隔): 插值 数学 笔记 概述 已知平面上 \(n+1\) 点,求过这 \(n+1\) 个点的唯一 \(n\) 次多项式 有一个朴素算法用待定系数法,高斯消元 \(O(n^3)\) 拉格朗日插值 通式 对 \(n\) 次多项式 构造 \(n+1\) 个拉格朗日多项式 \(\delta_i(x)=\prod_{t\ne i}\frac{x-x_t}{x_i-x_t}\) 则 \(\delta_i(x_j)=[i=j]\) 有 \(\displaystyle{\sum{\varrho_i(x)y_i}}\) 可代入验证 和 \(CRT\) 构造有异曲同工之妙 实现 构造 \(\delta(x)=\prod{(x-x_t)}\) 则 \(\delta_i(x)=\frac{\delta(x)}{(x-x_i)}\prod_{t\ne i}\frac{1}{x_i-x_t}\) \(O(n^2)\) 即可 若只要求值不要系数也可以 \(O(n^2)\) 线性插值 满足 给出的点横坐标差为定值 只要求求出特殊点的值并非系数 时拉格朗日插值存在 \(O(n)\) 的算法 具体实现以 \(x_i=i\) 维护数列 \(pre_i=\prod\limits_{j=0}^i (x_0-j)\) 与 \(suf_i=\prod\limits_{j=i+1}^n (x_i-j)\) 对

如何通俗地讲解 viterbi 算法?

好久不见. 提交于 2020-02-07 18:22:55
原文链接 一、通俗地讲解 viterbi 算法 这篇回答你绝对看得懂!如下图,假如你从S和E之间找一条最短的路径,除了遍历完所有路径,还有什么更好的方法? 答案:viterbi (维特比)算法。 过程非常简单: 为了找出S到E之间的最短路径,我们先从S开始从左到右一列一列地来看。 首先起点是S,从S到A列的路径有三种可能:S-A1、S-A2、S-A3,如下图: 我们不能武断的说S-A1、S-A2、S-A3中的哪一段必定是全局最短路径中的一部分,目前为止任何一段都有可能是全局最短路径的备选项。 我们继续往右看,到了B列。B列的B1、B2、B3逐个分析。 先看B1: 如上图,经过B1的所有路径只有3条:S-A1-B1S-A2-B1S-A3-B1以上这三条路径,我们肯定可以知道其中哪一条是最短的(把各路径每段距离加起来比较一下就知道哪条最短了)。假设S-A3-B1是最短的,那么我们就知道了经过B1的所有路径当中S-A3-B1是最短的,其它两条路径路径S-A1-B1和S-A2-B1都比S-A3-B1长,绝对不是目标答案,可以大胆地删掉了。删掉了不可能是答案的路径,就是viterbi算法(维特比算法)的重点,因为后面我们再也不用考虑这些被删掉的路径了。现在经过B1的所有路径只剩一条路径了,如下图: 接下来,我们继续看B2: 如上图,经过B2的路径有3条:S-A1-B2S-A2-B2S-A3

高等数学——导数的定义和常见导数

自闭症网瘾萝莉.ら 提交于 2020-02-07 16:14:05
本文始发于个人公众号: TechFlow 导数是微积分也是高数当中很重要的一个部分,不过很遗憾的是,和导数相关的部分很多同学都是高中的时候学的。经过了这么多年,可能都差不多还给老师了。所以今天的文章就一起来温习一下导数的相关知识,捡一捡之前忘记的内容。 函数切线 关于导数,最经典的解释可能就是切线模型了。以前高中的时候,经常对二次函数求切线,后来学了微积分之后明白了,所谓的求切线其实就是求导。 比如当下, 我们有一个光滑的函数曲线 \(y=f(x)\) ,我们想要求出这个曲线在某个点 \(M\) 的切线,那么应该怎么操作呢? 如上图所示,我们可以在选择另外一个点N,然后做MN的割线。假设T是M的真实的切线,当我们将N向M无限逼近的时候, \(\angle NMT\) 在无限缩小,直到趋近与0,而此时的割线MN也就无限逼近于M点真实的切线T。 在图中,MN的斜率表示为 \(\tan\phi\) ,其中 \(\tan\phi=\frac{f(x)-f(x_0)}{x - x_0}\) . 当N逼近于M时: \[\displaystyle\tan\phi= \lim_{x \to x_0}\frac{f(x) - f(x_0)}{x - x_0}\] 我们令 \(\Delta x = x - x_0\) ,所以: \[\displaystyle\tan\phi=\lim_{\Delta

BP神经网络

纵饮孤独 提交于 2020-02-07 03:02:50
起源:线性神经网络与单层感知器 古老的线性神经网络,使用的是单层Rosenblatt感知器。该感知器模型已经不再使用,但是你可以看到它的改良版:Logistic回归。 可以看到这个网络,输入->加权->映射->计算分类误差->迭代修改W、b,其实和数学上的回归拟合别无二致。 Logistic回归对该模型进行了改良: 线性神经网络(回归)使用的LMS(最小均方)的数学原理其实可由最大似然估计+假设误差概率模型得到。(详见Andrew Ng视频) 在二类分类(误差非0即1)情况下,适用于连续型数据的最小均方显然不是很好的cost函数,会引起梯度过大。 仿照线性回归假设误差服从正态分布建立概率模型,Logistic回归假设误差服从二项分布建立概率模型。 Logistic函数的(0~1连续特性)在这里充当着,由输入评估概率的角色,而不是像下面的BP网络一样,起的是高维空间非线性识别作用。 该手法同样在RBM限制玻尔兹曼机中使用。 实际上,这两种模型的起源都是最小二乘法的线性回归。不同的是,早期的解决线性回归使用的矩阵解方程组,求得参数。 而基于梯度下降使目标函数收敛的数学方法,在计算神经科学领域,就变成神经网络了。 Part I :BP网络的结构与工作方式 BP网络中使用隐层(HideLayer)设定,目的是通过全连接的网络+非线性Sigmoid函数,疯狂地通过特征空间映射来区分非线性数据