TensorFlow简单使用(基础篇)

目录

一、TensorFlow的数据类型

二、如何创建一个张量

三、常用函数 

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

2.平均值、求和

 3.标记为可训练

 4.四则运算

5.平方、次方与开方 

6.矩阵相乘 

7.输入特征和标签配对

8.求出张量的梯度 

9.枚举函数 

 10.独热编码

11.概率转换函数 

12.自更新函数 

 13.最大值索引函数


我们为什么要学习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)

TensorFlow简单使用(基础篇)_第1张图片

但是很多时候,我们的数据类型是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)

TensorFlow简单使用(基础篇)_第2张图片 

我们还可以使用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)

TensorFlow简单使用(基础篇)_第3张图片

生成正太分布的随机数,默认值均为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)

TensorFlow简单使用(基础篇)_第4张图片

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

 

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

TensorFlow简单使用(基础篇)_第5张图片

三、常用函数 

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)

TensorFlow简单使用(基础篇)_第6张图片

在一个二维张量中,我们饿可以通过条简介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)

TensorFlow简单使用(基础篇)_第7张图片

 3.标记为可训练

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

TensorFlow简单使用(基础篇)_第8张图片

 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))

TensorFlow简单使用(基础篇)_第9张图片

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))

TensorFlow简单使用(基础篇)_第10张图片

6.矩阵相乘 

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

TensorFlow简单使用(基础篇)_第11张图片

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)

TensorFlow简单使用(基础篇)_第12张图片

9.枚举函数 

枚举函数 enumerate

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

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

TensorFlow简单使用(基础篇)_第13张图片

 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)

TensorFlow简单使用(基础篇)_第14张图片 

 这里,我们传入的数据为[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}}}

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))#返回每一行最大值的索引

 TensorFlow简单使用(基础篇)_第15张图片

 

你可能感兴趣的:(深度学习,tensorflow,深度学习,机器学习)