【深度学习】TensorFlow深度模型构建:训练一元线性回归模型

news2024/7/6 19:33:56

文章目录

  • 1. 生成拟合数据集
  • 2. 构建线性回归模型数据流图
  • 3. 在Session中运行已构建的数据流图
  • 4. 输出拟合的线性回归模型
  • 5. TensorBoard神经网络数据流图可视化
  • 6. 完整代码

本文讲解:

以一元线性回归模型为例,

  • 介绍如何使用TensorFlow 搭建模型 并通过会话与后台建立联系,并通过数据来训练模型,求解参数, 直到达到预期结果为止。
  • 学习如何使用TensorBoard可视化工具来展示网络图、张量的指标变化、张量的分布情况等。

设给定一批由 y=3x+2生成的数据集( x ,y ),建立线性回归模型h(x)= wx + b ,预测出 w=3 和 b=2。

 

1. 生成拟合数据集

数据集只含有一个特征向量,注意误差项需要满足高斯分布(正态分布),程序使用了NumPy和Matplotlib库。

  • NumPy是Python的一个开源数值科学计算库,可用来存储和处理大型矩阵
  • Matplotlib是Python的绘图库,它可与NumPy一起使用,提供了一种有效的MATLAB开源替代方案。

其代码如下:

# 首先导入3个库
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

# 随机产生100个数据点,随机概率符合高斯分布(正态分布)
num_points = 100
vectors_set = []
for i in range(num_points):
    # Draw random samples from a normal (Gaussian) distribution.
    x1 = np.random.normal(0., 0.55)
    y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)
    # 坐标点
    vectors_set.append([x1, y1])
# 定义特征向量x
x_data = [v[0] for v in vectors_set]
# 定义标签向量y
y_data = [v[1] for v in vectors_set]


# 按[x_data,y_data]在X-Y坐标系中以打点方式显示,调用plt建立坐标系并将值输出
plt.scatter(x_data, y_data, c='b')
plt.show()

在这里插入图片描述

 

2. 构建线性回归模型数据流图

# 利用TensorFlow随机产生w和b,为了图形显示需要,分别定义名称 myw 和 myb
w = tf.Variable(tf.compat.v1.random_uniform([1], -1., 1.), name='myw')
b = tf.Variable(tf.zeros([1]), name='myb')
# 根据随机产生的w和b,结合上面随机产生的特征向量x_data,经过计算得出预估值
y = w * x_data + b
# 以预估值y和实际值y_data之间的均方差作为损失
loss = tf.reduce_mean(tf.square(y - y_data, name='mysquare'), name='myloss')
# 采用梯度下降法来优化参数
optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss, name='mytrain')

 

3. 在Session中运行已构建的数据流图

# global_variables_initializer初始化Variable等变量
sess = tf.compat.v1.Session()
init = tf.compat.v1.global_variables_initializer()
sess.run(init)
print("w=", sess.run(w), "b= ", sess.run(b), sess.run(loss))
# 迭代20次train
for step in range(20):
    sess.run(train)
    print("w=", sess.run(w), "b=", sess.run(b), sess.run(loss))

输出w和b,损失值的变化情况,可以看到损失值从0.42降到了0.001。当然每次拟合的结果都不一致。
在这里插入图片描述

 

4. 输出拟合的线性回归模型

plt.scatter(x_data, y_data, c='b')
plt.plot(x_data, sess.run(w) * x_data + sess.run(b))
plt.show()

在这里插入图片描述

 

5. TensorBoard神经网络数据流图可视化

TensorBoard 是 TensorFlow 的可视化工具包 , 使用者通过TensorBoard可以将代码实现的数据流图以可视化的图形显示在浏览器中,这样方便使用者编写和调试TensorFlow数据流图程序。

首先,将数据流图写入到文件中

# 写入磁盘,以供TensorBoard在浏览器中展示
writer = tf.compat.v1.summary.FileWriter("./mytmp", sess.graph)

运行该代码后就可以将整个神经网络节点信息写入./mytmp目录下。

 
打开终端,执行如下命令

tensorboard --logdir=./tensflow-demo/mytmp

Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.15.1 at http://localhost:6007/ (Press CTRL+C to quit)

访问 http://localhost:6007/,如下图生成的神经网络数据流图

在这里插入图片描述

