首页 > 其他分享 >tensorflow解决回归问题简单案列

tensorflow解决回归问题简单案列

时间:2023-03-19 12:15:15浏览次数:58  
标签:sess plt optimizer 回归 0.2 案列 train tf tensorflow

1 待拟合函数

img

noise服从均值为0,方差为15的正太分布,即noise ~ N(0,15)。

2 基于模型的训练

根据散点图分布特点,猜测原始数据是一个二次函数模型,如下:

y=ax^2+bx+c

其中,a,b,c为待训练参数

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

x=np.linspace(-10,10,200) #生成200个随机点
noise=np.random.normal(0,15,x.shape) #生成噪声
y=3*np.square(x)+4*x-5+noise

a=tf.Variable(.0)
b=tf.Variable(.0)
c=tf.Variable(.0)
y_=a*np.square(x)+b*x+c #构造一个非线性模型

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

optimizer=tf.train.AdamOptimizer(0.2) #Adam自适应学习率优化器

train=optimizer.minimize(loss) #最小化代价函数
init=tf.global_variables_initializer() #变量初始化
with tf.Session() as sess:
    sess.run(init)
    for epoch in range(601):
        sess.run(train)
        if epoch>0 and epoch%100==0:
            print(epoch,sess.run([a,b,c]),"mse:",sess.run(loss))
    pre=sess.run(y_)
    plt.figure()
    plt.scatter(x,y)
    plt.plot(x,pre,'-r',lw=4)
    plt.show()

img

经过600次训练后得到二次函数模型如下:

y=3.0134997x^2+3.5452387x-2.5591521

3 基于网络的训练

网络结构如下:

img

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

x=np.linspace(-10,10,200)[:,np.newaxis] #生成200个随机点
noise=np.random.normal(0,15,x.shape) #生成噪声
y=3*np.square(x)+4*x-5+noise

x_=tf.placeholder(tf.float32,[None,1]) #定义placeholder
y_=tf.placeholder(tf.float32,[None,1]) #定义placeholder

#定义神经网络中间层(layer_1)
w1=tf.Variable(tf.random_normal([1,500]))
b1=tf.Variable(tf.zeros([500]))
z1=tf.matmul(x_,w1)+b1
a1=tf.nn.relu(z1)

#定义神经网络中间层(layer_2)
w2=tf.Variable(tf.random_normal([500,500]))
b2=tf.Variable(tf.zeros([500]))
z2=tf.matmul(a1,w2)+b2
a2=tf.nn.relu(z2)

#定义神经网络输出层
w3=tf.Variable(tf.random_normal([500,1]))
b3=tf.Variable(tf.zeros([1]))
z3=tf.matmul(a2,w3)+b3

loss=tf.reduce_mean(tf.square(y_-z3))#二次代价函数

optimizer=tf.train.FtrlOptimizer(0.2) #Ftrl优化器

train=optimizer.minimize(loss) #最小化代价函数
init=tf.global_variables_initializer() #变量初始化
with tf.Session() as sess:
    sess.run(init)
    for epoch in range(6001):
        sess.run(train,feed_dict={x_:x,y_:y})
        if epoch>0 and epoch%1000==0:
            mse=sess.run(loss,feed_dict={x_:x,y_:y})
            print(epoch,mse)
    pre=sess.run(z3,feed_dict={x_:x,y_:y})
    plt.figure()
    plt.scatter(x,y)
    plt.plot(x,pre,'-r',lw=4)
    plt.show()   

img

注意:在网络出口处不要加上sigmoid、tanh、relu激活函数进行非线性变换,因为sigmoid函数会将回归值压缩到(0,1),tanh函数会将回归值压缩到(-1,1),relu函数会将回归值映射到(0,+oo),而真实值没有这些限制,导致损失函数的计算不合理,误差反馈较慢,模型不收敛。

另外,可以先将真实值y归一化,记为y1,再将回归值z3与z1比较,计算误差并调节网络权值和偏值,将z3逆归一化的值作为网络预测值。

