WDK李宏毅学习笔记第三周01_tensorflow等常用函数总结

1. tensorflow常用函数总结

1.1 创建张量

tf.constant(a,dtype=b)
a:是需要创建张量的内容
b:张量内存储元素的类型

#1 创建张量
import tensorflow as tf
a=tf.constant([1,5,3],dtype=tf.int64) #一维张量不可直接进行矩阵运算
b=tf.constant([[1,2,3],[4,5,6]],tf.float64) #二维张量
print("一维张量a:\n", a)
print("二维张量b:\n", b)

运行结果:
在这里插入图片描述
注:可以根据最左边的 " [ "中括号的个数来判断张量维度,维度为1的张量不能直接进行矩阵运算

1.2 创建默认值的张量

tf.zeros (shape): 创建元素值全为0的张量,shape是张量的形状。
tf.ones (shape): 创建元素值全为1的张量,shape是张量的形状。
tf.fill (shape, value): 创建元素值全为value的张量,shape是张量的形状。

#2 创建指定值的张量
import tensorflow as tf
a=tf.zeros([2,3])#创建2行3列元素全为0的张量
b=tf.ones([2,3])#创建2行3列元素全为1的张量
c=tf.fill([2,3],9)#创建2行3列元素全为9的张量
print("张量a: \n", a)
print("张量b: \n", b)
print("张量c: \n", c)

运行结果:
在这里插入图片描述

1.3 创建初始值是正态分布随机数的张量

tf.random.normal(shape, mean=0, stddev=1), 创建元素是正态分布随机数的张量。
shape: 创建的张量形状。
mean: 正态分布的均值,默认值mean=0。
sddev: 正态分布的标准差,默认值stddev=1。

b=tf.random.truncated_normal(shape, mean=0.5, stddev=1) ,创建元素是截断式正态分布随机数的张量。(就是生成的值在mean-2stddev和mean+2stddev之间)
shape: 创建的张量形状。
mean: 正态分布的均值,默认值mean=0。
sddev: 正态分布的标准差,默认值stddev=1。

#3 创建正态分布随机数,默认值均值=0,标准差=1
import tensorflow as tf
#生成正态分布随机数
a=tf.random.normal([2,2],mean=0.5,stddev=1)

#生成截断式的正态分布随机数在mean-2stddev和mean+2stddev之间
b=tf.random.truncated_normal([2,2],mean=0.5,stddev=1) #tf.random.truncated_normal(维度,mean=均值,stddev=标准差

print("正态分布随机数a: \n",a)
print("截断式正态分布随机数b: \n",b)

运行结果:
在这里插入图片描述

1.4 生成均匀分布随机数

tf.random.uniform(shape, minval , maxval ), 创建元素是从[minval , maxval]间取随机数的张量。[minval, maxval]中所有数被取出来的概率相同。
shape: 创建的张量形状。
minval: 产生随机数区间的下限。
maxval: 产生随机数区间的上限。

#4 生成均匀分布随机数
import tensorflow as tf
a=tf.random.uniform([2,3],minval=1,maxval=6)
print(a)

运行结果:
在这里插入图片描述

1.5 将numpy数据转换为张量的函数

tf.convert_to_tensor (a, dtype=b)
a: 待转换变量
b: 转换为张量内存储数据的类型

#5 将numpy数据转换为张量
import numpy as np
a=np.arange(0,5) #创建一个列表
b=tf.convert_to_tensor(a,dtype=tf.int32)#将a转换为张量
print("转换前数据:\n",a)
print("转换后数据:\n",b)

运行结果:
在这里插入图片描述

1.6 强制类型转换

tf.cast(tensor, dtype), 将张量tensor的数据类型转换为新的dtype类型。
tensor: 待转换的张量。
a: 转换后的数据类型。

import tensorflow as tf
a=tf.constant([1.3,5.1,3],tf.float64) #创建数据是float64型的张量
b = tf.cast(a, tf.int32) #将张量内数据转换为int32型的
print("转换前a:\n",a)
print("转换后a: \n",b)

运行结果:
在这里插入图片描述

1.7 计算张量中数据的最值函数

