あさのひとりごと

3日坊主にならないように、全力を尽くします。 記事は個人のひとりごとです。所属する組織の意見を代表するほど、仕事熱心じゃないです。

オイラーの公式は素敵ですねという話

数値流体力学で私が好きなものの1つに複素速度ポテンシャルがありますが、流体に限らず力学の世界では「オイラーの公式」をあたりまえのように使います。

このオイラーの公式は、ものすごくシンプルなのですが大変ロマンチックなので「美しい数式」としても有名です。

$$
e^{i x}=\cos x+i\sin x
$$



前提知識

オイラーの公式の素敵さを知るために必要な前提知識は、以下の通りです。

オイラーeとは

オイラー数とは、自然対数の底eのことです。その値は


e = 2.71828 18284 59045 23536 02874 71352 …
と続く超越数です。たくさんの偉い人が、オイラー数について詳しい説明をされているので、ググってそちらを読んでください。

虚数iとは

虚数とは、実数ではない複素数のことです。
たくさんの偉い人が、虚数*1について詳しい説明をされているので、ググってそちらを読んでください。

正弦余弦\sin x / \cos xとは

中学校の数学でおなじみの\sin x/\cos xです。たくさんの偉い人が、、、


これ以外にも、微分とは?も知っておく必要があります。
しかし、高校までの数学ですべて習っている範囲だとおもいます。

オイラーの公式を導出しよう!

オイラーの公式はいくつかの方法で導出できるようですが、ここは解析学で!

f\left( x\right)x=0を含む区間微分可能で、かつn\rightarrow \inftyのとき次の式が成り立ちます。


f\left( x\right) \fallingdotseq  f\left( 0\right) +f'\left( 0\right) x +\dfrac {f''\left( 0\right) } {2!}x^{2}+\dfrac {f'''\left( 0\right) } {3!}x^{3}\ldots+\dfrac {f^{n}\left( x\right) } {n!}x^{n}  \tag{1}

これはテイラー展開とよばれるもので、一般の関数 f(x)多項式で近似する方法です。流行りの機械学習でもよく登場します。



まず、オイラーの公式の左辺を考えます。

f\left( x\right) =e^{i x}を式(1)に代入すると


\begin{eqnarray}
e^{ix} &=& 1 + \frac{ix}{1!} + \frac{(ix)^2}{2!} + \frac{(ix)^3}{3!} + \frac{(ix)^4}{4!} + ... \tag{2}
\end{eqnarray}

がなりたちます。

ここで、 i^2 = -1なので、式(2)は

\begin{eqnarray}
e^{ix} &=& 1 + i\frac{x}{1!} - \frac{x^2}{2!} -i \frac{x^3}{3!} + \frac{x^4}{4!} + ... \tag{3}
\end{eqnarray}
となります。



次に、右辺を考えます。

f\left( x\right) =\cos xを式(1)に代入すると


\begin{eqnarray}
\cos x &=& 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} ... \tag{4}
\end{eqnarray}

f\left( x\right) =\sin xを式(1)に代入すると


\begin{eqnarray}
\sin x &=& x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \frac{x^9}{9!} ... \tag{5}
\end{eqnarray}
がなりたちます。



ここで、式(4)と式(5)をふまえて、式(3)をしっかり見つめます。

そして、整理します。

すると、、、、なんとなんと


\begin{eqnarray}

e^{i x} &=& 1 + i\frac{x}{1!} - \frac{x^2}{2!} -i \frac{x^3}{3!} + \frac{x^4}{4!} + ... \\\
&=& (1 - \frac{x^2}{2!} + \frac{x^4}{4!} - ...) + i(x - \frac{x^3}{3!} + \frac{x^5}{5!} - ...)  \\\

e^{i x} &=& \cos x+i\sin x
\end{eqnarray}


実数の世界では全く他人の指数関数と三角関数が、、、、、

実は虚数の世界を通じてつながっていたというロマンチックさ♡

f:id:dr_asa:20170908161854j:plain

*1:大事なのは、妄想癖

物理空間から計算空間への座標変換

日々生活していると、2次元での物理空間から計算空間への座標変換をしたくなるときがあります。

なので、備忘録として。


物理空間 (x,y,t)デカルト座標系の計算空間 (\xi, \eta ,\tau)写像する場合
計算空間での格子間隔を \Delta \xi = \Delta \eta =1 とすると、 f(x,y,t) \tauに関する微分は次の式になります。

 
\dfrac {\partial f} {\partial \tau } = \dfrac {\partial f} {\partial t }\dfrac {\partial t} {\partial \tau } + \dfrac {\partial f} {\partial x }\dfrac {\partial x} {\partial \tau } + \dfrac {\partial f} {\partial y }\dfrac {\partial y} {\partial \tau }

同様にして、 \eta
 
\dfrac {\partial f} {\partial \eta } = \dfrac {\partial f} {\partial t }\dfrac {\partial t} {\partial \eta } + \dfrac {\partial f} {\partial x }\dfrac {\partial x} {\partial \eta } + \dfrac {\partial f} {\partial y }\dfrac {\partial y} {\partial \eta }


同様にして、 \xi
 
