Tensoflow
全部基于Tensorflow=1.14.0
Tensorflow的编程模式:声明式编程,告诉计算机想要达到的目标,不指定具体的实现步骤,而是通过函数、推论规则等描述数据之间的关系,优化较容易。包括人工智能、深度学习的编程框架都是声明式编程。
历史
Tensorflow是谷歌团队于2015年开发并开源,Github上活跃度最高的深度学习编程框架。谷歌第一代分布式深度学习平台叫做DistBelief,2011年完成,是第一代可扩展的分布式深度学习平台,可用于深度神经网络的训练和预测。作为Distblelief的继任者,谷歌团队开发并在2015年11月开源了深度学习框架Tensorflow,支持多种高级语言Python、C、Java、Go等。16年的0.8版本开始支持GPU分布式计算。2017年第一个正式版本。2018年推出Tensorboard。
几个基本概念
1、使用计算图来表示机器学习算法中所有的计算和状态。
2、将所有的数据建模成张量tensor。
3、具体计算操作运行在Session会话环境中。
4、将多种类型的计算定义为操作Operation。
5、通过变量Variable存储计算图中的有状态参数,如模型参数。
6、通过占位符placehold将张量传递到会话中。
7、通过队列Queue处理数据读取和计算图的异步执行。
计算图
Tensorflow中使用有向图来描述计算过程。有向图中包含一组节点和边。
支持通过多种高级语言来构建计算图,包括C、python等
计算图对应了神经网络的结构
# 简单示例
# 构建计算图 执行计算图
import tensorflow as tf
# 操作可绑定设备,GPU
x = tf.constant([[3.,3.]]) #操作1
w = tf.constant([[2.],[2.]]) #操作2
y = tf.matmul(x,w) #操作3
with tf.Session() as sess:
result = sess.run(y)
print(result)
[[12.]]
Tensorflow 1.x
静态图,方便对整个计算图做全局优化,性能较高;但调试困难,影响开发效率。
Thensorflow 2.X
动态图,调试简单,更适合快速开发;但运行效率低于静态图方法。
# tensor属性
import tensorflow as tf
t0 = tf.constant(9,dtype=tf.int32)
# 创建一个0阶整型常量
t1 = tf.constant([3.,4.1,5.3],dtype=tf.float32)
# 创建一个1阶浮点数数组
t2 = tf.constant([['apple','pear'],['potato','tomato']],dtype=tf.string)
# 创建一个2X2的字符串数组
t3 = tf.constant([[[2],[2],[1]],[[7],[3],[3]]])
# 创建一个2X3X1的3阶整型数组
print(t0)
print(t1)
print(t2)
print(t3)
Tensor("Const_4:0", shape=(), dtype=int32)
Tensor("Const_5:0", shape=(3,), dtype=float32)
Tensor("Const_6:0", shape=(2, 2), dtype=string)
Tensor("Const_7:0", shape=(2, 3, 1), dtype=int32)
# print想要打印tensor具体的属性,而不是打印tensor的值
# 查看tensor,需要session run
with tf.Session() as sess:
print(sess.run(t3))
[[[2]
[2]
[1]]
[[7]
[3]
[3]]]
变量
大多数计算图被执行多次,每次执行后其中的值即被释放。
变量(Variable)是计算图中的一种有状态节点,用于在多次执行同一种计算图时存储并更新指定参数,对应了机器学习或深度学习算法中的参数
作为有状态节点,其输出由输入、节点操作、节点内部已保存的状态值共同作用。
创建变量后还需要进行变量初始化。最简单的变量初始化方法:使用tf.global_variables_initializer()对所有变量初始化
# 创建变量
# 方法1:使用tf.Variable函数直接定义
a = tf.Variable(2,tf.int16)
b = tf.Variable([1,2])
# 方法2:使用Tensorflow内置的函数来定义变量初值,可以是常量或随机值
r = tf.Variable(tf.random_normal([20,40],stddev=0.35)) # 以标准差0.35的正态分布初始化一个形状为【20,40】的变量
z = tf.Variable(tf.zeros([2,3]))
# 方法3:用其他变量的初始值来定义新变量
weights = tf.Variable(tf.random_normal([784,200],stddev=0.35),name='weights') # 创建一个随机变量
w2 = tf.Variable(weights.initialized_value(),name='w2')
w_twice = tf.Variable(weights.initialized()*2,name='w_twice')
import tensorflow as tf
a = tf.Variable(tf.constant(0.0),dtype=tf.float32)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
总结
计算图:对应神经网络结构
操作:对应神经网络具体计算
张量:对应神经网络的数据
会话:执行神经网络真正的训练和预测
变量:对应神经网络参数
占位符:对应神经网络的训练或预测输入
队列:对应神经网络训练样本的多线程并行处理
网友评论