tf.reduce_min(张量名, axis),计算张量内元素的最小值。
tf.reduce_max(张量名, axis),计算张量内元素的最大值。
axis: axis=0计算竖直方向上元素最值,axis=1计算水平方向上元素最值,不指定则计算所有的元素最值。

import tensorflow as tf
a=tf.constant([[1,2,3],[3,2,1]],tf.int32) #创建数据是float64型的张量
print("张量a: \n", a)
min = tf.reduce_min(a)
max = tf.reduce_max(a)
max_0 = tf.reduce_max(a,axis= 0)
max_1 = tf.reduce_max(a,axis= 1)
print("不指定axis最小值:\n",min)
print("不指定axis最大值:\n",max)
print("axis=0最大值:\n",max_0)
print("axis=1最大值:\n",max_1)

运行结果:
在这里插入图片描述

1.8 张量内元素求和,求均值函数

tf.reduce_sum(张量名,axis), 计算张量内元素和。
tf.reduce_sum(张量名,axis), 计算张量内元素的均值。
axis: axis=0对竖直方向上元素进行运算,axis=1对水平方向上元素进行运算,不指定对所有的元素进行运算。

import tensorflow as tf
a=tf.constant([[1,2,3],[3,2,1]],tf.int32) #创建数据是float64型的张量
print("张量a: \n", a)
sum = tf.reduce_sum(a)
mean = tf.reduce_mean(a)
mean_0 = tf.reduce_mean(a, axis=0)
mean_1 = tf.reduce_mean(a, axis=1)
print("不指定axis求和:\n", sum)
print("不指定axis求均值:\n", mean)
print("axis=0求均值:\n", mean_0)
print("axis=1求均值:\n", mean_1)

运行结果:
在这里插入图片描述

1.9 张量的数学运算

张量之间对应元素加减乘除:tf.add, tf.subtract, tf.multiply, tf.divide
计算某个张量的平方,次方,开方:tf.square, tf.pow, tf.sqrt
上面都是对张量内元素分别进行运算
矩阵乘:tf.matmul

1.10 将特征和标签配对打包函数

tf.data.Dataset.from_tensor_slices((features,labels)).batch(3)
features: 输入特征。
labels: 输入特征对应的标签。
.batch(3): 每3组features及对应的labels打包放在一块。

import tensorflow as tf
features = tf.constant([11,12,13,14,15]) #创建输入特征
labels = tf.constant([1,2,3,4,5]) #创建输入特征对应的label
dataset = tf.data.Dataset.from_tensor_slices((features,labels)) #将特征和标签配对但不打包
dataset_parcel = tf.data.Dataset.from_tensor_slices((features,labels)).batch(3) #将特征和标签配对,并且每3组打包
print("不打包的输出:", dataset)
print("打包的输出:", dataset_parcel)
print("\n不打包数据的输出: ")
for x,y in dataset:
    print(x,y)
    
print("\n打包后数据的输出: ")
for x,y in dataset_parcel:
    print(x,y)

运行结果:
在这里插入图片描述

1.11 函数对参数自动求导的函数

tf.GradientTape.gradient (loss, w), 计算函数loss对参数w的导数。

import tensorflow as tf
with tf.GradientTape() as tape:
    w = tf.Variable(tf.constant([2.0,3.0]))
    loss = tf.pow(w,2)
grad = tape.gradient(loss,w)
print("loss对w导数是:", grad)

运行结果:
在这里插入图片描述

1.12 枚举函数

enumerate(a), 将a中元素枚举出来,并在元素前配个索引号。

a = ['11','222','333']
b = [[3,4,5],[7,8,9]]
print("一维使用枚举函数的输出:")
for element in enumerate(a):
    print(element)
print("\n二维使用枚举函数的输出:")
for element in enumerate(b):
    print(element)

运行结果:
在这里插入图片描述

1.13 独热码转换

tf.one_hot(a,depth), 将a中元素分成depth转换为独热码,方便做分类学习时进行分类。

import tensorflow as tf
labels = tf.constant([0,1,2,1])#创建labels总共3类(0,1,2)
output = tf.one_hot(labels,3)#转换为独热码
print(output)