\dfrac {\partial f} {\partial \xi } = \dfrac {\partial f} {\partial t }\dfrac {\partial t} {\partial \xi } + \dfrac {\partial f} {\partial x }\dfrac {\partial x} {\partial \xi } + \dfrac {\partial f} {\partial y }\dfrac {\partial y} {\partial \xi }


行列で表すと、こう。


  \left[
    \begin{array}{r}
      \dfrac {\partial f} {\partial \tau }  \\
      \dfrac {\partial f} {\partial \eta }  \\
      \dfrac {\partial f} {\partial \xi } 
    \end{array}
  \right] = 

  \left[
    \begin{array}{rrr}
      1 & x_{\tau} & y_{\tau} \\
      0 & x_{\eta} & y_{\eta} \\
      0 & x_{\xi} & y_{\xi}
    \end{array}
  \right]
  \left[
    \begin{array}{r}
      \dfrac {\partial f} {\partial t }  \\
      \dfrac {\partial f} {\partial x }  \\
      \dfrac {\partial f} {\partial y } 
    \end{array}
  \right]



逆の変換式は (x,y,t) (\eta,xi,\tau)を入れ替えるとよいので、次の式です。


  \left[
    \begin{array}{r}
      \dfrac {\partial f} {\partial t }  \\
      \dfrac {\partial f} {\partial x }  \\
      \dfrac {\partial f} {\partial y } 
    \end{array}
  \right] =

  \left[
    \begin{array}{rrr}
      1 & x_{\tau} & y_{\tau} \\
      0 & x_{\eta} & y_{\eta} \\
      0 & x_{\xi} & y_{\xi}
    \end{array}
  \right]
  \left[
    \begin{array}{r}
      \dfrac {\partial f} {\partial \tau }  \\
      \dfrac {\partial f} {\partial \eta }  \\
      \dfrac {\partial f} {\partial \xi } 
    \end{array}
  \right]

ここで、、、

座標 (x,y)と座標 (\eta,\xi)ヤコビアン Jとすると


J = x_{\eta}y_{\xi}-x_{\xi}y_{\eta}

で、


  \left[
    \begin{array}{r}
      \dfrac {\partial f} {\partial t }  \\
      \dfrac {\partial f} {\partial x }  \\
      \dfrac {\partial f} {\partial y } 
    \end{array}
  \right] =

 \dfrac {1} {J }
  \left[
    \begin{array}{rrr}
      J & (-x_{\tau}y_{eta}+y_{\tau}x_{\eta}) & (x_{\tau}y_{\xi}-y_{\tau}x_{\xi}) \\
      0 & y_{\eta} & -y_{\xi} \\
      0 & -x_{\eta} & x_{\xi}
    \end{array}
  \right]
  \left[
    \begin{array}{r}
      \dfrac {\partial f} {\partial \tau }  \\
      \dfrac {\partial f} {\partial \eta }  \\
      \dfrac {\partial f} {\partial \xi } 
    \end{array}
  \right]

です。


境界が変化しない場合を考えると、


f_x = \dfrac{1}{J}(y_{\xi}f_{\eta}-y_{\eta}f_{\xi}) \\
f_y = \dfrac{1}{J}(-x_{\xi}f_{\eta}-x_{\eta}f_{\xi}) \\

です。

クランクニコルソン法とフォンノイマンの安定性

計算の待ち時間の備忘録として。


空間における2階の微分を陽解法による差分と陰解法による差分の算術平均で表したものが、クランクニコルソン法です。



\dfrac {\partial u} {\partial t}=\alpha \dfrac {\partial ^{2}u} {\partial x^{2}}


これを陽解法と陰解法の差分の算術平均を表します。


\dfrac {u_{i}^{n+1} - u_{i}^{n}}{\Delta t} =\dfrac{\alpha}{2} \left( \dfrac {u_{i-1}^{n+1} -2u_{i}^{n+1}+u_{i+1}^{n+1}} {\left( \Delta x\right)  ^{2}} + \dfrac {u_{i-1}^{n} -2u_{i}^{n}+u_{i+1}^{n}} {\left( \Delta x\right)  ^{2}} \right)


クランクニコルソン法の陽解法と陰解法の算術平均を重み \thetaによる平均の例だとすると次の一般化が可能。


\dfrac {u_{i}^{n+1} - u_{i}^{n}}{\Delta t} =\alpha  \left( \dfrac {u_{i-1}^{n+1} -2u_{i}^{n+1}+u_{i+1}^{n+1}} {\left( \Delta x\right)  ^{2}} +( 1-\theta ) \dfrac {u_{i-1}^{n} -2u_{i}^{n}+u_{i+1}^{n}} {\left( \Delta x\right)  ^{2}} \right)

ここで \theta=0のとき陽解法、 \theta=1のとき陰解法、 \theta=\dfrac{1}{2}のときクランクニコルソン法になります。



で、フォンノイマンの安定性解析は、差分スキームの安定性を判断するために使われますが、、、、
近似解 u_{N}、厳密解 u_{E}、誤差 \epsilonとすると



u_{N} = u_{E} +  \epsilon

が成り立ちます。
で、次の1次元熱伝導方程式の陽解法の近似式の安定性をみてみます。

 
\dfrac{u_{j}^{n+1} - u_{j}^{n}}{\Delta t}= \alpha \dfrac{u_{j-1}^{n}-2u_{j}^{n} + u_{j+1}^{n}}{(\Delta x)^2}


