您的位置:首页 > 运维架构

深度学习4:TensorFlow基础结构——Session,Variable,Placeholder,Optimizer

2018-01-25 16:15 351 查看

1.会话Session

参考

http://blog.csdn.net/hanging_gardens/article/details/72784392

https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/

http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_pros.html

TensorFlow使用图Graph来表示计算任务,而会话Session是图Graph和执行者之间的媒介,图Graph必须在会话Session中被启动。

Session会持有和管理variables, queues或readers等资源,因此Session在使用完后需要关闭以释放资源。根据释放的方式,有两种Session创建方法:

(1) 明确调用会话的生成函数和关闭会话函数

#method 1
sess = tf.Session()
sess.run(...)
...
sess.close()


(2) 上下文管理机制自动释放所有资源

# #method 2
with tf.Session() as sess:
sess.run(...)
...


示例:

import tensorflow as tf

matrix1 = tf.constant([[3,3]])      ##矩阵1
matrix2 = tf.constant([[2],[2]])    ##矩阵2

product = tf.matmul(matrix1,matrix2) #矩阵乘法

# method 1 明确调用会话的生成函数和关闭会话函数
sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()

# method 2 上下文管理机制自动释放所有资源
with tf.Session() as sess:    ##sess自动close
result2 = sess.run(product)
print(result2)


两者输出结果相同。

TensorFlow中还有一个InteractiveSession类,比Session更加灵活,它能让你在运行图的时候,插入一些计算图,这些计算图是由某些操作(operations)构成的。

其使用方法和Session基本相同:

sess = tf.InteractiveSession()


Session和InteractiveSession的区别为:

Session在启动之前要构建整个计算图的操作,然后启动计算图,而InteractiveSession会加载它自身作为默认构建的session,然后再定义操作。例如:

sess = tf.InteractiveSession()
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
# We can just use 'c.eval()' without passing 'sess'
print(c.eval())
sess.close()


2.变量Variable

参考

https://www.cnblogs.com/greentomlee/articles/5566183.html

https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/

变量用于表示TensorFlow计算中的一个值,可以在计算过程中进行修改。变量需要通过Session初始化后才能在Session中使用。

对变量的操作如下:

(1) TensorFlow中,使用tf.Variable定义变量,在默认的图Graph中创建一个变量节点:

v1 = tf.Variable(<initial-value>, name=<optional-name>)


(2) 使用tf.constant定义常量:

v2 = tf.constant(<value>)


(3) 使用tf.add实现变量的加法操作:

v3 = tf.add(v1,v2)


(4) 使用tf.assign修改变量值:

v4 = tf.assign(v1,v3)


(5) 使用tf.initialize_all_variables对变量进行初始化:

init = tf.initialize_all_variables()


示例如下:

import tensorflow as tf

state = tf.Variable(0,name = 'counter')     #定义变量counter=0
one = tf.constant(1)    #定义常量1
new_value = tf.add(state , one)     #new_value = counter + 1
update = tf.assign(state,new_value)     #counter = new_value

init = tf.initialize_all_variables()    #对变量进行初始化
with tf.Session() as sess:
sess.run(init)
for _ in range(3):
sess.run(update)
print(sess.run(state))


输出结果为:

1
2
3


3.输入值Placeholder

参考

http://blog.csdn.net/zhangshaoxing1/article/details/68957896

https://www.cnblogs.com/Vulpers/p/7809276.html

Placeholder是TensorFlow的占位符,用于暂存变量提供数据供给(feeding)。

Placeholder声明格式如下:

input = tf.placeholder(type,shape,name)


参数1 type:要保存的数据类型,必填,TensorFlow中一般使用float32数据类型。

参数2 shape:要保存的数据结构,选填,如要存储一个1x2的矩阵,则为shape = [1 2]。

参数3 name:常量名,选填,默认根据创建顺序为(Placeholder,Placeholder_1,Placeholder_2…….)

Placeholder被声明时是未初始化的,不包含要存储的数据值,如果没有为它供给数据,运行时会报错,因此运行时必须传入要存储的数据值。在运行时,可以使用feed_dict的字典结构给Placeholder提供数据。

示例如下:

import tensorflow as tf

#在 Tensorflow 中需要定义 placeholder 的 type ,一般为 float32 形式
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)

# multiply 是将input1和input2 做乘法运算,并输出为 output
output = tf.multiply(input1, input2)

with tf.Session() as sess:
print(sess.run(output,feed_dict={input1:[7.],input2:[2.]}))    ##feed_dict提供数据
# [ 14.]


4.优化器Optimizer

参考

https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/3-4-optimizer/

http://blog.csdn.net/shichaog/article/details/73123801

为了加速神经网络的训练,TensorFlow中提供了多种优化器如下。其中tf.train.Optimizer是基类,一般不会直接使用,常用的是GradientDescentOptimizer(梯度下降法优化器),AdagradOptimizer(Adagrad算法优化器),MomentumOptimizer(动量算法优化器)。

tf.train.Optimizer
tf.train.GradientDescentOptimizer
tf.train.AdadeltaOptimizer
tf.train.AdagradOptimizer
tf.train.AdagradDAOptimizer
tf.train.MomentumOptimizer
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.ProximalGradientDescentOptimizer
tf.train.ProximalAdagradOptimizer
tf.train.RMSPropOptimizer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