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

本文介绍了TensorFlow2.1的基础知识,涵盖张量的概念、创建方法及其常用操作,如数学运算、数据处理等,并通过鸢尾花分类案例进行实战演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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=标准差)
    生成截断式正态分布的随机数:生成随机数据时如果取值在( μ − 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:axis描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值