Tensorflow2.1入门 第一章:张量及基本函数
一、Tensor 张量
1. 什么是张量
张量,即为多维数组(列表);其中阶,指的是张量的维数。
张量的数据类型有很多种:
- tf.int, tf.float:包括tf.int32、tf.int64、tf.float32、tf.float64
- tf.bool
- tf.string
2. 张量的创建方式
(1) 普通创建
tf.constant(张量内容,dtype=数据类型)
p17_constant.py
(2)由numpy转换
tf.convert_to_tensor(数据名,dtype=数据类型)
p18_convert_to_tensor.py
(3)指定值tensor
tf.zeroes(维度)
tf.ones(维度)
tf.fill(维度,指定值)
p19_zeros_ones_fill.py
(4)符合正态分布的tensor
tf.random.normal(维度,mean=均值,stddev=标准差)
生成正态分布的随机数,默认均值为0,标准差为1tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
生成截断式正态分布的随机数:生成随机数据时如果取值在( μ − 2 σ , μ + 2 σ \mu-2\sigma, \mu+2\sigma μ−2σ,μ+2σ)之外,则重新生成,以保证生成的数据在此区间之内。
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:
5.求和
tf.reduce_sum(张量名,axis=操作轴)
p25_reduce_meansum.py
6.标记为“可训练”
tf.Variable(张量名)
将变量标记为可训练,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。
7.四则运算(要求:维度相同)
tf.add(张量1,张量2)
tf.subtract(张量1,张量2)
tf.multiply(张量1,张量2)
tf.divide(张量1,张量2)
p29_add_subtract_multiply_divide.py
8.指数操作
tf.square(张量)
tf.pow(张量,n次方数)
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