TensorFlow构建二维数据拟合模型(1)

知识图谱

TensorFlow运行机制

TensorFlow是基于计算图的深度学习编程模型

Tensor表示张量,其实质上是某种类型的多维数组  

Flow表示基于数据流图的计算,实质上是张量在不同节点间的转化过程。

在TensorFlow中,计算图中的节点称为OP(即operation的缩写),节点之间的边描述了计算之间的依赖关系。

在计算过程中,一个节点可获得0或多个张量,产生0或多个张量。

TensorFlow程序通常被组织成图的构建阶段和执行阶段

构建阶段,节点的执行步骤被描述成一个图

执行阶段,使用会话执行图中的OP

TensorFlow系统架构

TensorFlow支持各种异构平台,支持多CPU/GPU、移动设备、具有良好的跨平台的特性;

架构灵活,能支持各种网络模型,具有良好的通用性。

系统结构以C API为界限,将整个系统分为前端和后端两个系统

 

如图所示组件构成TensorFlow 系统分布式运行机制的核心,其中每个组件的作用如下。

Client: 是前端系统的主要组成部分。它是一个 支持多语言的编程环境, 提供了基于计算图的编程模型,方便用户构造各种复杂的计算图,实现各种形式的模型设计。

Distrubuted Runtime: 在分布式的运行时环境中,Distributed Master根据Session.run的Fetching 参数,从计算图中反向遍历,找到所依赖的最小子图。对于每个任务,TensorFlow 都将启动一个Worker Service,按照计算图中节点之间的依赖关系,根据当前的可用的硬件环境(CPU/GPU),调用节点的Kernel实现完成节点的运算。

Kermnel Implements: 大多数Kernel 基于Eigen::Tensor实现。Eigen:Tensor 是一 个使用C++模板技术,为多核CPU/GPU生成高效的并发代码,包含200 多个标准的张量,包括数值计算、多维数组操作、控制流、状态管理等。每一个节点根据设备类型都会存在一个优化了的Kernel实现,在运行时,运行时根据本地设备的类型,为节点选择特定的Kernel实现,完成该节点的计算

构建计算图

计算图描述了一组需要依次序完成的计算单元以及这些计算单元之间相互依赖的关系。

计算图的构建阶段也称为计算图的定义阶段,该过程会在图模型中定义所需的运算,每次运算的结果以及原始的输入数据都可称为一个节点。

下面代码给出了计算图的定义过程

上述代码定义了两个张量相加的计算图如下

每个节点表示一个运算,每条边代表计算之间的依赖关系。

a、b节点表示两个1行2列的矩阵,result节点则依赖于读取a和b的值,从a、b有两条到result的边,没有任何计算依赖result的结果,result节点没有指向其他节点的边。

#导入tensorflow类库,取别名为tf
import tensorflow as tf
#定义一个整型张量a,表示1行2列的矩阵,其值为[3,5]
a = tf.constant([3,5],dtype=tf.int32)
#定义一个整型张量b,表示1行2列的矩阵,其值为[2,4]
b = tf.constant([2,4],dtype=tf.int32)
#tf.add()函数用于对张量a,b相加,并将计算结果返回给result节点。
result = tf.add(a,b)
#print(result)函数打印result节点的信息
print(result)

运行程序,输出结果如下:

Tensor("Add_1:0", shape=(2,), dtype=int32)

从运行结果上可看出,上述程序并没有输出矩阵相加的结果,而是输出了一个包含3个属性的张量,第1个属性表示加法运算,第2个属性表示包含2个元素的一维数组,第3个属性表示数据类型为整型。

需要注意的是,TensorFlow计算图一般包含两个特殊节点,分别为Source节点(也称Start节点)与Sink节点(也称为Finish节点)。其中,Sourse节点表示此节点不依赖任何其他节点作为输入,Sink节点表示该节点无任何输出作为其他节点的输入。

在会话中运行计算图

在TensorFlow中启动会话有两种方法:

①明确调用创建会话函数和关闭会话函数,代码格式如下:

#创建一个会话
sess = tf.Session()
#使用该会话来运行相关节点,得到运算结果
sess.run(...)
#关闭会话
sees.close()

上述代码中,所有计算完成后,需要明确调用close()函数来关闭会话并释放资源。

若程序因为异常退出,就可能无法执行close()函数,进而导致资源泄露。为了解决异常退出时的资源泄露问题,TensorFlow中还可通过上下文管理器来管理会话。

②通过上下文管理器来管理会话,代码格式如下:

#创建一个会话,并使用上下文管理器管理会话
with tf.Session() as sess:
#使用该会话来运行相关节点,得到运算结果
sees.run(...)
#不需要调用close()函数,当上下文退出时会话关闭,资源自动释放

下面通过上下文管理器来实现两个张量的相加,代码如下:

在TensorFlow,系统会自动维护默认的计算图

通过tf.get_default_graph()函数可以获得当前的默认的计算图,代码如下

import tensorflow as tf
a = tf.constant([1.0,2.0],name = 'a')
b = tf.constant([1.0,2.0],name = 'b')
result = a + b
print(a.graph is tf.get_default_graph)

第五行代码:通过a.graph查看张量所属的计算图。如果没有特别指定,则查看当前默认的计算图

指定GPU设备

如果下载的Tensorflow是GPU版本,在程序运行过程中系统会自动检测可用利用的GPU来执行操作

如果计算机上有不止一个GPU资源,除第一个之外,其他的GPU不参与计算。为了让Tensorflow能够使用这些GPU资源,必须将节点明确地指派给定的GPU执行。

with……device语句用来指定CPU或GPU

示例:

import tensorflow as tf
with tf.device('/gpu:1')  # 指定在第一块GPU设备上运行v1 = tf.constant([1.0,2.0,3.0],shape = [3],name = 'v1')v2 = tf.constant([4.0,5.0,6.0],shape = [3],name = 'v2')sum = v1 + v2
with tf.Session() as sess:print(sees.run(sum))

TensorFlow数据类型

张量及其属性

张量是TensorFlow中最重要的数据结构,用来表示程序中的数据。

在计算图节点间传递的数据都是张量

可以把张量看作一个n维数组或列量,每个张量都包含 类型、阶、形状

类型

TensorFlow吸收了Python的原生数据类型,如布尔型,数值型(整数、浮点数)和字符串型。

除此之外,TensorFlow还有一些自有的数据类型

数据类型描述
tf.float3232位浮点数
tf.float6464位浮点数
tf.int6464位有符号整型
tf.int3232位有符号整型
tf.int1616位有符号整型
tf.int88位有符号整型
tf.uint88位无符号整型
tf.string可变长的字节数组,每一个张量元素都是一个字节数组
tf.bool布尔型
tf.complex64由两个32位浮点数组成的复数:实数和虚数

以下代码定义了不同类型的张量

import tensorflow as tf
hello = tf.constant("Hello,world!",dtype=tf.string)
boolean = tf.constant(False,dtype=tf.bool)
int = tf.constant(100,dtype=tf.int8)
uint = tf.constant(100,dtype=tf.uint8)
float = tf.constant(100,dtype=tf.float32)
with tf.Session() as sess:print(sess.run(hello))print(sess.run(boolean))print(sess.run(int))print(sess.run(uint))print(sess.run(float))

在TensorFlow系统中,张量的维数被描述为阶。

注意,张量的阶和矩阵的阶并不是同一个概念,张量的阶是张量维数的数量描述。

例如:下面张量是2阶张量

t = [[1,2,3],[4,5,6],[7,8,9]] (最外层中括号有几个就是几阶)

一阶张量可以认为是一个向量,二阶张量可以认为是二维数组,用t[i,j]访问其中的元素,三阶张量可以用t[i,j,k]访问其中的元素

常见的张量及其对应的阶

实例例子
0纯量(只有大小)

a = 1

1向量(大小和方向)v = [1,2,3]
2矩阵(二维数组)m = [[1,2,3],[4,5,6],[7,8,9]]
33阶张量(数据立体)t=[[[1],[2],[3]],[[4],[5],[6]],[[7],[8],[9]]]
N

n阶

n中的括号数

形状

 形状用于描述张量内部的组织关系。

简单来讲,就是该张量有几行几列

下面来定义一个张量,并分别输出张量的类型、形状以及阶

import tensorflow as tf
c = tf.constant([[3.0,4.0,5.0],[6.0,7.0,8.0]])
print("张量类型:",c.dtype)
print("张量形状:",c.get_shape())
print("张量的阶:",c.get_shape().ndims)

类型转换

TensorFlow程序运行过程中,常常会涉及不同类型张量之间相互转换。

TensorFlow提供了多种类型转换函数,其语法格式为:

函数名含义
tf.string_to_number(string_tensor,out_type = None,name = None)将字符串转换为数字 out_type:可选tf.float32、tf.int32,默认为f.float32
tf.to_double(x,name = None)将其他类型转换为double类型
tf.int32(x,name = None)将其他类型转换为int32
tf.cast(x,dtype,name = None)将x的值转换为dtype指定的类型

下面我们来将整型张量转换为浮点张量

import tensorflow as tf
float_tensor = tf.cast(tf.constant([1,2,3]),dtype=tf.float32)
init = tf.global_variables_initializer()
with tf.Session() as sess:sess.run(init)print(sess.run(float_tensor))

形状变换

在实际应用过程中,有时需要将张量从一个形状转换为另外一个形状,以满足计算需要

TensorFlow中,reshape()函数用来实现张量的形状变换,其语法格式如表:

函数说明

tf.reshape(

            tensor,

            shape,

            name=None)

将张量从一个形状变换为另一个形状

tensor:待改变形状的tensor

shape:必须是int32或int64,决定了输出张量的形状

name:可选,操作名称

如果形状的一个分量是特殊值-1,则计算该维度的大小,以使总大小不变

import tensorflow as tf  #导入tensorflow类库,别名为tf
#定义c1是一维张量,共有12个元素
c1 = tf.constant([1,2,3,4,5,6,7,8,9,10,11,12],dtype = tf.float32,name = "c1")
c2 = tf.reshape(c1,[2,3,2])
with tf.Session() as sess:sess.run(tf.global_variables_initializer())print(sess.run(c2))

下一节,简单介绍变量的内容

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

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

相关文章

Qt图形界面编程入门(标签与槽机制习题分享)

标签对象初始显示0&#xff0c;每次单击标签对象后&#xff0c;其显示内容就加1&#xff0c;依次变为1、2、3等。 #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QPushButton> //包含命令按钮类 #include "MyLabel.h"class Dialo…

js中执行到一个if就停止的代码_Node 中如何引入一个模块及其细节

在 node 环境中&#xff0c;有两个内置的全局变量无需引入即可直接使用&#xff0c;并且无处不见&#xff0c;它们构成了 nodejs 的模块体系: module 与 require。以下是一个简单的示例const fs require(fs)const add (x, y) > x ymodule.exports add虽然它们在平常使用…

二级MS Office公共基础知识错题本(1)

1&#xff0c;顺序程序具有顺序性、封闭性和可再现性的特点&#xff0c;不具备并发性 2&#xff0c;为了降低算法的空间复杂度&#xff0c;主要应减少输入数据所占的存储空间以及额外空间&#xff0c;通常采用压编存储技术。 3&#xff0c;树的总的结点数为树中所有结点的度数…

c++ file* 句柄泄漏_C++核心指南:P.8 勿泄漏任务资源

P.8: 勿泄漏任务资源原因随着时间的推移&#xff0c;即使是资源的缓慢增长也会耗尽这些资源的可用性&#xff0c;这对于长时间运行的程序特别重要&#xff0c;但也是负责任的编程行为的基本部分。糟糕的例子void f(char* name){ FILE* input fopen(name, "r"); // .…

数据规范化、实体-联系图、状态转换图、层次方框图、Warnier图、IPO图及验证软件需求

数据规范化 软件系统经常使用各种长期保存的信息&#xff0c;这些信息通常以一定方式组织并存储在数据库或文件中&#xff0c;为减少数据冗余&#xff0c;避免出现插入异常或删除异常&#xff0c;简化修改数据的过程,通常需要把数据结构规范化。 通常用“范式(normal forms)”…

Linux基础(iptables与firewalld防火墙)

iptables 在早期的Linux系统中&#xff0c;默认使用的是iptables防火墙管理服务来配置防火墙。尽管新型的fierwalld防火墙管理服务已经被投入使用多年&#xff0c;但是大量的企业在生产环境中依然出于各种原因而继续使用iptables。 策略与规则链 防火墙会从上至下的顺序来读…

虚拟跳线软件干什么用的_疯狂刷单!用违法软件生成虚拟手机号,“骑手”半年“刷单”牟利60余万,百米内竟有万笔订单 | 申晨间...

来源&#xff1a;新闻晨报 记者&#xff1a;吴艺璇借助违法软件生成虚拟手机号码&#xff0c;利用平台审核漏洞大量注册用户&#xff0c;大量“刷单”骗取平台的返现和购物补贴&#xff0c;半年内疯狂刷1.8万余单&#xff0c;累计牟利60余万元。近日&#xff0c;在市公安局刑侦…

ygo游戏王卡组_ACG大科普(7)游戏王

大家是否在小时候接触过一种卡片类似这种的 这就是今天的主角游戏王。 背景 1996年&#xff0c;《游戏王》漫画开始在集英社《周刊少年Jump》连载。 1998年&#xff0c;Bandai推出以《游戏王》原作中登场的集换卡牌游戏“M&W”为题材的集换卡牌。 采用Bandai的卡片自动贩卖…

Qt图形界面编程入门(基本窗口及控件)

基本窗口类QWidget QWidget是所有窗体部件的基类&#xff0c;例如对话框类&#xff0c;主窗体类&#xff0c;以及其他诸如按钮&#xff0c;编辑框&#xff0c;标签等等都是由QWidget派生得到&#xff0c;QWidget拥有的方法往往都可以在其他子类中使用。 窗体的几何尺寸分为包…

