- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试自学一些机器学习,并且一直在使用 MNIST 数据库 ( http://yann.lecun.com/exdb/mnist/ ) 来做到这一点。该网站的作者在 98 年写了一篇关于所有不同类型的手写识别技术的论文,可在 http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf 获取。 .
提到的第十种方法是“切线距离分类器”。这个想法是,如果将每个图像放置在 (NxM) 维向量空间中,则可以计算两个图像之间的距离,作为每个图像形成的超平面之间的距离,其中超平面通过获取点并旋转图像来给出、重新缩放图像、平移图像等
我无法找出足够的信息来填补缺失的细节。我知道其中大多数确实是线性算子,那么如何利用这一事实来创建超平面呢?一旦我们有了一个超平面,我们如何确定它与其他超平面的距离?
最佳答案
我会给你一些提示。您需要一些图像处理方面的背景知识。请引用2 , 3了解详情。
根据3 ,你需要做的第一步就是平滑图片。下面我们展示了 3 种不同平滑操作的结果(查看 3 的第 4 节)(左列显示结果图像,右列显示原始图像和卷积运算符)。这一步是将离散向量映射到连续向量,使其可微。作者建议使用高斯函数。如果您需要更多有关图像卷积的背景知识,here就是一个例子。
完成这一步后,您就计算出了水平和垂直位移:
在这里,我向您展示 2 中实现的正切计算之一- 缩放切线。来自 3 ,我们知道变换如下:
/* scaling */
for(k=0;k<height;k++)
for(j=0;j<width;j++) {
currentTangent[ind] = ((j+offsetW)*x1[ind] + (k+offsetH)*x2[ind])*factor;
ind++;
}
在 2 中 td.c
的开头的实现,我们知道下面的定义:
factorW=((double)width*0.5);
offsetW=0.5-factorW;
factorW=1.0/factorW;
factorH=((double)height*0.5);
offsetH=0.5-factorH;
factorH=1.0/factorH;
factor=(factorH<factorW)?factorH:factorW; //min
作者使用的图像尺寸为 16x16。所以我们知道
factor=factorW=factorH=1/8,
和
offsetH=offsetW = 0.5-8 = -7.5
另请注意我们已经计算了
x1[ind]
= , x2[ind]
= 因此,我们插入这些常量:
currentTangent[ind] = ((j-7.5)*x1[ind] + (k-7.5)*x2[ind])/8
= x1 * (j-7.5)/8 + x2 * (k-7.5)/8.
由于 j
(也称为 k
)是 0 到 15 之间的整数(包括 0 和 15)(图像的宽度和高度均为 16 个像素),因此 (j -7.5)/8
只是 -0.9375
到 0.9375
之间的小数。
所以我猜(j+offsetW)*factor
是每个像素的位移,它与像素到图像中心的水平距离成正比。同样,您知道垂直位移(k+offsetH)*factor
。
旋转切线的定义如下 3 :
/* rotation */
for(k=0;k<height;k++)
for(j=0;j<width;j++) {
currentTangent[ind] = ((k+offsetH)*x1[ind] - (j+offsetW)*x2[ind])*factor;
ind++;
}
根据前面的结论,我们知道(k+offsetH)*factor
对应于y
。类似地,- (j+offsetW)*factor
对应于-x
。所以你知道这正是 3 中使用的公式.
您可以找到 3 中描述的所有其他切线实现于2 。我喜欢下面来自 3 的图片,清楚地显示了不同变换切线的位移效果。
只需按照tangentDistance
函数中的实现即可:
// determine the tangents of the first image
calculateTangents(imageOne, tangents, numTangents, height, width, choice, background);
// find the orthonormal tangent subspace
numTangentsRemaining = normalizeTangents(tangents, numTangents, height, width);
// determine the distance to the closest point in the subspace
dist=calculateDistance(imageOne, imageTwo, (const double **) tangents, numTangentsRemaining, height, width);
关于math - 超平面之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13340353/
在C#中,我可以通过base关键字访问基类,在java中,我可以通过super关键字访问它。在delphi中如何做到这一点?假设我有以下代码: type TForm3 = class(TF
在这件事上我已经把头撞到墙上好几次了。所以我希望在正确的方向上得到一点帮助。 我有一张 table ,上面有订单,一张 table 上有火车,一张 table 上有航类,一张 table 上有巴士。每
在 Python 中,假设我有以下代码: class SuperClass(object): def __init__(self, x): self.x = x
我希望这个 subview 扩展到它的父 View 之外,但是父 View 的边框正在切入 subview 。有没有办法防止这种情况? class TheView : UIView { let
我有一个标准的高斯函数,看起来像这样: def gauss_fnc(x, amp, cen, sigma): return amp * np.exp(-(x - cen) ** 2 / (2
例如,我有下一个类,带有有界类型参数: public class ItemContainer { void addItems(List items); } 在另一个带有参数的类中使用: pub
如何将此设置转换为命令? 结果如下: // Manual Compression (see the image above) Compressed Size: 12,647,451 bytes //
请建议在应用继承时如何使用@Wither/@With。 我有一个抽象类Parent和具体的Child。 Child 应该是不可变的。将 @Wither 放在两者上会给我两个错误: 构造函数 Child
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试向服务器(虚拟托管)发出 HTTP2 请求,该服务器根据主机 header 值 (SNI) 提供 SSL 证书。 # conn = hyper.HTTP20Connection('h
我有一个应用程序,必须将大约 1300 万行、大约 10 个平均长度的字符串插入到嵌入式 HSQLDB 中。我一直在调整一些东西(批量大小、单线程/多线程、缓存/非缓存表、MVCC 事务、log_si
我想定义一个函数f(x, t::Type)根据 isa(x, t) 是否执行不同的行为.假设我想调用b1(x)如果是,b2(x)除此以外。 我知道我可以像这样在运行时进行动态检查: function
我正在使用 Hyper-V WMI Provider在 Hyper-V 中导入虚拟机,特别是使用 ImportVirtualSystemEx Msvm_VirtualSystemManagementS
这几个星期以来一直困扰着我,我没有结束对它的研究,因为我目前重载并且它让我落后于第一年的 CS (opengl) 大学类(class),这首先让我研究了这个:如何只用一个 for 循环绘制立方体的所有
我正在我的计算机(操作系统:Windows 8)上开发一个 WP8 应用程序。我需要安装一个 VM 才能拥有 linux。同时我需要使用我的 Windows Phone 模拟器。 我下载了 VMWar
我是一名优秀的程序员,十分优秀!