深度学习框架-Tensorflow基础学习

本文详细介绍了Tensorflow,一个用于表示计算任务的编程系统,它使用图来组织计算步骤,涉及变量创建、初始化、保存和加载,数据读取、线程和队列管理等内容,还涵盖了自定义数据读取、GPU使用以及共享变量的机制。
摘要由CSDN通过智能技术生成
Tensorflow简介
1. Tensorflow是一个编程系统,使用图来表示计算任务。使用图来表示计算任务. 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组. TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤 被描述成一个图. 在执行阶段, 使用会话执行执行图中的 op。
2. Tensorflow作用
  • 使用图来表示计算任务
  • 在Session的上下文中执行图
  • 使用tensor表示数据
  • 通过Variable维护状态
  • 使用feed和fetch可以任意地操作赋值或者从中获取数据
3.运作方式
  • inference()函数会尽可能地构建图表,做到返回包含了预测结果(output prediction)的Tensor。它接受图像占位符为输入,在此基础上借助ReLu(Rectified Linear Units)激活函数,构建一对完全连接(layers),以及一个有着十个节点(node)、指明了输出logtis模型的线性层。

  • 输入与占位符(Inputs and Placeholders):placeholder_inputs()函数将生成两个tf.placeholder操作,定义传入图表中的shape参数,shape参数中包括batch_size值。

在训练循环(training loop)的后续步骤中,传入的整个图像和标签数据集会被切片,以符合每一个操作所设置的batch_size值,占位符操作将会填补以符合这个batch_size值。然后使用feed_dict参数,将数据传入sess.run()函数。

  • 构建图表(Build the Graph)
变量:创建、初始化、保存和加载

当训练的时候,用变量来保存和更新参数。变量包含张量(Tensor)存放于内存的缓冲区。

创建
  • tf.Variable

    import tensorflow as tf
    weights = tf.Variable(tf.random_normal([784,200], stddev=0.35), name = "weights") # 权重
    
初始化
  • 有时候需要由另一个变量的初始化值给当前变量初始化,tf.initialize_all_variables()是并行地初始化所有变量,所以在有这种需求的情况下需要小心!用其它变量的值初始化一个新的变量时,使用其它变量的initialized_value()属性。你可以直接把已初始化的值作为新变量的初始值,或者把它当做tensor计算得到一个值赋予新变量。

    # 承接上面创建的变量weights
    w2 = tf.Variable(weights.initialized_value(), name = 'w2')
    
  • 自定义初始化。tf.initialized_all_variables()函数添加一个op来初始化变量模型的所有变量。

保存和加载

最简单的保存和恢复模型的方法是使用tf.train.Saver对象。构造器给graph的所有变量,或是定义在列表里的变量,添加saverestoreops。saver对象提供了方法来运行这些ops,定义检查点文件的读写路径。

  • 检查点文件

    变量存储在二进制文件里,主要包含从变量名到tensor值的映射关系。当创建一个Saver对象时,默认情况下,将每个变量Variables.name属性的值。

  • 保存变量

    tf.train.Saver()创建一个saver对象来管理所有的变量

    # Create all variables
    v1 = tf.Variable(..., name= 'v1')
    v2 = tf.Variable(..., name='v2')
    # Add an op to initialize the variables
    init_op = initialized_all_variables()
    # Add ops to save and restore all the variables
    saver() = tf.train.Saver()
    # Later, launch the model, initialize the variables, do some work,save the variables to disk.
    with tf.Session() as sess:
        sess.run()
        #..do some work with the model..
        save_path = saver.save(sess, '/tmp/model.ckpt')
        print('Model saved in file:', save_path)
    
  • 恢复变量

    恢复变量使用同一个Saver对象来恢复对象。saver.restore()恢复变量。

数据读取
Feeding Data

Tensorflow的feeding机制允许在tensorflow运算图中将数据注入到任意一个张量中。通过run()或者eval()函数输入feed_dict参数

with tf.Session() as tf:
    input = tf.placeholder(tf.float32)
    classifer = ...
    print(classifer.eval(feed_dict={
   input:my_python_preprocessing_fn()}))
从文件中读取数据的步骤
    1. 文件名列表:可以使用字符串张量(比如["file0", "file1"], [("file%d" % i) for i in range(2)][("file%d" % i) for i in range(2)]) 或者tf.train.match_filenames_once 函数来产生文件名列表。
    1. 可配置的文件名乱序(shuffling)string_input_producer 提供的可配置参数来设置文件名乱序和最大的训练迭代数, QueueRunner会为每次迭代(epoch)将所有的文件名加入文件名队列中, 如果shuffle=True的话, 会对文件名进行乱序处理。这一过程是比较均匀的,因此它可以产生均衡的文件名队列。
    2. 可配置的最大训练迭代次数(epoch limit)
    3. 文件名队列
    4. 针对输入文件格式的阅读器
    5. 解析器
    6. 可配置的预处理器
    7. 样本队列
不同文件格式的数据读取

不同的文件格式,需要选择不同的文件阅读器,然后将文件名队列提供给阅读器的read()方法。

  • CSV文件

    需要用到textLineReader()decode_csv()

    每次read的执行都会从文件中读取一行内容, decode_csv 操作会解析这一行内容并将其转为张量列表。如果输入的参数有缺失,record_default参数可以根据张量的类型来设置默认值。

    在调用run或者eval去执行read之前, 你必须调用tf.train.start_queue_runners来将文件名填充到队列。否则read操作会被阻塞到文件名队列中有值为止。

    # 使用string_input_producer来生成一个先入先出的队列
    filename_queue = tf.train.string_input_producer(['file0.csv', 'file1.csv'])
    # 使用阅读器读取
    reader = tf.TextLineReader()
    key,value = reader.read(filename_queue)
    # decord result
    recorde_defaults = [[1], [1], [1], [1], [1]]
    col1,col2,col3,col4,col5 =
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值