运行结果:
在这里插入图片描述

1.14 softmax函数

tf.nn.softmax(y), 计算y经过softmax函数后的输出。

import tensorflow as tf
import numpy as np
y = tf.constant([1.0,2.0,3.0])
y_pro = tf.nn.softmax(y) #得到函数求出的softmax()
y_input = y_/(tf.reduce_sum(np.e**y)) #得到用数学公式求出的softmax
print("调用tf库函数得到的输出:\n", y_pro)
print("\n用公式得到的输出:\n", y_input)

运行结果:
在这里插入图片描述

1.15 返回一组元素中最值索引的函数

tf.argmax(a, axis), 返回a中最大值的索引
tf.argmin(a, axis), 返回a中最小值的索引
axis: axis=0计算竖直方向上元素最值索引,axis=1计算水平方向上元素最值索引,axis默认为0。(在classification时,可用tf.argmax()函数比较输出值和labels的最大值索引是否相同,来判断是否预测正确)

import tensorflow as tf
import numpy as np
num = 0
a = np.array([[1,2,0],[0,1,1]])
b = np.array([[1,3,3],[0,1,4]])
i_max = tf.argmax(a,axis=1)
j_max = tf.argmax(b)
j_min = tf.argmin(b)
print("a的水平方向上最大值索引:\n",i_max)
print("b的竖直方向上最大值索引:\n",j_max)
print("b的竖直方向上最小值索引:\n",j_min)

运行结果:
在这里插入图片描述

1.16 tf.where条件判断语句

tf.where(条件语句,真返回A,假返回B)

import tensorflow as tf
A = [1,2,4,5,2]
B = [2,3,1,2,3]
c = []
for i in range(len(A)):
    c.append(tf.where(A[i]>B[i], A[i], B[i])) #用.append将A,B中最大值存放在c中
print(np.array(c))# 将tensor数据转换为array的,方便输出查看

运行结果:
在这里插入图片描述

2.1 生成[0, 1)之间的随机数

np.random.RandomState(seed).rand(维度a), 返回一组维度是a的[0,1)之间的随机数。seed是随机种子,设置相同的随机种子,每次运行可产生相同的随机数。

import numpy as np
rdm = np.random.RandomState(seed=1)#seed=常数每次生成随机数相同
a=rdm.rand()#返回一个随机数
b=rdm.rand(2,3)#返回一个维度是(2,3)的随机矩阵
print("随机数:",a)
print("随机矩阵:\n",b)

运行结果:
在这里插入图片描述

2.2 将两个数组组合在一起的函数

np.vstack(数组1,数组2)

import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.vstack((a,b))
print("a,b组合后:\n",c)

运行结果:
在这里插入图片描述

2.3 对矩阵降维配对的函数

np.mgrid[起始点:结束值:步长,初始值:结束值:步长,…], 根据初始值,结束值,步长创建矩阵。

import numpy as np
x,y = np.mgrid[1:4:1,2:6:1]#第一个从y轴方向排序,第二个从x轴方向排序,最后输出会自动调整成相同维度
print("矩阵x:\n",x)
print("\n矩阵y:\n",y)

运行结果:
在这里插入图片描述
x.ravel(),将矩阵降维,变为一维数组。

import numpy as np
x,y = np.mgrid[1:4:1,2:6:1]#第一个从y轴方向排序,第二个从x轴方向排序,最后输出会自动调整成相同维度

x_tiled = x.ravel() #将x降维
y_tiled = y.ravel() #将y将维
print("\nx矩阵将维后:\n",x_tiled) 
print("\ny矩阵将维后:\n",y_tiled)

运行结果:
在这里插入图片描述
np.c_[数组1,数组2,…]将各个数组内元素配对。

import numpy as np
x,y = np.mgrid[1:4:1,2:6:1]#第一个从y轴方向排序,第二个从x轴方向排序,最后输出会自动调整成相同维度

x_tiled = x.ravel() #将x降维
y_tiled = y.ravel() #将y将维

z = np.c_[x_tiled, y_tiled] #将数组x_tiled和y_tiled的各个元素配对
print("将x_tiled和y_tiled配对后:\n",z)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值