使用张量流的非线性输入到输出映射(未定义范围)

Nonlinear input to output mapping (undefined range) using tensorflow

我有一个一维输入数据数组 (30,1)。我试图将其映射到输出数据 (30,1)(带有噪声)。我已经绘制了数据,它绝对是非线性和连续的。

我想训练一个神经网络来重现这个映射。我目前正在尝试使用 tensorflow 完成此任务。

我现在的问题是输出数据在未定义的范围内(例如 -2.74230671e+01、1.00000000e+03、6.34566772e+02 等),非线性张量流激活函数似乎介于两者之间-1 和 1? https://www.tensorflow.org/versions/r0.12/api_docs/python/nn/activation_functions_

我对 tensorflow 等比较陌生,所以我的问题是,我该如何解决这个问题?

我以为我可以对数据进行均值标准化,但因为我实际上并不知道输出值的范围(可能是无界的)。

这是否可以使用 tensorflow 函数,或者我需要构建自己的函数吗?我正在使用的方法如下,我在其中尝试了 tf.nn.relu:

的不同功能
tf_x = tf.placeholder(tf.float32, x.shape)     # input x
tf_y = tf.placeholder(tf.float32, y.shape)     # output y

# neural network layers
l1 = tf.layers.dense(tf_x, 50, tf.nn.relu)     # tried different activation functions here
output = tf.layers.dense(l1, 1)                # tried here too

loss = tf.losses.mean_squared_error(tf_y, output)   
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.05)
train_op = optimizer.minimize(loss)

#train
for step in range(30):
_, l, pred = sess.run([train_op, loss, output], {tf_x: x, tf_y: y})
print(sess.run(loss, feed_dict={tf_x: x, tf_y: y}))

您一定要规范化数据才能正常工作,而且数据不一定要在 [-1, 1] 范围内。

以计算机视觉(CV)问题为例。有些论文所做的只是简单地除以255.0。其他论文,从所有图像计算每个 RGB 通道的 meanstandard_deviation。为了标准化图像,我们只需对每个通道执行 (x-mu)/sigma

既然你的数据像你说的那样是无界的,那么我们不能简单地除以一个标量。也许最好的方法是根据数据统计进行归一化。具体到您的情况,您也许可以找到 30 个维度中每个维度的 meanstandard_deviation

这个 post 更详细,可能会对您有所帮助。