目录
我们为什么要学习TensorFlow?TensorFlow有什么作用?
TensorFlow是深度学习的一个重要的数据包,可以实现机器的深度学习。
一、TensorFlow的数据类型
tf.int,tf.float | tf.int 32 ,tf.float 32,tf.float 64 |
tf.bool | tf.constant([True,False]) |
tf.string | tf.constant("Hello,world!") |
二、如何创建一个张量
tf.consatnt(张量内容,dtype=数据类型(可选))
在下面的代码中,我们创建了一个一阶张量,指定数据类型为tf.float32
直接打印会输出张量的所有数据类型(张量的内容,张量的形状(张量的形状看逗号隔开了几个数字,隔开了几个数字,这个张量就是几维的,在下面的例子中,逗号隔开了三个数字,就说明这是一个三维张量),张量的数据类型)
import tensorflow as tf
x=tf.constant([5,1,3],dtype=tf.float32)
print(x)
print(x.dtype)
print(x.shape)
但是很多时候,我们的数据类型是numpy的,我们可以使用convert_to_tensor()将它变成Tensor数据类型
q=np.array([2,3,3,4,5,67])
w=tf.convert_to_tensor(q,dtype=tf.int64)
print(w)
我们还可以使用tf中的方法来创建我们的张量
tf.zeros(维度) | 创建全为0的张量 |
tf.ones(维度) | 创建全为1的张量 |
tf.fill(维度,指定值) | 创建全为指定值的张量 |
a=tf.zeros([2,3])
b=tf.ones(4)
c=tf.fill([3,3],9)
print(a)
print(b)
print(c)
生成正太分布的随机数,默认值均为0,标准差为1 | tf.random.normal(维度,mean=均值,stddev=标准差) |
生成截断式正太分布的随机数 | tf.random.truncated_normal(维度,mean=均值,stddev=标准差) |
a=tf.random.normal([4,4],mean=3,stddev=1)
print(a)
b=tf.random.truncated_normal([3,3],mean=0.5,stddev=1)
print(b)
生成均匀分布随机数[minval,maxval] | tf.random.uniform(维度,minival=最小值,maxval=最大值) |
a=tf.random.uniform([4,4],minval=0,maxval=1)
print(a)
三、常用函数
1.强制转换、最大值、最小值
强制tensor转换为该数据类型 | tf.cast(张量名,dtype=数据类型) |
计算张量维度上元素的最小值 | tf.reduce_min(张量名) |
计算张量维度上元素的最大值 | tf.reduce_max(张量名) |
a=tf.constant([1.23,2.32,3.44,4.132],dtype=tf.float64)
print(a)
b=tf.cast(a,tf.int32)
print(b)
c=tf.reduce_min(a)
print(c)
d=tf.reduce_max(a)
print(d)
在一个二维张量中,我们饿可以通过条简介axis等于1或0来控制执行的维度
axis=0表示纵向操作,axis=1表示横向操作
2.平均值、求和
计算张量沿着指定维度的平均值 | tf.reduce_mean(张量名,axis=操作轴) |
计算张量沿着指定维度的和 | tf.reduce_sum(张量名,axis=操作轴) |
b=tf.random.truncated_normal([3,3],mean=0.5,stddev=1)
print(b)
a=tf.reduce_mean(b,axis=1)
print(a)
c=tf.reduce_sum(b,axis=0)
print(c)
3.标记为可训练
将变量标记为可训练,被标记的变量会在反向传播中记录梯度信息 | tf.Variable() |
w=tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))
print(w)
4.四则运算
加法 | tf.add(张量1,张量2) |
减法 | tf.substract(张量1,张量2) |
乘法 | tf.multiply(张量1,张量2) |
除法 | tf.divide(张量1,张量2) |
平方 | tf.square |
次方 | tf.pow |
开方 | tf.sqrt |
矩阵乘法 | tf.matmul |
(只有维度相同的张量才能够进行四则运算)
a=tf.constant([[1,2,3],[2,3,3]])
b=tf.constant([[-1,-2,-3],[-2,-3,-3]])
print(a)
print(b)
print(tf.add(a,b))
print(tf.subtract(a,b))
print(tf.multiply(a,b))
print(tf.divide(a,b))
5.平方、次方与开方
计算某个张量的平方 | tf.square(张量名) |
计算某个张量的n次方 | tf.pow(张量名,n次方数) |
计算某个张量的开方 | tf.sqrt(张量名) |
a=tf.fill([3,3],4.)
print(a)
print(tf.pow(a,3))
print(tf.square(a))
print(tf.sqrt(a))
6.矩阵相乘
两个矩阵的相乘 | tf.matmul(矩阵1,矩阵2) |
a=tf.fill([3,3],4.)
b=tf.fill([3,3],5.)
print(tf.matmul(a,b))
7.输入特征和标签配对
神经网络在传入数据时,是需要将输入特征和标签配对后传入网络的
生成输入特征/标签对,构建数据集(numpy和tensor都可以使用这条语句传入数据) | tf.data.Dataset.from_tensor_slices((输入特征,标签)) |
features=tf.constant([21,32,423,432])
labels=tf.constant([2,1,1,0])
dataset=tf.data.Dataset.from_tensor_slices((features,labels))
print(dataset)
for element in dataset:
print(element)
8.求出张量的梯度
求出张量的梯度 | tf.GradientTape |
with结构记录计算过程,gradient求出张量的梯度
with tf.GradientTape() as tape:
计算过程
grad=tape.gradient(函数,对谁求导)
在下面额代码中,我们的w的初始值为4.0,然后我们定义我们的损失函数为w的平方。
我们将我们的grad定义为loss对w进行求导操作,也就是w^2对w进行求导,也就是2w
最后我们将4.0带入到2w中,得到我们最终的结果为8.0
with tf.GradientTape() as tape:
w=tf.Variable(tf.constant(4.0))
loss=tf.pow(w,2)
grad=tape.gradient(loss,w)
print(grad)
9.枚举函数
枚举函数 | enumerate |
enumerate 可以用于遍历每一个元素(列表,元组,字符串等),然后将其组合为索引——元素
list=['red','yellow','green','blue','orange','purple']
for i,element in enumerate(list):
print(i,element)
10.独热编码
独热编码 | tf.one_hot |
在分类问题中我们经常使用独热编码作为我们的标签,
鹅蛋 | 鸭蛋 | 鸡蛋 | |
独热编码 | 0 | 1 | 0 |
在上面的表格中,独热编码告诉我们当前标签对应的数据所对应的有0%的可能性为鹅蛋,100%的概率为鸭蛋。0%的概率为鸡蛋
tf.one_hot()函数将待转换数据转换成独热编码进行数据
tf.one_hot(待转换数据,depth=分成几类)
classes=4
labels=tf.constant([2,3,1,2])
output=tf.one_hot(labels,depth=classes)
print(output)
这里,我们传入的数据为[2,3,1,2],转换成我们的独热编码就分别为[0,0,1,0],[0,0,0,1],[0,1,0,0],[0,0,1,0]
11.概率转换函数
使每个输出值变成0到1之间的概率值 | tf.nn.softmax |
y=tf.constant([1.01,2.01,-0.66])
y_1=tf.nn.softmax(y)
print(y_1)
12.自更新函数
赋值操作,更新参数的值并返回 | assign_sub |
在调用assign_sub前,先用tf.Variable定义变量w为可训练(可自更新)
w.assign_sub(w要自减的内容)
w=tf.Variable(8)
w.assign_sub(3)
print(w)
13.最大值索引函数
返回张量沿着指定维度最大值的索引 | tf.argmax(张量名,axis=操作轴) |
import numpy as np
test=np.array([[1,2,3],[2,3,4],[5,6,7],[7,8,9]])
print(test)
print(tf.argmax(test,axis=0))#返回每一列最大值的索引
print(tf.argmax(test,axis=1))#返回每一行最大值的索引