WONGCW 網誌
  • 首頁
  • 論壇
  • 微博
  • 雲端筆記
  • 域名申請
  • 網速測試
  • 壁紙下載
  • 免費圖床
  • 匯率兌換
  • More
    • QR Code Generator
    • URL Shortener
    • WordPress Plugins And Themes
  • 免責聲明
  • Search Icon

WONGCW 網誌

記錄生活經驗與點滴

TensorFlow – 深层神经网络 (deep neural networks)

TensorFlow – 深层神经网络 (deep neural networks)

2018-09-24 Comments 0 Comment

简介

任务时间:30min ~ 60min

本实验介绍深层神经网络在 TensorFlow 上的实现,并使用模型处理 MNIST 数据集。

MNIST 数据集介绍

MNIST 是一个手写阿拉伯数字的数据集。

其中包含有 60000 个已经标注了的训练集,还有 10000 个用于测试的测试集。

本次实验的任务就是通过手写数字的图片,识别出具体写的是 0-9 之中的哪个数字。

理论知识回顾

一个两层的深层神经网络结构如下:

image

  1. 上图所示的是一个具有两层隐藏层的深层神经网络
  2. 第一个隐藏层有 4 个节点,对应的激活函数为 ReLu 函数
  3. 第一个隐藏层有 2 个节点,对应的激活函数也是 Relu 函数
  4. 最后,输出层使用 softmax 函数作为激活函数

激活函数定义(activation function):

<formula>
softmax(x^i) = \left[
    \begin{matrix}
        p(y^i=1|x^i,\theta) \\
        p(y^i=2|x^i,\theta) \\
        \cdots \\
        p(y^i=n|x^i,\theta) 
    \end{matrix}
    \right] = \frac{1}{\sum_{j=1}^{k}e^{\theta_j^Tx^i}} \left[ 
        \begin{matrix} 
            e^{\theta_1^Tx^i} \\
            e^{\theta_2^Tx^i} \\
            \cdots \\
            e^{\theta_k^Tx^i} 
        \end{matrix} 
    \right]
</formula>
<formula>
ReLu(x) = max(0, x)
</formula>

模型设计

与上一个教程类似:

  1. MNIST 数据一共有 784 个输入,所以我们需要一个有 784 个节点的输入层。
  2. MNIST 数据使用 One-Hot 格式输出,有 0-9 10 个 label,分别对应是否为数字 0-9,所以我们在输出层有 10 个节点,由于 0-9 的概率是互斥的,我们使用 Softmax 函数作为该层的激活函数。

不一样的是我们可以通过调整深度神经网络的层次来看看能不能达到不一样的效果。

训练模型

任务时间:30min ~ 60min

数据准备

首先我们需要先下载 MNIST 的数据集。使用以下的命令进行下载:

wget https://devlab-1251520893.cos.ap-guangzhou.myqcloud.com/t10k-images-idx3-ubyte.gz
wget https://devlab-1251520893.cos.ap-guangzhou.myqcloud.com/t10k-labels-idx1-ubyte.gz
wget https://devlab-1251520893.cos.ap-guangzhou.myqcloud.com/train-images-idx3-ubyte.gz
wget https://devlab-1251520893.cos.ap-guangzhou.myqcloud.com/train-labels-idx1-ubyte.gz

创建代码

现在您可以在 /home/ubuntu 目录下创建源文件 deep_neural_networks.py,内容可参考:

示例代码:/home/ubuntu/deep_neural_networks.py
#-*- encoding:utf-8 -*-
#!/usr/local/env python

import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

def add_layer(inputs, in_size, out_size, activation_function=None):
    W = tf.Variable(tf.random_normal([in_size, out_size]))
    b = tf.Variable(tf.zeros([1, out_size]) + 0.01)

    Z = tf.matmul(inputs, W) + b
    if activation_function is None:
        outputs = Z
    else:
        outputs = activation_function(Z)

    return outputs


