TensorFlow

tensorflow的理解
Tensorflow是一种机器学习框架,如果我们有大量的数据,我们可以利用他协助医生检查糖尿病性视网膜病变来预防患者失明等应用

新版本中一个有趣的功能是 eager execution,允许用户在不创建图形的情况下运行tensorflow代码,一种动态图机制
它是一个命令式、由运行定义的接口,一旦从 Python 被调用,其操作立即被执行。这使得入门 TensorFlow 变的更简单,也使研发更直观。
Eager Execution 的优点如下:
快速调试即刻的运行错误并通过 Python 工具进行整合
借助易于使用的 Python 控制流支持动态模型
为自定义和高阶梯度提供强大支持
适用于几乎所有可用的 TensorFlow 运算
它的使用示例:当你启动 Eager Execution 时,运算会即刻执行,无需 Session.run() 就可以把它们的值返回到 Python。比如,要想使两个矩阵相乘,我们这样写代码:
import tensorflow as tf
import tensorflow.contrib.eager as tfe
tfe.enable_eager_execution()
x = [[2. ]]
m = tf.matmul(x, x)

接下来使用 print 或者 Python 调试器检查中间结果

print(m)
# The 1x1 matrix [[4.]]

重点-理解: tensorflow是一种利用数据流图进行数值计算的过程,整个框架分为两部分:(1)构建阶段:创建图,用来训练神经网络(2)执行阶段:利用session来执行图中的节点的计算,需要重复执行一系列训练操作。
其中tensorflow的数据是以tensor的数据结构来表示的,在python中是numpy ndarray ,一个tensor就是一个多维数组,在tensorflow中是利用variable来记录状态信息的,利用feed和fetches来填充和抓取相关操作结果

关于训练数据:
TensorFlow建议使用二进制的TFRecords格式,这样可以支持QueuRunner和Coordinator进行多线程数据读取,并且可以通过batch size和epoch参数来控制训练时单次batch的大小和对样本文件迭代训练多少轮。如果直接读取CSV文件,需要在代码中记录下一次读取数据的指针,而且在样本无法全部加载到内存时使用非常不便。
关于接受命令行参数
TensorFlow底层使用了python-gflags项目,然后封装成tf.app.flags接口,使用起来非常简单和直观,在实际项目中一般会提前定义命令行参数
关于分布式Tensorflow中的相关概念
分布式TensorFlow中ps、worker、in-graph、between-graph、synchronous training和asynchronous training的概念如下:
首先ps是整个训练集群的参数服务器,保存模型的Variable,worker是计算模型梯度的节点,得到的梯度向量会交付给ps更新模型。in-graph与between-graph对应,但两者都可以实现同步训练和异步训练,in-graph指整个集群由一个client来构建graph,并且由这个client来提交graph到集群中,其他worker只负责处理梯度计算的任务,而between-graph指的是一个集群中多个worker可以创建多个graph,但由于worker运行的代码相同因此构建的graph也相同,并且参数都保存到相同的ps中保证训练同一个模型,这样多个worker都可以构建graph和读取训练数据,适合大数据场景。同步训练和异步训练差异在于,同步训练每次更新梯度需要阻塞等待所有worker的结果,而异步训练不会有阻塞,训练的效率更高,在大数据和分布式的场景下一般使用异步训练。
tensorflow 的基本框架
一个TensorFlow框架的示例
我们首先通过一个示例来大致看一下TensorFlow的整体框架。

复制代码
import tensorflow as tf
import numpy as np
# create data 
x_data=np.random.rand(100).astype(np.float32)
y_data=x_data*0.5 + 0.8
## create tensorflow start ##
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))
biases = tf.Variable(tf.zeros([1]))

y = Weights*x_data+biases 
loss =tf.reduce_mean(tf.square(y-y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train=optimizer.minimize(loss)
init= tf.initialize_all_variables()
##create tensorflow start##

sess = tf.Session() #activite
sess.run(init)     #very important
for step in range(401):
    sess.run(train)
    if step % 40== 0:
        print(step,sess.run(Weights),sess.run(biases))
sess.close()
复制代码

 

posted @   stdrush  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示