当前位置:   article > 正文

TensorFlow简单使用(基础篇)_tensorflow使用

tensorflow使用

目录

一、TensorFlow的数据类型

二、如何创建一个张量

三、常用函数 

1.强制转换、最大值、最小值

2.平均值、求和

 3.标记为可训练

 4.四则运算

5.平方、次方与开方 

6.矩阵相乘 

7.输入特征和标签配对

8.求出张量的梯度 

9.枚举函数 

 10.独热编码

11.概率转换函数 

12.自更新函数 

 13.最大值索引函数


我们为什么要学习TensorFlow?TensorFlow有什么作用?

TensorFlow是深度学习的一个重要的数据包,可以实现机器的深度学习。

一、TensorFlow的数据类型

tf.int,tf.floattf.int 32 ,tf.float 32,tf.float 64
tf.booltf.constant([True,False])
tf.stringtf.constant("Hello,world!")

二、如何创建一个张量

tf.consatnt(张量内容,dtype=数据类型(可选))

在下面的代码中,我们创建了一个一阶张量,指定数据类型为tf.float32

直接打印会输出张量的所有数据类型(张量的内容,张量的形状(张量的形状看逗号隔开了几个数字,隔开了几个数字,这个张量就是几维的,在下面的例子中,逗号隔开了三个数字,就说明这是一个三维张量),张量的数据类型)

  1. import tensorflow as tf
  2. x=tf.constant([5,1,3],dtype=tf.float32)
  3. print(x)
  4. print(x.dtype)
  5. print(x.shape)

但是很多时候,我们的数据类型是numpy的,我们可以使用convert_to_tensor()将它变成Tensor数据类型

  1. q=np.array([2,3,3,4,5,67])
  2. w=tf.convert_to_tensor(q,dtype=tf.int64)
  3. print(w)

 

我们还可以使用tf中的方法来创建我们的张量

tf.zeros(维度)创建全为0的张量
tf.ones(维度)创建全为1的张量
tf.fill(维度,指定值)创建全为指定值的张量
  1. a=tf.zeros([2,3])
  2. b=tf.ones(4)
  3. c=tf.fill([3,3],9)
  4. print(a)
  5. print(b)
  6. print(c)

生成正太分布的随机数,默认值均为0,标准差为1tf.random.normal(维度,mean=均值,stddev=标准差)
生成截断式正太分布的随机数tf.random.truncated_normal(维度,mean=均值,stddev=标准差)

 

  1. a=tf.random.normal([4,4],mean=3,stddev=1)
  2. print(a)
  3. b=tf.random.truncated_normal([3,3],mean=0.5,stddev=1)
  4. print(b)

生成均匀分布随机数[minval,maxval]tf.random.uniform(维度,minival=最小值,maxval=最大值)

 

  1. a=tf.random.uniform([4,4],minval=0,maxval=1)
  2. print(a)

三、常用函数 

1.强制转换、最大值、最小值

常用函数
强制tensor转换为该数据类型tf.cast(张量名,dtype=数据类型)
计算张量维度上元素的最小值tf.reduce_min(张量名)
计算张量维度上元素的最大值tf.reduce_max(张量名)
  1. a=tf.constant([1.23,2.32,3.44,4.132],dtype=tf.float64)
  2. print(a)
  3. b=tf.cast(a,tf.int32)
  4. print(b)
  5. c=tf.reduce_min(a)
  6. print(c)
  7. d=tf.reduce_max(a)
  8. print(d)

在一个二维张量中,我们饿可以通过条简介axis等于1或0来控制执行的维度

axis=0表示纵向操作,axis=1表示横向操作

2.平均值、求和

计算张量沿着指定维度的平均值tf.reduce_mean(张量名,axis=操作轴)
计算张量沿着指定维度的和tf.reduce_sum(张量名,axis=操作轴)
  1. b=tf.random.truncated_normal([3,3],mean=0.5,stddev=1)
  2. print(b)
  3. a=tf.reduce_mean(b,axis=1)
  4. print(a)
  5. c=tf.reduce_sum(b,axis=0)
  6. print(c)

 3.标记为可训练

