深度学习介绍
(1)介绍:
深度学习,如深度神经网络、卷积神经网络和递归神经网络已被应用 计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域 并获取了极好的效果。
(2)深度学习框架
Tensorflow
(1)认识Tensorflow (2)Tensorflow特点
- 真正的可移植性
引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端, 如安卓设备、ios、树莓派等等 - 多语言支持
Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和 执行你的graphs,你可以直接写python/c++程序。 - 高度的灵活性与效率
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库 能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高 - 支持 TensorFlow 由谷歌提供支持,谷歌投入了大量精力开发 TensorFlow,它希望 TensorFlow 成为机器学习研究人员和开发人员的通用语言
(3)tensorflow安装
- conda创建一个新的python环境
conda create -n name python==3.6 - 激活环境
activate name - 在该环境下下载tensorflow
conda install -n name tensorflow==1.15.0 - pycharm下使用该环境即可
(4)tensorflow初体验
tensorflow实现加法运算:
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
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(sum1))
运行结果: (5)分析
- 数据流图:
其中: tensor:张量【一种数据类型】 operation(op):专门运算的操作节点,所有操作都是一个op graph(图):你的整个程序的结构 (6)tensorflow进阶 1、图 2、会话 3、张量 4、变量 5、模型保存和加载 6、自定义命令行参数
1、图(op+tensor)
图默认已经注册,一组表示 tf.Operation计算单位的对象和tf.Tensor 表示操作之间流动的数据单元的对象
(1)获取调用
1、tf.get_default_graph() 2、op、sess或者tensor 的graph属性
(2)图的创建
tf.Graph()
使用新创建的图
g = tf.Graph()
with g.as_default():
a = tf.constant(1.0)
assert c.graph is g
(3)哪些是op (4)举例
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
g = tf.Graph()
print(g)
with g.as_default():
c = tf.constant(11.0)
print(c.graph)
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、会话
(1)作用:
- 运行图的结构
- 分配资源计算
- 掌控资源(变量的资源,队列,线程)
(2)使用:
with tf.Session(graph=g) as sess:
print(sess.run(c))
运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图)
sess = tf.Session()
sess.run(...)
sess.close()
使用上下文管理器:(默认结束时运行sess.close())
with tf.Session() as sess:
sess.run(...)
打印设备:
config=tf.ConfigProto(log_device_placement=True)
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(sum1))
交互式:tf.InteractiveSession()
sess.run(sum1) == sum1.eval()
(3)会话里的run()方法(会话的启动)
run(fetches, feed_dict=None,graph=None)
其中:
- fetches:嵌套列表,元组,namedtuple,dict或OrderedDict(重载的运算符也能运行)
var1 = 1
var2 = 3
sum2 = var1+var2
sum3 = var1+a
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run([sum1,a,b]))
print(sess.run(sum2))
print(sess.run(sum3))
- feed_dict:允许调用者覆盖图中指定张量的值,提供给placeholder使用(语法:placeholder提供占位符,run时候通过feed_dict指定参数)
意义:在程序执行的时候,不确定输入的是什么,提前“占个坑”
plt = tf.placeholder(tf.float32,[None,3])
print(plt)
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]}))
- graph:指定图去运行
with tf.Session(graph=g) as sess:
print(sess.run(c))
- 返回值异常:
RuntimeError:如果它Session处于无效状态(例如已关闭)。 TypeError:如果fetches或feed_dict键是不合适的类型。 ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在
3、张量
张量:相当于numpy中的ndarray数组
(1)张量的阶(维度) (2)张量的数据类型 (3)张量的属性
- graph : 张量所属的默认图
- op :张量的操作名
- name : 张量的字符串描述
- shape : 张量形状
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]}))
print(a.graph)
print("---------")
print(a.shape)
print(plt.shape)
print("--------")
print(a.name)
print("-------")
print(a.op)
(4)张量的动态形状与静态形状
区别:在于有没有生成一个新的张量数据
TensorFlow中,张量具有静态形状和动态形状
静态形状: 创建一个张量或者由操作推导出一个张量时,初始状态的形状 tf.Tensor.get_shape:获取静态形状 tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推断的情况下
注意:对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状,不能跨维度修改 1D->1D,2D->2D
动态形状: 一种描述原始张量在执行过程中的一种形状 tf.reshape:创建一个具有不同动态形状的新张量
注意:动态形状可以去创建一个新的张量,改变时候一定要注意元素数量要匹配 1D->2D,1D->3D
要点:1、转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状 2、 对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状 3、tf.reshape()动态创建新张量时,元素个数不能不匹配
plt = tf.placeholder(tf.float32,[None,2])
print(plt)
plt.set_shape([3,2])
print(plt)
plt_reshape = tf.reshape(plt,[2,3])
print(plt_reshape)
|