有很多教程都是把Python生成器和迭代器放在一块讲的,昨天简单的总结了一下Python的迭代器,今天看代码的时候又用到了生成器,也不是很清楚。再加上之前每次遇到yield关键字都要重新查阅资料,因此这里总结一下生成器以及yield关键字。

生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

阅读全文 »

之前学习Python的时候,一直没有注意到迭代器这个东西。最近要使用到它,因此特来总结一下~~

这里不单独将__iter____next____getitem__next()等概念拿出来将,只是内嵌到下面的内容中,感觉应该更好理解。

迭代的概念

Python中关于迭代有两个概念,第一个是Iterable,第二个是Iterator。

协议规定Iterable的__iter__方法会返回一个迭代器对象(Iterator)。若Iterator含有__next__方法(Python 2里是next)则该函数会返回下一个迭代值,如果迭代结束则抛出StopIteration异常;若该Iterator是通过__getitem__() 方法加iter()函数得到的,则使用__getitem__()返回下一个迭代值。

阅读全文 »

因为Few-Shot Learning问题要读取数据组成task,因此如何读取数据组成一个task是一个问题。之前看到好几个Pytorch版本的代码,虽然也实现了读取数据组成task,但是逻辑较为复杂且复杂度较高。最近看到了这个代码,感觉实现的方法特别高级,定制性也很强,但是需要比较深入的理解Pytorch DataLoader的原理。所以便有了这篇文章。

Pytorch读取数据流程

Pytorch读取数据虽然特别灵活,但是还是具有特定的流程的,它的操作顺序为:

  • 创建一个 Dataset 对象,该对象如果现有的 Dataset 不能够满足需求,我们也可以自定义 Dataset,通过继承 torch.utils.data.Dataset。在继承的时候,需要 override 三个方法。
    • __init__: 用来初始化数据集
    • __getitem__:给定索引值,返回该索引值对应的数据;它是python built-in方法,其主要作用是能让该类可以像list一样通过索引值对数据进行访问
    • __len__:用于len(Dataset)时能够返回大小
  • 创建一个 DataLoader 对象
  • 不停的 循环 这个 DataLoader 对象

对我们来说,本篇文章的侧重点在于介绍 DataLoader,因此对于自定义 Dataset,这里不作详细的说明。

阅读全文 »

概述

极化SAR(PolSAR)系统是在单通道SAR系统的基础上发展得到的,它能提供目标多维的遥感信息。与传统的单通道SAR相比,PolSAR不仅利用了目标散射回波的幅度、相位和频率特性,还利用了其极化特性。波长较长的L波段信息能够穿透森林和地表植被覆盖,在军事上能够用于发现丛林中或者浅埋地表的隐藏目标信息。

极化合成孔径雷达通过发射和接收不同极化方式的电磁波测量地物目标的极化散射特性,获得目标极化散射矩阵。由于电磁波的极化对目标的表面粗糙度、介电常数、几何形状和取向等物理特性比较敏感,因而极化散射矩阵蕴含着丰富的目标信息。

极化波的表征

极化的概念

阅读全文 »

这篇论文虽然思想比较简单,但是是第一个将孪生网络用在One-Shot Learning问题上的,所以相当经典,基本上后来的论文都会拿这个论文作比较,所以将这篇文章好好看了看。在此记录一下。

基本信息

  • 年份:2015
  • 期刊:ICML Deep Learning Workshop. Vol. 2. 2015
  • 标签:Metric Learning、Siamese Neural Networks
  • 数据:Omniglot

注意该算法个人认为不属于Meta Learning,但是属于Metric Learning

创新点

阅读全文 »

这篇论文相当经典,基本上后来的每篇文章都会将和这篇论文的结果作对比。但是这篇论文对我来说,有点生涩难懂,这是看的第二遍了。特来记录一下。

基本信息

  • 年份:2016
  • 期刊:NIPS
  • 标签:Meta Learning、Attention、Memory
  • 数据:Omniglot、Mini-ImageNet