通过添加参数--bind_all 将图暴露给网络。

 

6. 完整代码

# 首先导入3个库
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

# 随机产生100个数据点,随机概率符合高斯分布(正态分布)
num_points = 100
vectors_set = []
for i in range(num_points):
    # Draw random samples from a normal (Gaussian) distribution.
    x1 = np.random.normal(0., 0.55)
    y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)
    # 坐标点
    vectors_set.append([x1, y1])
# 定义特征向量x
x_data = [v[0] for v in vectors_set]
# 定义标签向量y
y_data = [v[1] for v in vectors_set]

# 按[x_data,y_data]在X-Y坐标系中以打点方式显示,调用plt建立坐标系并将值输出
# plt.scatter(x_data, y_data, c='b')
# plt.show()

tf.compat.v1.disable_v2_behavior()

# 利用TensorFlow随机产生w和b,为了图形显示需要,分别定义名称myw 和 myb
w = tf.Variable(tf.compat.v1.random_uniform([1], -1., 1.), name='myw')
b = tf.Variable(tf.zeros([1]), name='myb')
# 根据随机产生的w和b,结合上面随机产生的特征向量x_data,经过计算得出预估值
y = w * x_data + b
# 以预估值y和实际值y_data之间的均方差作为损失
loss = tf.reduce_mean(tf.square(y - y_data, name='mysquare'), name='myloss')
# 采用梯度下降法来优化参数
optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss, name='mytrain')

# global_variables_initializer初始化Variable等变量
sess = tf.compat.v1.Session()
init = tf.compat.v1.global_variables_initializer()
sess.run(init)
print("w=", sess.run(w), "b= ", sess.run(b), sess.run(loss))
# 迭代20次train
for step in range(20):
    sess.run(train)
    print("w=", sess.run(w), "b=", sess.run(b), sess.run(loss))

# 写入磁盘,􏰀供TensorBoard在浏览器中展示
# writer = tf.compat.v1.summary.FileWriter("./mytmp", sess.graph)
#
plt.scatter(x_data, y_data, c='b')
plt.plot(x_data, sess.run(w) * x_data + sess.run(b))
plt.show()

因为运行的是TensorFlow 1.x 系统运行的是 TensorFlow 2.x.,所以运行过程中有两个问题:

1.没有Session

在 TF2 中可以通过 tf.compat.v1.Session() 访问会话

 

2.loss passed to Optimizer.compute_gradients should be a function when eager execution is enabled

在代码前面添加如下代码,屏蔽v2的行为

tf.compat.v1.disable_v2_behavior()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能优化算法应用:基于松鼠算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于松鼠算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于松鼠算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.松鼠算法4.实验参数设定5.算法结果6.参考文献7.MA…

使用opencv的Laplacian算子实现图像边缘检测

1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题,也是经典的技术难题之一。如何快速、精确地提取图像边缘信息,一直是国内外的研究热点,同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…

黑马头条--day01.环境搭建

一.前言 该项目学习自黑马程序员,由我整理如下,版权归黑马程序员所有 二.环境搭建 1.数据库 第一天,先创建如下库和表: sql文件如下: CREATE DATABASE IF NOT EXISTS leadnews_user DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_…

内存泄漏排查与预防

前言 内存泄漏问题,在C程序中经常会被开发测试人员忽略,最终会在客户运行现场因为内存泄漏最后导致程序内存耗尽,最后崩溃,从而影响客户的生产环境,导致异常发生。因为内存泄漏是一个共性的问题,所有的C程序…

html的学习笔记

开发工具:vscode 文字标签 h1:一级标题,h2:二级标题h6 p:段落标签 hr:分隔线 br:换行 strong/b:文字加粗 ins/u:下划线 em/i:倾斜 del/s:删除线 媒体标签 图片…

Vue前端与后端放在一起的搭建方式

1.首先把后端项目搭建好 去到项目的存放位置 2.然后cmd黑窗口输入命令创建vue项目 3.创建成功后回到后端项目进行合并 3.1在File处选择Project Structure 3.2选择模块 3.3找到自己的vue项目 3.4疯狂next最后create 3.5选择Apply并确定OK,恭喜您创建成功了 二、启动…

Star 4.1k!Gitee GVP开源项目!新一代桌面应用开发框架 ElectronEgg!

