自分のための備忘録的なブログです。

Ubuntu14.04LTS および Win10 を使って、ディープラーニングの勉強をしています。記載されているコードは、他の OS には互換性がない可能性があります。


DNN:
マシン性能別 学習速度の比較, TFチュートリアルをmodifyする

python3:
オブジェクト指向プログラミングとは, モジュールとインポート、パスを通す, システムコマンド(os), ファイル・フォルダ名取得, 画像の前処理,

Ubuntu14 の初期設定:
Ubuntu14初期設定, 初期設定-2, cudaなども, 初期設定-3

読了:ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作る Deep Learning: Amazon.co.jp 

 

 TensorFlow など Deep learning のライブラリを使わず、Python3 (numpyなど使いますが)のみで Deep Neural Network, (DNN) を実装する、という本です。

 Deep Learning ライブラリや、General-Purpose computing on GPU, (GPGPU) ライブラリの使い方は書いていないです。従って、 TensorFlow/CAFFE/TEANO などのライブラリや、CUDA/CuDNN/OpenCV などの GPGPU は自分で勉強する必要あります。

  本書では CNN やRNN は実装しません。恐らく実際に Neural Network で何かやるには、CNN や RNN でないとキビシイ。そのため、この本だけの知識では、 Deep Learning で新しい何かをやるのは難しそうです。

(余談ですが、Google 社の DL ライブラリ、TensorFlow のチュートリアルには CNN や RNN の例もあったと思います。TF は GPU の有無にかかわらず、同じようにスクリプトを書けるそうですので、初心者にはお勧めなのだろうと思います)

 

 Neural network の各要素に、詳細な説明と実装がされているのが良い点。

 パーセプトロン、AND/OR/NAND/XORgate などから、様々な activation function 、学習を効率化する仕組みや、過学習を防ぐ方法 など、様々な要素を紹介しています。

 

 DNN を全く知らなかったので、色々勉強になりました。

 Neural Network のそれぞれの層で、

  情報 * 重み + バイアス

 という計算が、

  ベクトルの内積

 として一発で計算できるということですとか(これには感動しました)。

 

 他に、 back-propagation も多分、革命的な手法だったのだろうと思います。

 

 因みにですが、

  甘利俊一先生の「脳・心・人工知能

脳・心・人工知能 数理で脳を解き明かす (ブルーバックス) | 甘利俊一 | コンピュータサイエンス | Kindleストア | Amazon

という本に、

「back-propagation」などと最近では言われているが、これを「確率降下法」として最初に発見したのは私である。

 ということが書いてありました。

 「アカデミアとはこういうもの」という感じで、プログラミングとの違いが大変興味深いところ。

 

 Wikipedia を見ると、この手法が多くの研究者によって「再発見」されてきたことが分かります。バックプロパゲーション - Wikipedia 

 

 話は変わるが、研究というのは特許と違い、「発見に利益を求めない」ところが大変素晴らしいとは思います。

 けれど、こういう第一発見者=第一主義みたいのが、息苦しい。

 

 自分は今、プログラミングに興味があり、

 プログラミングの世界では、先人のコードを使うことはむしろ推奨され、それを無料で世界に公開した「github」なんてサイトもあります。

 

 「第一作成者は誰か」とか、「コードのインパクトファクター」「コードの被引用数」なんて、私の知る限りでは存在せず、

 

 「私が発見」とか「私の業績」とか血眼にならなくて良いので、プログラミングはいいな、と思います(もちろん、「できるプログラマ」が正当に評価されないことにつながり、問題もあります)。

 

 

 この本では、CNN や RNN など含め、比較的最近の研究まで紹介されています。一通りの知識を得ることができます。

 

 第一章の、 Python の簡単な説明も素晴らしいです。Python 入門書が一冊かけて説明するのを一章に凝縮してるので、網羅はできていません。しかし、本書を理解するには十分な内容です。

 

 昨年たくさん買い込んだ Python 入門書のある一冊で、

>>> 1+ 1

2

 を実行して

おめでとうございます!

あなたは今、Python プログラミングの世界に足を踏み入れました!!

みたいのがありましたが、

「1 + 1 を実行するために、Python 始めたんじゃないよ!」

 

 それと比べ、本書は明確な目的があります。Python を学ぶにも、「Deep Learningのため」と範囲を限定しているため、頭に入りやすかったです。

 

 さて、一周目は理解しないまま、「なんとなく」読み進めました。現在は二周目に入り、著者のコードを確認、「O'Reilly 入門 Python 3」 も並行しながら、本格的に読み進めています。

www.amazon.co.jp

 

 二周目でも理解できなかった所もあります。

  例:class の使い方。

>>> class TEST():

>>>    def __init__(self, name):

>>>        self.name = name

 

__init__  初期化とは???

self って何??? 

 

>>> t = TEST('example')

 なぜ

>>> TEST('example')

ではダメで、

>>> t = .....

で t に代入しなければ?

 とか

>>> sys.path.append(os.pardir)

頭では理解できてるけど、まだ細かな挙動が分からず

とか。

 

  一方で、「へー、こんなことできるんだー」

と理解できたコードもあり、

 

>>> if __main__ == '__name__': 

#スクリプトとして実行されたかどうかを判断する

  

 大変勉強になっています。

 

 ただ、最初に この本のスクリプトを試してみる時、どうしても

github から著者のコードを落としてくる

のと

コマンドラインでカレントディレクトリーを移動

の必要があります。

 

 ここで挫折する人がいると思いました。

 コマンドプロンプトとターミナルの使い方について記載があると、更に良かったと思います。

 

 また、

著者のスクリプトコマンドラインで実行する

と走るけれど、

自分で対話式に打ち込んでみる

とエラーが出ることもありました。

 

 対話式でも実行できるようコードを書き直すか、対話式で走らないコードは明記していただくと、良かったと思います。

 

 

