使用张量流的非线性输入到输出映射(未定义范围)
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 通道的 mean
和 standard_deviation
。为了标准化图像,我们只需对每个通道执行 (x-mu)/sigma
。
既然你的数据像你说的那样是无界的,那么我们不能简单地除以一个标量。也许最好的方法是根据数据统计进行归一化。具体到您的情况,您也许可以找到 30 个维度中每个维度的 mean
和 standard_deviation
。
这个 post 更详细,可能会对您有所帮助。
我有一个一维输入数据数组 (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 通道的 mean
和 standard_deviation
。为了标准化图像,我们只需对每个通道执行 (x-mu)/sigma
。
既然你的数据像你说的那样是无界的,那么我们不能简单地除以一个标量。也许最好的方法是根据数据统计进行归一化。具体到您的情况,您也许可以找到 30 个维度中每个维度的 mean
和 standard_deviation
。
这个 post 更详细,可能会对您有所帮助。