Tensorflow 是谷歌2015年11月正式开源的计算框架。主要依赖Protocol Buffer和Bzael两个工具包:
- Protocl Buffer是谷歌开发的结构化数据处理工具
- Bzael 是谷歌的自动化构建工具,谷歌内部大部分应用均通过它来编译
Tensorflow 是谷歌2015年11月正式开源的计算框架。主要依赖Protocol Buffer和Bzael两个工具包:
- Protocl Buffer是谷歌开发的结构化数据处理工具
- Bzael 是谷歌的自动化构建工具,谷歌内部大部分应用均通过它来编译
Tensorflow的名字已经说明其最重要的两个概念:
- Tensor就是张量,即多维数组,所有数据都通过张量的形式表示。一个张量主要保存三个属性:名字(name),维度(shape)和类型。
- Flow就是流,体现了计算模型,Tensorflow中每个计算都是计算图上的一个节点,节点之间的边描述了计算间的依赖关系
Tensorflow支持14种不同类型,主要包括:
- 实数(tf.float32, tf.float64)
- 整数(tf.int8, tf.int16, tf.int32, tf.int64, tf.unit8)
- 布尔型(tf.bool)
- 复数(tf.complex64, tf.complex128)
1. 会话
Tensorflow使用会话(Session)执行定义好的运算,会话拥有并管理Tensorflow程序运行时的所有资源,计算完成后需要关闭会话回收资源。
为解决异常退出时的资源释放问题,Tensorflow通过Python上下文管理器来使用会话(将所有计算放在with
内部),当上下文管理器退出时自动释放所有资源。
x = tf.constant([[1.0,2.0]]) #x(1,2)
w = tf.constant([[3.0],[4.0]]) #w(2,1)
y = tf.matmul(x,w) #y(1,1)
with tf.Session() as sess:
print(sess.run(y))
2. 变量
Tensorflow支持14种不同类型,主要包括:
- 实数(tf.float32, tf.float64)
- 整数(tf.int8, tf.int16, tf.int32, tf.int64, tf.unit8)
- 布尔型(tf.bool)
- 复数(tf.complex64, tf.complex128)
tf.Variable(<initial-value>, name=<optional-name>)
用于生成一个初始值为initial-value(必须指定)的变量
tf.get_variable(name, shape=None, dtype=tf.float32, initializer=None)
获取已存在的变量(要求不仅名字,而且初始化方法等各个参数都一样),若不存在,就新建一个(可以用各种初始化方法,如xavier_initializer
不用明确指定值)。
常用的生成随机数/数组的函数有:
tf.random_normal()
:生成正态分布随机数tf.truncated_normal()
:生成去掉过大偏离点的正态分布随机数tf.random_uniform()
:生成均匀分布随机数tf.zeros
:表示生成全0数组tf.ones
:表示生成全1数组tf.fill
:表示生成全定值数组tf.constant
:表示生成直接给定值的数组
例:
tf.Variable(tf.random_normal([2,3],stddev=2, mean=0, seed=1))
,表示生成正态分布随机数,形状两行三列,标准差是2,均值是0,随机种子是1tf.Variable(tf.Truncated_normal([2,3],stddev=2, mean=0, seed=1))
,表示去掉偏离过大的正态分布, 也就是如果随机出来的数据偏离平均值超过两个标准差,这个数据将重新生成random_uniform(shape=7,minval=0,maxval=1,dtype=tf.int32, seed=1)
,表示从一个均匀分布[minval maxval)中随机采样,注意定义域是左闭右开,即
包含minval,不包含 maxvaltf.zeros([3,2],int32)
表示生成[[0,0],[0,0],[0,0]]tf.ones([3,2],int32)
表示生成[[1,1],[1,1],[1,1]tf.fill([3,2],6)
表示生成[[6,6],[6,6],[6,6]]tf.constant([3,2,1])
表示生成[3,2,1]。
3. placeholder
Tensorflow通过placeholder占位符机制用于提供输入数据,相当于定义一个位置,这个位置中的数据在程序运行时再指定。在定义时需要指定数据类型(不可改变)。这样在程序中就不需要生成大量常量来提供输入数据,而只需要将数据通过placeholder传入Tensorflow计算图。
#使用占位符 一次输入一组数据
x = tf.placeholder(tf.float32,shape=(1,2))
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
print(sess.run(y,feed_dict={x:[[0.7,0.5]]}))
#使用占位符 一次输入多组数据
x = tf.placeholder(tf.float32,shape=(None,2))
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
print(sess.run(y,feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}))
print(sess.run(w1))
print(sess.run(w2))
转载:https://blog.csdn.net/apr15/article/details/106244082