因みに どこでエラーが出るかというと、 

例:p65

>>> def init_network():

(中略)

>>>     network['b3'] = np.array([0.1, 0.2])

>>> # 空行

>>>     return network

 

対話式の環境では、上記の

>>> # 空行

で関数定義が終了したと解釈され、

>>>     return network

でエラーとなる。

 

 本書で唯一、残念なところは、

本書を読んでも、DNN を作れるようにはならないこと

 です。

 「ゼロから作る」という題名ではありますが、最終的に、本書では、

著者が作成したコードを実行するだけ

 となってしまいます。たしかに著者は「ゼロから作った」のかもしれません。しかし、私のような Python 初心者は、コードを見ても、難解で理解不可能。著者のコードをただ実行するだけ となってしまいます。

 知識の乏しい読者のことを考え、著者が自分で実装してしたのだと思いますが、本書の題名には反すると思いました。

 

 つまり、このブログ記事の表現を借りると

blog.tinect.jp

 「Deep Learning を『分かった気になれる』本」、ということですね。 *1

 

 以上まとめますと、Deep Learning をやってみたい人、Python 3 を学んでみたい人におすすめな本です。

*1:「この本を読んでも、"Deep Learning" を理解できない」と言っているわけではありません。この本に書かれたことは、 Deep Learning の「基本」的なことだと思います。ただし本書だけでは不十分ということです

Deep Neural Network ライブラリ

 

Deep Neural Network (DNN) について知識がない私のために、

DNN を実装する(実際に作る)ために使う

「ライブラリ」について、

ネットで調べたまとめです。

 

DNN 界隈は高速で進化している最中です。

今後1年、2年で状況が全く変わってしまう可能性もあり、

注意が必要です。

 

ざっと調べた印象では

 実装のためには プログラミング言語C++Python を学ぶのが良い。

 GPU を使った演算処理、GPGPU が必須ですが、その実装は大変なので、ライブラリに肩代わりしてもらう感じのようです。

 人気がありそうなのは

 

長い歴史がある? Theano,

高速で研究開発も盛んなため人気な Caffe,

Google 発で注目集める TensorFlow 

 

という感じです。

 

 

 

 

 

目次

1.CUDA/CuDNN
2.TensorFlow
3.Theano
4.CNTK
5.CAFFE
6.Chainer

 

 

 

 

1.CUDA/CuDNN

CUDA

CUDA(Compute Unified Device Architecture:クーダ)とは、NVIDIAが提供するGPU向けのC言語統合開発環境

 

発表は2006年11月、CUDA 1.0の提供開始は2007年7月。

現在は CUDA 8.0 までバージョンアップしているが、最新版を使えるのは Pascal アーキテクチャNvidiaGPU のみ。ザックリ言うと、GeForce GTX 10x 系のみ!

(もし15万円出せるなら、TITAN X、50万円以上出せるなら TESLA という、高機能 GPU も CUDA 8.0 を使えます。また、Nvidia 社は、TITAN X を4枚載せた、Deep Learning に対応したコンピューター, DevBox を販売しています。アメリカ Amazon.com にて 12000 ドルで販売されていました。お金持ちの方はどうぞ)

 

後発のGPGPU関連技術にはOpenCL (1.0仕様公開は2008年) やDirectCompute, Radeon Instinct  などが存在し、これらは Nvidia 以外の GPU を使用できるらしい。

 

C言語以外からも使用することができる。

PythonPerlJava, .NET, Ruby, Lua, MATLAB, IDL, Mathematica などで。

 

CUDAはNVIDIA製のGPUでしか使えない

CUDA - Wikipedia

 

CuDNN

NVIDIA が自社製の GPU に向けて提供している Deep Neural Network (DNN) 開発用のライブラリ

DNNで使われる基本的な機能をまとめたもの。

Theano などの DNN ライブラリに合わせて使うことで、DNN の実装を大幅に省力化できる。らしい。

 

news.mynavi.jp

 

"cuDNNはNVIDIAが公開しているDeep Learning用のライブラリである。このライブラリを使うとCaffeやChainerなどのDeep Learning用のソフトウェアの速度が向上する。 この速度向上に寄与している最も大きな部分がConvolutionの高速化である。"

なぜcuDNNのConvolutionは高速なのか

より引用、 accessed 29 Jan 2017

  

CUDA や cuDNN には複数のバージョンが存在している。ライブラリ毎に対応するバージョンが異なっているため、自分の使いたいライブラリと、それに対応する CUDA, cuDNN のバージョンを確認しておく必要がある。

Pascal + CUDA 8 にて、FP16 での演算、ユニファイドメモリに対応。

 

 

 ネットを見ていますと、次のような記事がありました。

 

"最近リリースされた「TensorFlow」もCuda 7.0とCUDNN 6.5 V2が対応バージョン(最新バーションじゃ上手く動かなかった)なのでこの記事を見ればGPUの環境を整えることができますよ。TensorFlowはまだ勉強中です。"

ry0.github.io

accessed 29 Jan 2017

 

DNN ライブラリによって、CUDA、cuDNNのどのバージョンに対応しているかが異なるらしい。ので注意ですね。

 

 

2.TensorFlow

Google社の開発した(している)機械学習/DNNライブラリ。

www.tensorflow.org

C++言語pythonに対応。OS は Linux/Mac/Windows

特徴は

データフローグラフを使用したライブラリで、複雑なネットワークを分かりやすく記述できる ことらしい。

チュートリアルが素晴らしいとのこと。

比較的新しい割に、ネット上に情報が多い! さすがGoogle

 

以下引用

チュートリアル

各種チュートリアル用データセットが用意されていて、すぐに試せます。

MNIST:手書きの数字を判別
CNN:画像認識
Word2Vec:各単語の関係を学習
RNN:文章から次の単語予測
Seq2Seq Model:フランス語を英語に翻訳

引用終わり。

 

