TensorFlow实现简单线性回归

本文实例为大家分享了TensorFlow实现简单线性回归的具体代码,供大家参考,具体内容如下

简单的一元线性回归

一元线性回归公式:

其中x是特征:[x1,x2,x3,…,xn,]T
w是权重,b是偏置值

代码实现

导入必须的包

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import os

# 屏蔽warning以下的日志信息
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

产生模拟数据

def generate_data():
    x = tf.constant(np.array([i for i in range(0, 100, 5)]).reshape(-1, 1), tf.float32)
    y = tf.add(tf.matmul(x, [[1.3]]) + 1, tf.random_normal([20, 1], stddev=30))
    return x, y

x是100行1列的数据,tf.matmul是矩阵相乘,所以权值设置成二维的。
设置的w是1.3, b是1

实现回归

def myregression():
    """
    自实现线性回归
    :return:
    """
    x, y = generate_data()
    #     建立模型  y = x * w + b
    # w 1x1的二维数据
    w = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name='weight_a')
    b = tf.Variable(0.0, name='bias_b')

    y_predict = tf.matmul(x, a) + b

    # 建立损失函数
    loss = tf.reduce_mean(tf.square(y_predict - y))
    
    # 训练
    train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss=loss)

    # 初始化全局变量
    init_op = tf.global_variables_initializer()

  
    with tf.Session() as sess:
        sess.run(init_op)
        print('初始的权重:%f偏置值:%f' % (a.eval(), b.eval()))
    
        # 训练优化
        for i in range(1, 100):
            sess.run(train_op)
            print('第%d次优化的权重:%f偏置值:%f' % (i, a.eval(), b.eval()))
        # 显示回归效果
        show_img(x.eval(), y.eval(), y_predict.eval())

使用matplotlib查看回归效果

def show_img(x, y, y_pre):
    plt.scatter(x, y)
    plt.plot(x, y_pre)
    plt.show()

完整代码

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

def generate_data():
    x = tf.constant(np.array([i for i in range(0, 100, 5)]).reshape(-1, 1), tf.float32)
    y = tf.add(tf.matmul(x, [[1.3]]) + 1, tf.random_normal([20, 1], stddev=30))
    return x, y

def myregression():
    """
    自实现线性回归
    :return:
    """
    x, y = generate_data()
    # 建立模型  y = x * w + b
    w = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name='weight_a')
    b = tf.Variable(0.0, name='bias_b')

    y_predict = tf.matmul(x, w) + b

    # 建立损失函数
    loss = tf.reduce_mean(tf.square(y_predict - y))
    # 训练
    train_op = tf.train.GradientDescentOptimizer(0.0001).minimize(loss=loss)

    init_op = tf.global_variables_initializer()

    with tf.Session() as sess:
        sess.run(init_op)
        print('初始的权重:%f偏置值:%f' % (w.eval(), b.eval()))
        # 训练优化
        for i in range(1, 35000):
            sess.run(train_op)
            print('第%d次优化的权重:%f偏置值:%f' % (i, w.eval(), b.eval()))
        show_img(x.eval(), y.eval(), y_predict.eval())

def show_img(x, y, y_pre):
    plt.scatter(x, y)
    plt.plot(x, y_pre)
    plt.show()

if __name__ == '__main__':
    myregression()

看看训练的结果(因为数据是随机产生的,每次的训练结果都会不同,可适当调节梯度下降的学习率和训练步数)

