TensorFlow学习笔记--第三节张量(tensor)及其定义方法
目录
- 在TensorFlow中,所有的数据通过张量的形式来表示
- 1张量及属性:
- 1.1维数(阶)
- 1.2 形状
- 1.3数据类型
- TensorFlow 支持以下三种类型的张量:
- **1.常量**
- **2.变量**
- **3.占位符**:
- 张量定义方法举例
- **张量阶次及对应形状(shape)**
- 操作实例1:输出1-10
- 操作实例2:计算1-100累计和
- 传送门:
在TensorFlow中,所有的数据通过张量的形式来表示
1张量及属性:
可理解为一个 n 维数组,所有类型的数据,包括标量、矢量和矩阵等都是特殊类型的张量,张量并没有真正保存数字,它保存的是计算过程
张量(tensor)的属性——维数(阶)、形状和数据类型
Tensor("name", shape=(), dtype=int32)
1.1维数(阶)
张量的维数来被描述为阶,是张量维数的一个数量描述。
阶数 | 数学实例 |
---|---|
0阶 | 标量 |
1阶 | 1 维数组(向量) |
2阶 | 2维数组(矩阵,数据表) |
3阶 | 3维数组(数据立体) |
1.2 形状
三个术语描述张量的维度:阶(rank)、形状(shape)、维数(dimension number)
n(n>0)阶张量构成元素是n-1阶张量
阶 | 形状 | 维数 | 例子 |
---|---|---|---|
0 | () | 0-D | 4 |
1 | (D0) | 1-D | [1,2] |
2 | (D0,D1) | 2-D | [[1,2],[2,3]] |
3 | (D0,D1,D2) | 3-D | [[[1,2],[3,4]],[[1,2],[3,4]]] |
n | (D0,D1,…Dn-1) | n-D | … |
1.3数据类型
TensorFlow支持14种不同类型
实数:tf.float32, tf.float64
整数:tf.int8, tf.int16, tf.int32, tf.int64, tf.uint8
布尔:tf.bool
复数:tf.complex64, tf.complet128
不带小数点的数会被默认为int32
带小数点的数会被默认为float32
TensorFlow 支持以下三种类型的张量:
1.常量
常量是其值不能改变的张量。。
a=tf.constant([[1],[2]],name='a')#常量
2.变量
当一个量在会话中的值需要更新时,使用变量来表示。变量在使用前需要被显示初始化。例如,在神经网络中,权重需要在训练期间更新,可以通过将权重声明为变量来实现。
与传统编程语言不同,TensorFlow中的变量定义后,一般无需人工赋值,系统会根据算法模型,训练优化过程中自动调整变量对应的数值。在机器学习模型训练时更能体会,比如权重Weight变量w,经过多次迭代,会自动调整其值。
在TensorFlow中必须进行初始化操作
创建语句:
name_varible = tf.Variable(value, name)
注意:V是大写的
个别变量初始化:init_op = name_variable.initializer()
所有变量初始化:init_op = tf.global_variables_initializer()
def tensor_test():a=tf.Variable([1,2,3],name='a')b=tf.Variable([4,5,6],name='b')s=tf.add(a,b,name='SUM')with tf.Session() as sess:#所有变量初始化init = tf.global_variables_initializer()sess.run(init)# 初始化完成# 单个变量初始化# sess.run(a.initializer)# sess.run(b.initializer)print(sess.run(s))
只有init = tf.global_variables_initializer()一句并未实现变量初始化,它只是定义了一个静态的操作节点,必须利用会话的run()函数去执行这个操作,才能真正实现变量的初始化操作
amount = tf.Variable(0, name='amount', trainable=False)
如果希望自己定义的变量不参加训练,那么需要在定义变量时将参数trainable设置为False。
update_op = tf.assign(variable, new_value)
特殊情况下需要人工更新的,可用变量赋值语句:
3.占位符:
TensorFlow中的Variable变量类型,在定义时需要初始化,但有些变量定义时并不知道其数值,只有当真正开始运行程序时,才由外部输入。
需要注意的是,占位符不包含任何数据,因此不需要初始化它们。
在会话中,占位符可以使用 feed_dict 馈送数据。feed_dict是一个字典,在字典中需要给出每一个用到的占位符的取值。
例如在训练神经网络时需要每次提供一个批量的训练样本,如果每次迭代选取的数据要通过常量表示,那么TensorFlow 的计算图会非常大。因为每增加一个常量,TensorFlow 都会在计算图中增加一个结点。所以说拥有几百万次迭代的神经网络会拥有极其庞大的计算图,而占位符却可以解决这一点,它只会拥有占位符这一个结点。
如果构建了一个包含placeholder操作的计算图,当在session中调用run方法时,placeholder占用的变量必须通过feed_dict参数传递进去,否则会报错。
使用 tf.placeholder() 创建占位符 ,在 session.run() 过程中再投递数据
占位符定义格式
tf.placeholder(dtype,shape=None,name=None)
注意:使用feed_dict设置tensor的时候,需要你给出的值类型与占位符定义的类型相同
举例
def PlaceHolder_test():a=tf.placeholder(tf.int32,shape=(3,),name='a')b=tf.placeholder('int32',shape=(3,),name='b')add_op=tf.add(a,b,name='ADD')mul_op=tf.multiply(a,b,name='MUL')sub_op=tf.subtract(a,b,name='sub')with tf.Session() as sess:print(sess.run([add_op,mul_op,sub_op],feed_dict={a:[3,2,4],b:[1,2,3]}))with tf.summary.FileWriter('./log',sess.graph) as writer:writer.flush()
运行结果:[array([4, 4, 7]), array([ 3, 4, 12]), array([2, 0, 1])]
张量定义方法举例
张量阶次及对应形状(shape)
操作实例1:输出1-10
def variable_test():#变量赋值输出1-10 value=tf.Variable(0,name='value')one=tf.constant(1,name='one')new_value=tf.add(value,one,name='new_value')update_op=tf.assign(value,new_value)init = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)for _ in range(10):#for _ in range(n) 一般仅仅用于循环n次,# 不用设置变量,用 _ 指代临时变量,只在这个语句中使用一次sess.run(update_op)print(value.eval(),end=' ')with tf.summary.FileWriter('./log',sess.graph) as writer:writer.flush()
运行结果:1 2 3 4 5 6 7 8 9 10
操作实例2:计算1-100累计和
def Iteration_test():#1-100的累加和value=tf.Variable(0,name='value')# one=tf.constant(1,name='one')# new_value=tf.add(value,one)# update_op=tf.assign(value,new_value,name='update_op')update_op=tf.assign(value,tf.add(value,1),name='update_op')Sum=tf.Variable(0,name='sum')SUM_OP=tf.assign(Sum,tf.add(Sum,value))init = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)for _ in range(100):sess.run(update_op)sess.run(SUM_OP)print(Sum.eval())with tf.summary.FileWriter('./log',sess.graph) as writer:writer.flush()
上述程序计算流程分为两部分:
第一部分:迭代求取新值
第二部分:在迭代过程进行累加和 (sum=sum+new_value)
运行结果:5050
传送门:
TensorFlow学习笔记01:TensorFlow入门
TensorFlow教程:TensorFlow快速入门教程(非常详细)
TensorFlow学习笔记--第三节张量(tensor)及其定义方法相关推荐
- TensorFlow学习笔记(一)---graph,op,tensor,Session,Variables,Tensorboard
1. 机器学习 深度学习 算法 分类:神经网络(简单) 神经网络(深度) 回归 ...
- Tensorflow学习笔记2:About Session, Graph, Operation and Tensor
简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...
- tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)
续集请点击我:tensorflow学习笔记--使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...
- tensorflow学习笔记1
tensorflow学习笔记1 本文主要记录我在慕课上观看北大曹建老师的<人工智能实践:Tensorflow笔记>,链接:https://www.icourse163.org/course ...
- tensorflow学习笔记(八):LSTM手写体(MNIST)识别
文章目录 一.LSTM简介 二.主要函数 三.LSTM手写体(MNIST)识别 1.MNIST数据集简介 2.网络描述 3.项目实战 一.LSTM简介 LSTM是一种特殊的RNN,很好的解决了RNN中 ...
- tensorflow学习笔记(七):CNN手写体(MNIST)识别
文章目录 一.CNN简介 二.主要函数 三.CNN的手写体识别 1.MNIST数据集简介 2.网络描述 3.项目实战 一.CNN简介 一般的卷积神经网络由以下几个层组成:卷积层,池化层,非线性激活函数 ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
- 炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例
炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例 代码及分析 代码及分析 # -*- coding: utf-8 -*- """ Created ...
- TensorFlow学习笔记02:使用tf.data读取和保存数据文件
TensorFlow学习笔记02:使用tf.data读取和保存数据文件 使用`tf.data`读取和写入数据文件 读取和写入csv文件 写入csv文件 读取csv文件 读取和保存TFRecord文件 ...
最新文章
- AI都会写灵魂Rap了?Transformer跨界说唱,节奏、流畅度都不在话下
- SQL Server 2014聚集列存储索引
- linux下oracle数据库由于参数文件丢失导致的数据库服务启动失败,报“failure in processing system parameters“错误问题解决
- Python基础教程:return函数的用法
- 三星手机Android9和10的区别,三星Galaxy S10+ VS 小米9 拍照深度对比评测:神仙打架...
- Python学习笔记(二) 第一个Python程序 、 Python基础
- java 常量区存放 new_java---堆、栈、常量池的存储数据
- 简易 Vue 构建--篇二
- java byte(字节_Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutpu......
- mipi 屏 通过寄存器调背光
- 非NLB网段的客户端无法访问NLB
- 181218每日一句
- 业务流程图的绘制流程分享(一)
- 安装office2007时发生错误1706
- HDFS dfsclient读文件过程 源码分析
- Room的基本使用(一)
- mac数字键盘错乱_苹果电脑键盘打不出数字解决办法
- 观点 | 电动汽车变革进行时,芯片IP供应商扮演着怎样的角色?
- 2016年,对我影响最大的三本书
- 重聚京都 找不到服务器,阴阳师重聚京都活动怎样玩 重聚京都活动玩法攻略
热门文章
- [转]博士的学习经验!读后,令人茅塞顿开的科研经典之作
- 输入字符数字串输出保存数字串
- 圆检测——最小二乘法拟合圆的推导
- 问题六十:怎么用ray tracing画回旋体(rotational sweeping / revolution)
- async spring 默认线程池_Spring定时任务高级使用篇
- Kafka常见面试问题
- 大数据安全问题的类型有哪些
- 美赛整理之Matlab的工程数学计算学习笔记(高等数学)
- VUE-CLI可选的配置文件vue.config.js
- aref无效 lisp_Common Lisp专题4:数组