1. 程式人生 > >膠囊網路(Capsule Network)的TensorFlow實現

膠囊網路(Capsule Network)的TensorFlow實現

Geoffrey Hinton

現在我們都知道Geoffrey Hinton的膠囊網路(Capsule Network)震動了整個人工智慧領域,它將卷積神經網路(CNN)的極限推到一個新的水平。 網上已經有很多的帖子、文章和研究論文在探討膠囊網路理論,以及它如何做的比傳統的CNN更好。因此我不打算介紹這方面的內容,而是嘗試使用谷歌的Colaboratory工具在TensorFlow上實現CpNet

你可以通過下面的幾個連結瞭解CpNet的理論部分:

現在我們開始寫程式碼。

開始之前,你可以參考我的CoLab Notebook執行以下程式碼:

現在克隆github上的倉庫並安裝依賴庫。 然後,我們從倉庫中取出MNIST

資料集,並將其移至父目錄:

!git clone https://github.com/bourdakos1/capsule-networks.git 
!pip install -r capsule-networks / requirements.txt 
!touch capsule-networks / __ init__.py 
!mv capsule-networks capsule
!mv capsule / data / ./data/ 
!ls

現在讓我們匯入所有的模組:

import os
import tensorflow as tf
from tqdm import tqdm

from
capsule.config import cfg from capsule.utils import load_mnist from capsule.capsNet import CapsNet

初始化

capsNet = CapsNet(is_training = cfg.is_training)

這就是膠囊網路(CpNet)在Tensorboard圖上的樣子:

tensorboard capsule network

訓練

tf.logging.info('Graph loaded')
sv = tf.train.Supervisor(graph = capsNet.graph,
                         logdir = cfg.logdir,
                         save_model_secs = 0
) path = cfg.results +'/accuracy.csv' if not os.path.exists(cfg.results): os.mkdir(cfg.results) elif os.path.exists(path): os.remove(path) fd_results = open(path,'w') fd_results.write('step, test_acc\n')

現在建立TF會話(session)並開始執行。

預設情況下,模型將被訓練50個epoch,批次大小為128。 你可以嘗試不同的超引數組合:

with sv.managed_session() as sess:
    num_batch = int(60000 / cfg.batch_size)
    num_test_batch = 10000 // cfg.batch_size
    teX, teY = load_mnist(cfg.dataset, False)
    for epoch in range(cfg.epoch):
        if sv.should_stop():
            break
        for step in tqdm(range(num_batch), total=num_batch, ncols=70, leave=False, unit='b'):
            global_step = sess.run(capsNet.global_step)
            sess.run(capsNet.train_op)

if step % cfg.train_sum_freq == 0:
                _, summary_str = sess.run([capsNet.train_op, capsNet.train_summary])
                sv.summary_writer.add_summary(summary_str, global_step)

if (global_step + 1) % cfg.test_sum_freq == 0:
                test_acc = 0
                for i in range(num_test_batch):
                    start = i * cfg.batch_size
                    end = start + cfg.batch_size
                    test_acc += sess.run(capsNet.batch_accuracy, {capsNet.X: teX[start:end], capsNet.labels: teY[start:end]})
                test_acc = test_acc / (cfg.batch_size * num_test_batch)
                fd_results.write(str(global_step + 1) + ',' + str(test_acc) + '\n')
                fd_results.flush()

if epoch % cfg.save_freq == 0:
            sv.saver.save(sess, cfg.logdir + '/model_epoch_%04d_step_%02d' % (epoch, global_step))
fd_results.close()
tf.logging.info('Training done')

training progress

在NVIDIA TitanXp卡上執行50個epoch,花了大約6個小時。
但經過訓練的網路效果驚人,總損失(total loss)達到了不可思議的0.0038874。

loss over time

下載訓練好的模型

相關推薦

膠囊網路Capsule NetworkTensorFlow實現

現在我們都知道Geoffrey Hinton的膠囊網路(Capsule Network)震動了整個人工智慧領域,它將卷積神經網路(CNN)的極限推到一個新的水平。 網上已經有很多的帖子、文章和研究論文在探討膠囊網路理論,以及它如何做的比傳統的CNN更好。因此

膠囊網路Capsule Network在文字分類中的探索

作者丨楊敏單位丨中國科學院深圳先進技術研究院助理研究員研究方向丨自然語言處理文字建模方法大致可

貝葉斯網路belief network及相關知識整理

貝葉斯網路(belief network)及相關知識 頻率派:認為theta是個固定的未知常數。認為樣本是隨機的,重點研究樣本分佈 貝葉斯派:認為theta是不確定的未知數。認為樣本是固定的,重點研究引數theta的分佈   貝葉斯的思考方式不同於傳統“非黑即白,非0即1”的思考方

《機器學習》 周志華學習筆記第五章 神經網路課後習題 python實現

1.神經元模型 2.感知機與多層網路 3.誤差逆傳播演算法 (A)BP演算法:最小化訓練集D上的累積誤差 標準BP演算法:更新規則基於單個Ek推導而得 兩種策略防止過擬合:(1)早停(通過驗證集來判斷,訓練集誤差降低,驗證集誤差升高)(2) 正則化:在誤差目標函式中引入描述網

論文解讀:記憶網路Memory Network

在瞭解vqa問題的論文時,發現有很多論文采用了記憶網路的思路,模擬推理過程,這篇文章主要總結關於記憶網路的三篇經典論文,目的是對記憶網路有個認識。分別是: MEMORY NETWORKS,End-To-End Memory Networks,Ask Me Anything: Dynami