创新点

  • 模型方面,结合了注意力模块和记忆模块(输入为set),使得网络可以快速学习。其中注意力模块和度量学习和相似,所以也可以看成是度量学习(metric learning目前小样本学习的主流方法)和记忆模块(external memories以前小样本学习的主流方法)的结合
  • 训练过程基于一个简单的机器学习原则:训练和测试是要在同样条件下进行的,“one-shot learning is much easier if you train the network to do one-shot learning”。提出在训练的时候不断地让网络只看每一类的少量样本,这将和测试的过程是一致的
  • 模型学习了一个网络,它将带标签支撑集和一个无标签的查询集映射到它的标签上,从而避免了为了适应新的类类型而进行微调的需要
  • 完成了一个端到端的完全可微分的近邻方法
  • 提出了Mini-ImageNet基准数据集
阅读全文 »

看Few-Shot Learning也好好几篇文章了,但是关于一些最基本的概念都没怎么搞清楚。例如,Few-Shot Learning文章中经常提到一个概念叫做Meta Learning,之前只是知道元学习就是学习如何学习,但是并没有深入理解。现在稍微了解总结总结。

字面意思

首先,看到Meta Learning这个词汇,就一头污水。翻译过来为元学习,那么如何理解元学习中的“元”字呢?正好最近在知乎上有一个这样的问题——如何理解元学习中的“元”字? - 知乎。感觉如何理解元学习中的“元”字? - lintongmao的回答 - 知乎回答的很好。这里引用一下。

学习是Meta-Learning,按翻译中约定俗成的习惯,将“meta-”译作“元”。

meta- 这个词缀来源于希腊语,有beyond, after等含义。在现代英语中,一般表示“related to”,往往表示与自身相关。这样说太过模糊,我来举几个例子:

阅读全文 »

SSH

首先在服务器上安装ssh的服务器端,Ubuntu默认不安装

1
sudo apt-get install openssh-server

启动ssh-server。

1
/etc/init.d/ssh restart

确认ssh-server已经正常工作。

1
2
3
netstat -tlp

tcp6 0 0 *:ssh *:* LISTEN -

看到上面这一行输出说明ssh-server已经在运行了。

阅读全文 »

本文的主要内容主要来自于这里,我觉得总结的不错,所以特地转载过来,并添加了一下自己的注解。

最近在研究深度学习视觉相关的东西,经常需要写python代码搭建深度学习模型。比如写CNN模型相关代码时,我们需要借助python图像库来读取图像并进行一系列的图像处理工作。我最常用的图像库当然是opencv,很强大很好用,但是opencv也有一些坑,不注意的话也会搞出大麻烦。近期我也在看一些别人写的代码,因为个人习惯不一样,他们在做深度学习时用于图片读取的图像库各不相同,从opencv到PIL再到skimage等等各种库都有,有些库读进来的图片存储方式也不太一样,如果不好好总结这些主流图像读写库特点的话,以后看代码写代码都会遇坑无数。这篇文章就总结了以下主流Python图像库的一些基本使用方法和需要注意的地方。

opencv

opencv作为我最常用的图像处理库,当然第一个介绍,并且介绍得比较全面。毋庸置疑,opencv是今天介绍得所有图像库中最全面也最强大的库,如果我们只想掌握一个图像库,我觉得opencv库肯定是最适合不过了。

图片读取操作

阅读全文 »

参加完Kaggle比赛了,虽然做的是图像分割的题目,但是对于图像的基本知识,我还是很欠缺,所以在这里进行一个总结。

首先,这里先说明了颜色的三要素:色调(色相$H$)、饱和度(纯度$S$)和明度$V$,也可以是色调(色相$H$)、饱和度(纯度$S$)和亮度$L$。在下面可以用到。色调和饱和度一起称为色度。

RGB模型

简介

三原色光模式(RGB color model),又称RGB颜色模型或红绿蓝颜色模型,是一种加色模型(与之相对是减色模型),将红(Red)、绿(Green)、蓝(Blue)三原色的色光以不同的比例相加,以合成产生各种色彩光。(因为人类视觉感色细胞的原因,红绿蓝成为三原色合成色彩的基础)。

阅读全文 »