使用TensorFlow进行线性回归

1.导入模块

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

from matplotlib import pyplot as plt
%matplotlib inline

#导入tensorflow模块
import tensorflow as tf

2.生成训练数据

X_train = np.linspace(0,10,num=20)+np.random.randn(20)
Y_train = np.linspace(1,4,num=20)+np.random.randn(20)
n_samples = 20

3.模拟构造线性方程

由于是线性回归,因此表达式可以表示为:f(x)=Wx+b —-> y = Wx+b

tensorflow的办法是,使用X,Y作为占位符,并使用随机的W,b

#创建X,Y占位符
X = tf.placeholder('float')
Y = tf.placeholder('float')

#随机生成一个W,b,作为斜率和截距
W = tf.Variable(np.random.randn())
b = tf.Variable(np.random.randn())

#根据模拟线性方程得出预测值
y_pre = W*X+b

4.构造成本函数

#成本函数cost:是实际输出和预测输出之间的方差,这也称为最小二乘法。 
cost = tf.reduce_sum(tf.pow(y_pre-Y,2))/n_samples

5.梯度下降

#learning_rate:学习率,是进行训练时在最陡的梯度方向上所采取的「步」长;
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

6.TensorFlow初始化,并进行训练

#tensorflow初始化
init = tf.global_variables_initializer()

#开始训练
with tf.Session() as sess:
    #初始化
    sess.run(init)
    #训练所有数据,50次循环
    for epoch in range(50):

        for (x,y) in zip(X_train,Y_train):
            #用真实值x,y代替占位符X,Y,每次循环都执行梯度下降算法
            sess.run(optimizer,feed_dict={X:x,Y:y})

        #每执行50次显示运算结果
        if True:
            #用训练数据替换占位符,计算出cost最小二乘法偏差和
            c = sess.run(cost,feed_dict={X:X_train,Y:Y_train})
            print('Epoch:','%04d'%(epoch+1),'cost=','{:.9f}'.format(c),
                  'W=',sess.run(W),'b=',sess.run(b))

    print('Optimization Finished!')

    #数据可视化
    plt.plot(X_train, Y_train, 'ro', label='Original data')
    #f(x) = w*x + b
    plt.plot(X_train, sess.run(W) * X_train + sess.run(b), label='Fitted line')
    plt.legend()

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值