吳恩達深度學習筆記2-什麼是神經網路Neural Network

什麼是神經網路?(What is a Neural Network) 我們常常用深度學習這個術語來指訓練神經網路的過程。有時它指的是特別大規模的神經網路訓練。那麼神經網路究竟是什麼呢?在這個視訊中,會講解一些直觀的基礎知識。 首先,讓我們從一個房價預測的例子開

看完這篇,別說你還不懂Hinton大神的膠囊網路capsule network

倒計時 2 天 來源 | 王的機器(公眾號ID:MeanMachine1031) 作者 | 王聖元 0 引言 斯蒂文認為機器學習有時候像嬰兒學習,特別是在物體識別上。比如嬰兒首先學會識別邊界和顏色,然後將這些資訊用於識別形狀和圖形等更復雜的實體。比如在人臉識別上

Corda技術核心概念之網路The Network

概要 一個Corda的網路是由很多的節點組成,並且這些節點都執行著Corda和CorDapps。 一個節點是否可以加入這個網路,是由Doorman決定的。目的:保證一定隱私。不像比特幣任何人都可以加入網路中。 節點之間的通訊是P2P(Peer to Peet),而不是像

TensorFlow實現卷積神經網路進階

此模型中如果使用100k個batch,並結合學習速率的decay(即每隔一段時間將學習速率下降一個比率),正確率可以高達86%。模型中需要訓練的引數約為100萬個,而預測時需要進行的四則運算總量在2000萬次左右。所以這個卷積神經網路模型中,使用一些技巧。 (

教你用TensorFlow實現神經網路附程式碼

來源:雲棲社群 作者:Pavel Surmenok 本文長度為2600字,建議閱讀5分鐘 本文幫助你理解神經網路的應用,並使用TensorFlow解決現實生活中的問題。 如果你一直關注資料科學

centOS 7下無法啟動網路service network start錯誤解決辦法

   今天在centOS 7下更改完靜態ip後發現network服務重啟不了,翻遍了網路,嘗試了各種方法,終於解決了。      現把各種解決方法歸納整理,希望能讓後面的同學少走點歪路。。。 首先看問題:執行service network res

[PyTorch小試牛刀]實戰一·使用PyTorch擬合曲線對比PyTorch與TensorFlow實現的區別

[PyTorch小試牛刀]實戰一·使用PyTorch擬合曲線 在深度學習入門的部落格中,我們用TensorFlow進行了擬合曲線,到達了不錯的效果。 我們現在使用PyTorch進行相同的曲線擬合,進而來比較一下TensorFlow與PyTorch的異同。 搭建神經網路進行訓練的步驟基本相

基於PTB資料集實現RNN-LSTM迴圈神經網路智慧填詞

本篇直入主題,做一篇學習的記錄,在學習RNN的時候,跟著教程敲了一個案例 分為處理方法檔案,神經網路模型檔案,訓練方法檔案,測試檔案 所有的操作和重要內容都在程式碼中作了詳細的註釋 一、目標神經網路模型   二、資料集 PT

李航統計學習方法之樸素貝葉斯法含python及tensorflow實現

樸素貝葉斯法 樸素貝葉斯法數學表示式 後驗概率最大化的含義        樸素貝葉斯是一個生成模型。有一個強假設:條件獨立性。我們先看下樸素貝葉斯法的思想,然後看下條件獨立性具體數學表示式是什麼樣的。

tensorflow構建兩層簡單神經網路全連線

中國大學Mooc 北京大學 人工智慧實踐:Tensorflow筆記(week3) #coding:utf-8 #兩層簡單神經網路(全連線) import tensorflow as tf #定義輸入和引數 #用placeholder實現輸入定義(sess.run中喂一組資料) x = tf.pl

TensorFlow HOWTO 5.1 迴圈神經網路時間序列

5.1 迴圈神經網路(時間序列) 迴圈神經網路(RNN)用於建模帶有時間關係的資料。它的架構是這樣的。 在最基本的 RNN 中,單元(方框)中的操作和全連線層沒什麼區別,都是線性變換和啟用。它完全可以看做多個全連線層的橫向擴充套件。 但是運算元量多了之後,就會有梯度消失

【深度學習基礎-07】神經網路演算法Neural Network上--BP神經網路基礎理論

目錄 1 起源 2 多層向前神經網路(Multilayer Feed-Forward Neural Network) 3 設計神經網路  4 交叉驗證方法 5 BP神經網路演算法 1 起源 以人腦中的神經網路為啟發,出現過不同的版本 最著名的演算法是19

十一行Python程式碼實現一個神經網路第一部分

0.寫在翻譯之前         本文翻譯自部落格:i am trask , 屬於本人一邊學習神經網路一邊翻譯的文章。所以不止在翻譯層面可能會有錯誤,在對神經網路的原理層面也難免會有錯誤。假如您發現哪裡有問題,希望能諒解並留言可以讓我修改,謝謝。 1.概要        

centOS 7下無法啟動網路service network start錯誤解決辦法應該是最全的了。。。

    今天在centOS 7下更改完靜態ip後發現network服務重啟不了,翻遍了網路,嘗試了各種方法,終於解決了。      現把各種解決方法歸納整理,希望能讓後面的同學少走點歪路。。。 首先看問題:執行service network restart命令後出現下面的錯

python實現多層前饋神經網路手寫體識別

前饋神經網路的圖例及推導過程見https://blog.csdn.net/u010089444/article/details/52555567,接下來我們用python語言實現多層前饋神經網路。本例使用的是MINST資料集,由輸入層,兩個隱藏層,輸出層. MNIST資料集中