美文网首页程序员
亚马逊云教程5:安装TensorFlow,运行MNIST

亚马逊云教程5:安装TensorFlow,运行MNIST

作者: 罗登RodenLuo | 来源:发表于2020-07-08 03:24 被阅读0次

    概要:安装机器学习的开源Python包TensorFlow,运行机器学习实例MNIST。

    读者:初学机器学习的朋友

    时间:1500字,阅读3min,操作8min

    前提:亚马逊云教程4:安装Anaconda,多python环境,运行jupyter notebook

    常听说的人工智能、机器学习等技术,如果我们只是简单运用一下的话,或者是想初步了解一下它们,可以使用别人已经开发好的东西来运行几个案例体会一下。TensorFlow是谷歌的开源机器学习框架,它有Python版本的包。前面我们用一本书来比喻一个Python的包,这里,就像谷歌写了一本书,是关于机器学习的,里面有很多工具,所有安装了这本书的人可以用里面的工具去解决很多问题,这本书就叫TensorFlow。本教程讲解如何在服务器中安装TensorFlow,并且在jupyter notebook中运行一个机器学习的实例,MNIST。

    安装TensorFlow

    启动并登录服务器。新建一个Python虚拟环境“tensorflow”,并且添加到jupyter notebook的kernel中。这里我选用python3.6作为示例。谷歌官方完整的文档在这里

    roden@ip-172-31-2-87:~$ conda create -n tensorflow python=3.6 ipykernel
    # 新虚拟环境名字为 tensorflow ,使用python3.6
    Fetching package metadata .........
    ... # 省略
    
    Proceed ([y]/n)? # 按回车确认
    
    libsodium-1.0. 100% |################################| Time: 0:00:04 291.92 kB/s
    ...
    ipykernel-4.6. 100% |################################| Time: 0:00:00 466.71 kB/s
    #
    # To activate this environment, use:
    # > source activate tensorflow
    #
    # To deactivate this environment, use:
    # > source deactivate tensorflow
    #
    roden@ip-172-31-2-87:~$ source activate tensorflow
    # 进入新环境
    (tensorflow) roden@ip-172-31-2-87:~$ python -m ipykernel install --user --name tensorflow
    # 安装ipykernel到jupyter notebook
    (tensorflow) roden@ip-172-31-2-87:~$
    

    现在我们就有了一个新环境,并且可以在jupyter notebook中使用。接下来我们在这个环境中安装TensorFlow。根据官网提示,找到TensorFlow的Python包的URL地址。这里我们需要选择Linux的,CPU的,Python3.6的,官网提示。我们使用这个链接“https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl”。我们使用pip这个命令安装,pip是Python包管理器,就像图书馆管理员,负责购买新书,退掉旧书等,pip负责安装升级Python的包。

    (tensorflow) roden@ip-172-31-2-87:~$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl
    # 使用pip,和谷歌给的链接安装TensorFlow这个包。
    Collecting tensorflow==1.1.0 from https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl
      Downloading https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl (31.4MB)
        99% |████████████████████████████████| 31.4MB 55.9MB/s eta 0:00:01
        ... # 省略
    Installing collected packages: werkzeug, six, setuptools, protobuf, wheel, numpy, tensorflow
    Successfully installed numpy-1.13.0 protobuf-3.3.0 setuptools-36.0.1 six-1.10.0 tensorflow-1.1.0 werkzeug-0.12.2 wheel-0.29.0
    (tensorflow) roden@ip-172-31-2-87:~$ # 安装成功
    

    验证是否成功安装。

    (tensorflow) roden@ip-172-31-2-87:~$ python
    Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    

    然后逐行输入下面的python代码,每一行后按下回车执行。

    >>> import tensorflow as tf
    >>> hello = tf.constant('Hello, TensorFlow!')
    >>> sess = tf.Session()
    >>> print(sess.run(hello))
    

    看到的结果应该是类似这样的。

    >>> import tensorflow as tf
    >>> hello = tf.constant('Hello, TensorFlow!')
    >>> sess = tf.Session()
    2017-06-12 18:16:41.255674: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
    2017-06-12 18:16:41.255755: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
    2017-06-12 18:16:41.255831: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
    2017-06-12 18:16:41.255888: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
    2017-06-12 18:16:41.255925: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
    >>> print(sess.run(hello))
    b'Hello, TensorFlow!'
    >>>
    

    在最后一条命令中,如果看到下面的消息,就说明已经安装成功了。

    >>> print(sess.run(hello))
    b'Hello, TensorFlow!'
    

    运行MNIST

    我们可以先运行jupyter notebook,然后在里面新建一个笔记本,使用tensorflow这个kernel。

    (tensorflow) roden@ip-172-31-2-87:~/tf_notebook$ nohup jupyter notebook &
    [1] 1710
    (tensorflow) roden@ip-172-31-2-87:~/tf_notebook$ nohup: ignoring input and appending output to 'nohup.out'
    

    然后我们在浏览器中输入服务器的“Public_IP:jupyter_port”,如“http://52.10.20.197:9999/”进入到jupyter notebook中。新建一个笔记本。“New -> tensorflow”。可以改一下笔记本的名字,在新窗口的第一行,“Untitled”,左键点击一下就可以更改了,如“MNIST_demo“。

    然后我们准备运行MNIST,这个是被称之为人工智能领域的”Hello World“程序。它是训练一个模型让电脑自动识别手写的数字,0-9。谷歌官方的教程在这里,网上也有一些中文翻译的文档,如TensorFlow中文社区的文档。下面的代码是从文档中节选后合并在一起的结果。我们把下面的代码放在jupyter notebook中的单元格Cell中。

    这一段是在下载并导入数据。

    from tensorflow.examples.tutorials.mnist import input_data
    mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
    

    下面的代码包含了模型的设计,训练,和评估。具体的含义大家可以看看推荐阅读中的资料。

    import tensorflow as tf
    sess = tf.InteractiveSession()
    
    x = tf.placeholder(tf.float32, shape=[None, 784])
    y_ = tf.placeholder(tf.float32, shape=[None, 10])
    
    def weight_variable(shape):
      initial = tf.truncated_normal(shape, stddev=0.1)
      return tf.Variable(initial)
    
    def bias_variable(shape):
      initial = tf.constant(0.1, shape=shape)
      return tf.Variable(initial)
    
    
    def conv2d(x, W):
      return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
    
    def max_pool_2x2(x):
      return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                            strides=[1, 2, 2, 1], padding='SAME')
    
    
    W_conv1 = weight_variable([5, 5, 1, 32])
    b_conv1 = bias_variable([32])
    
    
    x_image = tf.reshape(x, [-1,28,28,1])
    
    
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
    h_pool1 = max_pool_2x2(h_conv1)
    
    
    
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
    h_pool1 = max_pool_2x2(h_conv1)
    
    W_conv2 = weight_variable([5, 5, 32, 64])
    b_conv2 = bias_variable([64])
    
    h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
    h_pool2 = max_pool_2x2(h_conv2)
    
    
    W_fc1 = weight_variable([7 * 7 * 64, 1024])
    b_fc1 = bias_variable([1024])
    
    h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
    h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
    
    
    keep_prob = tf.placeholder(tf.float32)
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
    
    
    
    W_fc2 = weight_variable([1024, 10])
    b_fc2 = bias_variable([10])
    
    y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2
    
    
    
    cross_entropy = tf.reduce_mean(
        tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))
    train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
    correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    sess.run(tf.global_variables_initializer())
    for i in range(20000):
      batch = mnist.train.next_batch(50)
      if i%100 == 0:
        train_accuracy = accuracy.eval(feed_dict={
            x:batch[0], y_: batch[1], keep_prob: 1.0})
        print("step %d, training accuracy %g"%(i, train_accuracy))
      train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
    
    print("test accuracy %g"%accuracy.eval(feed_dict={
        x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
    

    然后我们可以看到类似下面的输出结果,就代表我们运行成功了。

    step 0, training accuracy 0.08
    step 100, training accuracy 0.84
    step 200, training accuracy 0.92
    step 300, training accuracy 0.9
    step 400, training accuracy 0.96
    ...
    

    大家可以体会到训练的速度非常慢,这是因为我们使用的是非常基本的EC2,下一节我们讲解如何把现在的EC2升级到有强大计算能力的EC2服务器:使用AMI保存已经安装好的所有软件,然后选择其他类别的EC2来创建实例。

    推荐阅读

    1. 安装TensorFlow到Ubuntu,谷歌官网文档中文翻译
    2. 进阶版MNIST教程,谷歌文档中文翻译

    集锦卡

    1. 安装TensorFlow

      1. conda create -n tensorflow python=3.6 ipykernel创建新的虚拟python3.6环境
      2. source activate tensorflow进入新环境
      3. python -m ipykernel install --user --name tensorflow把新环境安装到jupyter的ipython kernel
      4. pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl安装TensorFlow
    2. 测试是否安装成功。

      1. (tensorflow) roden@ip-172-31-2-87:~$ python # 进入python
        Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58)
        [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
        Type "help", "copyright", "credits" or "license" for more information.
        >>>
        
      2. >>> import tensorflow as tf
        >>> hello = tf.constant('Hello, TensorFlow!')
        >>> sess = tf.Session()
        >>> print(sess.run(hello))
        
      3. 看到下面的输出就说明安装成功了。

        b'Hello, TensorFlow!'
        
    3. 在jupyter notebook中运行MNIST。

      1. 运行jupyter noteboook,nohup jupyter notebook &
      2. 新建一个笔记本。“New -> tensorflow”。
      3. 输入正文中的包含模型的设计,训练,和评估的python代码,并运行。

    本文于2017-06-11发布于个人博客,现原文搬运于此,如有过时信息,欢迎指正。

    相关文章

      网友评论

        本文标题:亚马逊云教程5:安装TensorFlow,运行MNIST

        本文链接:https://www.haomeiwen.com/subject/crefcktx.html