Tensorflow 用神经网络逼近多维函数

Tensorflow 用神经网络逼近多维函数,tensorflow,neural-network,keras,Tensorflow,Neural Network,Keras,是否有可能用神经网络拟合或近似多维函数 假设我想根据一些给定的测量数据对函数f(x,y)=sin(x)+y进行建模。(f(x,y)被认为是基本真理,不为人所知)。如果可能的话,一些用Tensorflow或Keras编写的代码示例也会很棒 正如@AndreHolzner所说,在R^n的任何紧凑子集上,即使只有一个隐藏层,也可以使用您想要的神经网络 然而,在实践中,对于某些函数,神经网络可能必须非常大,有时无法训练(如果没有局部最小值,可能很难找到最佳权重)。因此,这里有一些实用的建议(不幸的是含糊

是否有可能用神经网络拟合或近似多维函数

假设我想根据一些给定的测量数据对函数f(x,y)=sin(x)+y进行建模。(f(x,y)被认为是基本真理,不为人所知)。如果可能的话,一些用Tensorflow或Keras编写的代码示例也会很棒

正如@AndreHolzner所说,在
R^n
的任何紧凑子集上,即使只有一个隐藏层,也可以使用您想要的神经网络

然而,在实践中,对于某些函数,神经网络可能必须非常大,有时无法训练(如果没有局部最小值,可能很难找到最佳权重)。因此,这里有一些实用的建议(不幸的是含糊不清,因为细节太依赖于您的数据,如果不多次尝试,很难预测):

  • 保持网络不太大(不幸的是,很难定义):你只会过度适应。你可能需要很多训练样本
  • 大量大小合理的层通常比合理数量的大层要好
  • 如果您对函数有一些先验知识,请使用它们:例如,如果您认为
    f
    中存在某种周期性(就像在您的示例中一样,但它可能更复杂),则可以将
    sin()
    函数添加到第一层的一些输出中(并非全部,这将为您提供真正的周期性输出)。如果你怀疑一个度为
    n
    的多项式,只需用
    增加输入
    x
    ,…
    x^n
    并对该输入进行线性回归,等等。这将比学习权重容易得多
  • 通用逼近定理在
    R^n
    的任何紧子集上成立,而不是在整个多维空间上成立。特别是,您永远无法预测比任何训练样本都大的输入值(例如,假设您训练的是0到100之间的数字,不要测试200,它将失败)
例如,您可以查看回归示例。要对更复杂的函数进行回归,需要使用更复杂的函数从
x
中获取
pred
,例如:

  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

事实上,即使是单隐层神经网络也是如此。在实践中,网络体系结构的选择非常重要。如果您已经有了测量的分析模型,例如
sin(x)+y
,您应该使用它,而不是使用一般模型,例如神经网络。谢谢您的提示。不幸的是,我不知道分析模型。。。