こちらから引用

www.ossnews.jp

より引用。accessed 29 Jan 2017

 

一通りのチュートリアルが揃ってますね。。。

 

 

実際に使ってみた方の講演スライド。

www.slideshare.net

実際の講演動画。

www.youtube.com

 

処理を可視化した、TensorBoard というのが素晴らしいみたいですね。

 

 

 

3.Theano

名前はよく見るが、その特徴はよく分からない。

(テアノ?)

比較的歴史があるらしい。情報は入手しやすい。

 

d.hatena.ne.jp

こちらでは、

 

"TensorFlow、Chainer、Caffe といった機械学習およびディープラーニングの代表的なライブラリ/フレームワーク3種"

 

と書いていて、DNN の有名ライブラリベスト3のうちの一つとされています。

 

 

ベストセラー本である

Python機械学習プログラミング」

「Python機械学習プログラミング」

 

でも、DNNライブラリとして取り上げられていました。

 

"Theanoはモントリオール大学のBengio教授の研究室で開発されています"

 

www.chino-js.com

 

qiita.com

よく分かりませんが、既に広く使われているモデルのようです(適当)。

 

 

4.CNTK

マイクロソフト社の開発したライブラリ。the microsoft CogNitive ToolKit

github.com

C++Python・.NET・BrainScriptをサポート。

複数のマシンの複数のGPUを利用可能で、ニューラルネットワークの訓練時の学習速度を著しく向上させることができる。という素晴らしいメリットがあるが、日本語の情報が極めて乏しいのが問題。

 

複数の PC、複数の GPU をうまく利用できるってのはめっちゃ魅力的!! しかしネット上に情報が乏しい。

 

Block Momentum, 1-bit SGD など、複数のコンピュータ、複数GPUでの学習をサポートする仕組みがあるらしい。

参考:Microsoftが公開したDeep LearningフレームワークCNTKの3つの特徴 - DeepAge

 

複数マシンを利用可能というのが素晴らしいですね。

 

が、マイクロソフトの最近の Windows 10 の動きを見ていると。手放しで信じて使って良いのか心配になります。10 になってバックグラウンドで勝手に通信、勝手にアップデートしていたり、便利ツールのpaintがなくなるとか。MS office でも、2010についていた画像ツール(簡単にトリミング、圧縮などができる、Powerpointの図ツールだけを取り出したようなソフト)が便利だったのですが、2013 や 2016 ではなくなってしまっているし。「あー便利だなー」となったところで梯子を外されないか、不安になりますね。

 

qiita.com

マイクロソフトらしくなく、イケてるって言う意見もあります。(上記qiita参照) 

 

 

こちらをご覧ください。2016年の、Deep Learning Advent Calender (クリスマス前の1ヶ月ほど、毎日みんなでネタを投下していくブログ的なもの)です。

 

それぞれの記事を見ると、どれもおもしろいのですが、その中の一つに、この CNTK が出てきます。「CNTK ってのは、ブログネタになってしまうほど、使われてないんだな・・・」という感想。だって「TensorFlow 使ってみました」なんて記事、ないですからね。

他の記事読むと、「TensorFlow使っていたけど遅かった」ですとか、TF は当たり前の用に扱われてますけど、CNTK は「ネタになる」というところでして。

 

qiita.com

 

 

 

5.CAFFE

カリフォルニア大学バークレー校にて開発されている。

C++で実装され、C++/Python/MATLABで使用できる。

「高速動作」「GPU対応」「洗練されたアーキテクチャ/ソースコード」「開発コミュニティが活発」などが特徴。

www.ossnews.jp

より引用、29 Jan 2017

 

ネットの記事見てて、全体に評価が高い印象です。

 

一例ですが、

 

"代表的なフレームワークには、

Caffe
theano/Pylearn2
Cuda-convnet2
Torch7
などがあります。この中でも最速でありかつ最も活発に開発が行われているのがCaffeです。"

qiita.com

より引用、accessed 29 Jan 2017

 

高速なのは素晴らしいですが、インストールが難しいという話もあります。

d.hatena.ne.jp

 

 

学習速度が速いのは魅力的です。ただし私の目的では、基本的に多施設共同研究となり、中央にデータを集めて中央で解析することになると思います。

おそらく参加施設様にマシーン/GPUの参加も募り、分散処理で学習すると思いますので、単純な速さよりも、分散処理への優れた対応が重要のような気がします。

そうすると CNTK なのですが。。。

 

 

6.Chainer

  Chainer: A flexible framework for neural networks

  Prefered Networks社が開発

 ☆日本製☆ と言うだけで親近感が湧いてくるライブラリ

 

www.slideshare.net

 

"既存の実装のは、独自のミニ言語に対するインタープリタを実装しているようなもの" らしいですが、Chainer では Python の標準の機能?(+Numpy?)を使って実装している様子。

 

Cython も使うようですが、そういう「独自のライブラリ」ではなく、「メジャーなライブラリ」を使う、なるべくシンプルに実装しているらしいところには好感。

 

Deep Learning のフレームワーク Chainer を公開しました | Preferred Research

accessed 29 Jan 2017

 

  1. 好きですけど、実際触って、使いやすいかは別問題なので、確認する必要がありますね。

 

次期モデルで高速化するというニュースあり!

 

"現在のChainerは、マルチノード(複数サーバー)での学習に対応にしていない"

"この分散バージョンのChainerでは設定を変更するだけで、マルチノード環境やマルチGPU環境に対応"

"32ノード/128GPUの環境で画像認識を学習。1ノード/1GPUの環境で20日以上かかっていた学習が、4.4時間で完了"

itpro.nikkeibp.co.jp

accessed Jan 29 2017

 

 

さて、目的に応じて、適切なライブラリを使うことが重要と思われます。

医用画像と言っても単純レントゲンと超音波、CT、MRI核医学、どれも特徴があり、異なっています。

 

