TensorFlow学习日记5

来源:互联网 发布:什么是模块化编程 编辑:程序博客网 时间:2024/05/23 11:32

1. TensorFlow可视化

TensorFlow的工作方式是启动一个Web服务,该服务进程从TensorFlow程序执行所得的事件日志文件(event files)

读取概要(summary)数据,然后将数据在网页中绘制成可视化的图标。概要数据包括几种类别,如下所示:

(1)标量数据:比如准确率、代价损失值,使用tf.summary.scalar加入记录算子。

(2)参数数据:比如参数矩阵weights、偏置矩阵bias,一般使用tf.summary.histogram记录。

(3)图像数据:用tf.summary.image加入记录算子。

(4)音频数据:用tf.summary.audio加入记录算子。

(5)计算图结构:在定义tf.summary.FileWriter对象时自动记录。

完整的框架代码,如下所示:

with tf.name_scope('input'):    # create symbolic variables    X = tf.placeholder(tf.float32, shape=[None, 6])    y_true = tf.placeholder(tf.float32, shape=[None, 6])with tf.name_scope('classifier'):    weights = tf.Variables(tf.random_normal([6, 2]))    bias = tf.Variable(tf.zeros([2]))    y_pred = tf.nn.softmax(tf.matmul(X, weights) + bias)    tf.summary.histogram('weights', weights)    tf.summary.histogram('bias', bias)    with tf.name_scope('cost'):    cross_entropy = -tf.reduce_mean(y_true * tf.log(y_pred + 1e-10), reduction_indices=1)    cost = tf.reduce_mean(cross_entropy)    tf.summary.scalar('loss', cost)    train_op = tf.train.GradientDescentOptimizer(0.001).minimize(cost)with tf.name_scope('accuracy'):    correct_pred = tf.equal(tf.arg_max(y_true, 1), tf.arg_max(y_pred, 1))    acc_op = tf.reduce_mean(tf.cast(correct_pred, tf.float32))    tf.summary.scalar('accuracy', acc_op)    with tf.Session() as sess:    writer = tf.summary.FileWriter('./logs', sess.graph)    merged = tf.summary.merge_all()    for step in range(max_step):            ...        summary, accuracy = sess.run([merged, acc_op], feed_dict={X:X_val, y_true:y_val})           writer.add_summary(summary, step)


2. tf.summary.merge_all

解析:记录概要的节点由于没有被任何计算节点所依赖,所以并不会自动执行,需要手动通过Session.run()接口触

发,为了编码简便,tf.summary.merge_all可以将所有概要操作合并成一个算子,其执行的结果是经过protocol buffer

序列化后的tf.Summary对象。生成的事件日志是一个以"events."开头的文件,因为内容是二进制数据,所以只能通过

TensorBoard打开。


3. 启动TensorBoard服务

解析:tensorboard --logdir=path/to/log-directory

(1)--logdir:tf.summary.FileWriter写入事件日志文件的目录路径。如果指定的目录下有多个子目录,TensorBoard

会把它们当作多次执行的记录,可以并行展示出来。这一般是在多次运行,比较不同参数的效果时使用。

(2)--port:设置服务端口,默认端口为6006.

(3)--event_file:指定某一个特定的事件日志文件。

(4)--reload_interval:服务后台重新加载数据的间隔,默认为120秒。

说明:TensorBoard是一个完整的Python应用,通过命令行启动Web。


4. TFRecord

解析:将普通的数据转换成TFRecord格式的文件,只需要写一个小程序,将每一条样本组装成protocol buffer定义的

Example结构的对象,序列化成字符串,再由tf.python_io.TFRecordWriter写入文件即可。

(1)将CSV文件转换为TFRecord文件

