最近接触到了对复数函数的求导,之前已知没有研究过。在看教程的时候,发现自己微积分忘得是一干二净。真的是,233333。算了不多说了,下面对神经网络中的复数函数求导进行记录。

复数神经网络有以下几个特点:

  • 网络的输入与权重均为复数
  • 损失值为实数

本文的内容主要包含一下几个部分:

  • 推导复数神经网络的反向传播公式
  • 为复数神经网络的反向传播完成通用代码
阅读全文 »

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

除了讲复杂度的大O表示法,常见的复杂度分析例子,比如 O(1)、O(logn)、O(n)、O(nlogn) 复杂度分析,还有四个复杂度分析方面的知识点:最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst case time complexity)、平均情况时间复杂度(average case time complexity)、均摊时间复杂度(amortized time complexity)。

最好、最坏情况时间复杂度

代码如下:

1
2
3
4
5
6
7
8
9
// n表示数组array的长度
int find(int[] array, int n, int x) {
int i = 0;
int pos = -1;
for (; i < n; ++i) {
if (array[i] == x) pos = i;
}
return pos;
}
阅读全文 »

行人重识别定义

行人重识别 (Person re-identiflcation) 也称行人再识别, 被广泛认为是一个图像检索的子问题, 是利用计算机视觉技术判断图像或者视频中是否存在特定行人的技术, 即给定一个监控行人图像检索跨设备下的该行人图像。

深度学习之前,该领域主要聚焦于如何手工设计更好的视觉特征和如何学习更好的相似性度量,深度学习出现后,它可以自动提取较好的行人图像特征,同时学习得到较好的相似性度量。

行人重识别领域知名学者郑良博士在论文 [3] 中将行人重识别系统总结为行人检测加上行人重识别。如下图所示:

1573006406243

阅读全文 »

之前对Pytorch的索引方式一直有点疑惑,昨天在小伙伴的帮助下对其有了更加深刻的理解。下面对这些进行一下总结。另外,值得注意的是,Pytorch号称直接对接的Numpy,因此下面的索引方法理论上也可以适用于Numpy的索引方式。

Pytorch的tensor索引方式有三种:分别为按照long tensor、按照bool tensor和按照byte tensor。下面分别进行介绍。

首先,说明一下,Pytorch默认打印的tensor只有四位小数,可以使用torch.set_printoptions(precision=8)多打印几个小数。

long tensor

首先看下面的代码。

阅读全文 »

图像检索也是计算机视觉领域一个典型的问题。它的主要目标为输入一张图片(无类标)从大规模数据集得到与它相似的图片。与分类任务不同的是,分类任务是将输入一张图片得到它的类别。而这里是输入一张图片找到与它相似的其他图片。

跟其它的任务一样,若想对模型的能力进行评测,就需要有一系列的评价指标。这里就对它想用的一些评价指标进行总结。

首先,介绍一个重要的概念——Ranking:检索到的相似图像在检索到的全部图片中的下标。

查准率(Precision)

对于每一个Ranking

阅读全文 »

这个Kaggle Steel Defect Detection 比赛和上一个我参加的Kaggle SIIM-ACR Pneumothorax Segmentation Challenge时间有点冲突,当我参加并总结完上一个比赛时这个比赛只剩下一个月的时间了。但是一来最近没啥好的比赛参加,而来这个比赛的任务和上一个比赛的任务大致相同。所以和小伙伴商量一下,就参加了一下。

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

任务介绍

这次比赛的主要任务是从钢材图片中判断钢材是否有表面缺陷,如果含有的话要判断出缺陷类型并定位缺陷位置。也就是说这个任务是一个分类+实例分割的任务。

该比赛只有一个阶段,Public Leaderboard只采用了其中的33%的数据打分并排名,最终的Private Leaderboard采用了最后67%的数据打分并排名。

阅读全文 »

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

复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半。

为什么需要复杂度分析

你可能会有些疑惑,我把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度分析呢?这种分析方法能比我实实在在跑一遍得到的数据更准确吗?

首先,我可以肯定地说,你这种评估算法执行效率的方法是正确的。很多数据结构和算法书籍还给这种方法起了一个名字,叫事后统计法。但是,这种统计方法有非常大的局限性。

阅读全文 »

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

基本概念

什么是数据结构?什么是算法?

从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。以图书馆储藏书籍为例,为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据”的存储结构。那我们如何来查找一本书呢?有很多种办法,你当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机,来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。

从狭义上讲,是指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。

阅读全文 »

最近开始使用了一维卷积,之前在本科做毕设的时候,虽然跟着师兄也用了一点一维卷积的东西,但是那个时候并不是真的明白一维卷积究竟是如何操作的。今天结合Pytorch特来了解一下。

Pytorch一维卷积Conv1d的官方文档在这里可以找到。下面说下自己的理解。

该函数的声明如下:

1
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')

重点介绍一下几个参数:

阅读全文 »

表征分类精度的指标有很多,其中最常用的是混淆矩阵、总体分类精度(OA)以及Kappa系数。

混淆矩阵

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,对于$N$类数据,可以用$N$行$N$列的矩阵来表示。混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目,每一列中的数值表示预测数据在真实数据中的分布;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目,每一行的数值表示真实数据在预测数据中的分布。

混淆矩阵能够很清楚的看到每个种类正确分类的个数以及被错分的类别和个数。但是,混淆矩阵并不能一眼就看出类别分类精度的好坏,为此从混淆矩阵衍生出来各种分类精度指标,其中总体分类精度Overall Accuracy(OA)和卡帕系数(Kappa)应用最为广泛。

OA

阅读全文 »