是否可以使用神经网络拟合或近似多维函数?
假设我想从某些给定的测量数据中建模函数f(x,y)= sin(x)+ y。 (f(x,y)被认为是基础事实并且未知)。此外,如果可能的话,一些用Tensorflow或Keras编写的代码示例会很棒。
答案 0 :(得分:1)
正如@AndreHolzner所说,theoretically you can approximate any continuous function具有神经网络以及你想要的R^n
的任何紧凑子集,即使只有一个隐藏层。
然而,在实践中,神经网络对于某些功能可能必须非常大,并且有时是无法处理的(如果没有达到局部最小值,则可能很难找到最佳权重)。所以这里有一些实用的建议(不幸的是模糊不清,因为细节过多地依赖于您的数据而且没有多次尝试就很难预测):
f
中存在某种周期性(如您的示例中,但可能更复杂),则可以添加sin()
函数到第一层的一些输出(不是全部,这将给你一个真正的周期性输出)。如果您怀疑某个度为n
的多项式,只需使用x
,... x²
增加输入x^n
,并对该输入使用线性回归等。比学习重量容易得多。R^n
的任何紧致子集上都是正确的,而不是在整个多维空间上。特别是,您永远无法预测输入的值比任何训练样本大(例如,您训练的数字从0到100,不在200上测试,它会失败)。 有关回归的示例,您可以查看here。要回归更复杂的函数,您需要使用更复杂的函数从pred
获取x
,例如:
n_layers = 3
x = tf.placeholder(shape=[-1, n_dimensions], dtype=tf.float32)
last_layer = x
# Add n_layers dense hidden layers
for i in range(n_layers):
last_layer = tf.layers.dense(inputs=last_layer, units=128, activation=tf.nn.relu)
# Get the output prediction
pred = tf.layers.dense(inputs=last_layer, units=1, activation=None)
# Get the cost, training op, etc, just like in the linear regression example