将变量标记为可训练,被标记的变量会在反向传播中记录梯度信息tf.Variable()
  1. w=tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))
  2. 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

 (只有维度相同的张量才能够进行四则运算)

  1. a=tf.constant([[1,2,3],[2,3,3]])
  2. b=tf.constant([[-1,-2,-3],[-2,-3,-3]])
  3. print(a)
  4. print(b)
  5. print(tf.add(a,b))
  6. print(tf.subtract(a,b))
  7. print(tf.multiply(a,b))
  8. print(tf.divide(a,b))

5.平方、次方与开方 

计算某个张量的平方tf.square(张量名)
计算某个张量的n次方tf.pow(张量名,n次方数)
计算某个张量的开方tf.sqrt(张量名)

 

  1. a=tf.fill([3,3],4.)
  2. print(a)
  3. print(tf.pow(a,3))
  4. print(tf.square(a))
  5. print(tf.sqrt(a))

6.矩阵相乘 

两个矩阵的相乘tf.matmul(矩阵1,矩阵2)
  1. a=tf.fill([3,3],4.)
  2. b=tf.fill([3,3],5.)
  3. print(tf.matmul(a,b))

7.输入特征和标签配对

神经网络在传入数据时,是需要将输入特征和标签配对后传入网络的

生成输入特征/标签对,构建数据集(numpy和tensor都可以使用这条语句传入数据)tf.data.Dataset.from_tensor_slices((输入特征,标签))
  1. features=tf.constant([21,32,423,432])
  2. labels=tf.constant([2,1,1,0])
  3. dataset=tf.data.Dataset.from_tensor_slices((features,labels))
  4. print(dataset)
  5. for element in dataset:
  6. 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

  1. with tf.GradientTape() as tape:
  2. w=tf.Variable(tf.constant(4.0))
  3. loss=tf.pow(w,2)
  4. grad=tape.gradient(loss,w)
  5. print(grad)

9.枚举函数 

枚举函数enumerate

enumerate 可以用于遍历每一个元素(列表,元组,字符串等),然后将其组合为索引——元素

  1. list=['red','yellow','green','blue','orange','purple']
  2. for i,element in enumerate(list):
  3. print(i,element)

 10.独热编码

独热编码tf.one_hot

在分类问题中我们经常使用独热编码作为我们的标签,

鹅蛋鸭蛋鸡蛋
独热编码010

在上面的表格中,独热编码告诉我们当前标签对应的数据所对应的有0%的可能性为鹅蛋,100%的概率为鸭蛋。0%的概率为鸡蛋

tf.one_hot()函数将待转换数据转换成独热编码进行数据

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

  1. classes=4
  2. labels=tf.constant([2,3,1,2])
  3. output=tf.one_hot(labels,depth=classes)
  4. 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

Softmax(y_{I})=\frac{e^{y_{i}}}{\sum_{n}^{j=0}e^{y_{i}}}

  1. y=tf.constant([1.01,2.01,-0.66])
  2. y_1=tf.nn.softmax(y)
  3. print(y_1)

12.自更新函数 

赋值操作,更新参数的值并返回assign_sub

在调用assign_sub前,先用tf.Variable定义变量w为可训练(可自更新)

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

  1. w=tf.Variable(8)
  2. w.assign_sub(3)
  3. print(w)

 13.最大值索引函数

返回张量沿着指定维度最大值的索引tf.argmax(张量名,axis=操作轴)
  1. import numpy as np
  2. test=np.array([[1,2,3],[2,3,4],[5,6,7],[7,8,9]])
  3. print(test)
  4. print(tf.argmax(test,axis=0))#返回每一列最大值的索引
  5. print(tf.argmax(test,axis=1))#返回每一行最大值的索引

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/96001
推荐阅读
相关标签
  

闽ICP备14008679号