前言 随着现代技术的快速升级迭代及发展,桌面应用开发已经变得越来越普及。然而对于非专业桌面应用开发工程师在面对这项任务时,可能会感到无从下手,甚至觉得这是一项困难的挑战。 本篇文章将分享一种新型桌面应用开发框架 ElectronEgg&…

自动驾驶学习笔记(十八)——Lidar感知

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 Lidar感知 运动补偿 点云分割 总结…

day34算法训练|贪心算法

1005.K次取反后最大化的数组和 两次贪心算法思路 1. 数组中有负数时,把绝对值最大的负数取反 2. 数组全为非负数时,一直取反最小的那个数 步骤: 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小…

Linux--Docker容器(1)

这里写目录标题 简介名词解释作用 指令在本地创建容器的过程:(这里以tomcat为例)访问容器端口映射目录挂载验证端口映射验证目录挂载 删除镜像多小组访问容器mysql容器 简介 名词解释 Docker镜像:可以将镜像理解为面向对象的类&a…

Axure的动态图使用以及说明

认识Axure动态图 Axure动态图是Axure中的一种功能,它允许用户在原型中添加动画效果和交互动作,使原型更加生动和具有真实的用户体验。用户可以通过添加动态图来展示页面过渡、按钮点击、下拉菜单等交互操作的效果。 这是:就是我们今天要叫的…

深入理解模板引擎:解锁 Web 开发的新境界(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【Spark精讲】Spark作业执行原理

目录 基本流程 主要组件 Driver端 Executor端 Job提交执行流程 Task提交 Task执行 基本流程 用户编写的Spark应用程序最开始都要初始化SparkContext。 用户编写的应用程序中,每执行一个action操作,就会触发一个job的执行,一个应用程…

高级前端开发工程师

岗位需求 熟练掌握前端主流框架Vue、React、Angular,至少熟练掌控Vue全家桶 文章目录 岗位需求前言一、Vue框架二、React框架三、Angular框架四、什么是Vue全家桶前言 -那就看你表哥的电脑里有没有硬盘 -我不敲键盘 一、Vue框架 Vue(读音为/vjuː/,类似于"view"…

JedisCluster 通过 Pipeline 实现两套数据轮换更新

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、整体流程 1.1 大致流程 1.2 流程代码解释 二、从数据库里查数据 2.1 SQL语句 三、更新当前前缀 3.1 设置前缀常量 3.2 初…

金智融门户(统一身份认证)同步数据至钉钉通讯录

前言:因全面使用金智融门户和数据资产平台,二十几个信息系统已实现统一身份认证和数据同步,目前单位使用的钉钉尚未同步组织机构和用户信息,职工入职、离职、调岗时都需要手工在钉钉后台操作,一是操作繁琐,二是钉钉通讯录更新不及时或经常遗漏,带来管理问题。通过金智融…

【网络安全】网络防护之旅 - 非对称密钥体制的解密挑战

🌈个人主页:Sarapines Programmer🔥 系列专栏:《网络安全之道 | 数字征程》⏰墨香寄清辞:千里传信如电光,密码奥妙似仙方。 挑战黑暗剑拔弩张,网络战场誓守长。 目录 😈1. 初识网络安…

Python将已标注的两张图片进行上下拼接并修改、合并其对应的Labelme标注文件(v2.0)

Python将已标注的两张图片进行上下拼接并修改、合并其对应的Labelme标注文件(v2.0) 前言前提条件相关介绍实验环境上下拼接图片并修改、合并其对应的Labelme标注文件代码实现输出结果 前言 此版代码,相较于Python将已标注的两张图片进行上下拼…

Centos开机进入grub命令行模式进入不了操作系统

环境:没有linux命令,没有initrd命令,没有init6命令 由于删除了/boot/efi/EFI/centos/grub.cfg ,重启服务器后,无法进入原来正常的系统,进入了grub命令行界面 备注:对于centos7/8/openEuler: 如果…

VR云游打造沉浸式文旅新体验,延伸智慧文旅新业态

从“跃然纸上”到“映入眼帘”,随着国家数字化战略的深入实施,文旅产业的数字化转型正在不断加快,“沉浸式”逐渐成为了文旅消费新热点。VR技术与文旅产业相融合,新产品、新模式、新业态不断涌现,文旅资源逐渐“活”起…