zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python-Tensorflow基础(三)-线性回归与非线性回归示例

Python基础 示例 Tensorflow 回归 线性 非线性
2023-09-14 09:13:04 时间

线性回归:

首先还是先贴上代码: 

import tensorflow as tf
import numpy as np

#可以看做为样本
#随机生成100个点
x_data =np.random.rand(100)
y_data =x_data*0.1+ 0.2

#构造一个线性模型
b = tf.Variable(1.)
k = tf.Variable(0.)
y = k *x_data + b

#定义二次代价函数
loss = tf.reduce_mean(tf.square(y_data-y))
#定义一个梯度下降法进行训练的优化器
optimizer =  tf.train.GradientDescentOptimizer(0.2)
#定义最小化代价函数
train = optimizer.minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for step in range(201):
        sess.run(train)
        if step%20 ==0:
            print(step,sess.run([k,b]))

代码分析:

这里就是简单定义了一个线性模型,作为已知的样本数据

import tensorflow as tf
import numpy as np

#可以看做为样本
#随机生成100个点
x_data =np.random.rand(100)
y_data =x_data*0.1+ 0.2

#构造一个线性模型
b = tf.Variable(1.)
k = tf.Variable(0.)
y = k *x_data + b

 然后自己构造一个根据数据特征构造模型:

#构造一个线性模型
b = tf.Variable(1.)
k = tf.Variable(0.)
y = k *x_data + b

这里用到的优化器和二次函数在后面会给详细的讲解,这里就无脑用就行了

#定义二次代价函数
loss = tf.reduce_mean(tf.square(y_data-y))

#定义一个梯度下降法进行训练的优化器
optimizer =  tf.train.GradientDescentOptimizer(0.2)

#定义最小化代价函数
train = optimizer.minimize(loss)

init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for step in range(201):
        sess.run(train)
        if step%20 ==0:
            print(step,sess.run([k,b]))

 

非线性回归:

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

#使用numpy生成200个随机点
#生成范围[-0.5,0.5]的200个点,下面生成200行1列的数据
#但是之后要使用二维数据,因此增加一个维度
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]#,np.newaxis相当于增加一个维度 :200*1
noise = np.random.normal(0,0.02,x_data.shape)
y_data = np.square(x_data) + noise


#定义两个placeholder
#下面[]里面表示行不确定,列只有一列
x = tf.placeholder(tf.float32,[None,1])#None 表示任意行 与样本形状对应
#None的大小取决于传入的数据格式
y = tf.placeholder(tf.float32,[None,1])

#定义神经网络中间层
#输入层是x 输出层是y  中间层作为调整
#神经元定义为[1,10],是因为输入的神经元是1个,中间层的神经元定义了10个

#权重
Weight_L1 = tf.Variable(tf.random_normal([1,10]))
#偏置值
biases_L1 = tf.Variable(tf.zeros([1,10]))
#信号的总和
Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1
#L1作为中间层的输出,用双曲正切函数作用于信号的总和
L1 = tf.nn.tanh(Wx_plus_b_L1)

#定义神经网络输出层
#用于连接输入和输出层
Weight_L2 = tf.Variable(tf.random_normal([10,1]))
#输出层神经元只有一个,所以是[1,1]
biases_L2 = tf.Variable(tf.zeros([1,1]))
Wx_plus_b_L2 = tf.matmul(L1,Weight_L2) + biases_L2
#通过接口函数得到预测值
prediction = tf.nn.tanh(Wx_plus_b_L2)


#二次代价函数
loss = tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法训练
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)


with tf.Session() as sess:
    #变量初始化
    sess.run(tf.global_variables_initializer())
    for _ in range(2000):
        #进行训练
        sess.run(train_step,feed_dict={x:x_data,y:y_data})

    #获得预测值
    prediction_value = sess.run(prediction, feed_dict={x:x_data})
    #画图
    plt.figure()
    plt.scatter(x_data,y_data)
    plt.plot(x_data,prediction_value,'r-',lw=5)
    plt.show()

 演示训练结果: