【深度学习】Tensorflow的基本操作

TensorFlow程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op的执行步骤被描述成一个图. 在执行阶段, 使用会话执行执行图中的op。我们来构建一个简单的计算图。每个节点采用零个或多个张量作为输入,并产生张量作为输出。一种类型的节点是一个常数。像所有TensorFlow常数一样,它不需要任何输入,它输出一个内部存储的值。我们可以创建两个浮点型常量node1 ,node2如下所示:

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0)
print(node1, node2)

最终的打印声明生成

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)

他为什么不是输出结果,那是因为tensorflow中的图形节点操作必须在会话中运行,稍后介绍

构建图

构建图的第一步, 是创建源 op (source op). 源 op 不需要任何输入, 例如 常量 (Constant). 源 op 的输出被传递给其它 op 做运算.TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其增加节点. 这个默认图对 许多程序来说已经足够用了.,后面我们会接触多个图的使用

默认Graph值始终注册,并可通过调用访问 tf.get_default_graph()

import tensorflow as tf# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点,加到默认图中.构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)print tf.get_default_graph(),matrix1.graph,matrix2.graph

重要注意事项:此类对于图形构造不是线程安全的。所有操作都应从单个线程创建,或者必须提供外部同步。除非另有说明,所有方法都不是线程安全的

在会话中启动图

构造阶段完成后,才能启动图。启动图的第一步是创建一个Session对象,如果无任何创建参数,会话构造器将启动默认图。

调用Session的run()方法来执行矩阵乘法op, 传入product作为该方法的参数,会话负责传递op所需的全部输入,op通常是并发执行的。

# 启动默认图.
sess = tf.Session()# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.返回值 'result' 是一个 numpy `ndarray` 对象.
result = sess.run(product)
print result# 任务完成, 关闭会话.
sess.close()

Session对象在使用完后需要关闭以释放资源,当然也可以使用上下文管理器来完成自动关闭动作。

op

计算图中的每个节点可以有任意多个输入和任意多个输出,每个节点描述了一种运算操作(operation, op),节点可以算作运算操作的实例化(instance)。一种运算操作代表了一种类型的抽象运算,比如矩阵乘法、加法。tensorflow内建了很多种运算操作,如下表所示:

类型示例
标量运算Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal
向量运算Concat、Slice、Splot、Constant、Rank、Shape、Shuffle
矩阵运算Matmul、MatrixInverse、MatrixDeterminant
带状态的运算Variable、Assign、AssignAdd
神经网络组件SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling
存储、恢复Save、Restore
队列及同步运算Enqueue、Dequeue、MutexAcquire、MutexRelease
控制流Merge、Switch、Enter、Leave、NextIteration

feed

TensorFlow还提供了feed机制, 该机制可以临时替代图中的任意操作中的tensor可以对图中任何操作提交补丁,直接插入一个 tensor。feed 使用一个 tensor 值临时替换一个操作的输入参数,从而替换原来的输出结果.

feed 只在调用它的方法内有效, 方法结束,feed就会消失。最常见的用例是将某些特殊的操作指定为"feed"操作, 标记的方法是使用 tf.placeholder() 为这些操作创建占位符.并且在Session.run方法中增加一个feed_dict参数

# 创建两个个浮点数占位符op
input1 = tf.placeholder(tf.types.float32)
input2 = tf.placeholder(tf.types.float32)#增加一个乘法op
output = tf.mul(input1, input2)with tf.Session() as sess:# 替换input1和input2的值print sess.run([output], feed_dict={input1:[7.], input2:[2.]})

如果没有正确提供feed, placeholder() 操作将会产生错误

张量的阶和数据类型

TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通.其实张量更代表的就是一种多位数组。

变量的的创建、初始化、保存和加载

Variable类

tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None)

创建一个带值的新变量initial_value

  • initial_value:A Tensor或Python对象可转换为a Tensor.变量的初始值.必须具有指定的形状,除非 validate_shape设置为False.

  • trainable:如果True,默认值也将该变量添加到图形集合GraphKeys.TRAINABLE_VARIABLES,该集合用作Optimizer类要使用的变量的默认列表

  • collections:图表集合键列表,新变量添加到这些集合中.默认为[GraphKeys.VARIABLES]

  • validate_shape:如果False允许使用未知形状的值初始化变量,如果True,默认形状initial_value必须提供.

  • name:变量的可选名称,默认'Variable'并自动获取

变量的创建

创建当一个变量时,将你一个张量作为初始值传入构造函数Variable().TensorFlow提供了一系列操作符来初始化张量,值初始的英文常量或是随机值。像任何一样Tensor,创建的变量Variable()可以用作图中其他操作的输入。此外,为Tensor该类重载的所有运算符都被转载到变量中,因此您也可以通过对变量进行算术来将节点添加到图形中。

x = tf.Variable(5.0,name="x")
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")

调用tf.Variable()向图中添加了几个操作:

  • 一个variable op保存变量值。
  • 初始化器op将变量设置为其初始值。这实际上是一个tf.assign操作。
  • 初始值的ops,例如 示例中biases变量的zeros op 也被添加到图中。

变量的初始化

  • 变量的初始化必须在模型的其它操作运行之前先明确地完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行那个操作。最常见的初始化模式是使用便利函数 initialize_all_variables()将Op添加到初始化所有变量的图形中。
init_op = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init_op)
  • 还可以通过运行其初始化函数op来初始化变量,从保存文件还原变量,或者简单地运行assign向变量分配值的Op。实际上,变量初始化器op只是一个assignOp,它将变量的初始值赋给变量本身。assign是一个方法,后面方法的时候会提到
with tf.Session() as sess:sess.run(w.initializer)

通过另一个变量赋值

你有时候会需要用另一个变量的初始化值给当前变量初始化,由于tf.global_variables_initializer()初始化所有变量,所以需要注意这个方法的使用。

就是将已初始化的变量的值赋值给另一个新变量!

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")w2 = tf.Variable(weights.initialized_value(), name="w2")w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice")

所有变量都会自动收集到创建它们的图形中。默认情况下,构造函数将新变量添加到图形集合GraphKeys.GLOBAL_VARIABLES。方便函数 global_variables()返回该集合的内容。

属性

name

返回变量的名字

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
print(weights.name)

op

返回op操作

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
print(weights.op)

方法

assign

为变量分配一个新值。

x = tf.Variable(5.0,name="x")
w.assign(w + 1.0)

eval

在会话中,计算并返回此变量的值。这不是一个图形构造方法,它不会向图形添加操作。方便打印结果

v = tf.Variable([1, 2])
init = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)# 指定会话print(v.eval(sess))# 使用默认会话print(v.eval())

变量的静态形状与动态形状

TensorFlow中,张量具有静态(推测)形状和动态(真实)形状

  • 静态形状:

创建一个张量或者由操作推导出一个张量时,初始状态的形状

  • tf.Tensor.get_shape:获取静态形状
  • tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推断的情况下
  • 动态形状:

一种描述原始张量在执行过程中的一种形状

  • tf.shape(tf.Tensor):如果在运行的时候想知道None到底是多少,只能通过tf.shape(tensor)[0]这种方式来获得
  • tf.reshape:创建一个具有不同动态形状的新张量

要点

1、转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状

2、 对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状

3、tf.reshape()动态创建新张量时,元素个数不能不匹配

4、运行时候,动态获取张量的形状值,只能通过tf.shape(tensor)[]

管理图中收集的变量

tf.global_variables()

返回图中收集的所有变量
 

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35))print(tf.global_variables())

 

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

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

相关文章

unity塔防游戏怪物转向_Unity官方新手游戏项目推荐合集

Unity官方新手游戏项目推荐合集今天给同学们介绍一些Unity官方发布过的一些游戏项目,这些项目都简化了游戏开发的入门学习过程,可以快速地制作出游戏,适合新手入门体验,下面就带同学们看一看:Unity Playground图片来源…

【BZOJ 4169】 4169: Lmc的游戏 (树形DP)

4169: Lmc的游戏 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 44 Solved: 25Description RHL有一天看到lmc在玩一个游戏。"愚蠢的人类哟,what are you doing",RHL说。"我在玩一个游戏。现在这里有一个有n个结点的有根树&#xff0…

【深度学习】Tensorflow完成线性回归对比机器学习LinearRegression()

首先构建一个线性的点状图 import warnings warnings.filterwarnings(ignore) import numpy as np import matplotlib.pyplot as plt %matplotlib inline from sklearn.linear_model import LinearRegression import tensorflow as tf X np.linspace(2,12,50).reshape(-1,1)w…

ajax同步和异步的区别_同步电机和异步电机区别

电工之家:www.dgzj.com QQ群:2179090关注电工之家官方微信公众号“电工之家”,收获更多经验知识。同步电机和异步电机之间从区别就在于转子内的励磁电流,同步电机的转子励磁电流来自外界直流电源,转速恒定只与电机定…

解决:TypeError: Value passed to parameter 'a' has DataType int64 not in list of allowed values: float1

报错: TypeError: Value passed to parameter a has DataType int64 not in list of allowed values: float16, float32, float64, int32, complex64, complex128原因 1.4.0版本 默认int64 代码内容: 改正 定义符合 格式

买电脑主要看什么配置_我的专业要买什么配置电脑可以用到毕业?

电脑是现代生活中不可缺少的工具智能手机的更新让许多轻量工作可以在手机上完成但复杂的文档办公、大型的音视频编辑专业的数据处理等等还是离不开电脑的操作高考结束后许多同学做的第一件事是买新手机、新电脑有的为了考后放松玩游戏有的出于兴趣学习新技能也有的同学还在考虑…

CSS3实现一束光划过图片、和文字特效

在打折图标里面 实现一道白光划过的动画效果 css: <!DOCTYPE html><html><head><meta charset"utf-8"> <style> p{ width:15%; margin:0 auto; line-height:50px; font-size:30px; text-align:center; transform-origin: 50px 50px;…

H.264编解码流程

编码&#xff1a; 蓝色的前向编码流程&#xff1a;以宏块为输入单位介绍优于以帧为单位介绍。Fn为即将进行编码的宏块&#xff0c;由原始图像中16*16像素构成。每个宏块要么采用帧内模式编码&#xff0c;要么采用帧间模式编码。不管是哪种编码模式&#xff0c;预测宏块P都是基…

远程管理服务器的具体操作方法

远程是管理服务器最常见的一种方式&#xff0c;租用服务器也好&#xff0c;把服务器托管给服务商也好&#xff0c;肯定不会经常去机房办公&#xff0c;有什么问题的话大家都是选择远程服务器。其实远程服务器就跟我们远程电脑是一样的&#xff0c;具体需要怎么操作可能有的人还…

JavaWeb基础—dbutils的简单入门

简明入门教程&#xff0c;参考&#xff1a;https://www.cnblogs.com/CQY1183344265/p/5854418.html 进行此章节之前&#xff0c;介绍一个JdbcUtils的再次的简单封装 &#xff08;例如后面需要构造QueryRunner时得到数据源等的简便的操作&#xff09; package cn.itcast.jdbcuti…

macos安装vscode_VS Code 代码编辑器入门指南:核心组件与概念

作者&#xff1a;思考问题的熊写在前面如果当电脑只能装一个软件还需要尽量不影响日常学习工作时&#xff0c;不知道你的选择会是什么。我把这个看似「荒诞」的问题理解为「All-in-One」的升级版拷问。这个问题陪伴了我很久&#xff0c;每用一个软件我都会想想它对我究竟有多不…

环路滤波一些概念

熵编码需要编码的数据如下&#xff1a; 熵编码需要编码的数据如下&#xff1a;

【深度学习】TensorFlow之卷积神经网络

卷积神经网络的概念 在多层感知器&#xff08;Multilayer Perceptrons&#xff0c;简称MLP&#xff09;中&#xff0c;每一层的神经元都连接到下一层的所有神经元。一般称这种类型的层为完全连接。 多层感知器示例 反向传播 几个人站成一排第一个人看一幅画&#xff08;输入数…

golang 的交叉编译

为什么80%的码农都做不了架构师&#xff1f;>>> Go是一门编译型语言&#xff0c;所以在不同平台上&#xff0c;需要编译生成不同格式的二进制包。 由于Go 1.5对跨平台编译有了一些改进&#xff0c;包括统一了编译器、链接器等。 编译时候只需要指定两个参数&#x…

【深度学习】Cifar-10-探究不同的改进策略对分类准确率提高

cifar10数据集上进行图片分类&#xff0c;基于tensorflow框架&#xff0c; 旨在探究不同的改进策略对分类准确率的影响&#xff0c;如何一步步得提高准确率 一、问题描述 当我们在处理图像识别或者图像分类或者其他机器学习任务的时候&#xff0c;我们总是迷茫于做出哪些改进…

Acer 4750 安装黑苹果_黑苹果 MacOS 10.15 Catalina安装教程

一、准备工作一个8G以上的U盘(安装 10.15 Catalina 必须要16G及以上的U盘 )&#xff1b;Mac OS镜像、TransMac(刻录工具)、DiskGenius(分区工具)、EasyUEFI(引导工区)、EFI驱动文件。安装工具获取方式&#xff1a;关注公众号【远景论坛】&#xff0c;回复&#xff1a;黑苹果二、…

帧内16*16模式的宏块数据传输顺序

如果宏块以16*16帧内模式编码&#xff0c;那么块-1首先被传输&#xff0c;携带的信息是每个4*4亮度块的DC系数。然后&#xff0c;亮度残差块0-15被传输&#xff08;此时&#xff0c;16*16帧内宏块的DC系数为零&#xff09;。对于亮度分量Cb和Cr&#xff0c;16和17块携带DC系数的…

pcie1 4 速度_太阳系行星们谁转得最快?八大行星自转速度排行榜,地球排第五...

不知道大家有没有玩儿过陀螺呢&#xff1f;玩儿陀螺的技术如果很好的话&#xff0c;它可以在地上飞快地旋转并且能够旋转很长的时间。有趣的是&#xff0c;宇宙中的很多星球就像陀螺一样绕着一个中心轴旋转着。这就是星球的自转。在太阳系中有八颗大行星&#xff0c;它们都在自…

分布式资本沈波:未来区块链杀手级应用将出现在“+区块链”

雷锋网5月22日报道&#xff0c;日前“区块链技术和应用峰会”在杭州国际博览中心举行。会上&#xff0c;分布式资本创始管理人沈波作了《区块链的投资现状与发展趋势》演讲。 沈波表示&#xff0c;由于区块链的共识机制和无法篡改两大特点&#xff0c;它在各行各业皆有应用潜力…

帧间预测小记

帧间预测后&#xff0c;在比特流中会有相应的信息&#xff1a;残差信息&#xff0c;运动矢量信息&#xff0c;所选的模式。 宏块的色度分量分辨率是亮度分辨率的一半&#xff08;Cr和Cb&#xff09;&#xff0c;水平和垂直均一半。色度块采用和亮度块一致的分割模式&#xff0…