当前位置:网站首页>TensorFlow张量介绍
TensorFlow张量介绍
2022-04-23 05:50:00 【Stephen_Tao】
文章目录
1.张量(Tensor)的定义
TensorFlow中的张量就是一个n维的数组,类型为tf.tensor.类似于numpy中的ndarray。Tensor具有两个重要的属性,包括张量的数据类型(dtype)及张量的形状(shape)。
2.创建张量的指令
张量分为固定值张量和随机值张量,不同类型的张量具有不同的创建指令。
2.1固定值张量
常见的固定值张量创建指令如下:
tf.zeros(shape,dtype=tf.float32,name=None)
tf.zeros_like(shape,dtype=tf.float32,name=None)
tf.ones(shape,dtype=tf.float32,name=None)
tf.ones_like(shape,dtype=tf.float32,name=None)
tf.constant(value,dtype=tf.float32,shape=None,name='Const')
2.2随机值张量
主要是用于生成特定分布,如正态分布等的随机值张量。
基于Pycharm创建随机值张量:
采用InteractiveSession()在Python Console中进行操作
2.2.1进入InteractiveSession交互式会话
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
tf.compat.v1.InteractiveSession()
本文所采用的TensorFlow的版本为2.5.0版本,在该版本中已经没有tf.InteractiveSession(),所以采用兼容v1版本的方式调用交互式会话。
2.2.2生成正态分布随机值张量
random_data = tf.random.normal([2,3],mean=0.0,stddev=1.0)
random_data.eval()
将得到以下的结果:
array([[-0.5411521 , -0.04788242, -0.14508048],
[-1.2735071 , -0.5523144 , -0.46699935]], dtype=float32)
3.张量的变换
张量的变换包括类型改变和形状改变。
3.1张量的类型改变
以下提供了一些张量类型改变的函数:
tf.string_to_number(string_tensor,out_type=None,name=None)
tf.to_double(x,name='ToDouble')
tf.to_float(x,name='ToFloat')
tf.cast(x,dtype,name=None)
3.2张量的形状改变
张量存在两种形状的变化,分别为动态形状改变与静态形状改变。
3.2.1静态形状的改变
API:object.set_shape
需要符合的规则:
- 静态形状固定之后不能再次修改
- 转换静态形状的时候,不能跨阶数转换
示例1:
with tf.compat.v1.Session() as sess:
a = tf.compat.v1.placeholder(dtype=tf.float32,shape=[3,4])
print("Origin a:",a.get_shape())
a.set_shape(shape=[2,6])
以上代码在静态形状固定的情况下修改形状,将产生以下报错信息:
ValueError: Dimension 0 in both shapes must be equal, but are 3 and 2. Shapes are [3,4] and [2,6].
示例2:
with tf.compat.v1.Session() as sess:
a = tf.compat.v1.placeholder(dtype=tf.float32,shape=[None,3])
print("Origin a:",a.get_shape())
a.set_shape(shape=[3,2,3])
以上代码在跨阶改变形状,将产生以下报错信息:
ValueError: Shapes must be equal rank, but are 2 and 3
示例3:
with tf.compat.v1.Session() as sess:
a = tf.compat.v1.placeholder(dtype=tf.float32,shape=[None,None])
print("Origin a:",a.get_shape())
a.set_shape(shape=[3,2])
print("changed a:",a.get_shape())
以上为正确的代码,结果如下(set_shape是在原Tensor的基础上进行修改,不产生新的对象):
Origin a: (None, None)
changed a: (3, 2)
3.2.2 动态形状的改变
API:tf.reshape()
需要符合的规则:
- 动态创建新张量,张量的元素个数必须匹配
示例:
with tf.compat.v1.Session() as sess:
a = tf.compat.v1.placeholder(dtype=tf.float32,shape=[3,4])
print("a:",a.get_shape())
b = tf.reshape(a,[3,2,2])
c = tf.reshape(a,[2,6])
print("a:",a.get_shape())
print("b:",b.get_shape())
print("c:",c.get_shape())
以上为正确的代码,结果如下(reshape是将产生新的对象,不改变原Tensor的形状):
a: (3, 4)
a: (3, 4)
b: (3, 2, 2)
c: (2, 6)
版权声明
本文为[Stephen_Tao]所创,转载请带上原文链接,感谢
https://blog.csdn.net/professor_tao/article/details/119269609
边栏推荐
猜你喜欢
[ThreadX] h743zi + lan8720 + ThreadX + netx duo transplantation
C#【文件操作篇】PDF文件和图片互相转换
Dynamic creation and release, assignment and replication of objects
clion安装教程
[UDS unified diagnosis service] i. diagnosis overview (2) - main diagnosis protocols (K-line and can)
PHP junior programmers, take orders and earn extra money
大学概率论与数理统计知识点详细整理
File viewing commands and user management commands
Basemap库绘制地图
Robocode教程4——Robocode的游戏物理
随机推荐
[UDS unified diagnosis service] i. diagnosis overview (3) - ISO 15765 architecture
文件查看命令和用户管理命令
Uniapp encapsulates request
产生随机数
Linux 用rpm的方式安装mysql(超简单)
[UDS unified diagnosis service] IV. typical diagnosis service (1) - diagnosis and communication management function unit
[ThreadX] h743zi + lan8720 + ThreadX + netx duo transplantation
如何安装jsonpath包
For() loop parameter call order
多线程爬取马可波罗网供应商数据
Rust: Tcp 服务器与客户端的一个简单例子
Object转Json差异之Gson fastJson jackson 修改字段名
P1018 maximum product solution
【UDS统一诊断服务】四、诊断典型服务(4)— 在线编程功能单元(0x34-0x38)
Basemap库绘制地图
客户端软件增量更新
C语言循环结构程序
Swagger2 generates API documents
jenkspy包安装
【UDS统一诊断服务】一、诊断概述(1)— 诊断概述