特にニーズが高いのは、単純レントゲンと超音波、CT、MRIでしょう。

 

2D画像のレントゲンと超音波、3D画像のCTとMRIで、実装が異なるでしょう。

 

同じ2Dでも、数十ミリ秒単位で速度が必要な超音波と、数10秒が許容できるレントゲンは異なっています。例えばレントゲン、撮影装置に DNN を組み込めれば、ほぼリアルタイムで診療支援が可能なはず。現像の際に使う据え置き装置に組み込む感じですね。

一方、USは基本的にポータブル装置のため、ハードウェア的な制限が大きいでしょう。レントゲン/CT/MRIではクラウドに投げるというウルトラCがありますが、USはリアルタイム性が強み。クラウドに投げるのは無理でしょうな。。。これも将来的には装置に組み込み、危険な部位を指摘してもらえれば素晴らしいですね。比較的内部構造が単純で、早期発見による恩恵が極めて多きい、乳腺USなどがターゲットとして良いだろうなと。

 

3Dでは、もともと3次元のデータ量があるCTで、時間軸方向の変化(比較、ダイナミック造影)と更に2つの次元の情報があり更に複雑となります。MRI、CTの5次元に加え、同時撮影された異なるコントラスト画像(+1次元)があり、6次元で、もっと複雑です。CT・MRIでは、さらに臨床情報も加える(CT:6次元、MRI:7次元)ことで高精度になるでしょうが、それをどのように入力するかが課題。

 

これだけ大量の情報を持つ DNN をトレーニングするには、膨大な医用情報が必要であり、単一の医療機関や、単一の医局で行うことは恐らく不可能です。ネット上の文献から学習したりできれば良いのですが、私の脳みそでは実装方法が思いつかず。多施設共同研究で画像を集める(物理で殴る)しかないと思いますが、それにしたって膨大な情報量です。はたして、職があるうちに収集、実装、学習できるか・・・

 

しかし DNN による画像診断が普及すれば、その恩恵は計り知れません。

ので夢を見て頑張ろうとは思います。

pydicom 1.0 のインストール。

pydicom 1.0.0a1 を github から DL してインストールするまでの記録です。

a というのは α 版 ということのようです。

「α版」が何を意味するかは、以下のWikipediaを御覧ください。

アルファ版 - Wikipedia

したがって、普通の人はインストールすべきでないでしょう。

 

pip でインストールする場合、 安定版である、0.9.9 がインストールされます。

Python 3 + Pydicom 0.9 を使用しているブログを見た記憶があるので、(公式には pydicom のサポートは python 2系に限られるにも関わらず)まずは pydicom 0.9.9 を使うのが良いと思います。

 

 

・・・・・・・・・・・・・・・・・・・・・・・・・・

 

pydicom 1.0が出てました。

pydicom documentation — pydicom 1.0a documentation

 

公式ドキュメントも!

https://media.readthedocs.org/pdf/pydicom/latest/pydicom.pdf

発行日:Jan 27, 2017!!

 

できたてホヤホヤ!!

 

 

"""1.3.1 Prerequisites
python 2.6, 2.7, 3.3 or later"""

 

 

python 3.3 or later !!! 

 

 

pydicom 0.9.9では、python 2系にしか対応していなかったのですが。

xd-lab.net

# 約1年前の記事。この時点で Python 2.7 にも

 対応していなかったという。。

# 急ピッチで開発が続いていることが分かります。

 

 

1.0で3系にも対応した様子。

python3 しか知らない私は、ようやく使える(かもしれない)。。。

 

 

 

 

 

 

Deep neural network は python で構築する予定。

Preparation, neural network, post-processing 全てを python 上で実装できれば。

ただし pydicom は、「jpeg などで圧縮された画像は上手く扱えない」とある。

 

公式ドキュメント

"""One limitation of pydicom: compressed pixel data (e.g. JPEG) cannot be altered in an intelligent way as it can be for uncompressed pixels"""

 

Dicom 画像も jpeg2000 で圧縮されていたりするので、結局 DCMTK

dicom.offis.de

を使う必要があるかもしれないが・・・

 

(前処理をどうするかは議論のある所でしょうね。)

(幾つかアイデアはありますが、どうすれば実装できるのか・・・?)

 

 

 

 

 

 

早速インストールしてみます。

 

Win10 PC

管理者権限でコマンドプロンプト

 

>pip install pydicom

 

//////////////////////////////////////////////////////////////////////////////////////////////////////

Collecting pydicom
Downloading pydicom-0.9.9.tar.gz (422kB)
100% |################################| 430kB 1.3MB/s

////////////////////////////////////////////////////////////////////////////////////////////////////// 

 

ん・・・ 0.9.9 だと・・・?

 

>pip install -U pydicom #アップデートする

>pip freeze

 

//////////////////////////////////////////////////////////////////////////////////////////////////////

...

...

...

pycurl==7.43.0
pydicom==0.9.9
pyflakes==1.3.0

...

...

...

//////////////////////////////////////////////////////////////////////////////////////////////////////

 

pydicom==0.9.9 !!!

 

フム・・・

 

 

 

> python

 

//////////////////////////////////////////////////////////////////////////////////////////////////////

Python 3.5.2 |Anaconda custom (64-bit)| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

//////////////////////////////////////////////////////////////////////////////////////////////////////

 

>>>  import pydicom  

# pydicom 1.0 なら、これでインポートできるはず。

 

//////////////////////////////////////////////////////////////////////////////////////////////////////

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'pydicom'

//////////////////////////////////////////////////////////////////////////////////////////////////////

# エラー!!

 

>>> import dicom  

# pydicom 0.9 なら、これでインポートできるはず。

 

>>> 

 

# エラーが出ない!!! oh...0.9.9!!!

# 他のインストール方法でなんとかならないか。

 

> pip uninstall pydicom

> y

 

