我有一组1D输入数据(30,1)。我试图将其映射到输出数据(30,1)(带噪声)。我绘制了数据,它绝对是非线性和连续的。
我想训练神经网络来重现这种映射。我目前正在尝试使用tensorflow完成此任务。
我现在的问题是输出数据处于未定义的范围(例如-2.74230671e + 01,1.0000000000e + 03,6.34566772e + 02等),并且非线性张量流激活函数似乎都在-1之间和1? https://www.tensorflow.org/versions/r0.12/api_docs/python/nn/activation_functions_
我对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}))
答案 0 :(得分:1)
您必须对数据进行规范化才能使其正常工作,并且不一定必须在[-1,1]范围内。
以计算机视觉(CV)问题为例。一些论文所做的只是除以255.0
。其他论文,计算所有图像中每个RGB通道的mean
和standard_deviation
。为了规范化图像,我们只需在每个频道上(x-mu)/sigma
。
由于您的数据与您所说的无关,因此我们不能简单地除以标量。也许最好的方法是根据数据统计进行标准化。根据您的情况,您可能会找到30个维度中的每个维度的mean
和standard_deviation
。
此post更详细,可能会对您有所帮助。