18-tensorflow

基础深度学习介绍深度学习,如深度神经网络、卷积神经网络和递归神经网络已被应用计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域。并获取了极好的效果。tensorflow特点1、真正的可移植性引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,如安卓设备、ios、树莓派等等2、多语言支持Tensorflow 有一个合理的c++使用界面,也有一个...
摘要由CSDN通过智能技术生成

基础

深度学习介绍

深度学习,如深度神经网络、卷积神经网络和递归神经网络已被应用计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域。并获取了极好的效果。

在这里插入图片描述

tensorflow特点
1、真正的可移植性
引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,
如安卓设备、ios、树莓派等等

2、多语言支持
Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和
执行你的graphs,你可以直接写python/c++程序。

3、高度的灵活性与效率
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库
能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高

4、支持
TensorFlow 由谷歌提供支持,谷歌投入了大量精力开发 TensorFlow,它希望
TensorFlow 成为机器学习研究人员和开发人员的通用语言

cpu与gpu

cpu:运行操作系统,主要处理业务,计算能力不是特别突出
gpu:专门为计算设计的,计算部件多

tensorflow

tensorflow中的图

数据流图
在这里插入图片描述

tensorflow中的数据是tensor(张量)

flow是流动的意思,tensorflow就是说数据在整张图中进行运算,流动

图中的方块被称之为节点(operation):专门进行运算。所有操作都是一个op

图(Graph)的概念:你的整个程序的结构

图默认已经注册,一组表示 tf.Operation计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象

会话:运算程序的图,当你定义好图之后,还需要进行运算才能得出结果。Session的运算只能运算一张图

图的获取调用:

  • tf.get_default_graph()
  • op、sess或者tensor 的graph属性

默认的这张图相当于给程序分配一个内存,

tensorflow进阶

在机器学习中,io操作并不频繁,大多都是计算密集型

图的创建

tf.Graph()

import tensorflow as tf

#创建一张图
g = tf.Graph()
print(g)
with g.as_default():	#使用这张图,在这个上下文环境中使用的图和其他的图互不干扰
    c = tf.constant(11.0)
    print(c.graph)

op
在这里插入图片描述
op:只要使用tensorflow的API定义的函数都是OP

tensor:指代的就是数据

会话

tensorflow分为前端系统和后端系统
前端系统:定义程序的图的结构
后端系统:运算图结构

会话的作用

  • 运行图的结构(只能运算一张图,可以在会话中指定运行哪张图)
  • 分配资源计算
  • 掌握资源(变量、队列、线程),会话结束,这些资源就不能再使用

Session.run()即运行整张图,如果不用上下文管理器就需要手动close

import tensorflow as tf
#实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(0.4)
mysum = tf.add(a, b)
print(mysum)
print(tf.get_default_graph())

with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:	#Session的这个参数可以让我们知道op在那个设备上运行(比如add是在哪个cpu上执行的)
    print(sess.run(mysum))
    print(a.graph)
    print(mysum.eval())	#也可以得到数据的值
    print(mysum.graph)
    print(sess.graph)

run方法
在这里插入图片描述

import tensorflow as tf
#实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(0.4)
mysum = tf.add(a, b)

"""重载机制,默认会给运算符重载成op类型"""
var1 = 2.0
sum2 = a + var1
"""end"""

"""
训练模型,实时的提供数据去进行训练
placeholder是一个占位符,先占个位置,运行的时候再提供数据。与feed_dict结合使用
"""
plt = tf.placeholder(dtype=tf.float32, shape=[2,3]) #占位符也是一个tensor。这里参数的意思是将来的数据类型是tf.float32,其shape我2行3列的tensor
print("plt的类型:\n",type(plt))

