利用tensorflow语法实现线性回归

#-*-coding:utf-8-*-
import   tensorflow  as  tf
#面向对象
class   MyLinearRegression(object):
    def  __init__(self):
        self.leaning_rate=0.1
    def build_data(self):
        """
        构建数据--y=0.7*x+0.8#100个样本,这些样本只有一个特征--
        :return: 真实的数据集
        """
        with tf.variable_scope("build_data"):
            #x=[100,1]
            #y=[100,1]
            #创建一个随机的[100,1]的张量
            #x就是一个随机初始化的[100,1]的张量
            x=tf.random_normal(shape=[100,1],mean=0.0,stddev=1.0,dtype=tf.float32,name='x')
            y=tf.matmul(x,[[0.7]])+0.8
            #创建权重为0.7,偏量为0.8的100条数据
        return  x,y
    def  get_weight(self):
        """
        获取权重
        :return:w
        """
        initial_value=tf.random_normal(shape=[1,1],mean=1.0,stddev=1.0)
        weight=tf.Variable(initial_value=initial_value,name='w')#随便取
        return  weight
    def  get_bias(self):
        """
        获取偏置
        :return:
        """
        initial_value = tf.random_normal(shape=[1, 1], mean=1.0, stddev=1.0)
        bias = tf.Variable(initial_value=initial_value, name='b')#随便取
        return bias
    def  linear_model(self,x):
        """
        构建线性模型
        :param x: 特征值
        :return:预测值
        """
        with  tf.variable_scope("linear_model"):
            #x*w+b==w,b-->随机初始化,后续需要不断的重新赋值,更改
            #随机初始化权重与偏置
            self.weight=self.get_weight()
            self.bias=self.get_bias()
            #构建线性关系
            y_predict=tf.matmul(x,self.weight)+self.bias
        return y_predict
    def  loss(self,y_true,y_predict):
        """
        计算均方差损失
        :param y_true: 真实值
        :param y_predict: 预测值
        :return: 均方误差损失
        """
        with  tf.variable_scope("loss"):
            #tf.square(y_true-y_predict)计算所有样本的误差的平方
            #tf.reduce_mean-求平均值
            loss=tf.reduce_mean(tf.square(y_true-y_predict))
        return  loss
    def  sgd(self,loss):
        """
        进行梯度下降优化
        :param  loss:损失
        :param loss:损失
        :return:优化op
        """
        with  tf.variable_scope("sgd"):
            #GradientDescentOptimizer-->sgd梯度下降优化算法
            #minimize(loss)--损失减少
            train_op=tf.train.GradientDescentOptimizer(self.leaning_rate).minimize(loss)
        return  train_op
    def  train(self):
        """
        训练
        构建线性模型
        :return:
        """
        #1、获取数据
        x,y_true=self.build_data()
        #2、构建线性模型
        y_predict=self.linear_model(x)
        #3、进行均方误差损失计算
        loss=self.loss(y_true,y_predict)
        #4、sgb梯度下降优化
        train_op=self.sgd(loss)
        #开启会话运行train_op
        with  tf.Session() as  ss:
            #显示初始化变量op
            ss.run(tf.global_variables_initializer())
            tf.summary.FileWriter("./tmp/",graph=ss.graph)
            for  i in range(120):
                #序列化events文件
                ss.run(train_op)
                print("第%d次的损失为:%f,权重为:%f,偏置为:%f"%(
                    i,
                    loss.eval(),
                    self.weight.eval(),
                    self.bias.eval()
                ))
#1、实例化对象
lr=MyLinearRegression()
#2、调用train方法
lr.train()


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值