算法初探:Tensorflow及PAI平台的使用

 

前言

Tensorflow这个词由来已久,但是对它的理解一直就停留在“听过”的层面。之前做过一个无线图片适配问题智能识别的项目,基于Tensorflow实现了GoogLeNet - Inception V3网络(一种包含22层的深层卷积神经网络),但是基本上也属于“盲人摸象”、“照葫芦画瓢”的程度。作为当今机器学习乃至深度学习界出现频率最高的一个词,有必要去了解一下它到底是个什么东西。

而PAI,作为一站式地机器学习和算法服务平台,它大大简化了模型构建、模型训练、调参、模型性能评估、服务化等一系列算法的工作,可以帮助我们更快捷地实现算法实验和应用。

一、Tensorflow初探

1. 安装和启动

因为我自己的mac-pro安装了docker,所以安装Tensorflow的环境非常简单,只要拉取Tensorflow的官方镜像就可以完成Tensorflow的环境搭建。

#拉取tensorflow镜像 docker pull tensorflow/tensorflow  #创建一个tensorflow的工作目录,挂载到容器内 mkdir -p /Users/znifeng/docker-data/tensorflow/notebooks  #启动容器 docker run -it --rm --name myts -v /Users/znifeng/docker-data/tensorflow/notebooks:/notebooks -p 8888:8888 tensorflow/tensorflow 

启动成功后,将看到如下信息:

 

复制链接http://127.0.0.1:8888/?token=487c52e0aa0cd2a7b231bf909c1d6666482f8ed03353e510到浏览器,就可以看到jupyter(支持在线编写和调试python的交互式笔记本)页面:

 

接下来,你可以在jupyter上或者在docker容器内部编写和调试tensorflow的代码,容器内部已经包含了tensorflow的所有库。

2. 基本使用

2.1 核心概念

  • 使用图(graph)来表示计算任务
  • 使用张量(tensor)来表示数据。张量与矢量的区别:矢量相当于一阶的张量,张量可以从0阶到多阶(多维)
  • 图中的每一个节点称之为op(operation),每一个op有0或多个Tensor作为输入,执行计算后产出0或多个Tensor作为输出
  • 在被称之为会话Session的上下文(context)中执行图
  • 通过变量(variable)来维护状态
  • 使用feed和fetch可以为任意的操作赋值或者从其中获取数据
  • 使用placeholder来定义占位符,在运行时传入对应的参数值

TensorFlow程序通常被组织成一个构建阶段和一个执行阶段。在构建阶段,op的执行步骤被描述成一个图,在执行阶段,使用会话执行图中的op。在Python中,返回的tensor是numpy.ndarray对象。;在C/C++中,返回的是tensorflow:Tensor实例。

2.2 使用示例

2.2.1 第一个helloworld程序:
import tensorflow as tf  #第一阶段: 构建图 #定义一个1x2的矩阵,矩阵元素为[3 3] matrix1 = tf.constant([[3., 3.]])  #定义一个2x1的矩阵,矩阵元素为[2                            2] matrix2 = tf.constant([[2.],[2.]])  # 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入. product = tf.matmul(matrix1, matrix2)  #第二阶段: 执行图 with tf.Session() as sess:     print "matrix1: %s" % sess.run(matrix1)     print "matrix2: %s" % sess.run(matrix2)     print "result type: %s" % type(sess.run(product))     print "result: %s" % sess.run(product) 

输出结果:

matrix1: [[3. 3.]] matrix2: [[2.]  [2.]] result type: <type 'numpy.ndarray'> result: [[12.]] 

如上图所示,在第一阶段(构建图)中,我们的每一行操作其实都是一个operation,包含两个constant操作和一个矩阵相乘的操作,每个operation的输出都是tensor,它的类型是num.ndarray。实际上,构建阶段我们只是定义op,并不会真正去执行;而在第二阶段中,通过定义了一个会话session,我们才会在会话中真正开始执行前面定义的各个operation,然后获得执行的结果。

2.2.2 使用tensorflow实现识别手写数字(1~9)模型 —— Softmax Regression
import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)  import tensorflow as tf  ##Define input data format #input images, each image is represented by a tensor of 784 dimensions x = tf.placeholder("float", [None,784]) #input labels, each label values one digit of [0,9], which is represented by a tensor of 10 dimensions y_ = tf.

                    
                
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信