TensorFlow入门(一)——理论知识介绍及简单代码实现

2024-06-13 02:48

本文主要是介绍TensorFlow入门(一)——理论知识介绍及简单代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TensorFlow入门(一)——理论知识介绍及简单代码实现

  • 一、TensorFlow安装
  • 二、TensorFlow计算模型——计算图(Graph)
    • 概念
    • 属性
  • 三、TensorFlow数据模型——张量(Tensor)
    • 概念
    • 属性
      • 名字——name
      • 维度——shape
      • 类型——type
    • 查看Tensor具体内容
  • 四、Tensorflow运行模型——会话(Session)
    • 概念
    • 使用步骤
      • 方式一(不推荐)
      • 方式二(推荐)
  • 五、完整代码展示

tf是tensorflow的简写,在编程时注意使用import tensorflow as tf,为了方便,以后所有的tf都表示tensorflow

一、TensorFlow安装

此处不再赘述,请参考本人博客,见下面链接
https://blog.csdn.net/u011609063/article/details/84188942

二、TensorFlow计算模型——计算图(Graph)

概念

在这里插入图片描述
该图中每一个节点都是一个运算,每条边代表了计算之间的依赖关系。a和b不依赖其它计算,而add计算依赖a和b,因此有一条a到add和b到add的边。没有任何计算依赖add的结果,所以代表加法的add节点没有指向任何其它节点的边。这种组织方式就是计算图。
注意:不同计算图中的Tensor(张量)不会共享

属性

在计算图中,可以通过集合(collection)来管理不同类别的资源。
例如:
tf.add_to_collection函数可以加入一个或者多个资源到集合中
tf.get_collection函数获取一个集合中所有资源。可以是张量、变量或者运行中队列的资源
TensorFlow中常用集合

集合名称集合内容使用场景
tf.GraphKeys.VARIABLES所有变量持久化TensorFlow模型
tf.GraphKeys.TRAIN_VARIABLES可学习的变量(一般指神经网络中的参数)模型训练、生成模型可视化内容
tf.GraphKeys.SUMMARIES日志生成相关的张量TensorFlow计算可视化
tf.GraphKeys.QUEUE_RUNNERS处理输入的QueueRunner输入处理
tf.GraphKeys.MOVING_AVERAGE_VARIABLES所有计算了滑动平均值的变量计算变量的滑动平均值

三、TensorFlow数据模型——张量(Tensor)

概念

Tensor是TensorFlow中管理数据的形式,所有的数据都通过Tensor的形式表示。
Tensor可以被理解为多维数组,其中
零阶Tensor表示标量(scalar),即一个数
一阶Tensor为向量(vector),即一维数组
n阶Tensor可被理解为n阶数组
Tensor中并没有真正保存数据,它保存的是如何得到这些数字的计算过程的应用,因此无法直接通过print输出结果

属性

下图是通过print函数直接输出的Tensor的结果
在这里插入图片描述

  1. 名字——name

    张量的命名可以通过"node:src_output"表示,其中node为节点名称,src_output表示来自节点的第几个输出。在该图中"add:0"说明了result这个张量是计算节点"add"输出的第一个结果(编号从0开始)

  2. 维度——shape

    该属性描述了Tensor的维度信息,shape=(2, )说明是一个一维数组,长度为2

  3. 类型——type

    每个Tensor都会有唯一的一个类型,当类型不匹配时会报错,例如:

    a = tf.constant([1, 2], name="a")
    b = tf.constant([1.0, 2.0], name="b")
    result = a + b
    

    运行这段代码就会报错,报错具体信息可以自行尝试

查看Tensor具体内容

with tf.Session() as sess:# method 1print("result: {}".format(sess.run(tensor_name)))# method 2print("result: {}".format(tensor_name.eval()))

四、Tensorflow运行模型——会话(Session)

概念

主要是用来执行定义好的运算。会话拥有并管理TensorFlow程序运行时的所哟资源。当计算完成时帮助系统回收资源,否则的话会出现资源泄露的情况。

使用步骤

方式一(不推荐)

  1. 创建——sess = tf.Session()
  2. 使用——sess.run(…)
  3. 关闭——sess.close()

方式二(推荐)

使用该方式无需手动关闭,推荐该方式,因为上述方式当发生异常时,不一定能关闭会话,从而造成资源泄露

with tf.Session() as sess:sess.run(...)

五、完整代码展示

"""
This scripts shows how to generate a new graph and
how to define and use variables in different graph.
Note that:Tensor and Computation in different graphs won't shared with each other
"""
import tensorflow as tfg1 = tf.Graph()
with g1.as_default():# define variable "v" and make it equal to 0 in graph g1v = tf.get_variable("v", shape=[2, 3], initializer=tf.zeros_initializer())g2 = tf.Graph()
with g2.as_default():# define variable "v" and make it equal to 1 in graph g2v = tf.get_variable("v", shape=[3, 2], initializer=tf.ones_initializer())# read the v's value in g1
with tf.Session(graph=g1) as sess:tf.global_variables_initializer().run()with tf.variable_scope("", reuse=True):print("g1_v: {}".format(sess.run(tf.get_variable("v"))))# read the v's value in g2
with tf.Session(graph=g2) as sess:tf.global_variables_initializer().run()with tf.variable_scope("", reuse=True):print("g2_v: {}".format(sess.run(tf.get_variable("v"))))g = tf.Graph()a = tf.constant([1, 2], name="a", dtype=tf.float32)
b = tf.constant([1.0, 2.0], name="b")
result = tf.add(a, b, name="add")# specify the device to run
with g.device("/cpu:0"):with tf.Session() as sess:print("result: {}".format(result.eval()))

写博客不易,转载请注明原出处

这篇关于TensorFlow入门(一)——理论知识介绍及简单代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056070

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja