matlab中NN输入的坐标归一化
Posted
技术标签:
【中文标题】matlab中NN输入的坐标归一化【英文标题】:Coordinate normalization for NN input in matlab 【发布时间】:2015-01-31 18:40:01 【问题描述】:我正在尝试在 Matlab 中实现分类 NN。 我的输入是图像中的坐标簇。 (对应delaunay三角剖分顶点) 这种格式有 3 个簇(光学算法的结果):
(并非所有集群的大小都相同。)。元素表示欧几里得二维空间中的坐标。所以 (110,12) 是我图像中的一个点,所描绘的矩阵代表一组点。 在图像边缘进行聚类。所以坐标指的是图像矩阵上的逻辑值(在这种情况下总是1)。(边缘检测后,图像中有3个“密集”区域,这些像素集合用于分类)。有6个目标类。
那么,我的问题是如何将它们格式化为单列向量输入以在神经网络中使用? (有一个相关的答案here,但如果可能的话,我想详细说明一下。(我现在可能因为 12 个小时的尝试太累了,没有 100% 得到它:D :() 请记住,每张图片有 3 个不同的坐标矩阵,所以我最初的想法是,创建一个具有 3 个输入(不同长度)的 nn。但是如何序列化呢?
这是一个带有标签的集群,以防万一:
【问题讨论】:
聚类是输入还是点?如果是集群,那么您应该输入描述集群的任何内容(例如均值+方差)。如果点,您应该输入您链接的问题中完成的作业。在第一种情况下,您需要恒定数量的集群,在第二种情况下,您需要恒定数量的点。 我不知道我是否理解你的问题;你想训练一个 nnet 将单个坐标分类为属于集群 1、2、3 之一吗? 好的,集群是图像的特征。对于每个图像,您可以创建 (1) 一个矩阵 X,其中每一行是属于每个集群的点的分数,即 x_i=[cluster_1/N, cluster_2/N, cluster_3/N] 其中 N=number of图像的点,以及 (2) y = 类别之一 (1 ... 6)。你应该可以在 Matlab 中用 X 和 y 训练一个 nnet。 假设您有 4 张图片,每张 100 分。假设这是每个簇的点分布:p1=[30 30 40], p2=[100 0 0], p3=[10 90 0], p4=[0,0,100]。集群 1、2 和 3 对应于 p_i 的列。假设这些图像有以下标签,y=[1,2,1,3]。我的观点是,您应该创建一个预测变量矩阵,如 X=[p1;p2;p3;p4]/100 并使用类向量 y 使用 svmtrain 或其他方法来学习分类器。您可以根据集群信息使用其他预测器,分数只是一个想法。 为了训练分类器,您需要一个矩阵 X,其中每一行对应一个图像。如果要使用坐标表示,这意味着所有图像都必须具有相同的大小,例如 M 乘 N。因此,图像的行将具有 M 乘 N 元素,并且值将是集群分配. y 就像我之前描述的那样。 【参考方案1】:为了训练分类器,您需要一个矩阵 X,其中每一行对应一个图像。如果要使用坐标表示,这意味着所有图像必须具有相同的大小,例如 M x N。因此,图像的行将具有 M 乘 N 个元素(特征),并且相应的特征值将是集群分配。类向量 y 将是您拥有的任何标签,这是您通过上面的 cmets 提到的六个不同类之一。您应该记住,如果您使用坐标表示,X 可能会变得非常高维,除非您有大量图像,否则您的分类器可能会表现得很差。如果您的图像很少,请考虑使用我在其中一个 cmets 中建议的属于集群的像素分数:这可以为您提供更短的特征描述,该特征描述不受旋转和平移的影响,并且可能会产生更好的分类。
【讨论】:
完美。你给了我另一个想法。为了避免在坐标表示的情况下可能导致的高维问题,我将尝试在集群上使用傅立叶形状描述符并将它们作为输入传递给 nn..我认为这会很好。以上是关于matlab中NN输入的坐标归一化的主要内容,如果未能解决你的问题,请参考以下文章