//////////////////////////////////////////////////////////////////////////////////////////////////////

Successfully uninstalled pydicom-0.9.9

//////////////////////////////////////////////////////////////////////////////////////////////////////

 

というわけで、pip でインストール出来ないので、他の方法を使います。

 

 

 

 

 

 

 

 

 

・・・しばらく ネットの海を漂流・・・

 

 

 

 

 

 

 

 

 

 

githubからダウンロードできそうです。

https://github.com/darcymason/pydicom/archive/master.zip

バージョン書いてないのが気になりますが・・・

公式ドキュメント通りにインストールしてみます。

 

zipファイルを解凍

管理者権限でコマンドプロンプト

cd/dir を駆使して展開したフォルダに移動。

 

> dir

setup.py

を確認。さて。

 

> python setup.py install

//////////////////////////////////////////////////////////////////////////////////////////////////////

...

...

Installed c:\program files\anaconda3\lib\site-packages\pydicom-1.0.0a1-py3.5.egg
Processing dependencies for pydicom==1.0.0a1
Finished processing dependencies for pydicom==1.0.0a1

//////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

おぉ!!

 

インストールできてしまった。

 

念のため

> pip freeze

 

//////////////////////////////////////////////////////////////////////////////////////////////////////

...

...

...

pycurl==7.43.0
pydicom==1.0.0a1
pyflakes==1.3.0

...

...

...

//////////////////////////////////////////////////////////////////////////////////////////////////////

 

おぉ!!

pip で認識されているみたいなので、いざとなったら pip でアンインストールもできる(といいなぁ)

 

 

さて、いざ。

 

> python

>>> import pydicom   # 1.0 ならエラーが出ない

>>>

 

# エラーが出ない!!

 

 

幸せ・・・。

お疲れ様でした。

Theano on Python3 (Anaconda) in Win10

ディープラーニングのライブラリである Theano を Anaconda(Python3.5.2, Win10)にインストールした。PC は Lenovo Thinkpad T460(GPUなし) Win 10。

 

コマンドプロンプトを管理者権限で起動。