ここで誤差 \epsilonについては、次の式が成り立ちます。

\dfrac{\epsilon_{j}^{n+1}-\epsilon_{j}^{n}}{\Delta t} = \alpha \dfrac{\epsilon _{j-1}^{n}-2\epsilon _{j}{n} + \epsilon _{j+1}^{n} }{(\Delta x)^2}

誤差 \epsilonは離散化された複素フーリエ級数をつかって次のように表すことができます。


\begin{eqnarray}
\epsilon _{j}^{n} = \sum _{m=-\infty }^{\infty } C_{m}^{n}e^{i\beta _{m} j \Delta x}, x=j\Delta x , t= n \Delta t , \beta_{m}=\dfrac{m \pi}{l}
\end{eqnarray}

誤差 \epsilonが時間ともに増幅しないためには、ある時刻における誤差が次の時間ステップで大きくならなければよいので、、、



G = \dfrac{\epsilon _{j}^{n+1}}{\epsilon _{j}^{n}} = \dfrac{C_{m}^{n+1}}{C_{m}^{n}}
としたとき、 \left| G\right| \leq 1なら安定、そうでなければ不安定です。


誤差の近似式を整理すると次の式になります。

C_{m}^{n+1} = \left\{  2\dfrac{\alpha \Delta t}{(\Delta x)^2} \left( \dfrac{e^{i \beta _{m}\Delta x} + e^{-i\beta _{m}\delta x}}{2} -1  \right)  \right\} C_{m}^{n}


ここで、

s = \dfrac{\alpha \Delta t}{(\Delta x)^2}

として、次のオイラーの公式と、、、、、

\dfrac{e^{i\beta _{m}\Delta x} + e ^{-i\beta _{m}\Delta x}}{2} = \cos (\beta _{m}\Delta x)

半角公式を利用すると、、、、、、

\dfrac{1-\cos(\beta _{m}\Delta x)}{2} =  \sin^2 \left( \dfrac{\beta_{m}\Delta x}{2} \right)


次の式が得られます。


G = -4 s \sin ^2 \left(  \dfrac{\beta _{m}\Delta x}{2}  \right) +1


安定のためには、次が成り立てばよさげ。