背景se_盘点那些RPG手游中主角的背景故事,越悲情越强大

RPG游戏一直以代入感超强的游戏方式来吸引玩家&#xff0c;用超越现实的艺术手段把玩家带入到虚拟的游戏世界&#xff0c;让玩家担任不同的社会角色来去经历不同的虚拟故事&#xff0c;体验多种人生经历&#xff0c;想要扮演任何角色都是有可能的。当然在RPG游戏中也有好坏之分…

TensorFlow构建二维数据拟合模型(2)

变量的定义和使用 变量的定义与初始化 TensorFlow中&#xff0c;变量是一种特殊的张量&#xff0c;其值可以是一个任意类型的形状的张量。 与其他张量不同&#xff0c;变量存在于单个回话调用的上下文之外&#xff0c;主要作用是保存和更新模型中的参数。 声明变量通常使用…

c++用牛顿法开多次根_望远镜的历史之三:大神出世,改变望远镜历史的竟然是牛顿...

上次我们说到格里高利望远镜有点画蛇添足&#xff0c;那么格里高利望远镜添了什么呢&#xff1f;格里高利望远镜格里高利望远镜观测的图像都是正立的&#xff0c;这就意味着要采用多个凹面反射镜&#xff0c;而当时凹面反射镜磨制不易&#xff0c;无论是多大的科学家都要亲自动…

如何把照片正面变成反面_各国签证照片要求大全 (含模板)

对于不是很熟悉签证的小伙伴来说&#xff0c;面对全球那么多国家的签证而且每张签证照片的规格不同为此我们为您整理了各国签证照片要求大全 东南亚国家的签证照要求基本相同&#xff0c;就以泰国为例&#xff0c;告诉大家签证照的注意事项。“泰国&#xff0c;新加坡&#xff…

TensorFlow实验(3)

模型的保存与恢复 我们来简单实现一下模型的保存与恢复 训练完TensorFlow模型后&#xff0c;可将其保存为文件&#xff0c;以便于预测新数据时直接加载使用。 TensorFlow模型主要包含网络的设计或者图以及已经训练好的网络参数的值。 TensorFlow提供的tf.train.Saver()函数…

ad域 禁用账号_IST-AD域信息同步平台来袭

IST的AD域信息同步系统是能帮助域管理员简化日常的一些管理工作&#xff0c;可以让AD域系统与其他的业务系统进行用户信息同步&#xff0c;实现自动的新旧用户帐户信息的同步修改、组织架构同步调整&#xff0c;并有简单易操作的配置页面系统与操作日志查询等。通过ODBC、Web S…

Linux基础(firewalld防火墙配置管理工具的图形用户界面)

firewall-config的界面如图所示 我们先将当前区域中请求http服务的流量设置为允许&#xff0c;但仅限当前生效。具体配置如图 尝试添加一条防火墙策略规则&#xff0c;使其放行访问8080-8088端口&#xff08;TCP协议&#xff09;的流量&#xff0c;并将其设置为永久生效&#x…

Linux基础(使用ssh服务管理远程主机1)

配置网络参数 使用nmtui命令配置网络参数&#xff0c;以及通过nmcli命令查看网络信息并管理网络会话服务。 执行nmtui命令运行网络配置工具 进入主界面 选中编辑连接并按下回车键 选中要编辑的网卡名称&#xff0c;然后按下Edit&#xff08;编辑&#xff09;按钮 把网络IPv4 …

联想g510升级方案_联想智慧中国行,聚焦第一古城,助力企业智能升级

12月29日&#xff0c;联想智慧中国行“一起联想 生态绽放”One Lenovo融合品鉴会邢台站盛大启幕&#xff0c;现场近70位河北合作伙伴到场参会&#xff0c;共同探讨智能时代带来的多重挑战和迎战机遇。“联想智慧中国行”是联想致力于推动中国行业智能化升级举办的系列活动&…

软件工程(总体设计②设计原理)

设计原理 模块化 模块是由边界元素限定的相邻程序元素的序列&#xff0c;而且有一个总体标识符代表它。 按照模块的定义&#xff0c;过程、函数、子程序和宏&#xff0c;都可作为模块。 面向对象方法学中的对象是模块&#xff0c;对象内的方法也是模块。模块是构成程序的基…

TensorFlow构建二维数据拟合模型(3)

占位符与数据喂入机制 placeholder是TensorFlow提供的占位符节点&#xff0c;由tf.placeholder()函数创建&#xff0c;其实质上也是一种变量。占位符没有初始值&#xff0c;只会分配必要的内存&#xff0c;其值由会话中用户调用的run()函数传递。 占位符声明的方法如表 函数…