import pandas as pdimport tensorflow as tf# convert train.csv to train.tfrecordsdef transform_to_tfrecord():    data = pd.read_csv('data/train.csv')    tfrecord_file = 'train.tfrecords'    def int_feature(value):        return tf.train.Feature(            int64_list=tf.train.Int64List(value=[value]))    def float_feature(value):        return tf.train.Feature(            float_list=tf.train.FloatList(value=[value]))    writer = tf.python_io.TFRecordWriter(tfrecord_file)    for i in range(len(data)):        features = tf.train.Features(feature={            'Age': float_feature(data['Age'][i]),            'Survived': int_feature(data['Survived'][i]),            'Pclass': int_feature(data['Pclass'][i]),            'Parch': int_feature(data['Parch'][i]),            'SibSp': int_feature(data['SibSp'][i]),            'Sex': int_feature(1 if data['Sex'][i] == 'male' else 0),            'Fare': float_feature(data['Fare'][i])        })        example = tf.train.Example(features=features)        writer.write(example.SerializeToString())    writer.close()if __name__ == '__main__':    transform_to_tfrecord()
(2)读取TFRecord文件
import tensorflow as tfdef read_and_decode(train_files, num_threads=2, num_epochs=100,                    batch_size=10, min_after_dequeue=10):    # read data from trainFile with TFRecord format    reader = tf.TFRecordReader()    filename_queue = tf.train.string_input_producer(        train_files,        num_epochs=num_epochs)    _, serialized_example = reader.read(filename_queue)    featuresdict = tf.parse_single_example(        serialized_example,        features={            'Survived': tf.FixedLenFeature([], tf.int64),            'Pclass': tf.FixedLenFeature([], tf.int64),            'Parch': tf.FixedLenFeature([], tf.int64),            'SibSp': tf.FixedLenFeature([], tf.int64),            'Sex': tf.FixedLenFeature([], tf.int64),            'Age': tf.FixedLenFeature([], tf.float32),            'Fare': tf.FixedLenFeature([], tf.float32)})    # decode features to same format of float32    labels = featuresdict.pop('Survived')    features = [tf.cast(value, tf.float32)                for value in featuresdict.values()]    # get data with shuffle batch and return    features, labels = tf.train.shuffle_batch(        [features, labels],        batch_size=batch_size,        num_threads=num_threads,        capacity=min_after_dequeue + 3 * batch_size,        min_after_dequeue=min_after_dequeue)    return features, labelsdef train_with_queuerunner():    x, y = read_and_decode(['train.tfrecords'])    with tf.Session() as sess:        tf.group(tf.global_variables_initializer(),                 tf.local_variables_initializer()).run()        coord = tf.train.Coordinator()        threads = tf.train.start_queue_runners(sess=sess, coord=coord)        try:            step = 0            while not coord.should_stop():                # Run training steps or whatever                features, lables = sess.run([x, y])                if step % 100 == 0:                    print('step %d:' % step, lables)                step += 1        except tf.errors.OutOfRangeError:            print('Done training -- epoch limit reached')        finally:            # When done, ask the threads to stop.            coord.request_stop()        # Wait for threads to finish.        coord.join(threads)if __name__ == '__main__':    train_with_queuerunner()


5. SkFlow,TFLearn,TF-Slim

解析:

(1)SkFlow:TensorFlow官方推出的仿照Scikit-Learn设计的高级API。现已与TensorFlow项目完全集成,称为

TensorFlow中的一个包tf.contrib.learn。

(2)TFLearn:构建在TensorFlow上的高层次API,目的是便于快速搭建试验环境,同时保持对TensorFlow的完

全透明和兼容性。   

(3)TF-Slim:TensorFlow官方推出的一个轻量级的高级接口库,使用这个库可以让复杂模型的定义、训练、评估都

变得简单。TF-Slim在图像模型方面有较大的优势,它包含了很多新的层(比如Atrous卷积层)和新的评估标准(比如

mAP,IoU),还内置了AlexNet、inception、VGGNet、OverFeat、ResNets在内的各种经典图像识别模型。


6. RDMA(Remote Direct Memory Access)

解析:RDMA(Remote Direct Memory Access)技术全称远程直接数据存取,就是为了解决网络传输中服务器端数

据处理的延迟而产生的。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存

储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能。它消除了外部存储器复制和文本

交换操作,因而能解放内存带宽和CPU周期用于改进应用系统性能。


7. gRPC协议 [2]

解析:A high performance, open-source universal RPC framework.


8. Tensorflow源码目录

解析:

(1)public: API接口头文件目录,用于外部接口调用的API定义,主要是session.h和tensor_c_api.h。

(2)client: API接口实现文件目录。

(3)platform: OS系统相关接口文件,如file system,env等。

(4)protobuf: 均为.proto文件,用于数据传输时的结构序列化。

(5)common_runtime: 公共运行库,包含session,executor,threadpool,rendezvous,memory管理,设备分配

算法等。

(6)distributed_runtime: 分布式执行模块,如rpc session,rpc master,rpc worker,graph manager。

(7)framework: 包含基础功能模块,如log,memory,tensor。

(8)graph: 计算流图相关操作,如construct,partition,optimize,execute等。

(9)kernels: 核心Op,如matmul,conv2d,argmax,batch_norm等。

(10)lib: 公共基础库,如gif、gtl(google模板库)、hash、histogram等。

(11)ops: 基本ops运算,ops梯度运算,io相关的ops,控制流和数据流操作。

(12)Tensorflow/stream_executor目录是并行计算框架,由google stream executor团队开发。

(13)Tensorflow/contrib目录是contributor开发目录。

(14)Tensroflow/python目录是python API客户端脚本。

(15)Tensorflow/tensorboard目录是可视化分析工具,不仅可以模型可视化,还可以监控模型参数变化。

(16)third_party目录是TF第三方依赖库。

(17)eigen3: eigen矩阵运算库,TF基础ops调用。

(18)gpus: 封装了cuda/cudnn编程库。


9. tf.train.Server.create_local_server

解析:在本地创建一个单进程集群,该集群中的服务默认为启动状态。


10. TensorFlow多GPU并行

解析:TensorFlow中的并行主要分为模型并行和数据并行,如下所示:

(1)模型并行需要根据不同模型设计不同的并行方式,主要原理将模型中不同计算节点放在不同硬件资源上运算。

(2)同步数据并行,即等待所有GPU都计算完一个batch数据的梯度后,再统一将多个梯度合在一起,并更新共享的

