我是靠谱客的博主 糟糕煎蛋,最近开发中收集的这篇文章主要介绍TensorFlow张量介绍1.张量(Tensor)的定义2.创建张量的指令3.张量的变换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 1.张量(Tensor)的定义
  • 2.创建张量的指令
    • 2.1固定值张量
    • 2.2随机值张量
      • 2.2.1进入InteractiveSession交互式会话
      • 2.2.2生成正态分布随机值张量
  • 3.张量的变换
    • 3.1张量的类型改变
    • 3.2张量的形状改变
      • 3.2.1静态形状的改变
      • 3.2.2 动态形状的改变

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)

最后

以上就是糟糕煎蛋为你收集整理的TensorFlow张量介绍1.张量(Tensor)的定义2.创建张量的指令3.张量的变换的全部内容,希望文章能够帮你解决TensorFlow张量介绍1.张量(Tensor)的定义2.创建张量的指令3.张量的变换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部