再有几个小时比赛就要结束了,但是只有前20名可以进决赛,我们还在30名左右徘徊。虽然没什么希望进决赛,但是还是可以总结总结的。毕竟如果不总结过段时间就会全部忘记。

另外,这次比赛的源代码已经释放出来了,具体点这里

任务介绍

本赛题任务是对西安的热门景点、美食、特产、民俗、工艺品等图片进行分类,即首先识别出图片中物品的类别(比如大雁塔、肉夹馍等),然后根据图片分类的规则,输出该图片中物品属于景点、美食、特产、民俗和工艺品五大类中的哪一种。

模型输出格式:

阅读全文 »

梯度计算

Variable

autograd.Variabletorch.autograd中很重要的类。它用来包装Tensor,将Tensor转换为Variable之后,可以装载梯度信息。

img

Pytorch的一个重要特点就是动态计算图(Dynamic Computational Graphs)。计算图中每一个节点代表一个变量,变量间建立运算关系并且可以修改,而不像Tensorflow中的计算图是固定不可变的。

阅读全文 »

首先,该文章来自于极客时间网站,王争的专栏——《数据结构与算法之美》,我这里只是做简单的解释、记录并添加自己的见解,只是作为个人笔记,若侵权,马上删除。最后建议直接去该网站上购买该课程看原作者的讲解,一来是支持作者,二来是作者写的确实不错。

作者根据自己的学习经历和工作经验,总结了几个写链表代码技巧。

技巧一:理解指针或引用的含义

我们知道,有些语言有“指针”的概念,比如 C 语言;有些语言没有指针,取而代之的是“引用”,比如 Java、Python。不管是“指针”还是“引用”,实际上,它们的意思都是一样的,都是存储所指对象的内存地址。

接下来,我会拿 C 语言中的“指针”来讲解,如果你用的是 Java 或者其他没有指针的语言也没关系,你把它理解成“引用”就可以了。

阅读全文 »

首先声明,这篇文章的主要内容大部分来自小伙伴的总结,具体地址在这里,欢迎访问~~~我这里在小伙伴总结的基础上再加上一些自己的理解。

Python中与内存相关的基本概念

变量、对象及引用

在Python中有一个基础概念:Python中的所有东西都是对象。与C++等编译语言不同(把值赋给变量,强类型语言),Python中的变量本身是不具有数据类型的(弱类型语言),其数据类型由其所指向的对象的类型决定,如下:

1
a = 1
阅读全文 »

Wishart距离定义

根据之前文章的分析,multi-look POLSAR像素$\rm \langle T \rangle$能够根据Wishart距离$d\left(\langle \rm{T} \rangle | \langle \rm{T}_m \rangle \right)$分类,正如下面公式所示:

其中,$Trace(\cdot)$是矩阵的迹,$\cdot ^{-1}$是矩阵的逆,$|\cdot|$是矩阵的行列式,$ \langle \rm{T}_m \rangle$是由训练集的第$m$类评估得到,可以视为第$m$类的聚类中心。通过计算一个像素点与所有类聚类中心的距离,距离最近的类即为该像素点所属的类别。

对于无监督训练,可以先使用聚类的方法得到不同类别的数据;而对于有监督训练,训练集中已经包含了不同类别的训练数据。因此$\langle \rm{T}_m \rangle$可以使用如下公式得到:

其中,$\Omega_m$是第$m$类的像素集合,而$|\Omega_m|$是$\Omega_m$的像素总数。

阅读全文 »

最近一直再看复数的一些运算,回宿舍翻书发现这几天拼命在网上所搜索的关于复数的运算以及复数的导数均在大二学的工程数学——《复变函数》中学习过。而且还是我导数教的。呜呜呜,学习的时候不知道学习复变函数有什么用,用的时候才知道。算了废话不多说,开始总结吧。

复数取对数

假设复数为$z=x+iy$,其中$i$表示虚部。假设对$z$取自然对数得到的结果为$a+ib$,则可以得到