plt2 = tf.placeholder(dtype=tf.float32, shape=[None, 3])    #None表示形状不固定,这里表示任意行,3列
"""end"""
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
    print(sess.run([a, b, mysum]))
    print(sess.run(plt, feed_dict={plt:[[1,2,3],[4,5,6]]}))  #将feed_dict的数据给占位符
    print(sess.run(plt2, feed_dict={plt2:[[1,2,3],[4,5,6]]}))

张量

numpy中的数组都是ndarray类型。矩阵运算通过np.dot()实现

矩阵必须是二维的

tensorflow中的数据是tensor类型的,而tensorflow依赖的是numpy,所以将ndarray封装成了tensor

张量的阶和数据类型

与数组的维度相似
在这里插入图片描述数据类型
在这里插入图片描述
ps:tf.float64实际没有意思的,因为一般不会让一个数字占用那么大的内存空间;我们常用的数据类型一般为表格中bool及其之前的类型

张量的属性
在这里插入图片描述
shape:

  • 如果是0维的,就是();
  • 如果是1维,(数字);
  • 2维,(数字1, 数字2);
  • 如果某个没有确定,(?,数字);
  • 3维,(数字1, 数字2, 数字3)

形状的改变
在这里插入图片描述

  • 对于静态形状来说,一旦形状固定,就不能再次设置静态形状,对于有None维度的tensor,也不能跨维度修改
  • 动态形状可以去创建一个新的张量,但是元素的数量应该匹配

API

在这里插入图片描述

import tensorflow as tf

zero = tf.zeros([3,4], tf.float32)
one = tf.ones([3,4], dtype=tf.float32, name="One")
fill_tensor = tf.fill([2,3], value=1)
cst = tf.constant(value=3, dtype=tf.float32)

with tf.Session() as sess:
    print(sess.run(zero))
    print(sess.run(one))
    print(sess.run(fill_tensor))
    print(sess.run(cst))

"""运行结果
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
[[1 1 1]
 [1 1 1]]
3.0

随机张量
在这里插入图片描述mean:平均值
stddev:标准差

改变张量的类型
在这里插入图片描述常用的为cast

在这里插入图片描述concat:连接两个张量

import tensorflow as tf
a = [[1, 2, 3], [4, 5, 6]]
b = [[7, 8, 9], [10, 11, 12]]
ret = tf.concat([a, b], axis=0) #0就是按照行合并
with tf.Session() as sess:
    print(sess.run(ret))

可视化学习

变量

变量(tf.Variable)是也是一种op,是一种特殊的张量,能够进行存储持久化(保存在文件中),它的值就是张量,默认被训练

当定义一个变量op的时候,一定要在会话当中去运行初始化

import tensorflow as tf

a = tf.constant([1,2,3,4,5])
var = tf.Variable(tf.random_normal([2,3], mean=0.0, stddev=1.0))
print(a, var)    #都是Tensor

#变量必须进行初始化,不然var里面是没有值的。比如下面的run会报错
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    #必须运行初始化op
    sess.run(init_op)
    print(sess.run([a, var]))

可视化

定义图结构——》 序列化文件成events事件文件——》通过tensorboard工具把文件里面的数据读取出来——》将读取出来的文件显示到web界面

在这里插入图片描述

import tensorflow as tf

a = tf.constant([1,2,3,4,5])
var = tf.Variable(tf.random_normal([2,3], mean=0.0, stddev=1.0))
print(a, var)    #都是Tensor

#变量必须进行初始化,不然var里面是没有值的。比如下面的run会报错
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    #必须运行初始化op
    sess.run(init_op)

    #把程序的图结构写入事件文件
    filewriter = tf.summary.FileWriter("./", graph=sess.graph)  #保存的文件一般以主机名结尾

然后在terminal里面运行:tensorboard --logdir=“事件文件的路径(不包括文件名)”,默认显示最新的文件
在这里插入图片描述
图中符号的意义:
在这里插入图片描述
所有的op都有name,其作用为在tensorboard使用的使用显示明细,可以让相同op名字的进行区分

增加变量显示
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值