`Theano をインストールする。

 

[Win] + x, a

> conda install Theano

 

時間は多少かかるが、あっけなくインストール完了。

(当初、パイソンを起動した後に

>>> conda install Theano

でインストールできず、5分くらい無駄にしました。コマンドプロンプト上でインストールするんですね!)

 

コマンドプロンプトを終了。再起動。

 

> exit

[Win] + x, c

 

パイソンを起動した後、Theanoをインポートする。

 

> python

>>> import theano

 

エラーが出る

 

WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will default to Pythonimplementations. Performance will be severely degraded

 

C言語コンパイラが無いと怒っているのか。Googる。

MinGWというソフトをインストールすれば良いそうで

Windows 7にMinGWをインストールする(mingw-get-inst使用) - Symfoware

source forge というサイトからインストーラー使ってインストールするが

MinGW - Minimalist GNU for Windows download | SourceForge.net

 

> python

>>> import theano

 

同じエラーが出る。

WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will default to Pythonimplementations. Performance will be severely degraded

 

別サイト参照

may46onez.hatenablog.com

 

コマンドプロンプトからインストールすれば良いらしい。

コマンドプロンプトを起動。

 

> conda install mingw libpython

 

cmdを再起動して

[Win] + x, c

 

> python

>>> import theano

 

エラーが出ない。

 

本日はここまで。

 

 

 

Rstudio日本語が文字化けした時

File

Reopen with Enchoding

(Alt + F -> E)

 で適当なのを選択してOKをclick。

 自分の場合は UTF-8 -> SHIFT-JIS に変更して改善

よく使うBash, cp -r / rsync -ahvc

こりゃ使うなぁ と思ったコードを書き留めていく。

 

bash再起動

source ~/.bashrc

 

 

研究データをコピーする。

for x in [ID] #研究で使うID番号

do

mkdir #コピー先のディレクトリを作る

cp -r  $x/コピー元のディレクトリ [コピー先のディレクトリ]

done

 

 

※T1WI、T2WIとか複数のディレクトリをコピーする際、for loop を2重、3重にするとコピーできない。

for x in [ID]

do

  for y in T1WI T2WI DWI

  do

 

みたいに上手く回すのは自分には困難(やり方がわからない)。

 かっこ悪いけど

for x in [ID]

do

mkdir

cp -r $x/ディレクトリ名/T1WI* コピー先のディレクト

cp -r $x/ディレクトリ名/T2WI* コピー先のディレクト

cp -r $x/ディレクトリ名/DWI* コピー先のディレクト

cp -r $x/ディレクトリ名/ADC* コピー先のディレクト

 

 の方が確実。

 

※cp -r の代わりに、rsync -ahvc も可

 違いはよくわからないけど、rsync -ahvc だと、「今どのフォルダで作業しているか」を表示してくれる。

 ahvc は「あーん(ah)ばかーん(vc)」と覚えています。

Deep Learning 向けの PC/GPU その2

このところずっと、

ディープラーニング向けパソコンはどうしたら良いんかいな」

と悩んでいます。

 

Nvidia GTX GeForce GTX 1070 搭載の PC, 

 

が良いんでは、とのことに落ち着きました。

 

 

ディープラーニングではGPUを使ったほうが良い」

という事実があります。

 

そして、医用画像解析ということであれば、メモリーが大量に必要になるでしょう。

大量にメモリーを積んだ、GPU を使いたい。

 

ところで、こんな記事を見つけました。

devblogs.nvidia.com

 

news.mynavi.jp

 

ディープラーニング向けの GPU というと、Nvidia の CUDA というソフトを使う訳ですけど。※(OpenCVなどの他の手法もあるが、CUDAが主流)

(多分)最新版のCUDA 8 において、ユニファイドメモリが導入されたと。

 

ユニファイドメモリ、初めて聞きますが、

 

ディープラーニングの時に、計算に必要なデータを、事前に GPU に読み込んでおかなくても良い。必要になった時、その都度 GPU のメモリーに格納する」

 

もののようですね。

 

これまでは、ディープラーニングに用いるデータは事前に、GPU のメモリに格納しておく必要があった。したがって、医用画像解析では大量のメモリーが欲しかった。

 

ところが「ユニファイドメモリ」では、それが不要(らしい)と。

 

で、これが使えるのが「Pascalアーキテクチャを採用したGPU

ざっくりいうと、

 

GeForce 1000系

 

です。

 

1000系といっても 1050 から 1080 まである。

大体ハイエンド(この場合1080,RAM 8GB、6万円〜)はコスパが悪いんで削除。 

 

※どこかで、「1070は1080と同じ構造だが、プロセッサの一部を機能しないようにした製品である」 という記事を見ました。1080と1070の比較では、1080の方が機能が高いのは当然です。

 

やっぱり GPU 上のメモリ量は ある程度必要(かも)と考えると、

 

1060 (RAM 6GB、2万円〜) か 1070 (8GB、4万円〜) が良さそうです。

 

で、1000系、すなわち Pascal アーキテクチャでは、メモリー利用や学習をより効率的に行える「FP16」と言うものが使えるとか、使えないとか言う記事があります。

 

(※FP16 ニューラルネットワークの学習の際に、一般的な32ビット浮動小数点数精度浮動小数点数ではなく、16ビット浮動小数点数精度浮動小数点数 を使う方法。FP32の方が数値の精度が高いが、NNの学習の際にはそこまでの精度は必要ないとのこと。メリットは、情報量が半分になるため、計算が早くなる・メモリーに格納できる情報量が増え学習が速く進む など)

 

FP16 については、GeForce の性能は制限されているようです。

FP16 Throughput on GP104: Good for Compatibility (and Not Much Else) - The NVIDIA GeForce GTX 1080 & GTX 1070 Founders Editions Review: Kicking Off the FinFET Generation

 

記事を見ると、

 

TITAN X や TESLA プロセッサーであれば、FP16 は高機能だが、GeForce 1000系では、FP16 の計算能力は(わざわざ)低く、制限されているようです。

コレが将来、次期モデル Voltaアーキテクチャ で解禁されるのか? それとも TITAN シリーズじゃないとフルパワーは出ないのか?

 

正直、やったことないんでわかんないんですけどね!

 

さて、

GeForce 1000系では、前のモデルに比べて、RAM が大きく増えています。画像を扱うなら、これを使いたい。「ユニファイドメモリ」があれば、メモリ量にそこまでこだわる必要はないのかもしれません。

ただし使ったのことがないので、挙動が分かりません。

 

Pascal アーキテクチャGeForce GTX 1000系)でも、GPU に積んであるメモリ量は重要であるという記事もあります。

wazalabo.com

・・・これ見ると、GeForce GTX 1080 でも全然遅いような印象を受けますね・・・

 

 

当初はあくまで「やってみる」だけですから、FP16 の速度が制限されてても仕方ありません。おそらく FP32 と FP16 とでコードの書き方が異なっているのでしょうから、将来買い替えた際にちゃんとコードを書けるよう、練習できるだけでもありがたい。

 

本命は TESLA や TITAN, そして 2018 年にでるとされる、Volta アーキテクチャGPU なのですが、これら自腹で買うのは厳しいので、なんとか安いので業績出して、購入したいところです。

それまで経験を積むのには、GeForce GTX 1070 で決まり! と自分を説得して、パソコン探しのネットサーフィンをなるべくやめようと思います!

Deep Learning 向けの PC/GPU その1

AMDGPGPU に参戦したというニュースが流れてきました。

www.4gamer.net

内容を読むと、

Radeon Instinct 16/18 は 半精度浮動小数点数(FP16)に対応しているようです。まだ発表しただけですので、実際に手に入るのは先になるでしょうが、ディープラーニング競争がますます加速している感があります。

Mac は 基本 AMDGPU を使用しているようなので(すみませんよく知りません。)これまで GPGPU をするにはまずは Linux だったのかもしれませんが、Mac ユーザーもますます参戦というところでしょうか。よく分かりませんすみません。

 

少し前には、Google機械学習ライブラリ、TensorFlow が Windows に native 対応となりました。Windows 陣営(?)にも Deep Learning が普及していくところなのでしょうか。

tilfin.hatenablog.com

 

話は FP16 に戻りますが、Nvidia 陣営も、現行の Pascal アーキテクチャで FP16 を用いたディープラーニングに対応との話がありました。実際には、お値段百万円とかの TESLA p100 が FP16 に対応しているようですが、一般消費者(ゲーマー)向けの GeForce GTX 1000 系では対応していないようです。

studylog.hateblo.jp

 

さて、そうすると GPU をどうするか。

FP16 に対応しているなら、RAM 消費が半分、計算速度が 2倍(期待値)。

しかし対応していないなら、先代の Maxwell アーキテクチャGeForceでも良い気が。一方、現行モデルで性能向上と消費電力低減が進み、RAM の量も増えており、できれば 1000 系かなと思います。

 

PC は

 電源の強化された、ゲーミングデスクトップ

が良いのではと考えています。

GPU を 2枚刺しにする可能性があるので、できれば電源と冷却には余裕を持ちたいところです。

FP16 のような GPU の発展が予想されるので、GPU を買い換えられるデスクトップがベターでしょう。

 

GPU について、現行の GeForce GTX 1000 系は、1050, 1060, 1070, 1080, TITAN の 5機種があり、TITAN が最上位のようです。同一モデルでも複数社が販売、製造しており、RAM の量に違いがあるようで。

 

1070 と 1080 で RAM 8GB を積んでいるようです(それぞれ4.5万円、6.5万円~)。RAM がどの程度必要なのか分からないのですが、医用画像は無駄に(?)データが大きい。DICOM形式ですと、1回の検査で 1GB 超えることも稀ではありません。RAM 不足で走らないと困ります。余裕は持っておきたい。

Desktop PC では ノートPC と違い、 GPU 2枚刺しができます。GeForce GTX 1070/1080 では、2枚刺しで RAM 16GB まで増やせます。

 

16GB がどの程度のものなのか。計算に特化した GPU である、TESLA シリーズでも、RAM 16GB 以下のモデルがあります。前述の p100 では 16GB です。最大でも 24GB ですので、初心者は 16GB 見込んでおけば大丈夫だろうとの目論見です(24GBモデルは80万円~なり)。

 

GeForce GTX 1080 の上位機種である GeForce GTX TITAN は RAM 12GB を積んでいますが、1枚 15万円~です。おぉぉお高い…。

 

逆に下位機種の 1060 は RAM 6GB で 2.5万円~。2枚刺しで12GB 5万円。むしろ初心者はこっちという気もします。 

1050 は 4GB 1.5万円〜。

 

これらを買って、次期モデルまで待つという手もあります。AMDGPGPU に参戦してきますと、Nvidia もうかうかしていられないでしょう。GeForce GTX 1100(?)系が FP16 対応してくれたら間違いなく買いなのですが---。

今回検索した範囲では、次期モデルのニュースリリースなど見つけられませんでした。

 

将来的に  GPU の買い替えは仕方ないですが、高い商品なので出来れば避けたい訳で…

 

AFNI を Windows10 にインストールする。

AFNI を Windows 10 にインストールできました。以前は一部パッケージがインストールできませんでしたが、ようやく解消。

備忘録も兼ねて記載します。

pmonty.hatenablog.com

Bash on Ubuntu on Windows を使わず、Cygwin を使っていれば、とっくにインストールできていたのかもしれませんが・・・ Cygwin を使ったことがないため、ご存じの方がいたら教えてください。 

 

 

afni は強力な画像解析ソフトウェア。

ROI/VOI 書きや pixel-by-pixel の信号強度取得、複数画像の registration、複数画像の計算(add/subなど)、gaussianフィルター、その他、様々な機能を有しており、医用画像解析に極めて有用です。

 

なお、もともとは fMRI 解析ソフト。

 

インストール方法はこちら。

1.1.2. The essential system setup for: Ubuntu Linux — AFNI, SUMA and FATCAT: v16.3.09

Ubuntu14 ではコピペでインストール可能ですが、Bash on Ubuntu on Windows では、コピペするだけではエラーが出てしまいます(ちなみに、Ubuntu16 へのインストールを試したところ、一部エラーがでましたので、まだ version 14 を使う方が)。

 

注意点は

 ※Windows10にインストールされる bash は、Ubuntu 14 版

 ※tcsh がインストール出来ないので、zsh で代用する。

です。

 

まず、必要なソフトをインストールします。tcshがインストール出来ないので、代わりに zsh をインストールします。

 

sudo apt-get install -y zsh libxp6 xfonts-base python-qt4             
                        libmotif4 libmotif-dev motif-clients           
                        gsl-bin netpbm gnome-tweak-tool libjpeg62
sudo apt-get update

 

また、次のページを参考に、Xming をインストールします。

www.nemotos.net

上記のページでは、FSL のインストール手順が詳細に解説されています。FSL も使う可能性があるので、上記ページに従ってインストールしておくと良いです。

ちなみに、今後、Bash on Ubuntu on Windows のアップグレード(Ubuntu 14 から 16 へ)が予定されています。 Ubuntu 16 にインストールする場合は libmotif4 がインストールできません。代わりに libmotif-common でもインストールしておけばうまくいくだろうと思います。

 

sudo apt-get install -y zsh xfonts-base python-qt4                    \
                        libmotif-common libmotif-dev motif-clients           \
                        gsl-bin netpbm gnome-tweak-tool libjpeg62
sudo apt-get update
sudo ln -s /usr/lib/x86_64-linux-gnu/libgsl.so /usr/lib/libgsl.so.0
sudo dpkg -i http://mirrors.kernel.org/ubuntu/pool/main/libx/libxp/libxp6_1.0.2-2_amd64.deb
sudo apt-get install -f

 

次に、AFNI をインストールします。tcsh を使えないので、代わりに zsh を使います。

zsh @update.afni.binaries -package linux_openmp_64 -do_extras

ここでリブートが必要ですが、rebootコマンドを受け付けてくれないので、exitで代用します。

exit
# bash からログアウトします。
exit
# コマンドプロンプトからログアウトします。

[Windowsキー]+x, c
# コマンドプロンプトを起動します。
bash
# Bash on Ubuntu on Windows を起動します。

次に R のインストールです。tcshzsh に変えます。

export R_LIBS=$HOME/R
mkdir $R_LIBS
echo 'export R_LIBS=$HOME/R' >> ~/.bashrc
curl -O https://afni.nimh.nih.gov/pub/dist/src/scripts_src/@add_rcran_ubuntu.tcsh
sudo zsh @add_rcran_ubuntu.tcsh
rPkgsInstall -pkgs ALL

しかし、インストール出来ませんでしたので、

sudo apt-get update
rPkgsInstall - pkgs ALL
試したところ、無事インストールできました(何が問題だったのか分かりません)。

 

AFNI、SUMA のプロファイルをインストールします。

cp $HOME/abin/AFNI.afnirc $HOME/.afnirc
suma -update_env

 

なお、Ubuntu 16 では、libxp6がインストールされていないため、suma~ のコマンドでエラーが出ます。このため、libxpをインストールしておきます。

Ubuntu – パッケージのダウンロードに関する選択 -- libxp6_1.0.2-1ubuntu1_amd64.deb

からダウンロード。

cd

cd /Downloads

sudo dpkg -i libxp6 [Tabキー]

にてインストール

その後、

suma -update_env

にてsumaプロファイルをインストールします。

 

 

最後に、無事にインストールできているかシステムチェックをします。

afni_system_check.py -check_all

注意点ですが、このシステムチェックは python 2 系を使用しています(デフォルトでインストールされています)。もし bashpython 3系 をインストールしていますと、このスクリプトは走りません。

 

上記方法で、Ubuntu 16 で AFNI は一応動きはしますが、一部のパッケージ(3dSkullStripなど)のインストールには失敗してしまいます。

私も試行錯誤中ですので、エラーが出なくなったらご報告いたします。

 

python 3 をインストールしていたら、どうすればいいでしょうか?

スクリプトをちょこっと書き換えれば、走ります。

方法は以下の通り。

 

 nano ~/abin/afni_system_check.py

とすると、エディターが立ち上がりますので、一行目の

#!/usr/bin/env python

#!/usr/bin/env python2

に書き換えます。

そして Ctrl + X → Y → Enter

と押して上書き保存します。

 

なお、bash 初期化ついて。

問題が起きた時は初期化して、再インストールが確実です。

「プログラムの追加と削除」からアンインストールすると不具合が出て bash が使えなくなるという報告がありますので、コマンドプロンプトから行ってください。

blog.sfpgmr.net

アンインストールと再インストールは、コマンドプロンプトから。詳しくは下記サイト。

www.atmarkit.co.jp

 

以上です。

 

・・・・・・・

追記

 

来春の Windows 10 のアップデートで、Bash on Ubuntu on Windows が 16.04.1 にアップグレードされるようです。 

qiita.com

えぇぇぇぇぇぇ・・・・

14 は LTS で、まだサポート中じゃないですか・・・

 

や め て く れ ・・・

 

cuda対応GPUの選択 値段と性能、消費電力の比較

ディープラーニングを行うのに、GPU の付いた PC が必須のようです。

 

CUDA に対応した nvidia 製の GPU を選ぶわけですが、日本語で検索すると、

CUDAを使用可能なGPU製品 - NVIDIA

「最近の製品は CUDA?に対応してないの?」

 

と不安になります。

 

が、英語のページですとそのようなことはなく、

 

developer.nvidia.com

 

最近の GPU も、CUDA 使えることがわかります。

 

nvidia の製品ラインナップでは、

 TESLA

 Quadro

 Geforce

 NVS

などがありますが、(初心者は)どれを選ぶべきなのか・・・

 

まず TESLA は値段が高く、表記されている Computing Capability も低めなので、初心者には向いてないと思います。

 

手の届く QuadroGeforce , デスクトップ用で性能(compute Capability)別に、値段と RAM の搭載量を比較します。

 

Compute Capability 6.1

 Quadro

    P5000                (29万円, RAM 16GB),

    P6000                (74万円, RAM 24GB)

 GeForce

    GTX1050-1080, (1万3000円 2GB -7万円 8GB)

    TITAN                 (25万円 12GB)

  ※値段はAmazon.co.jp調べ。安めのものを選択。アクセスは2016年12月6日

 

Compute Capability 5.2

 Quadro

    M2000          (5万6千円 4GB

    M6000 24GB(61万円 24GB)

 GeForce

    GTX950-980 (1万6千円 2GB - 4万円 4GB)

    TITAN X        (23万円 12GB)

 

Compute Capability 5.0

 Quadro

    K620              (2万円 2GB),

    K1200             (4万円 4GB)

 GeForce

    GTX750/750Ti (1万円 2GB)

 

 

比較によって、以下のことが分かりました。

 RAM 1GB あたり、だいたい 1万円。

   実際には 5000円~3万円。

 GeForce の方が安い。

 RAM は Quadro で多い。

 

なお、

 値段の高い製品でも、Compute Capability が低い製品もあるようです(例えば GeForce Titan Z の 3.5 60万円 RAM 12GB)。CUDA 目的なら、避けたほうが良いのかもしれません。

 Compute Capability がどの程度、性能を反映しているのかはわからないのですが。

 

 

「画像を使うので RAM 多め」ということで選び、値段も加味すると

   Quadro M6000 24GB,   CC5.1,   61万円    RAM   24GB    (250W, 消費電力)

  GeForce1080,                CC 6.2,    7万円    RAM    8GB      (180W)

  GeForce1050Ti,             CC 6.2     2万円    RAM     4GB      (75W)

  Quadro K1200,              CC 5.0,    4万円     RAM     4GB      (45W) 

  GTX750/750Ti               CC 5.0,    1万円     RAM     2GB      (60W)

 

 値段と性能のバランスGeForce 1050 Ti が良さそうです。時々使うのなら、これが良さそうです。性能も CC 6.2 とトップクラス。メモリーも 4GB あります。

 電気代で選べば、低消費電力の Quadro K1200 が狙い目かと。長時間動かしっぱなしにするような場合は、電気代も重要と思います。

 試しに使ってみるだけなら、値段の割に性能が高い GTX750/750Ti (1万円 2GB)が良さそうです。将来必要となった時に、もっと良いものを購入するパターンです。

 

 私のように医用画像を扱う場合、医用画像はデータ量が大きいですので、

   Quadro M6000 24GB ,    (61万円,    CC 5.1,    24GB,    250W)

 または

   Quadro P6000                 (70万円,    CC 6.2,     24GB,    250W)

 を 将来的には欲しいですね。高いですけど。

 

 GeForce1080 4枚で同じ RAM 24GB を実装すると、消費電力が 720W ! にもなってしまいます。

 

 機械学習のブログでは GeForce を使っているのが目につきましたが、調べて合点がいきました。カードの値段が安いんですね。

 

 最後になりますが、Quadro M6000 24GB はアメリカアマゾンにて4899ドル、約50万円(! 日本より10万円も安い!!)で販売されておりました。

 日本でも、安くなるといいですね。