模型参数。异步数据并行,即不等待所有GPU都完成一次训练,而是哪个GPU完成了训练,就立即将梯度更新到共享

的模型参数中。通常来说,同步的数据并行比异步的模式收敛速度更快,模型的精度更高。


11. TensorFlow分布式并行

解析:

(1)TensorFlow的分布式并行基于gRPC通信框架,其中包括一个master负责创建Session,还有多个worker负责执

行计算图中的任务。需要先创建一个TensorFlow Cluster对象,它包含一组task(每个task一般是一台单独的机器)用

来分布式地执行TensorFlow的计算图。

(2)一个Cluster可以切分为多个job,一个job是指一类特定的任务,比如parameter server (ps),worker,每一个job

里可以包含多个task。需要为每一个task创建一个server,然后连接到Cluster上,通常每个task会执行在不同的机器

上,然后也可以一台机器上执行多个task(控制不同的GPU)。

(3)Cluster对象通过tf.train.ClusterSpec来初始化,初始化信息是一个Python的Dict,比如tf.train.ClusterSpec({"ps":

["192.168.233.201:2222"], "worker":["192.168.233.202:2222","192.168.233.203:2222"]}),这代表设置了一个

parameter server和两个worker,分别在三台不同机器上。

(4)对每个task,需要给它定义自己的身份,比如对这个ps将设置server=tf.train.Server(cluster, job, name="ps", 

task_index=0),将这台机器的job定义为ps,并且是ps中的第0台机器。此外,通过在程序中使用诸如with 

tf.device("job:worker/task:7")可以限定Variable存放在哪个task或哪台机器上。  

说明:TensorFlow的分布式有几种模式,比如In-graph replication模型并行,将模型的计算图的不同部分放在不同机

器上执行;而Between-graph replication则数据并行,每台机器使用完全相同的计算图,但是计算不同的batch数据。


12. TensorFlow同步和异步数据并行

解析:

(1)TensorFlow同步数据并行

同步训练为TensorFlow上每个节点上的任务需要读入共享参数,执行并行化的梯度计算,然后将所有共享参数进行合

并,如下所示:


(2)TensorFlow异步数据并行    

异步训练即TensorFlow上每个节点上的任务为独立训练方式,不需要执行协调操作,如下所示:



13. TensorFlow日志等级

解析:TensorFlow有5个等级的log,以严重性最小到最大排列,它们是DEBUG、INFO、WARN、ERROR以及

FATAL。当选择好log等级后,只有那个等级和更严重等级的log会被打印出来。


14. TF.Contrib组件 

解析:

(1)TF.contrib.distributions:统计分布。

(2)TF.contrib.layers:深度学习层。

(3)TF.contrib.losses:机器学习损失函数。

(4)性能分析器tfprof:分析模型的架构及衡量系统的性能。


15. TensorFlow容错机制

解析:TensorFlow有两种检测错误的机制,一种是基于发送和接收算子之间传输的错误信息,另一种是master进程的

轮询检查。当发现错误后,系统会终止当前迭代,从存档状态重新运行。


参考文献:

[1] 深度学习原理与TensorFlow实战

[2] gRPC:https://grpc.io/

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 每次登入淘宝都要手机验证码怎么办 手机停机收不到唯品会验证码怎么办 魅蓝手机账户密码忘了怎么办 支付宝登录失败请稍后再试怎么办 万王之王3d限制注册了怎么办 绑定手机号无法登陆以前微信怎么办 手机号注册了淘宝如果不用了怎么办 淘宝网登陆要手机验证码怎么办 手机清理了微信图片打不开了怎么办 到淘宝网买东西卖家拒绝退货怎么办 淘宝店铺检测出他人认证图片怎么办 文件过大无法复制到u盘怎么办 淘宝账号上不去总说网络不好怎么办 手机上登录微信一直闪退怎么办 京东账号手机号换了登陆不了怎么办 对方账号停止收款我们汇了款怎么办 淘宝店铺严重违规被扣12分怎么办 中国网银登陆不会自动弹出怎么办 高考报考的时候页面无法显示怎么办 如果卖家收到货不退款怎么办 淘宝退货卖家收到货不退款怎么办 手机号码淘宝被注册跟换绑定怎么办 微信发送ppt显示文件太大怎么办 微信手机号丢了微信登不了钱怎么办 新买的号码注册过支付宝怎么办 新买的号码被注册过支付宝怎么办 支付宝同号码注册了新的帐号怎么办 新卖的号码有人注册过支付宝怎么办 我的号码被别人注册了支付宝怎么办 别人用我的号码注册了支付宝怎么办 打开支付宝进入到淘宝的界面怎么办 我的手机号注销了支付宝账号怎么办 微博绑定的支付宝账号注销了怎么办 闲鱼买家申请退款卖家不同意怎么办 微信与手机旧版本不一致怎么办 在应用宝里下载微信老是失败怎么办 使用u盘储存视频显示不兼容怎么办 支付宝下载显示与存在不兼容怎么办 cpu与64位系统不兼容怎么办 微信版本低登录不了怎么办苹果手机 手机版本低登录不了微信怎么办?