TensorFlow张量介绍

1.张量(Tensor)的定义

TensorFlow中的张量就是一个n维的数组,类型为tf.tensor.类似于numpy中的ndarray。Tensor具有两个重要的属性,包括张量的数据类型(dtype)及张量的形状(shape)。

2.创建张量的指令

张量分为固定值张量和随机值张量,不同类型的张量具有不同的创建指令。

2.1固定值张量

常见的固定值张量创建指令如下:

  1. tf.zeros(shape,dtype=tf.float32,name=None)
  2. tf.zeros_like(shape,dtype=tf.float32,name=None)
  3. tf.ones(shape,dtype=tf.float32,name=None)
  4. tf.ones_like(shape,dtype=tf.float32,name=None)
  5. 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张量的类型改变

以下提供了一些张量类型改变的函数:

  1. tf.string_to_number(string_tensor,out_type=None,name=None)
  2. tf.to_double(x,name='ToDouble')
  3. tf.to_float(x,name='ToFloat')
  4. 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)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值