当前位置:网站首页>Tensorflow tensor introduction

Tensorflow tensor introduction

2022-04-23 17:53:00 Stephen_ Tao

1. tensor (Tensor) The definition of

TensorFlow The tensor in is a n An array of dimensions , The type is tf.tensor. Be similar to numpy Medium ndarray.Tensor Has two important properties , Data types including tensors (dtype) And tensor shape (shape).

2. Instructions for creating tensors

Tensors are divided into fixed value tensors and random value tensors , Different types of tensors have different creation instructions .

2.1 Fixed value tensor

Common fixed value tensor creation instructions are as follows :

  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 Random valued tensor

It is mainly used to generate specific distribution , Random valued tensors such as normal distribution .

be based on Pycharm Create a random valued tensor :
use InteractiveSession() stay Python Console Operation in

2.2.1 Get into InteractiveSession Interactive conversation

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2' 
import tensorflow as tf
tf.compat.v1.disable_eager_execution() 
tf.compat.v1.InteractiveSession()

In this paper TensorFlow The version is 2.5.0 edition , In this version, there is no tf.InteractiveSession(), So compatible v1 The interactive session is called by version .

2.2.2 Generate normal distribution random value tensor

random_data = tf.random.normal([2,3],mean=0.0,stddev=1.0)
random_data.eval()

We will get the following results :

array([[-0.5411521 , -0.04788242, -0.14508048],
       [-1.2735071 , -0.5523144 , -0.46699935]], dtype=float32)

3. Transformation of tensor

The transformation of tensor includes type change and shape change .

3.1 The type of tensor changes

Here are some functions of tensor type change :

  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 The shape of the tensor changes

There are two kinds of shape changes of tensors , They are dynamic shape change and static shape change .

3.2.1 Change of static shape

API:object.set_shape
The rules that need to be met :

  • After the static shape is fixed, it cannot be modified again
  • When converting static shapes , Cannot convert across orders

Example 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])

The above code modifies the shape when the static shape is fixed , The following error message will be generated :

 ValueError: Dimension 0 in both shapes must be equal, but are 3 and 2. Shapes are [3,4] and [2,6].

Example 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])

The above code changes shape across steps , The following error message will be generated :

ValueError: Shapes must be equal rank, but are 2 and 3

Example 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())

The above is the correct code , give the result as follows (set_shape It's in the original Tensor Based on , No new objects are generated ):

Origin a: (None, None)
changed a: (3, 2)

3.2.2 Dynamic shape changes

API:tf.reshape()
The rules that need to be met :

  • Create new tensors dynamically , The number of elements of the tensor must match

Example :

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())

The above is the correct code , give the result as follows (reshape Yes, a new object will be generated , Do not change the original Tensor The shape of the ):

a: (3, 4)
a: (3, 4)
b: (3, 2, 2)
c: (2, 6)

版权声明
本文为[Stephen_ Tao]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230548468864.html