TensorFlow 1.x的学习

.为什么还有很多人都选择使用TensorFlow 1.x

  1. 兼容性问题: TensorFlow 1.x在一些旧项目中已经得到了广泛应用,这些项目可能依赖于1.x版本的特定API或行为。升级到2.x可能需要大量的代码修改和测试工作,对于一些已经稳定运行的项目,维护者可能不愿意承担这种风险。
  2. 性能要求: 在某些情况下,TensorFlow 1.x可能提供了更适合特定任务的性能优化。例如,对于需要极致计算性能的应用,1.x版本可能更好地满足这些需求。
  3. 熟悉度和学习曲线: 一些开发者可能对TensorFlow 1.x更熟悉,特别是那些在2.x发布之前就已经在使用TensorFlow的开发者。对于他们来说,继续使用1.x版本可能更加方便和高效。
  4. 遗留代码和生态系统: TensorFlow 1.x的生态系统中存在大量的代码库、教程和工具,这些资源可能不完全兼容2.x版本。对于一些用户来说,利用现有的资源和库可能比迁移到新版本更加实际。
  5. 特定功能的需求: TensorFlow 1.x可能提供了一些2.x版本中尚未完全实现或优化的功能。在这种情况下,用户可能会选择继续使用1.x版本,直到2.x版本能够提供相应的功能。
  6. 稳定性和成熟度: TensorFlow 1.x经过多年的发展和改进,已经非常稳定和成熟。对于一些对稳定性有高要求的应用场景,用户可能更倾向于使用经过时间验证的1.x版本。
  7. 迁移成本: 迁移到TensorFlow 2.x可能涉及到大量的工作,包括代码重构、测试和可能的性能调优。对于一些资源有限的团队或个人开发者来说,这可能是一个不小的挑战。

tf.Session含义

self.sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True))
  • tf.Session 是用于执行图计算的核心接口

  • config=tf.ConfigProto 是一个配置对象,它允许用户设置会话的配置选项

  • allow_soft_placement=True: 这个选项的作用是在可能的情况下,允许TensorFlow在不同的设备上运行操作。例如,如果你的默认设备是CPU,但是你希望某个操作在GPU上运行,而这个操作在GPU上不可用,TensorFlow将尝试在可用的设备上执行这个操作。这个选项有助于提高代码的灵活性和鲁棒性。

  • log_device_placement=True: 当设置为 True 时,TensorFlow会在日志中输出:操作被放置在哪个设备上的信息。这对于调试和性能分析非常有用,因为它可以帮助开发者理解模型的计算是如何分布到不同的设备上的。


[图计算]----

图计算(Graph Computation)是一种计算模型,它将计算过程表示为一个由节点(nodes)和(edges)组成的图(graph)。节点通常表示计算任务或者操作,而边则表示数据或者信息的流动。

图计算被应用于神经网络的前向传播和反向传播过程。神经元(或层)作为节点权重连接作为边

TensorFlow中的计算是由图(Graph)表示的,图中的节点是各种操作(如加法、卷积等),边则表示操作之间的数据依赖关系。通过这种方式,TensorFlow可以优化计算流程,利用不同的设备(如CPU、GPU)执行计算,并且支持分布式计算。

TensorFlow 1.x版本使用静态图计算模型,这意味着在执行任何计算之前,必须先定义完整的计算图。


self.sess的调用

self.sess通常是一个对象的成员变量,它代表了一个tf.Session()的实例。

tf.Session()是TensorFlow中用于执行定义在计算图中的操作和计算张量的上下文。简而言之,self.sess是用于与TensorFlow图交互的会话对象。

初始化:

在类的构造函数中或者在需要使用会话之前,需要创建并初始化tf.Session()实例。

import tensorflow as tfclass MyModel:def __init__(self):self.graph = tf.Graph()self.sess = tf.Session(graph=self.graph)# 初始化图内的所有变量self.sess.run(tf.global_variables_initializer())

运行操作:

使用self.sess.run()来执行图内的操作或获取张量的值。

output = self.sess.run(some_operation, feed_dict={some_input: value})

其中,some_operation是想要执行的操作的TensorFlow对象,some_input是输入张量的占位符,value是想要传递给占位符的实际值。

关闭会话:

当不再需要会话时,应该关闭它以释放资源。

self.sess.close()

案例

在TensorFlow中,self.sess.run() 方法是用来执行图(Graph)中的操作(Operation)并获取张量(Tensor)值的主要方式。下面是一个详细的例子,展示了如何使用 self.sess.run() 方法。

假设我们有一个简单的神经网络模型,它包含一个输入层、一个隐藏层和一个输出层。我们想要训练这个模型来对一些数据进行拟合。

首先,我们需要定义模型的结构和损失函数:

