TensorFlow简单使用(基础篇)

Posted wolfwalker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

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

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,标准差为1tf.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

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

鹅蛋鸭蛋鸡蛋
独热编码010

在上面的表格中,独热编码告诉我们当前标签对应的数据所对应的有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))#返回每一行最大值的索引

 

 

以上是关于TensorFlow简单使用(基础篇)的主要内容,如果未能解决你的问题,请参考以下文章

学习TF:《TensorFlow技术解析与实战》PDF+代码

[翻译] 使用 TensorFlow 进行分布式训练

原创 深度学习与TensorFlow 动手实践系列 - 3第三课:卷积神经网络 - 基础篇

Tensorflow编程基础

LSTM简单入门

二进制实战技巧