【技术导向】Pytorch & Tensorflow 框架学习记录

知识储备及资料

pytorch __>>powerd by FacebookAI:基础知识_1、基础知识_2、模型搭建_1、模型搭建_2
tensorflow __>>powerd by Google:基础知识、入门教程
提示:上述网址均为转载,仅限个人学习使用,不涉及商业运营性质


学习框架

  • 知识储备及资料
  • 前言
  • 一、Pytorch
    • 1.What is pytorch?
  • 二、Tensorflow
    • 1.What is tensorflow?
    • 2.TF framework and specialty
      • 2.1 基础框架
      • 2.2 编程特点
      • 2.3 基本概念
  • 总结


前言

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、Pytorch

1.What is pytorch?

pytorch可以被理解为一个兼具科学计算和构建深度学习模型功能的框架包。它是一个动态的框架,所谓动态框架,就是说在运算过程中,会根据不同的数值,按照最优方式进行合理安排。

1.一个能利用GPU加速的“Numpy”包。
2.一个灵活且易于部署的深度学习平台。

二、Tensorflow

1.What is tensorflow?

tensorflow支持CPU,GPU和Google TPU等硬件,属于静态框架。所谓静态框架,就是需要先建构一个tf的计算图,然后才能够将不同的数据输入进去,进行运算。目前已被广泛应用于文本处理,语音识别和图像识别等多项机器学习和深度学习领域。

1.张量(tensor),流动(flow),即可以将Tensorflow理解为一张计算图中“张量的流动”。
2.其设计理念是以数据流为核心,使其在构建的模型中流动,同时将结果反馈回模型,循环往复。
详细过程:构建机器学习模型后,使用训练数据在模型中进行数据流动,并以反向传播的方式将结果反馈给模型中的参数以进行调参,使用调整后的参数对训练数据再次进行迭代计算。

2.TF framework and specialty

2.1 基础框架

分为三层:应用层、接口层和核心层

  1. 应用层
    提供了机器学习相关的训练库、预测库和针对Python、C++和Java等变成语言的编程环境,类似于web系统的前端,主要实现了对计算图的构造。

  2. 接口层
    对Tensorflow功能模块的封装,便于其它语言平台的调用。

  3. 核心层
    最重要的部分,包括设备层、网络层、数据操作层和图计算层,执行应用层的计算。
    3.1 设备层:包括Tensorflow在不同硬件设备上的实现,主要支持CPU、GPU和Mobile等设备,在不同硬件设备上实现计算命令的转换,给上层提供统一的接口,实现程序的跨平台功能。
    3.2 网络层:网络层主要包括RPC和RDMA通信协议,实现不同设备之间的数据传输和更新,这些协议都会在分布式计算中用到。
    3.3 数据操作层:以tensor为处理对象,实现tensor的各种操作和计算。
    3.4 图计算层:包括分布式计算图和本地计算图的实现,实现图的创建、编译、优化和执行等。

2.2 编程特点

tensorflow为静态框架,有两个编程特点:

  1. 图的定义和图的运行完全分开
    在tensorflow中,需要预先定义各种变量,建立相关的数据流图,在数据流图中创建各种变量之间的计算关系,完成图的定义,需要把运算的输入数据放进去后,才会形成输出值。

  2. 图的计算在会话中执行
    tensorflow的相关计算在图中进行定义,而图的具体运行坏境在会话(session)中,开启会话后,才能开始计算,关闭会话就不能再进行计算了。

这种设计的好处就是:学习的过程中,消耗最多的是对数据的训练,这样设计的话,当进行计算时,图已经确定,计算就只剩下一个不断迭代的过程。

2.3 基本概念

  1. Tensor
    张量,是tensorflow中最主要的数据结构,张量用于在计算图中进行数据传递,创建了张量后,需要将其赋值给一个变量或占位符,之后才会将该张量添加到计算图中。

  2. Session
    会话,是Tensorflow中计算图的具体执行者,与图进行实际的交互。一个会话中可以有多个图,会话的主要目的是将训练数据添加到图中进行计算,也可以修改图的结构。调用模式推荐使用with语句:

    with session:
        session.run()
    
  3. Variable
    变量,表示图中的各个计算参数,通过调整这些变量的状态来优化机器学习算法。创建变量应使用tf.Variable(),通过输入一个张量,返回一个变量,变量声明后需进行初始化才能使用。

    import tensorflow as tf
    tf.compat.v1.disable_eager_execution()
    
    tensor = tf.ones([1, 3])
    test_var = tf.Variable(tensor)
    # 初始化变量
    init_op = tf.compat.v1.global_variables_initializer()
    session = tf.compat.v1.Session()
    with session:
        print("tensor is ", session.run(tensor))
        # print("test_var is ", session.run(test_var))
        session.run(init_op)
        print("after init, test_var is", session.run(test_var))
    
  4. Placeholder
    占位符,用于表示输入输出数据的格式,声明了数据位置,允许传入指定类型和形状的数据,通过会话中的feed_dict参数获取数据,在计算图运行时使用获取的数据进行计算,计算完毕后获取的数据就会消失。

    x = tf.compat.v1.placeholder(tf.int32)
    y = tf.compat.v1.placeholder(tf.int32)
    z = tf.add(x, y)
    session = tf.compat.v1.Session()
    with session:
        print(session.run([z], feed_dict={x: [1, 2], y: [2, 3]}))
    
  5. Operation
    操作,是图中的节点,输入输出都是Tensor,作用是完成各种操作,包括:

    • 数学运算:add, sub, mul, div, exp …
    • 数组运算:concat, slice, split, rank …
    • 矩阵运算:matmul, matrixinverse …
    • 神经网络构建:softmax, sigmoid, relu …
    • 队列和同步:enqueue, dequeue, mutexacquire, mutexrelease …
    • 张量控制:merge, switch, enter, leave …
    • 检查点:save, restore …
  6. Queue
    队列,图中有状态的节点。包含入列(endqueue)和出列(dequeue)两个操作,入列返回计算图中的一个操作节点,出列返回一个tensor值。其中,队列有两种:

    • FIFOQueue
      按入列顺序出列的队列,在需要读入的训练样本有序时使用。举个例子:
    fifo_queue = tf.compat.v1.FIFOQueue(10, 'int32')
    init = fifo_queue.enqueue_many(([1, 2, 3, 4, 5, 6], ))
    with tf.compat.v1.Session() as session:
        session.run(init)
        queue_size = session.run(fifo_queue.size())
        for item in range(queue_size):
            print('fifo_queue', session.run(fifo_queue.dequeue()))
    
    • RandomShuffleQueue
      以随机顺序出列的队列,读入的训练样本无序时使用。举个例子:
    rs_queue = tf.compat.v1.RandomShuffleQueue(capacity=5, min_after_dequeue=0, dtypes='int32')
    init = rs_queue.enqueue_many(([1, 2, 3, 4, 5], ))
    with tf.compat.v1.Session() as session:
        session.run(init)
        queue_size = session.run(rs_queue.size())
        for i in range(queue_size):
            print('rs_queue', session.run(rs_queue.dequeue()))
    

Note: Some of the above codes are from MyGithub


总结

以上就是今天要讲的内容,本文仅仅简单介绍了两个常用的深度学习框架,而numpy和pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

内容持续更新中···

路漫漫其修远兮,加油吧少年

你可能感兴趣的:(深度学习,tensorflow,pytorch,学习)