import tensorflow as tf# 定义模型参数
input_dim = 10
hidden_dim = 5
output_dim = 1# 创建占位符
X = tf.placeholder(tf.float32, shape=[None, input_dim])
Y = tf.placeholder(tf.float32, shape=[None, output_dim])# 创建模型的权重和偏置
W1 = tf.Variable(tf.random_normal([input_dim, hidden_dim]))
b1 = tf.Variable(tf.random_normal([hidden_dim]))
W2 = tf.Variable(tf.random_normal([hidden_dim, output_dim]))
b2 = tf.Variable(tf.random_normal([output_dim]))# 创建模型的前向传播
hidden = tf.nn.relu(tf.matmul(X, W1) + b1)
output = tf.matmul(hidden, W2) + b2# 定义损失函数
loss = tf.reduce_mean(tf.square(Y - output))

接下来,我们需要定义训练过程,这通常涉及到创建一个优化器来最小化损失函数:

# 定义优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(loss)

现在,我们可以创建一个 tf.Session() 实例,并在其中运行我们的图操作:

# 创建会话
self.sess = tf.Session()# 初始化模型中的所有变量
self.sess.run(tf.global_variables_initializer())

在训练过程中,我们会使用 self.sess.run() 方法来执行训练操作,并传入真实的数据和标签:

# 假设我们有一些真实的数据和标签
real_X = ...  # 真实输入数据
real_Y = ...  # 真实输出标签# 运行训练操作
self.sess.run(train_op, feed_dict={X: real_X, Y: real_Y})

在训练过程中,我们可能还想要监控损失函数的值。我们可以使用 self.sess.run() 方法来获取损失张量的值:

# 获取当前损失值
current_loss = self.sess.run(loss, feed_dict={X: real_X, Y: real_Y})
print("Current loss:", current_loss)

最后,当我们不再需要会话时,应该关闭它以释放资源:

# 关闭会话
self.sess.close()

这个例子展示了如何使用 self.sess.run() 方法来执行训练操作、获取张量的值以及初始化模型变量。

在实际应用中:

完整代码:

import tensorflow as tf
import numpy as np
from pyDOE import lhs
# 定义模型参数
input_dim = 2
hidden_dim = 5
output_dim = 1
# 创建占位符
X = tf.placeholder(tf.float32, shape=[None, input_dim])
Y = tf.placeholder(tf.float32, shape=[None, output_dim])
# 创建模型的权重和偏置
W1 = tf.Variable(tf.random_normal([input_dim, hidden_dim]))
b1 = tf.Variable(tf.random_normal([hidden_dim]))
W2 = tf.Variable(tf.random_normal([hidden_dim, output_dim]))
b2 = tf.Variable(tf.random_normal([output_dim]))
# 创建模型的前向传播
hidden = tf.nn.relu(tf.matmul(X, W1) + b1)
output = tf.matmul(hidden, W2) + b2
# 定义损失函数
loss = tf.reduce_mean(tf.square(Y - output))
# 定义优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.0006)
train_op = optimizer.minimize(loss)
# 创建会话
sess = tf.Session()
# 初始化模型中的所有变量
sess.run(tf.global_variables_initializer())
# 生成虚拟的数据
real_X = lhs(input_dim, 100)  # 假设有100个样本
real_Y = np.array(3 * real_X[:, 0] + 9 * real_X[:, 1]).reshape(-1, 1)  # 使用随机数据作为真实输出
# 训练模型
loss_history = []
try:for i in range(8000):  # 训练1000步# 运行训练操作sess.run(train_op, feed_dict={X: real_X, Y: real_Y})# 每隔100步打印一次损失值current_loss = sess.run(loss, feed_dict={X: real_X, Y: real_Y})loss_history.append(current_loss)if i % 100 == 0:print("Step: %d, Current loss: %f" % (i, current_loss))import matplotlib.pyplot as pltplt.plot(loss_history)plt.xlabel('epoch')plt.ylabel('loss_value')plt.show()finally:# 关闭会话sess.close()

得出损失值随迭代次数变化情况:

……
Step: 7500, Current loss: 0.007287
Step: 7600, Current loss: 0.007191
Step: 7700, Current loss: 0.007090
Step: 7800, Current loss: 0.006992
Step: 7900, Current loss: 0.006899

在这里插入图片描述

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

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

相关文章

实现iOS App代码混淆

简介 在开发iOS应用程序时,保护代码安全是至关重要的。代码混淆是一种常用的技术,可以增加逆向工程的难度,防止他人对代码的篡改和盗用。本文将介绍如何实现iOS App代码混淆的步骤和操作方法。 整体流程 下面是实现iOS App代码混淆的整体流…

创维:在博鳌论坛 叩响世界之门

出走半生,归来仍是少年。 2024年4月8日,一个离开海南近半个世纪的“少年”回到琼海博鳌,“下一站,1000亿!”,他的承诺掷地有声。“1000亿”,意指创维集团在2025年前冲击千亿营收,这…

【JavaWeb】Day45.Mybatis——入门程序

