tensorflow实践-02:线性回归

来源:互联网 发布:网络电视成人频道源码 编辑:程序博客网 时间:2024/06/05 07:18

  为了进一步熟悉tensorflow的基本操作,下面通过一个线性回归的小例子简单展示一下tensorflow的基本使用流程。

数据

  由于是简单的线性回归,我们自己生成一份随即数据作为演示就可以了。

def createData(W,b):    X = np.linspace(-1,1,100)    Y = W*X + b + np.random.randn(*X.shape)*W*0.1    return X,Y

  生成数据如下:

  enter description here

构建数据流图

  上面生成的数据分布是二维平面上的直线,那么公式为y=f(x)=wx+b
X和Y是输入的训练数据,用占位符表示

    #X = tf.placeholder(tf.float32,shape = trainX.shape) 默认shape=None表示任意类型    #Y = tf.placeholder(tf.float32,shape = trainY.shape)    X = tf.placeholder(tf.float32)    Y = tf.placeholder(tf.float32)

  需要训练的参数是w和b,因为会在每一次迭代时更新,所以需要定义为变量

    W = tf.Variable(np.random.randn(),name='weight')    B = tf.Variable(np.random.randn(),name='bias')

  这里公式非常简单只有一个函数y=wx+b

    #也可以Y_pred = tf.add(tf.multiply(W,X) , b)       Y_pred = W*X + B 

定义损失函数

  这里用L2损失

    #也可以loss = tf.reduce_sum(tf.squared_difference(Y , Y_pred))    loss = tf.reduce_sum(tf.square(Y - Y_pred))

  正则化

    loss += 1e-6*tf.global_norm([W])

最小化损失

  使用GradientDescentOptimizer优化器,tensorflow内置了一些优化器,可以直接使用。

    trainOp = tf.train.GradientDescentOptimizer(0.001).minimize(loss)

训练

    epochs = 1000    with tf.Session() as sess:        sess.run(tf.initialize_all_variables())        for epoch in range(epochs):           w,b = sess.run([trainOp,W,B],feed_dict={X:trainX,Y:trainY})

  训练结束后得到最终的w和b,画出来看看结果是否正确:

enter description here

完整代码

原创粉丝点击