根据实部和虚部要分别相等,可以得到:

将上面公式$({2})$中下式除以上式,可以得到$tanb=y/x$,所以$b=arctan(y/x)$。

阅读全文 »

该损失函数由Kaiming大神提出来,一开始是用在目标检测算法中。关于该损失函数的描述大部分内容来自下面参考链接2。

出发点

object detection的算法主要可以分为两大类:two-stage detector和one-stage detector。前者是指类似Faster RCNN,RFCN这样需要region proposal的检测算法,这类算法可以达到很高的准确率,但是速度较慢。虽然可以通过减少proposal的数量或降低输入图像的分辨率等方式达到提速,但是速度并没有质的提升。后者是指类似YOLO,SSD这样不需要region proposal,直接回归的检测算法,这类算法速度很快,但是准确率不如前者。作者提出focal loss的出发点也是希望one-stage detector可以达到two-stage detector的准确率,同时不影响原有的速度。

既然有了出发点,那么就要找one-stage detector的准确率不如two-stage detector的原因,作者认为原因是:样本的类别不均衡导致的。我们知道在object detection领域,一张图像可能生成成千上万的candidate locations,但是其中只有很少一部分是包含object的,这就带来了类别不均衡。那么类别不均衡会带来什么后果呢?引用原文讲的两个后果:(1) training is inefficient as most locations are easy negatives that contribute no useful learning signal; (2) en masse, the easy negatives can overwhelm training and lead to degenerate models. 什么意思呢?负样本数量太大,占总的loss的大部分,而且多是容易分类的,因此使得模型的优化方向并不是我们所希望的那样。其实先前也有一些算法来处理类别不均衡的问题,比如OHEM(online hard example mining),OHEM的主要思想可以用原文的一句话概括:In OHEM each example is scored by its loss, non-maximum suppression (nms) is then applied, and a minibatch is constructed with the highest-loss examples。OHEM算法虽然增加了错分类样本的权重,但是OHEM算法忽略了容易分类的样本。

因此针对类别不均衡问题,作者提出一种新的损失函数:focal loss,这个损失函数是在标准交叉熵损失基础上修改得到的。这个函数可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。

阅读全文 »

深度学习自诞生之后,就被各个领域视为全能方法。而传统机器学习因为要手动提取特征,因此对数据本身的研究要远远强于深度学习方法,因此若可以将特定数据集的特征应用到深度学习中,想必是一个很好的方向。

对于极化SAR数据而言,Wishart距离是一个不可避免的概念,在论文[2]中详细介绍了Wishart距离的由来,下面结合这个论文对Wishart距离进行总结。

Single-look极化SAR图像分类器

在给定入射角时,一个介质的完全散射复矩阵$S$可以由下面式子给出:

对于一个互易介质,满足$S_{hv}=S_{vh}$,复数向量可以使用三个不同的元素定义:

阅读全文 »

首先,该文章来自于极客时间网站,王争的专栏——《数据结构与算法之美》,我这里只是做简单的解释、记录并添加自己的见解,只是作为个人笔记,若侵权,马上删除。最后建议直接去该网站上购买该课程看原作者的讲解,一来是支持作者,二来是作者写的确实不错。

链表有一个特别经典的应用——LRU 缓存淘汰算法。

缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。

缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定。常见的策略有三种:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用策略 LRU(Least Recently Used)

如何用链表来实现 LRU 缓存淘汰策略呢?

阅读全文 »

首先,该文章来自于极客时间网站,王争的专栏——《数据结构与算法之美》,我这里只是做简单的解释、记录并添加自己的见解,只是作为个人笔记,若侵权,马上删除。最后建议直接去该网站上购买该课程看原作者的讲解,一来是支持作者,二来是作者写的确实不错。

数组不仅仅是一种编程语言中的数据类型。还是一种最基础的数据结构。但是为什么数组下标要从0开始,而不是从1开始呢?

如何实现随机访问

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。这里面有几个专业的名词。

第一个是线性表。线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。

阅读全文 »