什么是MyBatis? MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。 (持久层:指的是就是数据访问层(dao),是用来操作数据库的。) (框架:是一个半成品软件,是一套可重用的、通用…

【企业动态】瑞芯微高级业务总监来访东胜物联,共探新能源汽车市场合作

近日,瑞芯微高级业务总监阙金珍一行来访东胜物联参观交流,并就深化合作进行讨论。 东胜物联与瑞芯微建有长期稳固的合作关系,基于RK3588、RK3399、RK3568等处理器,推出了多款嵌入式核心硬件产品,包括核心板、网关等&a…

工业物联网网关

在数字化浪潮席卷全球的今天,工业物联网(IIoT)作为连接物理世界与数字世界的桥梁,正在逐渐改变传统工业的面貌。而作为IIoT的核心枢纽,工业物联网网关发挥着至关重要的作用。今天,我们就来深入了解一下工业…

使用webpack5+TypeScript+npm发布组件库

一、前言 作为一只前端攻城狮,没有一个属于自己的组件库,那岂不是狮子没有了牙齿,士兵没有了武器,姑娘没有了大宝SOD蜜,你没有了我.... 言归正传,下面将给大家介绍如何通过webpack5编译一个TS组件发布到NPM…

【c 语言】声明了一个指针,会给指针分配内存吗?

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&…

租用境外服务器,越南服务器的优势有哪些

自从中国加入世界贸易组织之后,国内经济增加速度非常快,同时越来越多的人选择去东南亚国家发展,因为当地的中国人很多,所以中国企业在当地面临着更小的文化差异。东南亚地区也是最新的经济体,互联网正处于蓬勃发展的阶…

docker服务无法启动

背景:断电重启经常会导致磁盘io错误,甚至出现磁盘坏块 这时可以使用xfs_repair来修复磁盘,但是修复过程可能会导致部分数据丢失 xfs_repair -f -L /dev/sdc问题一: Apr 15 19:27:15 Centos7.6 systemd[1]: Unit docker.service e…

【十一】MyBatis Plus 原理分析

MyBatis Plus 原理分析 摘要 Java EE开发中必不可少ORM框架,目前行业里最流行的orm框架非Mybatis莫属了,而Mybatis框架本身没有提供api实现,所以市面上推出了Mybatis plus系列框架,plus版是mybatis增强工具,用于简化My…

嵌入式系统及应用-1.1嵌入式

嵌入式系统 定义:看不见的计算机,一般不能被用户编程,它有一些专用的I/O设备,对用户的接口是应用专用的 通常将嵌入式计算机系统简称为嵌入式系统。 嵌入式系统是以应用为中心,以计算机技术为基础、软件硬件可裁剪、…

记录一下如何腾讯云服务器用客户端连MySQL

我一般喜欢用IDEA连数据库,别问我为啥(就喜欢用一个软件解决所有问题) 当然写SQL语句个人还是觉得sqlyog体验最佳!

【C/C++】什么是内存泄漏?如何检测内存泄漏?

一、内存泄漏概述 1.1 什么是内存泄漏 内存泄漏是在没有自动 gc 的编程语言里面,经常发生的一个问题。 自动垃圾回收(Automatic Garbage Collection,简称 GC)是一种内存管理技术,在程序运行时自动检测和回收不再使用…

MySQL8.0.36-社区版:错误日志(3)

mysql有个错误日志,是专门记录错误信息的,这个功能默认是开启的 一般都是在/var/log/mysqld.log 日志中存放 1.错误日志的位置 首先我们使用命令去查看一下,这个错误日志文件究竟在哪 进入到mysql中,使用命令 show variables…

FME学习之旅---day24

我们付出一些成本,时间的或者其他,最终总能收获一些什么。 高级地理数据库 教程:地理数据库转换 上述教程包括 如何使用 Esri 模板地理数据库 该内容在FME学习之旅day19 已经学习过 使用地理数据库属性域:编写编码属性域 属…

机器学习实训 Day1(线性回归练习)

线性回归练习 Day1 手搓线性回归 随机初始数据 import numpy as np x np.array([56, 72, 69, 88, 102, 86, 76, 79, 94, 74]) y np.array([92, 102, 86, 110, 130, 99, 96, 102, 105, 92])from matplotlib import pyplot as plt # 内嵌显示 %matplotlib inlineplt.scatter…

古月·ROS2入门21讲——学习笔记(一)核心概念部分1-14讲

讲解视频地址:1.ROS和ROS2是什么_哔哩哔哩_bilibili 笔记分为上篇核心概念部分和下篇常用工具部分 下篇:古月ROS2入门21讲——学习笔记(二)常用工具部分15-21讲-CSDN博客 目录 第一讲:ROS/ROS2是什么 1. ROS的诞生…

Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用

随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

海外代理IP在跨境电商中发挥什么作用?

在我国跨境电商的发展中,海外代理IP的应用日益广泛,它不仅帮助商家成功打入国际市场,还为他们在多变的全球电商竞争中保持优势。下面是海外代理IP在跨境电商中五个关键的应用场景。 1、精准的市场分析 了解目标市场的消费者行为、产品趋势以…

金蝶云星空与泛微OA对接案例-实现流程一体化

摘要:在企业数字化中,集成内部各业务系统以实现数据共享与流程协同,已成为提升运营效率、优化决策的重要选择。本文将以某企业成功实现金蝶云星空与泛微OA系统对接为例,详细解析双方在人员信息、组织架构、销售合同、付款申请、报…