首页 > 其他分享 >使用 TensorFlow 自动微分和神经网络功能估算线性回归的参数(Estimate parameters for linear regression using automatic differe

使用 TensorFlow 自动微分和神经网络功能估算线性回归的参数(Estimate parameters for linear regression using automatic differe

时间:2023-05-25 09:12:09浏览次数:51  
标签:loss plt parameters 10 np using tf TensorFlow

大多数的深度学习框架至少都会具备以下功能:

(1)张量运算 (2)自动微分 (3)神经网络及各种神经层

TensorFlow 框架亦是如此。在《深度学习全书 公式+推导+代码+TensorFlow全程案例》—— 洪锦魁主编 清华大学出版社 ISBN 978-7-302-61030-4 这本书第3章 《TensorFlow架构与主要功能》这一章节中,介绍了使用 TensorFlow 架构的自动微分功能和神经网络功能估算简单线性回归参数的方法,分享给大家~

1. 使用 TensorFlow 自动微分求解简单线性回归的参数(w, b)

 1 # 载入库
 2 import numpy as np
 3 import tensorflow as tf
 4 import matplotlib.pyplot as plt
 5 plt.ion()
 6 
 7 
 8 # 定义损失函数为均方误差MSE=(sum(y-y0)^2)/n
 9 def loss(y, y_pred):
10     # tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴上的的平均值
11     return tf.reduce_mean(tf.square(y - y_pred))
12 
13 
14 # 定义预测值函数,即模型函数 y = wx + b
15 def predict(X):
16     return w * X + b
17 
18 
19 # 定义训练函数,在自动微分中需重新计算损失函数值,再利用梯度下降法求解 w 和 b
20 def train(X, y, epochs=40, lr=0.0001):
21     current_loss = 0                              # 损失函数值
22     for epoch in range(epochs):                   # 执行训练周期
23         with tf.GradientTape() as t:              # 自动微分
24             # 当声明为变量(tf.Variable)时,该变量会自动参与自动微分,但声明为常熟(tf.constant)时,
25             # 如欲参与自动微分,则需额外设定 g.watch()
26             t.watch(tf.constant(X))               # 创建 TensorFlow 常数参与自动微分
27             current_loss = loss(y, predict(X))    # 计算损失函数值
28 
29         dw, db = t.gradient(current_loss, [w, b])  # 取得 w, b 的梯度
30 
31         # 更新权重:新权重 = 原权重 — 学习率(learning_rate) * 梯度(gradient)
32         # assign_sub 函数相当于 -=
33         w.assign_sub(lr * dw)  # w -= lr * dw
34         b.assign_sub(lr * db)  # b -= lr * db
35 
36         # 显示每一训练周期的损失函数
37         print(f'Epoch {epoch}: Loss: {current_loss.numpy()}')
38 
39 
40 # 产生线性随机数据100批,这些数据介于0-50数值之间
41 n = 100
42 X = np.linspace(0, 50, n)
43 y = np.linspace(0, 50, n)
44 
45 # 给数据添加一些噪声 (noise),np.random.uniform是从一个均匀分布的区域中进行随机采样
46 X += np.random.uniform(-10, 10, n)
47 y += np.random.uniform(-10, 10, n)
48 
49 # w、b 初始值均设为 0
50 w = tf.Variable(0.0)
51 b = tf.Variable(0.0)
52 
53 # 执行训练
54 train(X, y)
55 
56 # 打印经过训练后 w、b 的最佳解
57 print(f'w={w.numpy()}, b={b.numpy()}')
58 # 显示预测结果
59 plt.scatter(X, y, label='data')
60 plt.plot(X, predict(X), 'r-', label='predicted')
61 plt.legend()

代码运行结果:

由上图可知,回归线确实居于样本点中线,拟合效果甚佳。

2. 使用 TensorFlow 完全连接层估算简单线性回归的参数(w, b)

 1 # 载入库
 2 import numpy as np
 3 import tensorflow as tf
 4 import matplotlib.pyplot as plt
 5 plt.ion()
 6 
 7 # 产生线性随机数据100批,这些数据介于0-50数值之间
 8 n = 100
 9 X = np.linspace(0, 50, n)
10 y = np.linspace(0, 50, n)
11 
12 # 给数据添加一些噪声 (noise),np.random.uniform是从一个均匀分布的区域中进行随机采样
13 X += np.random.uniform(-10, 10, n)
14 y += np.random.uniform(-10, 10, n)
15 
16 # 建立模型:这里仅仅使用一个完全连接层,并且输入只有一个神经元X,输出也只有一个神经元y。
17 # Dense本身有一个参数use_bias,即是否有偏差项,默认为true,即除了一个神经元输出外,还会有一个偏差项,
18 # 这样的设定等价于 y=wx+b
19 # 定义完全连接层(Dense): units:输出神经元个数,input_shape:输入神经元个数
20 layer1 = tf.keras.layers.Dense(units=1, input_shape=[1])
21 # 神经网路包含一层完全连接层
22 model = tf.keras.Sequential([layer1])
23 
24 # 定义模型的损失函数(loss)为 MSE,优化器(optimizer)为 Adam
25 model.compile(loss='mean_squared_error',
26               optimizer=tf.keras.optimizers.Adam())
27 # 训练模型,训练过程的损失函数变化都会存在 history 中
28 history = model.fit(X, y, epochs=1000, verbose=False)
29 
30 # 训练过程绘图,绘制损失函数值,损失函数值会随着训练周期越来越小
31 plt.figure()
32 plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei']
33 plt.rcParams['axes.unicode_minus'] = False
34 plt.xlabel('训练周期', fontsize=20)
35 plt.ylabel("损失函数(loss)", fontsize=20)
36 plt.plot(history.history['loss'])
37 
38 # 获取模型参数
39 w = layer1.get_weights()[0][0][0]
40 b = layer1.get_weights()[1][0]
41 print(f"w:{w:.4f} , b:{b:.4f}")
42 
43 # 利用 w 和 b 进行绘图显示回归线
44 plt.figure()
45 plt.scatter(X, y, label='data')
46 plt.plot(X, X * w + b, 'r-', label='predicted')
47 plt.legend()

代码运行结果:

 

由以上图可知,回归线拟合效果甚佳。与自动微分相比,这种方法程序更简单,只要设定好模型结构、损失函数、优化器后,进行拟合训练即可。

标签:loss,plt,parameters,10,np,using,tf,TensorFlow
From: https://www.cnblogs.com/ttweixiao-IT-program/p/17222786.html

相关文章

  • C#学习笔记 - using语句
    using语句某些类型的非托管对象有数量限制或很耗费系统资源,在代码使用完他们后,尽快释放他们是很重要的using语句有助于简化这一过程,并确保这些资源被适当的处理(0)资源指实现了System.IDisposable接口的类或结构.IDisposalbe接口中有个Dispose的方法,使用这个方法去处置......
  • Paper Reading: forgeNet a graph deep neural network model using tree-based ensem
    目录研究动机文章贡献本文方法图嵌入深度前馈网络forgeNet特征重要性评估具体实现模拟实验合成数据生成实验评估实验结果真实数据应用BRCA数据集microRNA数据Healthyhumanmetabolomics数据集优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重......
  • 【836】Cannot import tensorflow_text
    Ref:Cannotimporttensorflow_textSometimesyouneedtoreinstallandupdatetensorflowtheninstalltensorflow_text.(Becauseyouneedyourtensorflow.__version__andtensorflow_text.__version__tohavethesameversion)Makesuretensorflowandtensor......
  • java.sql.SQLException: Access denied for user 'root'@'localhost' (using password
    org.apache.ibatis.exceptions.PersistenceException:###Errorqueryingdatabase.Cause:java.sql.SQLException:Accessdeniedforuser'root'@'localhost'(usingpassword:YES)###Theerrormayexistincom/itheima/mapper/BrandMapper.j......
  • Unzipping Files In iOS Using ZipArchive
    Inthistutorial,IamgoingtodemonstratehowyoucanzipandunzipfilesfromwithinyouriOSapplications.WewillbeusingathirdpartylibrarycalledZipArchivetoachievethis.Whilethereareacouplesolutionsouttheretozipandunzipfiles,......
  • [7]数据科学-【8】TensorFlow库
    TensorFlow是一个广泛使用的机器学习和深度学习框架,它提供了丰富的工具和库,用于构建、训练和部署各种人工智能模型。本教程将带你从头开始学习如何使用TensorFlow库进行机器学习任务。我们将依次介绍TensorFlow的基本概念、张量操作、构建模型、训练模型和保存模型的方法。1.安装T......
  • 关于同时运行多个tensorflow模型时线程创建失败
    OpenMP:"libgomp:Threadcreationfailed:Resourcetemporarilyunavailable"whencoderunasregularuser这几天在跑代码的时候,因为模型需要调参,方便起见打算同时运行25个程序。但是在使用bash脚本,同时启动25个进程的时候,发现制启动了12个进程。尝试用vscode打开调试模式,......
  • ISL学习——tensorflow部分指令
    tf.keras.layers.Sequential()#用来描述神经网络的结构,其中Sequential()里面的参数是用来描述从输入层到输出层的网络结构。modnn=tf.keras.Sequential([tf.keras.layers.Dense(units=10,#参数为正整数,表示输出空间的维数为10维......
  • Tensorflow变量管理及模型持久化,实现实现线性回归
    变量管理随着神经网络的结构更加复杂,参数更多时,需要一个更好的方式来传递和管理变量。在TF中提供了通过变量的名字来创建或者获取一个变量的机制,通过这个机制不同函数可以直接通过变量的名字来直接使用变量。这机制主要是通过tf.get_variable和tf.variable_scope实现的。tf.get_......
  • Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
    原文链接:http://tecdat.cn/?p=23689 最近我们被客户要求撰写关于长短期记忆神经网络的研究报告,包括一些图形和统计输出。本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测 ( 点击文末“阅读原文”获取完整代码数据******** )。在本文中,你将看到如何使用......