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.hqwc.cn/news/620961.html

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

相关文章

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结前言横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全横向移动威胁的特点 利用psexec 利用psexec.exe工具msf中的psexec 利用windows服务 sc命令 1.与靶机建立ipc连接2.拷贝exe到主机系统上3.在靶机上创建一个…

聚观早报 | 哪吒L上市定档;iPhone 16最新高清渲染图

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 4月10日消息 哪吒L上市定档 iPhone 16最新渲染图 华为太空表与问界M9联动 蔚来万里长城加电风景线正式贯通 Red…

基于Springboot+Vue的Java项目-房产销售系统(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

ubuntu16.04安装Eclipse C/C++

1.安装 JDK 官网源码安装 首先打开JDK官网,JDK1.8的下载网址为:https://www.oracle.com/cn/java/technologies/downloads/#java8-windows,进入到网址如下图所示: 向下滑动到 JDK1.8的下载界面,如下图所示&#xff1a…

戏作打油诗《无知》

笔者经营多年的《麻辣崇州论坛》,半月前突被攻击我在“霸屏”,没处讲理,特戏作打油诗《无知》一首,为那个无理取闹、砸我“麻辣崇州论坛”的无知小儿画像如下。 请点击链接,一目了然:崇州论坛-麻辣社区 没…

2024-04-15_[UPnP]:详细解析

UPnP 一、论文阅读 1.2 Theory 1.2.1 Geometry of the absolute pose problem α i f i v i R p i t , i 1.. n . \alpha_i \mathbf{f}_i \mathbf{v}_i \mathbf{R} \mathbf{p}_i \mathbf{t} ,i1..n. αi​fi​vi​Rpi​t,i1..n. 其中: P i ∈ R 3 P_i \i…

幽灵漏洞进阶版来了

近日,网络安全研究人员披露了针对英特尔系统上 Linux 内核的首个原生 Spectre v2 漏洞,该漏洞是2018 年曝出的严重处理器「幽灵」(Spectre)漏洞 v2 衍生版本,利用该漏洞可以从内存中读取敏感数据,主要影响英…

STM32学习和实践笔记(5):时钟树

STM32一共有4个时钟源。外部时钟高低速各一个,内部时钟高低速各一个。 外部高速时钟是:4-16MHZ的HSE OSC。HS表示高速high speed. E表示外部的external。开发板该处安装的8M晶振。 外部低速时钟是:32.768KHz的LSI OSC。LS表示高速low speed…

【每日刷题】Day15

【每日刷题】Day15 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 目录 1. 141. 环形链表 - 力扣(LeetCode) 2. 142. 环形链表 II - 力扣(LeetCode) 3. 143. 重…

EasyRecovery数据恢复软件2024百度云网盘下载链接

EasyRecovery数据恢复软件是一款功能强大的数据恢复工具,它能够帮助用户从各种存储设备中恢复丢失或误删除的文件数据。无论是由于意外删除、格式化、病毒攻击还是其他原因导致的数据丢失,EasyRecovery都能提供有效的解决方案。 该软件支持多种存储介质…

ModuleNotFoundError: No module named ‘llama_index.readers“解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Python的国际化和本地化【第162篇—国际化和本地化】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着全球化的发展,多语言支持在软件开发中变得越来越重要。Python作为一种流行的…