下面的tensorflow上哪些激活和成本函数可能适合tf.nn学习先验未知的简单单变量非线性关系f(x) = x * x

当然,此不切实际的模型仅用于理解tf.nn mechanics 101的目的。



import numpy as np
import tensorflow as tf

x = tf.placeholder(tf.float32, [None, 1])
W = tf.Variable(tf.zeros([1,1]))
b = tf.Variable(tf.zeros([1]))
y = some_nonlinear_activation_function_HERE(tf.matmul(x,W) + b)
y_ = tf.placeholder(tf.float32, [None, 1])
cost = tf.reduce_mean(some_related_cost_function_HERE(y, y_))
learning_rate = 0.001
optimize = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

sess = tf.Session()
sess.run(tf.initialize_all_variables())
steps = 1000
for i in range(steps):
  sess.run(optimize,
    feed_dict={x: np.array([[i]])), y_: np.array([[i*i]])})
print("prediction: %f" % sess.run(y,
  feed_dict={x: np.array([[1100]])}))
# expected output near 1210000

最佳答案

经常使用的COST只是平方差:

def squared_error(y1,y2):
  return tf.square(y1-y2)


如果您愿意,还可以加一级或二级罚款。

但是在我看来,如果您想要一些有趣的东西,则您的神经网络中需要一个隐藏层。另外,如果您压缩输出并且目标是平方函数,则可能无法做很多事情。
我会做:

x = tf.placeholder(tf.float32, [None, 1])
#Hidden layer with ten neurons
W1 = tf.Variable(tf.zeros([1,10]))
b1 = tf.Variable(tf.zeros([10]))
h1 = some_nonlinear_activation_function(tf.matmul(x,W) + b)
W2 = tf.Variable(tf.zeros([10,1]))
b2 = tf.Variable(tf.zeros([1]))
#I am not squashing the output
y=tf.matmul(h1,W2)+b
cost = tf.reduce_mean(squared_error(y, y_))


同样,我不会使用0权重,而是使用更聪明的初始化方案(例如Xavier或He's),实际上归结为从几乎为零的权重开始,但由于各种原因而并非完全为零。
对于激活,您可以使用tanh,Sigmoid或ReLU或其他任何东西。

关于python - tensorflow 的非线性回归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39282060/

10-12 23:15