径向基函数网络中的特征向量

时间:2015-05-15 20:16:09

标签: machine-learning neural-network point-clouds

我正在尝试使用RBFNN进行点云重建,但我无法理解RBFNN中的特征向量是什么。

任何人都可以帮我理解这个。

达到目标的目标: http://www.creatis.insa-lyon.fr/site/sites/default/files/resize/bunny5-200x200.jpg

来自这样的输入: enter image description here

1 个答案:

答案 0 :(得分:3)

RBF网络主要涉及使用符合一组核心属性的线性函数组合来拟合数据 - 其中主要是径向对称。这些函数中的每一个的参数都是通过基于通过重复呈现输入而产生的错误的增量调整来学习的。

如果我理解(自从我使用其中一个网络以来已经很长时间了),您的问题与点云中的数据预处理有关。我相信你的点云中的每个点都应该作为一个输入。如果我理解正确,这些功能就是你的三个维度,因此每个点都可以被视为“特征向量”。

您还有其他选择,即隐藏层中径向基础神经元的数量,以及要使用的径向基函数(高斯是一种流行的首选)。网络培训和表面重建可以通过多种方式完成,但我相信这超出了问题的范围。

我不知道它是否会有所帮助,但这是一个简单的python实现的RBF网络执行函数逼近,具有一维输入:

import numpy as np
import matplotlib.pyplot as plt

def fit_me(x):
    return (x-2) * (2*x+1) / (1+x**2)

def rbf(x, mu, sigma=1.5):
    return np.exp( -(x-mu)**2 / (2*sigma**2));

# Core parameters including number of training
# and testing points, minimum and maximum x values
# for training and testing points, and the number
# of rbf (hidden) nodes to use
num_points = 100    # number of inputs (each 1D)
num_rbfs = 20.0     # number of centers
x_min = -5
x_max = 10

# Training data, evenly spaced points
x_train = np.linspace(x_min, x_max, num_points)
y_train = fit_me(x_train)

# Testing data, more evenly spaced points
x_test  = np.linspace(x_min, x_max, num_points*3)
y_test  = fit_me(x_test)

# Centers of each of the rbf nodes
centers = np.linspace(-5, 10, num_rbfs)

# Everything is in place to train the network
# and attempt to approximate the function 'fit_me'.

# Start by creating a matrix G in which each row
# corresponds to an x value within the domain and each 
# column i contains the values of rbf_i(x).
center_cols, x_rows = np.meshgrid(centers, x_train)
G = rbf(center_cols, x_rows)

plt.plot(G)
plt.title('Radial Basis Functions')
plt.show()

# Simple training in this case: use pseudoinverse to get weights
weights = np.dot(np.linalg.pinv(G), y_train)

# To test, create meshgrid for test points
center_cols, x_rows = np.meshgrid(centers, x_test)
G_test = rbf(center_cols, x_rows)

# apply weights to G_test
y_predict = np.dot(G_test, weights)

plt.plot(y_predict)
plt.title('Predicted function')
plt.show()

error = y_predict - y_test

plt.plot(error)
plt.title('Function approximation error')
plt.show()

首先,您可以探索向网络提供输入的方式以及如何使用RBF节点。这应该以直接的方式扩展到2D输入,虽然训练可能会涉及更多。

要进行适当的曲面重建,您可能需要表面的表示与此处学习的函数的表示完全不同。不知道如何采取最后一步。