if __name__ == "__main__":

    MNIST = input_data.read_data_sets("mnist", one_hot=True)

    learning_rate = 0.01
    batch_size = 128
    n_epochs = 70

    X = tf.placeholder(tf.float32, [batch_size, 784])
    Y = tf.placeholder(tf.float32, [batch_size, 10])

    layer_dims = [784, 500, 500, 10]
    layer_count = len(layer_dims)-1 # 不算输入层
    layer_iter = X

    for l in range(1, layer_count): # layer [1,layer_count-1] is hidden layer
        layer_iter = add_layer(layer_iter, layer_dims[l-1], layer_dims[l], activation_function=tf.nn.relu)
    prediction = add_layer(layer_iter, layer_dims[layer_count-1], layer_dims[layer_count], activation_function=None)

    entropy = tf.nn.softmax_cross_entropy_with_logits(labels=Y, logits=prediction)
    loss = tf.reduce_mean(entropy)

    optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

    init = tf.initialize_all_variables()

    with tf.Session() as sess:
        sess.run(init)

        n_batches = int(MNIST.test.num_examples/batch_size)
        for i in range(n_epochs):
            for j in range(n_batches):
                X_batch, Y_batch = MNIST.train.next_batch(batch_size)
                _, loss_ = sess.run([optimizer, loss], feed_dict={X: X_batch, Y: Y_batch})
                if i % 10 == 5 and j == 0:
                    print "Loss of epochs[{0}]: {1}".format(i, loss_)

        # test the model
        n_batches = int(MNIST.test.num_examples/batch_size)
        total_correct_preds = 0
        for i in range(n_batches):
            X_batch, Y_batch = MNIST.test.next_batch(batch_size)
            preds = sess.run(prediction, feed_dict={X: X_batch, Y: Y_batch})
            correct_preds = tf.equal(tf.argmax(preds, 1), tf.argmax(Y_batch, 1))
            accuracy = tf.reduce_sum(tf.cast(correct_preds, tf.float32)) 

            total_correct_preds += sess.run(accuracy)

        print "Accuracy {0}".format(total_correct_preds/MNIST.test.num_examples)

代码讲解

add_layer 函数

允许用户指定上一层的输出节点的个数作为 input_size,本层的节点个数作为 output_size,并指定激活函数 activation_function 可以看到我们调用的时候位神经网络添加了两个隐藏层和输出层

for l in range(1, layer_count): # layer [1,layer_count-1] is hidden layer
    layer_iter = add_layer(layer_iter, layer_dims[l-1], layer_dims[l], activation_function=tf.nn.relu)
prediction = add_layer(layer_iter, layer_dims[layer_count-1], layer_dims[layer_count], activation_function=None)

entropy = tf.nn.softmax_cross_entropy_with_logits(labels=Y, logits=prediction)
loss = tf.reduce_mean(entropy)

神经网络配置

注意这一行,我们配置了一个深度的神经网络,它包含两个隐藏层,一个输入层和一个输出层 隐藏层的节点数为 500

layer_dims = [784, 500, 500, 10]

执行代码

python deep_neural_networks.py

运行过程中,如果出现网络错误,请重试。

运行输出:

Loss of epochs[5]: 19.5915279388
Loss of epochs[15]: 7.20698690414
...
Loss of epochs[65]: 0.24952724576
Accuracy 0.939

可以看到经过 70 轮的训练,准确度大约在 94% 左右

探索(play around)

你可以通过修改下面的这个代码片段来修改整个神经网络。

示例代码:/home/ubuntu/deep_neural_networks.py
    layer_dims = [784, 500, 500, 10]

比如你可以去掉一层隐藏层,并将隐藏层的节点数改为 600

示例代码:/home/ubuntu/deep_neural_networks.py
    layer_dims = [784, 600, 10]

训练完的结果大概是这样:

Loss of epochs[5]: 13.1280488968
Loss of epochs[15]: 9.14239501953
Loss of epochs[25]: 3.60039186478
...
Loss of epochs[65]: 3.32054066658
Accuracy 0.9161

准确度大概 92% 的样子。have fun!

完成实验

任务时间:1min

实验内容已完成

您可进行更多关于机器学习教程:

  • 实验列表 – 机器学习

关于 TensorFlow 的更多资料可参考 TensorFlow 官网 。

點閱: 34

分享此文:

  • 分享到 Twitter(在新視窗中開啟)
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 WhatsApp(在新視窗中開啟)
  • 按一下以分享到 Telegram(在新視窗中開啟)
  • 按一下即可分享至 Skype(在新視窗中開啟)
  • 點這裡列印(在新視窗中開啟)
  • 點這裡寄給朋友(在新視窗中開啟)

相關


TensorFlow

Post navigation

NEXT
TensorFlow – 基于 CNN 数字识别
PREVIOUS
TensorFlow – 浅层神经网络 (shallow neural networks)

發表迴響 取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料。

九月 2018
一二三四五六日
« 八月 十月 »
 12
3456789
10111213141516
17181920212223
24252627282930

