欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TensorFlow学习笔记(二):TensorFlow实现线性回归模型

程序员文章站 2024-03-21 08:07:34
...

一、线性回归模型中所涉及到API

#导入TensorFlow包
import tensorflow as tf
#TensorFlow程序分为两个阶段:准备阶段和执行阶段
#--------------准备阶段--------------
#定义变量、定义函数、定义操作步骤等,中间隐藏着把变量转化为张量的步骤

#用tf.Variable来定义变量 
#注意:定义矩阵的写法([[],[],[]...])
a = tf.Variable([[2,3]])
b = tf.Variable([[4],[2]])

#矩阵相乘 math multiply
c = tf.matmul(a,b)

print('c----->',c)

#创建用0填充的矩阵
d = tf.zeros([2,4])

#平方
e = tf.square([2])

#平均值
f = tf.reduce_mean([1,3])

#均匀分布的随机数
g = tf.random_uniform([1,10])

#--------------执行阶段--------------
#获取一个能运行TensorFlow的session图,tf.session
#把准备阶段所定义的所有变量都放进session图里进行运行

with tf.Session() as sess:
        #初始化所有的变量
        init = tf.global_variables_initializer()
        sess.run(init)

        #用sess.run获取最终值
        print('a:',a)
        print('a =',sess.run(a))
        print('b =',sess.run(b))
        print('c =',sess.run(c))
        print('d =',sess.run(d))
        print('e =',sess.run(e))
        print('f =',sess.run(f))
        print('g =',sess.run(g))

TensorFlow学习笔记(二):TensorFlow实现线性回归模型

二、线性回归模型代码实现

train

# 一元的线性回归模型的训练
# 1.通过训练数据,推测出线性回归函数(y = w * x = b)中w和b的值
# 2.通过验证数据,验证得到的函数是否符合预期。

# 引入Tensorflow函数
import tensorflow as tf
# 引入绘图表(为了清晰了解训练结果)
import matplotlib.pyplot as plt
# 引入测试数据模块
import testData as td

# 1.获取训练数据
# 通过testData来模拟第三方接口
# get_train_data    获取训练数据 参数:data_length(获取数据的个数) 返回值:二维数组 [0]代表x(横坐标) [1]代表y(纵坐标)
# get_validate_data 获取验证数据 参数:data_length(获取数据的个数) 返回值:二维数组 [0]代表x(横坐标) [1]代表y(纵坐标)
trainData = td.get_train_data(200)
trainx = [v[0] for v in trainData]
trainy = [v[1] for v in trainData]

# 2.构造预测的线性回归函数 有= W * x + b
W = tf.Variable(tf.random_uniform([1]))
b = tf.Variable(tf.zeros([1]))
y = W * trainx + b

# 3.判断假设函数的好坏
# 代价函数
cost = tf.reduce_mean(tf.square(y - trainy))

# 4.调整假设函数
# 梯度下降算法找最优解
optimizer = tf.train.GradientDescentOptimizer(0.08)
train = optimizer.minimize(cost)

with tf.Session() as sess:
    ###########初始化所有变量值###########
    init = tf.global_variables_initializer()
    sess.run(init)

    #初始化W和b的值
    print("cost=",sess.run(cost),"W=",sess.run(W),"b=",sess.run(b))

    #循环运行
    for k in range(500):
        sess.run(train)
        #输出训练好的W和b
        print("cost=", sess.run(cost), "W=", sess.run(W), "b=", sess.run(b))
    print("执行完成!")

    #构造图形结构
    plt.plot(trainx, trainy, 'ro', label='train data')
    plt.plot(trainx, sess.run(y), label='tain result')
    plt.legend()
    plt.show()

TensorFlow学习笔记(二):TensorFlow实现线性回归模型
……
……
……
TensorFlow学习笔记(二):TensorFlow实现线性回归模型

test

import matplotlib.pyplot as plt
#引入测试数据
import testData as pt

validateData = pt.get_validate_data(40)
va_x = [v[0] for v in validateData]
va_y = [v[1] for v in validateData]

#训练结果
y = []
for x in va_x :
    y.append(x * 0.3 + 0.8)

#构造图形结构
plt.plot(va_x, va_y, 'ro', label = 'validate Data')
plt.plot(va_x, y, label = 'train result' )
plt.legend()
plt.show()

TensorFlow学习笔记(二):TensorFlow实现线性回归模型

引入testData

#引入Numpy
import numpy as np

#构造一个线性回归函数
#y = W * x + b
W = 0.3
b = 0.8


#生成测试数据
def get_train_data(data_lenght):
    train_arr = []
    for i in range(data_lenght):
        tr_x = np.random.uniform(0.0, 1.0)
        tr_y = tr_x * W + b + np.random.uniform(-0.02,0.02)
        train_arr.append([tr_x, tr_y]) #这里是什么意思 = =

    return train_arr

#生成校验数据
def get_validate_data(data_lenght):
    validate_arr = []
    for i in range(data_lenght):
        va_x = np.random.uniform(-0.0, 1.0)
        va_y = va_x * W + b + np.random.uniform(-0.02, 0.02)
        validate_arr.append([va_x,va_y])
    return validate_arr

重点内容
疑问:
1.train中循环不是很理解代码如何执行
2.append用法不了解

代码运行中碰到的问题:
1.虽然Anaconda默认环境下有自带的matplotlib包,但是TensorFlow环境下没有,需要在Anaonda prompt下安装matplotlib。

conda install  ......
conda list

2.testData需要自己写,感觉很想c里面的自己写的函数,后缀是py。

三、课后扩展

1.随机梯度下降

方式:刚在代码500次循环中,每次拿一个或部分训练点(不是全部)进行计算
优点:在大数据下训练更快
缺点:有可能得到不是全局的最优解,只是局部最优解

2.批量梯度下降

方式:每次拿所有训练点进行计算
优点:可以得到全局最优解
缺点:数据量大的时候,训练会很慢

相关标签: TensorFlow