Tensorflow2.1入门 第一章:张量及基本函数

  • 一、Tensor 张量
  • 1. 什么是张量
  • 2. 张量的创建方式
  • (1) 普通创建
  • (2)由numpy转换
  • (3)指定值tensor
  • (4)符合正态分布的tensor
  • (5)均匀分布随机数
  • 二、常用函数
  • 1.强制将张量转换为其他格式
  • 2.找到最小值
  • 3.找到最大值
  • 4.计算平均值
  • 5.求和
  • 6.标记为“可训练”
  • 7.四则运算(要求:维度相同)
  • 8.指数操作
  • 9.矩阵相乘
  • 10.切分数据
  • 11.求取张量梯度
  • 12.遍历元素
  • 13.独热码(one-hot encoding)
  • 14.Softmax函数
  • 15.自减赋值
  • 16.返回最大值的索引
  • 三、实践任务:鸢尾花分类
  • 1.读入数据集鸢尾花
  • 2.使用神经网络分类


一、Tensor 张量

1. 什么是张量

张量,即为多维数组(列表);其中阶,指的是张量的维数。
张量的数据类型有很多种:

  1. tf.int, tf.float:包括tf.int32、tf.int64、tf.float32、tf.float64
  2. tf.bool
  3. tf.string

2. 张量的创建方式

(1) 普通创建

tf.constant(张量内容,dtype=数据类型)

p17_constant.py

(2)由numpy转换

tf.convert_to_tensor(数据名,dtype=数据类型)

p18_convert_to_tensor.py

(3)指定值tensor

  1. tf.zeroes(维度)
  2. tf.ones(维度)
  3. tf.fill(维度,指定值)

p19_zeros_ones_fill.py

(4)符合正态分布的tensor

  1. tf.random.normal(维度,mean=均值,stddev=标准差) 生成正态分布的随机数,默认均值为0,标准差为1
  2. tf.random.truncated_normal(维度,mean=均值,stddev=标准差) 生成截断式正态分布的随机数:生成随机数据时如果取值在(tensorflow2深度学习案例 tensorflow2.1教程_神经网络)之外,则重新生成,以保证生成的数据在此区间之内。

p21_random.normal.py

(5)均匀分布随机数

tf.random.uniform(维度,minval=最小值,maxval=最大值) 取值范围为[minval,maxval),是一个前闭后开区间。

二、常用函数

1.强制将张量转换为其他格式

tf.cast(张量名,dtype=数据类型)

2.找到最小值

tf.reduce_min(张量名)

3.找到最大值

tf.reduce_max(张量名)

p23_cast_reduce_minmax.py

4.计算平均值

tf.reduce_mean(张量名,axis=操作轴)

关于axis:

tensorflow2深度学习案例 tensorflow2.1教程_tensorflow_02

5.求和

tf.reduce_sum(张量名,axis=操作轴)

p25_reduce_meansum.py

6.标记为“可训练”

tf.Variable(张量名)

将变量标记为可训练,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。

7.四则运算(要求:维度相同)

  1. tf.add(张量1,张量2)
  2. tf.subtract(张量1,张量2)
  3. tf.multiply(张量1,张量2)
  4. tf.divide(张量1,张量2)

p29_add_subtract_multiply_divide.py

8.指数操作

  1. tf.square(张量)
  2. tf.pow(张量,n次方数)
  3. tf.sqrt(张量)

p30_square_pow_sqrt.py

9.矩阵相乘

tf.matmul(矩阵1,矩阵2)

p31_matmul.py

10.切分数据

data = tf.data.Dataset.from_tensor_slices((输入特征,标签))

切分传入张量的第一维度,生成输入特征/标签对,构建数据集;对于Numpy以及Tensor格式都可以用该语句读入数据。

p33_from_tensor_slices.py

11.求取张量梯度

with tf.GradientTape() as tape:      若干个计算过程grad = tape.gradient(函数,对谁求导)

例:

with tf.GradientTape() as tape:
    x = tf.Variable(tf.constant(3.0))
    y = tf.pow(x, 2)
grad = tape.gradient(y, x)
print(grad)

p34_GradientTape.py

12.遍历元素

enumerate(可迭代对象) 可遍历每个元素,组合为:索引 元素。
例:

seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
    print(i, element)

运行结果为:
0 one
1 two
2 three

p35_enumerate.py

13.独热码(one-hot encoding)

tf.one_hot(待转换数据,depth=几分类)

在分类问题中,常用独热码作为标签,标记类别:1表示是,0表示非。

classes = 3
labels = tf.constant([1, 0, 2])  # 输入的元素值最小为0,最大为2
output = tf.one_hot(labels, depth=classes)
print("result of labels1:", output)

p37_one_hot.py

14.Softmax函数

tf.nn.softmax(x)

使输出符合概率分布

p38_forward.py
p39_softmax.py

15.自减赋值

w.assign_sub(w要自减的内容)

赋值操作,更新参数的值并返回。
调用assign_sub前,先用tf.Variable()定义变量w为可训练(可自更新)。

p40_assign_sub.py

16.返回最大值的索引

tf.argmax(张量,axis=操作轴)

返回张量沿指定维度最大值的索引。

p41_argmax.py

三、实践任务:鸢尾花分类

1.读入数据集鸢尾花

p43_datasets.load_iris.py

2.使用神经网络分类

注意:数据集需要乱序!使用相同的seed来保证x,y的顺序一致

# 随机打乱数据(因为原始数据是顺序的,顺序不打乱会影响准确率)
# seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
np.random.seed(116)  # 使用相同的seed,保证输入特征和标签一一对应
np.random.shuffle(x_data)
np.random.seed(116)
np.random.shuffle(y_data)
tf.random.set_seed(116)

p45_iris.py