`-1 \leq -4 s \sin ^2 \left(  \dfrac{\beta _{m}\Delta x}{2}  \right) +1 \leq 1




みたいな計算をするために必要な数学の知識は

あたりで、、、、

必要な数値解析の知識は

  • 離散化
  • 陽解法/陰解法
  • 誤差/安定の概念

って感じっぽい。

暑い。
もう、暑くて暑くて暑くてどうしようもない。

機械学習を勉強するときはDockerを使うと便利

いまお仕事の関係で、機械学習の教科書的な書籍を読んだりオンライン講座を受講したりしながらサンプルやチュートリアルを動かして勉強しています。

機械学習を勉強するときは、Pythonの環境を構築し、JupyterNotebookを使って、実際に手と頭を動かしながら行うのが効率的です。が、アルゴリズムの理論そのものの理解がすでにしんどい上、過学習対策のための正則化、汎化性能の評価、クロスバリデーション、不均衡データや少ないデータはどうすればいいか、などなどいちいち難しいことを数多く勉強しなければなりません。

その上、、、、機械学習での学習は、1度やれば終わり!ではなく、パラメータチューニングしたり、データを増やしたり加工したりしながら、繰り返しなんども行う必要があります。一見ビジネス寄り&アカデミックな雰囲気を醸し出していますが、実際のところは、非常に泥臭い作業のオンパレードです。

が、、、、、

環境構築が、めんどくさい。

ライブラリのバージョンの違いで実装が・・・というのものも多々あります。

アルゴリズムや実装の確認などは手元のPCでゆっくり考えてデバッグしながらやるとして、、、 いざ、実際に大量の画像データなどを使ってモデルを生成しよう!となると、 クラウドの強いインスタンスを使うのが便利なので、手元のPCの環境が、そっくりそのままクラウド上で動いてくれると、わりと幸せです。

ということで、機械学習を勉強するためDockerを使っているので、簡単にご紹介です。

1. Dockerとは

Dockerはアプリの実行環境をまとめて「コンテナ」として管理できるツールです。Dockerをつかうとこんなことができます。

f:id:dr_asa:20170821105634p:plain

OSやバージョンも指定できますので、Docker上で作成した環境と同じものを、(基本的には)どこででも実行できます。

Dockerでは、「Dockerイメージ」と呼ばれるものに、実行環境に必要なディレクトリ/ファイルをDockerイメージにまとめます。このまとめたDockerイメージを「リポジトリ」を介してアップロード(push)/ダウンロード(pull)して環境を移植します。

Dockerの公式リポジトリは「DockerHub」と呼ばれ、アカウント登録さえすれば、無償でも利用可能です。

https://hub.docker.com/

2. Dockerのインストール

Dockerを使って環境を構築するには、使っているPCや学習させるためのマシンに、それぞれDockerをインストールします。

2.1 MacOSへのインストール

MacOS向けには「Docker for Mac」が提供されています。 以下の公式サイトからモジュールをダウンロードして、指示に従ってインストールします。

Docker For Mac | Docker

2.2 WindowsPCへのインストール

WindowsPC向けには、「Docker for Windows」が提供されています。このDoker for Windowsは以下の条件を満たすマシンが必要です。

Docker For Windows | Docker

なお、Hyper-Vは、Windows標準の仮想化環境です。こちらに環境の確認方法をまとめました。

いや、Windows7だし。という方は、「Docker Toolbox」というツールが提供されていますので、そちらを使って下さい。

Docker Toolbox | Docker

が、Windows7マイクロソフトが2009年に出したOSです。2009年に生まれた赤ちゃんは、もう小学校2年生です。この夏休みに、Scratchを使って自作ゲームを作っている子もいるかもしれません。IT業界に身を多く大人のみなさんは、Azure/GCP/AWSインスタンスを使うか、Windows10 Proに買い替えるのがおすすめです。

2.3 Linuxへのインストール

ディストリビューションによって、Dockerのインストール手順が違いますので、公式サイトのとおり導入してください。

Docker for CentOS Distribution | Docker

Docker for Debian | Docker

Docker For Ubuntu | Docker

あと、クラウドで利用するときはこちらです。

Docker for AWS | Docker

  • Azure

Docker for Azure | Docker

3.機械学習用Dockerコンテナの起動/停止

Dockerでは、DockerイメージをもとにしてDockerコンテナを起動します。

機械学習でよく使うライブラリ群をインストールしたDockerイメージを作成したので、まずはこれをお試しで起動してみます。

ライブラリ 説明
Python 3.6 Python3.6実行環境
TensorFlow 機械学習ライブラリ
scikit-learn 機械学習ライブラリ
keras TensorFlowやTheanoで実行できるニューラルネットワークライブラリ
jupyter 対話型Python実行環境
scipy 科学計算用ライブラリ
simpy 離散シミュレーションライブラリ
matplotlib グラフ描画ライブラリ
numpy 数値計算ライブラリ(ベクトル/行列計算など)
pandas データ解析ライブラリ
plotly オシャレなグラフ描画ライブラリ
sympy 符号数学ライブラリ
mecab-python3 形態素解析エンジン
librosa 音声信号処理ライブラリ
Pillow 画像処理ライブラリ
h5py HDF5 フォーマットファイル
google-api-python-client GCPを使うためのAPI

このDockerイメージ「asashiho/ml-jupyter-python3」は、DockerHubで公開していますのでそれをもとに、次のコマンドで「ml-container」という名前のDockerコンテナを起動します。 コマンドのpオプションは、コンテナで転送するポート番号を指定してます。 ここでは、JupyterNotebookが8888番ポートを使っています。

$ docker run -p 8888:8888 --name ml-container -it asashiho/ml-jupyter-python3

コンテナは、[Ctrl]+[C]で停止できます。

また、バックグラウンドで動いている場合は、次のコマンドでコンテナを起動/停止できます。

$ docker container start ml-container
$ docker container stop ml-container

コンテナは、次のコマンドで削除できます。

$ docker container rm ml-container

なお、コンテナを削除するとデータも消えますので、データを消したくないときは docker runコマンドでコンテナを起動するときに、Dockerのホストマシン(お使いのPCやクラウドインスタンス)をディレクトリをvオプションでマウントしてください。

4. JupyterNotebookを使う

Dockerコンテナが起動できたら、ブラウザから以下のアドレスにアクセスしてJupyterNotebookを使います。 アクセス先のURLは、docker runコマンドを実行したときのコンソールに表示されます。

クラウドインスタンスの場合は、以下のアドレスでアクセスできます。

http://DockerホストのIPアドレス:8888/?token=<your token>

MacOSまたはWindowsPCのローカル環境の場合は、以下のアドレスでアクセスできます。

http://localhost:8888/?token=<your token>

こんな感じです。

f:id:dr_asa:20170821132838p:plain

5. 環境をカスタマイズしたくなったときは

Dockerイメージは「Dockerfile」という定義ベースのファイルで実行環境の構成を管理しています。

このファイルをカスタマイズし、Dockerfileをビルドすることで、任意のDockerイメージを作成できます。たとえば、Pythonのバージョンを変えたい、TensorFlowを最新にしたい、足りないライブラリがあった、など。

今回お試しで使ったDockerイメージのもとになるDockerfileを公開してますので、ご参考までに。

github.com

Dockerfileのビルドは、docker buildコマンドを使いますが、DockerHubとGitHubを連携させると「Automated Build」という機能が使えます。

これは、GitHubへのpushをトリガーにして、DockerHubでDockerイメージを自動でビルドできる機能です。

f:id:dr_asa:20170821112347p:plain

ビルドに時間はかかりますが、なかなか便利です。

無理のない、よい機械学習ライフを。

WindowsでのJupyter演習環境の準備手順

このエントリは、enakaiさん著書の「ITエンジニアのための機械学習理論入門」を読んで、私がWindowマシンで勉強するための手順をまとめたエントリです。こちらのブログを参考にしています。

www.amazon.co.jp

もし環境構築に関して不明点があれば、私@_dr_asaまでお問い合わせください。

1. Windows環境の確認

書籍のサンプルコードは、Dockerコンテナ上で動作するJupyterNotebookで公開されています。 WindowsでDockerを利用する場合は、次の2つのツールがDocker社より提供されていますのでいずれかを選んでインストールしてください。

Dockerは、Linuxのコンテナ技術をベースとしたプロセス実行環境のため、Dockerを動作させるためにはLinux OS(のコンテナ)が必要でした。 そのため、WindowsではLinuxコンテナを直接実行させることができないため、Windows上にOracle VirtualBoxという仮想化環境上でLinuxを動作させていました。これがWindows向けに提供されていた「Docker Toolbox」です。

Windows 8以降は、OS標準の仮想化環境としてHyper-Vがリリースされました。この、Hyper-Vを使ったDockerが「Docker for Windows」です。

ただし、この「Docker for Windows」を利用するには、以下の3つの条件を満たす必要があります。

まず、Windowsメニューの[システム]をクリックすると、利用している端末の詳細が確認できますので、「エディション」と「システムの詳細」で、Windows 10 ProまたはEnterprise(64bit)であることを確認してください。

次に、VirtualBoxVMWare Playerなどの仮想環境をPCからアンインストールします。 最後、にWindowsメニューの[コントロールパネル]―[プログラムと機能]―[Windowsの機能の有効化または無効化]をクリックし、[Hyper-V]を有効にしてください。設定変更にはOSの再起動が必要です。

[:320]

なお、上記の条件を満たさない端末をお使いの方、またはWindowsでのDockerの環境構築に不慣れな方は、「3.Docker Toolboxのインストール手順」を参照してインストールください。ただし、マシンスペックが低いクライアントPCでは、Dockerが正しく動作しない場合もありますので、こちらの手順パブリッククラウドを使ったDocker環境を構築することをお勧めします。

2. Docker for Windowsのインストール手順

はじめに、Dockerの公式Webサイト(https://www.docker.com/docker-windows)から、Windows用のDockerをダウンロードします。「Download Now from Docker Store」のリンクからダウンロードページを開いて、「Get Docker」をクリックすると、インストーラーファイル InstallDocker.msiがダウンロードできます。InstallDocker.msiをダブルクリックし、指示にしたがって、インストールを完了させてください。インストールが完了するとDockerが自動的に起動します。

インストールが完了してDockerが起動すると、Windwosタスクバーにクジラのアイコンが表示されます。ここを右クリックし、Dockerの管理メニューを表示して、[Settings]を選択した後、[Advanced]のタブから[Memory]を4GB以上に設定します。「CPUs」の指定は任意ですが、サンプルコードの実行時間が極端に長くならないよう、4以上に設定することをおすすめします。最後に[Apply]を押して、設定変更を反映します。Dockerが再起動されます。

次に、WindowsマシンとDockerコンテナでドライブを共有する設定を行います。Dockerの管理メニューを表示して、[Settings]を選択した後、[Shared Drives]のタブから共有したいドライブを選択し、[Apply]を押して、設定変更を反映します。ここでは、Cドライブを共有しています。

3. Docker Toolboxのインストール手順

「Docker for Windows」が利用できない場合は、「Docker Toolbox」をインストールします。

Dockerの公式Webサイト(https://www.docker.com/products/docker-toolbox)から、Windows用のDocker Toolboxをダウンロードします。「Download」をクリックすると、インストーラーファイル DockerToolbox.exeがダウンロードできます。DockerToolbox.exeをダブルクリックし、指示にしたがって、インストールを完了させてください。Docker Toolboxの動作に必要なOracle VirtualBoxもインストールされます。

インストールが完了し、デスクトップに作成された「Docker Quickstart Terminal」アイコンをダブルクリックすると、Dockerの環境が構築されます。

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

Welcome to Git (version 1.9.5-preview20150319)


Run 'git help git' to display the help index.
Run 'git help <command>' to display help for specific commands.

$

これでDockerのインストールが完了しました。

4. Dockerコンテナの起動

Windowsコマンドプロンプトを開いて、下記のコマンドを実行すると、Docker Hubからイメージをダウンロードして、コンテナ上でJupyterが起動します。

> mkdir c:\data
> docker run -itd --name jupyter -p 8888:8888 -p 6006:6006 -v /c/data:/root/notebook -e PASSWORD=passw0rd enakai00/jupyter_tensorflow:latest

「-e PASSWORD」オプションには、WebブラウザーからJupyterに接続する際の認証パスワードを指定します。この例では、「passw0rd」を指定しています。この手順でコンテナを起動した場合、Jupyterで作成したノートブックのファイルは、Cドライブの下にある「data」フォルダーに保存されます。

Windowsブラウザーを起動して、http://localhost:8888にアクセスすると、ログイン画面が表示されるので前述のパスワードを入力してログインします。なお、Docker Toolboxのときはhttp://192.168.99.100:8888にアクセスしてください。

なお Windowsを再起動した場合は、コマンドプロンプトから下記のコマンドを実行して、コンテナを再度、起動してください。

> docker stop jupyter
> docker start jupyter

5. JupyterNotebookの確認

Jupyterにログインすると「ノートブックファイル」の一覧画面が表示されますが、今はまだノートブックファイルはありません。

右上のプルダウンメニューから「New」→「Python 2」を選択すると新しいノートブックが開きます。

ノートブック上では、セルにプログラムコードを入力して、「▶」ボタン、もしくは [Ctrl] + [Enter] で実行すると結果が表示されます。マークダウン形式のセルには説明文を記載することができます。

ノートブック全体を最初から実行し直す場合は、メニューから「Kernel」→「Restart & Clear Output」を選択して、これまでの実行内容をクリアします。

空のセルで次のコマンドを実行すると、演習用のノートブックがダウンロードできます。

!git clone https://github.com/enakai00/jupyter_ml4se

ノートブックファイル一覧画面でフォルダー「jupyter_ml4se」を開くと、ノートブックファイルが入っています。

「02-square_error.ipynb」のチェックボックスにチェック入れて、画面上部の「Duplicate」を押すと、ノートブックファイルのコピー「02-square_error-Copy1.ipynb」ができます。これをクリックして、ノートブックを開きます。

メニューから「Kernel」→「Restart & Clear Output」を選択して、これまでの実行内容をクリアした後に、メニューから「Cell」→「Run All」を選択すると、すべてのセルが上から順に自動実行されます。すべてのセルが正しく実行されることを確認しておいてください。たとえば、最後の2つのセルでは、次のようなグラフが表示されます。

以上

「Google Cloudではじめるデザイナ/プログラマのためのDocker実践入門」 ハンズオン資料

このドキュメントは、「Google Cloudではじめるデザイナ/プログラマのためのDocker実践入門 」勉強会のハンズオン用資料です。

ハンズオンのスライドはこちらです。 詳細については、こちらを参照してください。 Docs.com: docs.com/asashiho

このハンズオンでは、次の流れでDockerの実行環境を構築していきます。


構築する環境の構成は次の通りです。

1. Dockerイメージ作成

サンプルのダウンロード(2)

$ git clone https://github.com/asashiho/docker-handson.git

サンプルの構成(1)

$ ls docker-handson/

Dockerfile

$ vi docker-handson/v1.0/Dockerfile

Dockerイメージの作成

$ cd docker-handson/v1.0
$ docker build -t docker-sample:v1.0 .

Dockerイメージの確認

$ docker images

やってみよう

$ cd ~/docker-handson/v1.1
$ docker build -t docker-sample:v1.1 .

2.Dockerイメージ公開

プロジェクトIDの設定

$ GCP_PROJECT_ID=$(gcloud config list project --format "value(core.project)")
 
$ echo $GCP_PROJECT_ID

Dockerイメージにtag設定

$ docker tag docker-sample:v1.0 gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
$ docker tag docker-sample:v1.1 gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1

Dockerイメージの公開

$ gcloud docker -- push gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
$ gcloud docker -- push gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1

Dockerイメージ公開の確認

$ gcloud docker -- search gcr.io/$GCP_PROJECT_ID

3. Docker実行環境の構築~仮想マシン1台構成の場合~

Docker実行環境構築

$ docker-machine create --driver google \
  --google-project $GCP_PROJECT_ID \
  --google-zone asia-northeast1-a \
  --google-machine-type n1-standard-1 \
  --google-machine-image https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20161109 \
  webserver

仮想マシンへのログイン

$ cat /etc/redhat-release

Google Cloud利用のための設定

$ export GCP_PROJECT_ID=<ご自身のプロジェクトID>
$ sudo gcloud components update
$ sudo gcloud config set project $GCP_PROJECT_ID

Dockerイメージのダウンロード

$ sudo gcloud docker -- pull gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
$ sudo gcloud docker -- pull gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1

Dockerイメージの確認

$ sudo docker images

4. コンテナの起動~仮想マシン1台構成の場合~

Dockerコンテナの起動

$ sudo docker run -it -p 80:80 --rm --name webserver gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0

Dockerコンテナの動作確認

$ sudo docker run -it -p 80:80 --rm --name webserver gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1

仮想マシンの削除

$ docker-machine stop webserver
$ docker-machine rm webserver

5. Docker実行環境の構築~クラスタ構成の場合~

クラスタ操作のための環境設定

$ cd ~/docker-handson/
$ gcloud container clusters get-credentials web-cluster --zone=asia-northeast1-a
$ kubectl get nodes

コンテナの起動

$ kubectl create -f deployment.yaml 
$ kubectl get pods

サービス設定ファイルの作成

$ cat service.yaml

サービスの起動

$ kubectl create -f service.yaml 
$ kubectl get services

6. コンテナのアップデート~クラスタ構成の場合~

デプロイ設定ファイルの修正

$ kubectl edit deployment/web-container

アップデートの確認

$ kubectl describe deployment/web-container

クラスタの削除

$ kubectl delete service web-service 
$ kubectl delete deployment web-container

おつかれさまでした

Docker on AzureでJavaEE実行環境を構築する手順

はじめに

Microsoftが提供しているクラウドサービスであるAzureを使って、Ubuntuで動くJavaEEによるWebアプリケーションの実行環境をDockerを使って作ってみたいとおもいます。

前提知識

Microsoft Azureは、マイクロソフトクラウドプラットフォーム(PaaS/IaaS)です。WindowsServerだけでなくUbuntuなどのLinuxサーバも動作するオープンなクラウドサービスです。

  • Dockerとは?

Docker(ドッカー)は、仮想化環境でアプリケーションを管理/実行するためのオープンソースのミドルウエアです。Linuxカーネル上で動作するのが特徴です。アプリケーションと実行環境をすべて含めて「Dockerイメージ」にパッケージングして、管理できます。

JavaEEとは、Javaによる大規模Webアプリケーション構築のためのエンタープライズなプラットフォームです。JSF/EJB/JDBC/JNDI/Servlet/JSP/JTA/JAX-RS/CDI/ELなどの技術仕様を総称したもので、、、(続きを読む)

1. JavaEEアプリのwar作成

適当なWebAPSampleという名前のサンプルアプリを作ります。 今回は、動かすだけなのでJSFのひな形そのままな感じのもので。 作成したWebAPSample.warファイルを使ってDockerイメージを作っていきます。

2. Dockerイメージ作成

作成したwarファイルをGlassFishで動かすためのDockerfileを作成します。

なお、Dockerをクライアントにインストールしていないときは、DockerToolboxをダウンロードしてインストールします。

Dockerイメージは、GlassFish公式イメージをベースに作ります。

GlassFishは、オープンソースのWebアプリケーションサーバで、JavaEEの参照実装です。

GlassFishのWeb管理コンソールを使うため、パスワードの設定やセキュリティの設定をして、サービス用の8080番ポートと管理コンソール用の4848番ポートを開放します。

Dockerfileはこんな感じで。

# GlassFishでWebアプリケーションをデプロイする
# 
# ベースイメージの取得
FROM glassfish:4.1-jdk8

# 作成者情報
MAINTAINER 0.1 asashiho@mail.asa.yokohama

# 環境変数の設定
ENV GLASSFISH_HOME /usr/local/glassfish4
ENV PASSWORD glasspass
ENV TMPFILE /tmp/passfile

# 管理者パスワードとセキュリティの設定
RUN echo "AS_ADMIN_PASSWORD=" > $TMPFILE && \
    echo "AS_ADMIN_NEWPASSWORD=${PASSWORD}" >> $TMPFILE  && \
    asadmin --user=admin --passwordfile=$TMPFILE change-admin-password --domain_name domain1 && \
    asadmin start-domain && \
    echo "AS_ADMIN_PASSWORD=${PASSWORD}" > $TMPFILE && \
    asadmin --user=admin --passwordfile=$TMPFILE enable-secure-admin && \
    asadmin --user=admin stop-domain && \
    rm $TMPFILE

# warコンテンツの配置
ADD WebAPSample.war $GLASSFISH_HOME/glassfish/domains/domain1/autodeploy

# ポートの解放
EXPOSE 4848 8080

# glassfishの実行
CMD ["asadmin", "start-domain", "-v"]

このDockerfileと作成したWebAPSample.warを同じディレクトリに置きます。 そして、docker buildコマンドでイメージを作成します。

$ ls
Dockerfile  WebAPSample.war

$ docker build -t asashiho/glassfish .

作成したイメージをDockerHubにアップロードします。

$ docker login
$ docker push asashiho/glassfish

作成が面倒な方は、こちらのDockerイメージを使ってください。 docker-glassfish

3. AzureでのDocker実行環境作成

Azure上でGlassFishコンテナを動かすために、Dockerの実行環境を作ります。 Docker Machineは、Dockerの実行環境を自動生成するためのコマンドです。各種クラウドVMなどに環境を作ってくれます。

Azureだけじゃなくて、AWS/SoftLayer/Rackspace/VirtualBoxなどさまざまな環境にDocker実行環境を自動生成できます。

今回は、docker-machneコマンドで、Azure上にDocker実行環境を構築します。

まず事前準備として、Azureにアクセスするため、証明書を作成します。 こんな感じで。

$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
$ openssl pkcs12 -export -out mycert.pfx -in mycert.pem -name "My Certificate"
$ openssl x509 -inform pem -in mycert.pem -outform der -out mycert.cer

生成した証明書(mycert.cer)を[Azure クラシック ポータル]-[設定]-[管理証明書]-[アップロード]からアップロードします。

これで、準備完了です。

準備が完了したので、いよいよAzure仮想マシン上にDocker実行環境を構築します。 仮想マシン名(docker-asaasa)は任意の名前に変更してください。

$ docker-machine create -d azure \
 --azure-subscription-id="サブスクリプションID" \
 --azure-subscription-cert="mycert.pem" \
 --azure-location "Japan Wast" \
 --azure-username "ユーザ名" \
 --azure-password "パスワード" \
 docker-asaasa

これでAzureの仮想マシン生成&Dockerの環境構築が完了です。 ちゃんと動いているのが分かります。

$ docker-machine ls
NAME             ACTIVE   DRIVER       STATE     URL                                      SWARM
default          -        virtualbox   Running   tcp://192.168.99.100:2376      
docker-asaasa   *        azure        Running   tcp://docker-asaasa.cloudapp.net:2376

4. GlassFishコンテナを動かす

作成したAzure仮想マシンに以下のコマンドでアクセスします。

$ docker-machine env docker-asaasa
$ export DOCKER_TLS_VERIFY="1"
$ export DOCKER_HOST="****"
$ export DOCKER_CERT_PATH="****"
$ export DOCKER_MACHINE_NAME="docker-asaasa"


$ docker-machine ssh docker-asaasa
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

 System information disabled due to load higher than 1.0

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

次のコマンドで、先ほど作成したGlassFishのDockerイメージをダウンロードします。

$ sudo docker pull asashiho/glassfish

Dockerイメージからコンテナを起動します。 ここで、あらかじめAzure仮想マシンのエンドポイントに8080ポートと4848ポートを設定しておいてください。

# コンテナの起動
$ sudo docker run -d -p 8080:8080 -p 4848:4848 asashiho/glassfish

# コンテナの確認
$ sudo docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                        NAMES
6ea4bd4c5368        asashiho/glassfish   "asadmin start-domain"   30 minutes ago      Up 29 minutes       4848/tcp, 8181/tcp, 0.0.0.0:8080->8080/tcp   thirsty_poincare

5. 動作確認

GlassFishでサンプルアプリが動作していることを確認するために、ブラウザから以下のURLにアクセスします。

http://(Azure仮想マシンDNS名):8080/WebAPSample/ docker1.png

6. Azure上のDocker実行環境削除

削除もばさっと。

$ docker-machine stop docker-asaasa
$ docker-machine rm docker-asaasa

今回はAzureで動作させましたが、DockerMachineを使うと、どのクラウドサービスで動かしてもdocker-machineコマンドで一括操作できます。 クラウドごとのCLIは不要です。

まとめ

AzureといえばMicrosoftMicrosoftといえばWindowsMicrosoftといえば.NETなイメージなのですが、Dockerも動くし、UbuntuJavaも動きました。

「ITエンジニアのための機械学習理論入門」のセットアップ手順(Windows10編)

機械学習の基本的な考え方が丁寧に解説されている、ITエンジニアのための機械学習理論入門の実行環境を、Windows10でセットアップする手順をまとめました。

なお、詳細な説明については書籍を参照してください! f:id:dr_asa:20170511090826p:plain

Amazon CAPTCHA

前提環境

項目 説明
ハードウエア Microsoft Surface Pro4
OS Windows10 pro 64bit

セットアップ手順

1.ダウンロード

Enthought Canopyのサイトからダウンロードします。緑の[GetCanopy]ボタンをクリックします。

f:id:dr_asa:20170511090930p:plain

ここで、[Get Sterted with Canopy Express-Free]の[Download]ボタンをクリックします。

f:id:dr_asa:20170511090941p:plain

OSのアーキテクチャに合わせてインストールモジュールを選択します。私の環境では「Windwos」で「64bit」なので次のように選択し、[DOWNLOAD Canopy]ボタンをクリックします。 f:id:dr_asa:20170511090950p:plain

2.インストー

ダウンロードしたcanopy-1.7.4-win-64.msiをダブルクリックしてインストールを開始します。

f:id:dr_asa:20170511091022p:plain

[I accept the terms in the License Agreement]をチェックして[Next]をクリックします。

f:id:dr_asa:20170511091032p:plain

[Next]をクリックします。 f:id:dr_asa:20170511091041p:plain

[Install]をクリックします。

f:id:dr_asa:20170511091107p:plain

インストールが完了したら、[Launch Canopy when setup exits]をチェックして[Finish]ボタンをクリックします。

f:id:dr_asa:20170511091117p:plain

[Continue]をクリックします。

f:id:dr_asa:20170511091128p:plain

[Start using Canopy]をクリックします。

f:id:dr_asa:20170511091137p:plain

インストールが完了しました。

3.環境設定

書籍を参考にして、Githubからサンプルコードを取得します。 取得したzipファイルを作業用フォルダである[ドキュメント]フォルダで展開します。 次のセットアップ用のバッチファイルを実行します。(ファイルのダブルクリックで可)

$ config_win.bat

デスクトップに生成された「PyLab (64-bit)」アイコンを右クリックして、書籍の内容に従って次のように設定します。

f:id:dr_asa:20170511091150p:plain

サンプルの動作確認

デスクトップの「PyLab (64-bit)」をダブルクリックします。

In [1]: ls
 ドライブ C のボリューム ラベルは TIH0111000A です
 ボリューム シリアル番号は 041E-C592 です

 C:\Users\<YourName>\Documents\ml4se のディレクトリ

2016/12/23  12:27    <DIR>          .
2016/12/23  12:27    <DIR>          ..
2015/06/16  13:13               293 config_centos.sh
2015/06/16  17:45               293 config_mac.sh
2015/08/11  20:21               383 config_win.bat
2015/05/21  06:23            18,047 LICENSE
2015/05/21  06:23                68 README.md
2016/12/23  12:27    <DIR>          scripts

サンプルのフォルダに移動します。

In [2]: cd scripts/
C:\Users\<YourName>\Documents\ml4se\scripts

次のコマンドを実行し、最尤推定法による正規分布の推定結果のサンプルを実行します。

In [3]: run 03-ml_gauss.py

別ウインドウでグラフが表示されます。 f:id:dr_asa:20170511091206p:plain

Nの値が増えるにしたがって、推定結果が正解に近づいているのが分かります。

以上

© 2017 ASA.