深度学习之基本知识储备(一)【图、会话、张量和基本运算】

1.深度学习

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

1.1 深度学习之运行速度

因为深度学习涉及到的数据量非常的大,特征非常多,再加上算法设计的本身比较复杂,所以计算需要等很长时间去优化。

  • cpu: 运⾏操作系统,吹处理业务 计算能⼒不是特别突出。
  • gpu:专⻔为计算设计的

所以,tensorflow的版本分别为cpu和gpu两个版本

2. tensorflow图的结构

2.1 tensorflow实现加法运算

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'  # 去掉警告用的

# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)

sum1 = tf.add(a, b)
print(sum1)

# 只要有会话的上下文环境,就可以方便的使用eval()
with tf.Session() as sess:
	print(sess.run(sum1))    # 等价于print(sum1.eval())
	 

输出的结果为:在这里插入图片描述

2.2 数据流图

  • 框架
    • 计算密集型:tensorflow(cpu计算)
    • IO密集型:django,scrapy(磁盘操作,HTTP请求等)在这里插入图片描述

2.3 tensorflow进阶

2.3.1 图

  • 图默认已经注册,一组表示 tf.Operation 计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象。
  • 获取调用:
    • tf.get_default_graph()
    • op、sess或者tensor 的graph属性。
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'  # 去掉警告用的

# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)

sum1 = tf.add(a, b)

# 默认的这张图,相当于是给程序分配一段内存
graph = tf.get_default_graph()

print(graph))
with tf.Session() as sess:
	print(sess.run(sum1))
	print(a.graph)	 
	print(sum1.graph)
	print(sess.graph)

输出的结果为:
在这里插入图片描述

2.3.2 图的创建

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'  # 去掉警告用的

# 【tensorflow中需要某个东西时,需要使用上下文环境】
# 创建一张图包含了一组op和tensor,
# op:只要使用tensorflow的API定义的函数都是OP
# tensor:就指代的是数据
g = tf.Graph()

print(g)
with g.as_default():
    c = tf.constant(11.0)
    print(c.graph)

在这里插入图片描述

2.3.3 Session会话

  • 会话把tensorflow框架分成了前端系统和后端系统:

    • 前端系统:定义图的结构
    • 后端系统:运算图结构
  • tf.Session() 运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图)
  • 会话资源

    会话可能拥有很多资源,如 tf.Variable,tf.QueueBase和tf.ReaderBase,会话结束后需要进行资源释放。

    • sess = tf.Session() sess.run(…) sess.close()
    • 使用上下文管理器
      with tf.Session() as sess:
      sess.run(…)
  • config=tf.ConfigProto(log_device_placement=True)

  • 交互式:tf.InteractiveSession()

2.3.4 会话的run()方法

在这里插入图片描述

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'  # 去掉警告用的

# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)

sum1 = tf.add(a, b)
print(sum1)

with tf.Session() as sess:
	print(sess.run([a,b,sum1]))   

输出的结果为:
在这里插入图片描述
注意: sess.run([a,b,sum1])不要写成sess.run(a,b,sum1)他会被误认为传递的3个参数。

2.3.4.1 有关重载的运算符运行案例
# 错误案例
# 不是op不能运行
var1 = 2.0
var2 = 3
sum2 = var1 + var2
with tf.Session() as sess:
	print(sess.run([sum2])) 
上述代码不能运行
# 正确案例
# 不是op不能运行
var1 = 2.0
a = tf.constant(5.0)

# 有重载的机制,默认会给运算符重载成op类型
sum2 = var1 + a
with tf.Session() as sess:
	print(sess.run([sum2])) 

输出的结果为:正确
在这里插入图片描述

2.3.4.2 placeholder作为占位符的使用[Tensorflow Feed操作]

语法:placeholder提供占位符,run时候通过feed_dict指定参数

# placeholder是一个占位符,feed_dict一个字典
plt = tf.placeholder(tf.float32, [None, 3])   # 第二个参数是shape,这里为2行3列的一个二位数组

with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
    print(sess.run(plt, feed_dict={plt: [[1, 2, 3], [4, 5, 36], [2, 3, 4]]}))

输出的结果为:
在这里插入图片描述

2.3.5 张量的定义

在这里插入图片描述在这里插入图片描述在这里插入图片描述

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

a = tf.constant(5.0)
# placeholder是一个占位符,feed_dict一个字典
plt = tf.placeholder(tf.float32, [2, 3, 4])

print(plt)
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
    print(a.graph)
    print("---------")
    print(a.shape)
    print(plt.shape)
    print("-------")
    print(a.name)
    print("-------")
    print(a.op) 
    
# tensorflow:打印出来的形状表示
# 0维:()   1维:(5)  2维:(5,6)   3维:(2,3,4)

输出的结果为:
在这里插入图片描述

2.3.6 张量的动态形状与静态形状

动态性状和静态形状:在于有没有⽣成⼀个新的张量数据.

TensorFlow中,张量具有静态形状和动态形状
  • 静态形状:
    创建一个张量或者由操作推导出一个张量时,初始状态的形状
    tf.Tensor.get_shape:获取静态形状
    tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推
    断的情况下

  • 动态形状:
    一种描述原始张量在执行过程中的一种形状(动态变化)
    tf.reshape:创建一个具有不同动态形状的新张量

# 形状的概念
# 静态形状和动态性状
# 对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状, 不能夸维度修改 只可以1D->1D 2D->2D
# 动态形状可以去创建一个新的张量,改变时候一定要注意元素数量要匹配  1D->2D  1->3D

plt = tf.placeholder(tf.float32, [None, 2])

print(plt)

plt.set_shape([3, 2])

print(plt)

# plt.set_shape([2, 3]) # 不能再次修改   打印错误

plt_reshape = tf.reshape(plt, [2, 3])   # 通过reshape改变张量的形状

print(plt_reshape)

with tf.Session() as sess:
    pass

输出的结果为:
在这里插入图片描述

要点

在这里插入图片描述

2.3.7 张量的运算

在这里插入图片描述在这里插入图片描述

创建随机张量

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值