Python 张量流的非线性回归

Python 张量流的非线性回归,python,machine-learning,neural-network,tensorflow,non-linear-regression,Python,Machine Learning,Neural Network,Tensorflow,Non Linear Regression,对于tf.nn到学习一个简单的单变量非线性关系f(x)=x*x,下面哪些关于tensorflow的激活函数和代价函数可以适用 当然,这种不切实际的模型仅用于理解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]))

对于tf.nn学习一个简单的单变量非线性关系
f(x)=x*x
,下面哪些关于
tensorflow
的激活函数和代价函数可以适用

当然,这种不切实际的模型仅用于理解
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

通常使用的成本只是平方差:

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的,实际上是从零权重开始,但由于各种原因,不完全是零。
对于激活,您可以使用tanh、sigmoid或ReLU或其他任何东西。

谢谢。我编辑OP w.r.t
从tf.nn学习。嗯,
tf.square
太具体了。我正在寻找一个更广义的非线性激活函数,它也可以用于其他非线性关系,例如
f(x)=x**3
等。它可以用于任何函数!假设您的目标是
x**3
您试图将网络的输出与
x**3
匹配,因此,例如,您可以尝试最小化输出与
x**3
w.r.t变量之间的平方误差之和!对于激活,您可以使用sigmoid、tanh或ReLU!也许我误解了你的问题,但坦率地说,我不知道你的意思。也许你想在一些线性激活中使用多项式来拟合更复杂的函数?但这和安并没有什么关系。