分類

  • 網站公告 (2)
  • ESET NOD32 (4)
  • WhatsApp Sticker (32)
  • WINDOWS 10 INSIDER PREVIEW (14)
  • Windows 軟件下載 (888)
  • 系統軟件 (202)
  • 辦公軟件 (44)
  • 圖像處理 (103)
  • 影音軟件 (167)
  • 網絡軟件 (218)
  • 應用軟件 (99)
  • Mac 軟件下載 (110)
  • Mac 教學資訊 (110)
  • 安卓軟件 (29)
  • Nulled Scripts (371)
  • WordPress 相關 (181)
  • 在線工具 (18)
  • VPS主機 (1,359)
  • Linux相關 (187)
  • 網絡資訊 (14,474)
  • 教學資訊 (771)
  • NASA (255)
  • SEO工具 (16)
  • WeChat相關 (72)
  • 開源程序 (30)
  • PHP語言 (55)
  • Plesk面板 (3)
  • TensorFlow (11)
  • 日常生活 (46)
  • 動手賺錢 (206)
  • 其他資料 (244)

彙整

  • 2019 年 二月
  • 2019 年 一月
  • 2018 年 十二月
  • 2018 年 十一月
  • 2018 年 十月
  • 2018 年 九月
  • 2018 年 八月
  • 2018 年 七月
  • 2018 年 六月
  • 2018 年 五月
  • 2018 年 四月
  • 2018 年 三月
  • 2018 年 一月
  • 2017 年 十二月

近期文章

  • 20W功率的小米無線車充現身 2019-02-23
  • 三星折疊屏手機之後人們展開了對折疊iPhone的幻想 2019-02-23
  • Galaxy S10+ 跑分出爐Android 陣營第一落後於iPhone XS 2019-02-23
  • 科學家揭示細胞“門神”抗病毒感染重要調控機制 2019-02-23
  • 中國ARJ21飛機已交付12架運送旅客逾27萬人次 2019-02-23
  • 中國北疆首列“智軌”電車在哈爾濱市試跑 2019-02-23
  • 解讀日本將太空岩石帶回地球壯舉的背後隱藏了哪些挑戰 2019-02-23
  • 頭骨上的“微雕” 中國醫生完成了“不可能完成的任務” 2019-02-23
  • 主播拿錢後給《聖歌》打低分EA:可以,把水印刪了 2019-02-23
  • 傳聞稱微軟折疊屏智能機仍在路上但不會運行Windows 2019-02-23

熱門文章與頁面︰

  • ESET NOD32 LICENSE KEY (UPDATED 2019-02-23)
  • ESET Internet Security / ESET NOD32 AntiVirus v12.0.31.0 x86 / x64多語言中文​​正式版
  • PDF-XChange Editor Plus 7.0.327.0(含:註冊機序列號)
  • WINDOWS SERVER 2019 MSDN 正式版ISO鏡像-簡體中文/繁體中文/英文
  • ESET Smart Security Premium/ESET Internet Security/ESET NOD32 AntiVirus v11.2.63.0 正式版-简体中文/繁体中文/英文
  • ESET Internet Security/ESET NOD32 AntiVirus v12.0.27.0 x86/x64 多语言中文正式版
  • Acronis True Image 2019 v23.4.1.14690+Bootable ISO Win/Mac多語言中文​​註冊版
  • WhatsApp Stickers 貼圖下載技
  • YouTube By Click 2.2.86(含:註冊機序列號)
  • Windows 10 version 1809 (Updated October 2018) RS5 正式版MSDN ISO鏡像-簡體中文/繁體中文/英文(最後更新:2018-11-16)

投遞稿件

歡迎各界人士投遞稿件到admin@wongcw.com

請提供以下資料:

1.你的名字

2.你的電郵

3.分類目錄

4.文章標題

5.文章摘要

6.文章內容

7.文章來源

 

標籤

Adobe Alibaba Alipay Amazon AMD Apple Azure Baidu Chrome Facebook Firefox GitHub Google HTC HUAWAI Intel iOS iPad iPhone Kindle LG Linux Mac MacBook Microsoft Nginx Nod32 Nokia Nvidia Samsung Sony VMware WeChat WhatsApp Sticker Windows YouTube 小米

聯繫我們

E-mail:admin@wongcw.com

QQ群:833641851

隱私權與 Cookie:此網站可使用 Cookie。繼續使用此網站即表示你同意使用 Cookie。
若要瞭解更多資訊,包括如何控制 Cookie,請參閱此處: Cookie 政策
© 2019   All Rights Reserved.
loading 取消
文章未送出─請檢查你的電子郵件地址!
電子郵件地址檢查失敗,請再試一次
抱歉,你的網誌無法透過電子郵件分享