35000次的训练结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Tensorflow实现神经网络拟合线性回归

    本文实例为大家分享了Tensorflow实现神经网络拟合线性回归的具体代码,供大家参考,具体内容如下 一.利用简单的一层神经网络拟合一个函数 y = x^2 ,其中加入部分噪声作为偏置值防止拟合曲线过拟合 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 生成-0.5到0.5间均匀发布的200个点,将数据变为二维,200行一列的数据 x_data = np.linspace(-0.5, 0.5

  • 使用tensorflow实现线性回归

    本文实例为大家分享了tensorflow实现线性回归的具体代码,供大家参考,具体内容如下 一.随机生成1000个点,分布在y=0.1x+0.3直线周围,并画出来 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt num_points = 1000 vectors_set = [] for i in range(num_points): x1 = np.random.normal(0.0,0.55)

  • TensorFlow神经网络构造线性回归模型示例教程

    先制作一些数据: import numpy as np import tensorflow as tf import matplotlib.pyplot as plt # 随机生成1000个点,围绕在y=0.1x+0.3的直线周围 num_points = 1000 vectors_set = [] for i in range(num_points): x1 = np.random.normal(0.0, 0.55) # np.random.normal(mean,stdev,size)给出均

  • tensorflow基本操作小白快速构建线性回归和分类模型

    目录 tensorflow是非常强的工具,生态庞大 tensorflow提供了Keras的分支 Define tensor constants. Linear Regression 分类模型 本例使用MNIST手写数字 Model prediction: 7 Model prediction: 2 Model prediction: 1 Model prediction: 0 Model prediction: 4 TF 目前发布2.5 版本,之前阅读1.X官方文档,最近查看2.X的文档. te

  • Tensorflow使用支持向量机拟合线性回归

    支持向量机可以用来拟合线性回归. 相同的最大间隔(maximum margin)的概念应用到线性回归拟合.代替最大化分割两类目标是,最大化分割包含大部分的数据点(x,y).我们将用相同的iris数据集,展示用刚才的概念来进行花萼长度与花瓣宽度之间的线性拟合. 相关的损失函数类似于max(0,|yi-(Axi+b)|-ε).ε这里,是间隔宽度的一半,这意味着如果一个数据点在该区域,则损失等于0. # SVM Regression #---------------------------------

  • TensorFlow实现iris数据集线性回归

    本文将遍历批量数据点并让TensorFlow更新斜率和y截距.这次将使用Scikit Learn的内建iris数据集.特别地,我们将用数据点(x值代表花瓣宽度,y值代表花瓣长度)找到最优直线.选择这两种特征是因为它们具有线性关系,在后续结果中将会看到.本文将使用L2正则损失函数. # 用TensorFlow实现线性回归算法 #---------------------------------- # # This function shows how to use TensorFlow to #

  • 运用TensorFlow进行简单实现线性回归、梯度下降示例

    线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(即此函数是否足够拟合训练集数据),挑选出最好的函数(cost function最小)即可. 单变量线性回归: a) 因为是线性回归,所以学习到的函数为线性函数,即直线函数: b) 因为是单变量,因此只有一个x. 我们能够给出单变量线性回归的模型: 我们常称x为feature,h(x)为hypothesis. 上面介绍的方法中,我们肯定有一个疑问,怎样能够看出线性

  • 用tensorflow构建线性回归模型的示例代码

    用tensorflow构建简单的线性回归模型是tensorflow的一个基础样例,但是原有的样例存在一些问题,我在实际调试的过程中做了一点自己的改进,并且有一些体会. 首先总结一下tf构建模型的总体套路 1.先定义模型的整体图结构,未知的部分,比如输入就用placeholder来代替. 2.再定义最后与目标的误差函数. 3.最后选择优化方法. 另外几个值得注意的地方是: 1.tensorflow构建模型第一步是先用代码搭建图模型,此时图模型是静止的,是不产生任何运算结果的,必须使用Session

  • 详解TensorFlow2实现线性回归

    目录 概述 MSE 线性回归 公式 梯度下降 线性回归实现 计算 MSE 梯度下降 迭代训练 主函数 完整代码 概述 线性回归 (Linear Regression) 是利用回归分析来确定两种或两种以上变量间相互依赖的定量关系. 对线性回归还不是很了解的同学可以看一下这篇文章: python深度总结线性回归 MSE 均方误差 (Mean Square Error): 是用来描述连续误差的一种方法. 公式: y_predict: 我们预测的值y_real: 真实值 线性回归 公式 w: weigh

  • 使用TensorFlow实现简单线性回归模型

    本文使用TensorFlow实现最简单的线性回归模型,供大家参考,具体内容如下 线性拟合y=2.7x+0.6,代码如下: import tensorflow as tf import numpy as np import matplotlib.pyplot as plt n = 201 # x点数 X = np.linspace(-1, 1, n)[:,np.newaxis] # 等差数列构建X,[:,np.newaxis]这个是shape,这一行构建了一个n维列向量([1,n]的矩阵) noi

随机推荐