天天看点

第一部分:TensorFlow2.0+基础知识前言1. 张量

前言

以下内容中使用环境为 tensorflow 2.3.0

import tensorflow as tf

1. 张量

1.1 创建

tf.constant(张量)
           

例子:

x=tf.constant([[2,3],[1,5]])
print(x)
           

输出:

第一部分:TensorFlow2.0+基础知识前言1. 张量

1.2 操作(张量,shape(形状),dtype(数据类型))

由上图输出图中可以清楚看到其数据中包含三个元素:张量,shape(形状),dtype(数据类型),而调用这些数据的处理方式:

数据 导出方式
张量 .numpy()
shape .shape
dtype .dtype

例子:

#续上文 
#x=tf.constant([[2,3],[1,5]])
x.numpy()


print('dtype:',x.dtype)
print('shape:',x.shape)

           

输出:

第一部分:TensorFlow2.0+基础知识前言1. 张量

1.3 其他的特殊创建(全0,全1,随机)

1.3.1 全0,全1创建

tf.one(shape=(...))	创建一个大小为...的全1张量
tf.zero(shape=(...))	创建一个大小为...的全0张量
           

例子:

print(tf.ones(shape=(2, 1)))
print(tf.zeros(shape=(2, 1)))
           
第一部分:TensorFlow2.0+基础知识前言1. 张量

1.3.2 随机生成(正态分布,均匀分布)

1.3.2.1 正态分布

tf.random_normal()函数用于从“服从指定正态分布的序列”中随机取出指定个数的值。
           

参数:

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
    shape: 输出张量的形状,必选
    mean: 正态分布的均值,默认为0
    stddev: 正态分布的标准差,默认为1.0
    dtype: 输出的类型,默认为tf.float32
    seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
    name: 操作的名称
           

例子:

输出:

第一部分:TensorFlow2.0+基础知识前言1. 张量

1.3.2.2 均匀分布

random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)
shape:一维整数张量或python数组输出张量形状
minval:dtype类型的0-D张量或python值;生成的随机值范围的下限,默认为0
maxval:dtype类型的0-D张量或python值;生成的随机值范围的上限,如果dtype为float,默认为1
dtype:输出的类型:float16,float32,float64,int32,int64
seed:seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
name: 操作的名称
           

例子:

输出:

第一部分:TensorFlow2.0+基础知识前言1. 张量

2. 变量

变量是用于存储可变状态(如神经网络权重)的特殊张量。
           

2.1 创建

变量的创建是基于张量上的,Variable()这个构造函数需要初始值,这个初始值可以是一个任何类型任何形状的Tensor,初始值的形状和类型决定了这个变量的形状和类型。构造之后,这个变量的形状和类型就固定了。
           

“”

函数:tf.Variable(常量名称)
           

例子:

initial_value = tf.random.normal(shape=(2, 2))
a = tf.Variable(initial_value)
print(a)
           

输出:

第一部分:TensorFlow2.0+基础知识前言1. 张量

2.2 操作(赋值,加法,减法)

函数 作用
assign(value, use_locking=False) 为变量指定一个新的值
assign_add(delta, use_locking=False) 为这个变量加上一个值
assign_sub(delta, use_locking=False) 为这个变量减去一个值
read_value() 返回这个变量的值,在当前的上下文中读取。返回的是一个含有这个值的Tensor
set_shape(shape) 改变变量形状
new_value = tf.random.normal(shape=(2, 2))
a.assign(new_value)
#---------------------------------------------
# The values above are the same as those below
#---------------------------------------------
for i in range(2):
  for j in range(2):
    assert a[i, j] == new_value[i, j]
           
added_value = tf.random.normal(shape=(2, 2))
a.assign_add(added_value)
#---------------------------------------------
# The values above are the same as those below
#---------------------------------------------
for i in range(2):
  for j in range(2):
    assert a[i, j] == new_value[i, j] + added_value[i, j]
           

3. 在TensorFlow中进行数学运算

3.1 简单的加减,开方,e的幂

a = tf.random.normal(shape=(2, 2))
b = tf.random.normal(shape=(2, 2))

c = a + b
d = tf.square(c)
e = tf.exp(d)
print(a)
print(b)
print(c)
print(d)
print(e)
           

输出:

第一部分:TensorFlow2.0+基础知识前言1. 张量

3.2 计算梯度 GradientTape

可参考:TensorFlow学习(四):梯度带(GradientTape),优化器(Optimizer)和损失函数(losses)

继续阅读