5 常用优化器

#1.梯度下降优化器
optimizer=tf.train.GradientDescentOptimizer(0.2) 
#2.自适应学习率优化器
optimizer=tf.train.AdagradOptimizer(0.2) 
#3.自适应学习率优化器
optimizer=tf.train.RMSPropOptimizer(0.2) 
#4.Adam自适应学习率优化器
optimizer=tf.train.AdamOptimizer(0.2) 
#5.Adadelta优化器
optimizer=tf.train.AdadeltaOptimizer(0.2) 
#6.Proximal梯度下降优化器
optimizer=tf.train.ProximalGradientDescentOptimizer(0.2) 
#7.Proximal自适应学习率优化器
optimizer=tf.train.ProximalAdagradOptimizer(0.2) 
#8.Ftrl优化器
optimizer=tf.train.FtrlOptimizer(0.2) 

​ 声明:本文转自tensorflow解决回归问题简单案列

标签:sess,plt,optimizer,回归,0.2,案列,train,tf,tensorflow
From: https://www.cnblogs.com/zhyan8/p/17232728.html

相关文章

  • 基于tensorflow的RBF神经网络案例
    1前言在使用RBF神经网络实现函数逼近中,笔者介绍了使用Matlab训练RBF神经网络。本博客将介绍使用tensorflow训练RBF神经网络。代码资源见:RBF案例(更新版)这几天,笔者在......
  • 使用TensorFlow实现MNIST数据集分类
    1MNIST数据集MNIST数据集由70000张28x28像素的黑白图片组成,每一张图片都写有0~9中的一个数字,每个像素点的灰度值在0~255(0是黑色,255是白色)之间。MINST数据集是由Yann......
  • tensorflow中高维数组乘法运算
    1前言声明:本博客里的数组乘法运算是指矩阵乘法运算,不是对应元素相乘。在线性代数或高等代数中,我们学习了矩阵乘法,那么,什么样的高维数组才能相乘?tensorflow又是如何定义......
  • tensorflow中交叉熵损失函数详解
    1前言tensorflow中定义了3个交叉熵损失函数:softmax_cross_entropy_with_logits(logits,labels)softmax_cross_entropy_with_logits_v2(logits,labels)sparse_softm......
  • PyTorch学习笔记 8. 实现线性回归模型
    PyTorch学习笔记8.实现线性回归模型​​一、回归的概念​​​​1.概念​​​​2.目标​​​​3.应用​​​​4.训练线性回归的步骤​​​​二、数据集​​​​1.构......
  • python用回归模型对水泥生产关键温度点预测模型
    全文链接:http://tecdat.cn/?p=31930原文出处:拓端数据部落公众号分析师:XiangLi本项目目标为水泥生产关键生产数据的回归及预测(某一关键温度点的预测)。面临挑战如下所述:1......
  • tensorflow yolov3训练自己的数据集,详细教程
    这个教程是我在自己学习的过程中写的,当作一个笔记,写的比较详细在github上下载yolov3的tensorflow1.0版本:​​​https://github.com/YunYang1994/tensorflow-yolov3​​​......
  • tensorflow.keras.datasets 中关于imdb.load_data的使用说明
    python深度学习在加载数据时(num_words=10000)所代表的意义首先写一段深度学习加载数据集的代码:fromkeras.datasetsimportreuters(train_data,train_labels),(test_dat......
  • 人工智能python3+tensorflow人脸识别_使用 face-api.js 在你的浏览器中做人脸识别(基于
    我很兴奋地告诉你,终于可以在浏览器中运行人脸识别了!这篇文章我将介绍face-api.js,这个类库构建于tensorflow.js之上。它实现了多个CNNs(卷积神经网络)以解决人脸检测、......
  • 逻辑回归
    什么是逻辑回归?逻辑回归(LogisticRegression)是一种二分类模型,用于将数据分为两个不同的类别。它是一种广泛应用的模型,被用于各种领域,包括医学、金融、营销和社会科学。在......