Windows10設定(MinGW,Mintty)
先日はChocolateyの導入について簡単に示しましたが,結局筆者はプログラミング環境をMinGW(Minimalist GNU for Windows)とMinttyを用いて整えています。
Windowsで使用しているテキストエディタはSublime Text 3ですが,
それはまた後日。
MinGWのダウンロードとインストール
MinGWを下記よりmingw-get-setup.exeをダウンロードしてきて,
インストールを開始しましょう。sourceforge.net
インストールまでの詳しい流れは下記サイトが分かりやすかったので,下記に譲ります。
MinGW(gcc) の Windows へのインストールと使い方 | プログラマーズ雑記帳
なお,パッケージとしては,私はC,C++,Fortran,Objective-Cコンパイラーを入れています。数値計算等チャレンジしてみたい方は是非Fortranコンパイラ(gfortran)を入れておくと良いかもしれません。
環境変数の設定
ここではCドライブ直下にMinGWをインストールしたとして説明を書きます。要は下記のようにMinGWというフォルダが存在する状態です。
C:\MinGW
[ システム ] → [ システムの詳細設定 ] → 詳細設定タブ下部の [ 環境変数 ] より,PATHという変数名の環境変数を新規作成します。
・変数名: PATH ・変数値: C:\MinGW\bin;C:\MinGW\msys\1.0\bin;
MinGWをインストールしたディレクトリをよく確認して環境変数を作成ください。
ここが適切に設定できていないと,以降のコマンドを実行時,command not found.となるでしょう。
Minttyのインストール
環境変数を設定後,Minttyをインストールします。下記場所のbatファイルをダブルクリックして,MinGW Shellを起動します。
C:\MinGW\msys\1.0\msys.bat
起動後,環境変数が適切に設定されていれば,mingw-getコマンドを使用できますので,更新してアップデートしたのち,minttyを入れてしまいましょう。
$ mingw-get update $ mingw-get upgrade $ mingw-get install mintty
mintty.exe は C:\MinGW\msys\1.0\bin 以下にインストールされていると思います。心配であればコマンドプロンプト等で確認してみましょう。
> where mintty.exe
mintty.exeの場所を確認したのち,ショートカットを作りましょう。
仮にデスクトップ上に作るとすると,
[ 右クリック ] → [ 新規作成 ] → [ ショートカット ]
項目の場所を入力してください(T):
C:\MinGW\msys\1.0\bin\mintty.exe /bin/env HOME=/c/Users/(あなたのユーザー名)
/bin/bash --login
上記のようにショートカットを作成ください。上記の改行部には半角スペースをお忘れずに。
さて,これでMinttyを起動できるようになりました。
lsコマンドで日本語が文字化けしますが,これは文字コードが原因であり,下記オプションで解決します。
$ ls --show-control-chars
しかしながら,上記コマンドをわざわざ毎回入力したいでしょうか? ls と打てば上記を実行したことにしたいですよね。
実は,そういった設定は alias と呼ばれるものを用いれば可能で,次回は下記を掲載予定です。
Windows10設定(Chocolatey)
パッケージ管理システム Chocolateyの準備
Windowsでのパッケージ管理システムとして,Cholocateyを使用するときの設定をまとめます。
・OS X:Macports,Homebrew
・Linux:apt-getコマンド
など,それぞれのOSでパッケージ管理システムがあります。
今回は,Cygwin等異なるOS環境を導入して,プログラミング環境を作ることを目的としません。
まずは,コマンドプロンプトを管理者権限で実行して,下記のコマンドを実行します。
実行ポリシーには注意してください。改行部分は間に半角スペースをお忘れずに。
> @powershell -NoProfile -ExecutionPolicy RemoteSigned -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
正常にインストールされれば,下記コマンドでインストールされているか確認できます。
> clist -lo
無事インストールされたことを確認したら,念のため,Chocolatey用の環境変数をシステムに確実に反映させたいので,再起動しましょう。
下記要領でGUIがインストールできますが,使い勝手が悪すぎたので,お勧めしません。
さて,再起動が完了したところで,CUIでの操作に慣れてない方は,せっかくなのでGUIを入れてみましょう。CUIに慣れてる方は,下記にChocolateyで使用できるコマンドがすべて載ってますのでご参考に。github.com
先ほどと同様に,コマンドプロンプトを管理者権限で実行して,下記コマンドによりGUIをインストールします。
> cinst chocolateygui
途中,スクリプトを走らせていいか聞かれる場合がありますが,yesと打ってEnterを押しインストールを続行しましょう。
無事インストールされたら,Windows10では画像のように最近追加されたものの所にアイコンが出ますので,ショートカットを作成するか,タスクバーにでもピン留めしておきます。
深層学習 Day 1
やっとディープラーニング(深層学習)について取り組めます。
小学生の頃に完全なる人工知能を夢見て,色々想像してたのが懐かしいです。
実行環境構築
OS X上かつMacportsが慣れているのでその条件で構築します。
以下,Macportsがインストールされていることを前提に始めます。
インストールするもののパッケージ名は次の通りです。
・python34 @3.4.3_5
・py34-chainer @1.1.1_0
... A flexible framework of neural networks
・py34-six @1.9.0_0
... A Python 2 and 3 compatibility library
・py34-pip @7.1.2_0
... A tool for installing and managing Python packages
まずは,python34のインストールから。
$ sudo -E port install python34
インストール後,python34を使えるようにします。
念のため,バージョンがpython34のものになっているかも確認しておきましょう。
$ sudo -E port select --set python python34 $ python --version
次は,残り3つをインストールしていきます。
$ sudo -E port install py34-chainer $ sudo -E port install py34-six $ sudo -E port install py34-pip
最後に,
先ほどインストールしたchainerのバージョン@1.1.1_0ですが,
Macportsのツリーでは最新版ではないので,
pipコマンドを使用して最新版にしちゃいましょう。
$ pip-3.4 install --upgrade chainer
これにて,環境設定は完了です。
簡単なサンプル
Day 1 ということで私もディープラーニングに興味を持ち,勉強を開始したばかりです。
高度なことは全くまだできませんので,ご了承ください。短いサンプルを示します。
このサンプルは,階層型ニューラルネット(Hierarchical Neural Network)ですが,深層化しているわけではないため,深層学習とは呼べないと理解しています。(間違ってたらコメントで教えてください)
#!/usr/bin/env python import numpy as np import chainer.functions as F from chainer import Variable, FunctionSet, optimizers, gradient_check # 入力の設定 x = Variable(np.array([[1, 2, 3]], dtype=np.float32)) # 入力に対する結合の重みの設定 w = F.Linear(3, 3) # 確率的勾配降下法(Stochastic Gradient Descent Method) # を用いた誤差逆伝播学習を使用する optimizer = optimizers.SGD() optimizer.setup(w) # 正解出力の設定 t = Variable(np.array([[4, 13, 3.4]], dtype=np.float32)) # 学習回数(反復回数)の設定 itrstep = 100 # 学習開始 for i in range(0, itrstep): optimizer.zero_grads() # 入力及び結合重みから出力を計算する y = w(x) # 出力をコマンドラインに表示 print(y.data) # 平均二乗誤差の算出 loss = F.mean_squared_error(y, t) # 結合重みの修正 loss.backward() optimizer.update() # 次の反復ステップへ
続いて実行結果。
[[-0.26077998 1.17885709 0.33666974]] [[ 0.16529801 2.36097169 0.64300281]] [[ 0.54876822 3.42487407 0.91870254]] [[ 0.89389133 4.38238668 1.16683233]] [[ 1.20450222 5.24414778 1.39014888]] [[ 1.48405206 6.01973343 1.59113419]] [[ 1.73564684 6.71775961 1.77202058]] [[ 1.96208215 7.34598398 1.93481874]] [[ 2.165874 7.91138554 2.08133674]] [[ 2.34928656 8.42024708 2.21320319]] [[ 2.51435804 8.87822247 2.33188272]] [[ 2.66292191 9.29039955 2.43869448]] [[ 2.79662991 9.66135979 2.53482509]] [[ 2.91696692 9.995224 2.62134266]] [[ 3.02527046 10.29570198 2.69920826]] [[ 3.12274337 10.56613159 2.76928735]] [[ 3.21046925 10.80951881 2.8323586 ]] [[ 3.28942204 11.02856731 2.88912296]] [[ 3.36047983 11.22570992 2.94021058]] [[ 3.4244318 11.40314007 2.98618984]] [[ 3.48198867 11.5628252 3.02757072]] [[ 3.53378987 11.70654297 3.06481361]] [[ 3.58041096 11.83588791 3.09833217]] [[ 3.62236977 11.95229912 3.12849903]] [[ 3.66013288 12.05706978 3.15564919]] [[ 3.69411945 12.15136337 3.18008423]] [[ 3.72470737 12.23622704 3.20207596]] [[ 3.75223708 12.31260395 3.22186828]] [[ 3.77701306 12.3813448 3.23968124]] [[ 3.79931164 12.44320965 3.25571346]] [[ 3.81938052 12.49888802 3.2701416 ]] [[ 3.8374424 12.54899979 3.28312778]] [[ 3.85369825 12.5941 3.29481506]] [[ 3.86832833 12.63469028 3.30533338]] [[ 3.88149571 12.67122078 3.31480026]] [[ 3.89334631 12.7040987 3.32332015]] [[ 3.90401125 12.7336874 3.33098793]] [[ 3.91361022 12.76031971 3.33788943]] [[ 3.92224932 12.78428841 3.34410071]] [[ 3.93002462 12.80585861 3.34969044]] [[ 3.93702173 12.82527256 3.35472131]] [[ 3.94331956 12.84274578 3.35924935]] [[ 3.94898772 12.85847092 3.36332417]] [[ 3.95408916 12.87262535 3.366992 ]] [[ 3.95867991 12.88536167 3.37029266]] [[ 3.96281195 12.89682484 3.37326336]] [[ 3.9665308 12.90714359 3.37593699]] [[ 3.96987748 12.91642952 3.37834311]] [[ 3.9728899 12.92478561 3.38050914]] [[ 3.97560096 12.93230629 3.38245821]] [[ 3.97804117 12.93907642 3.38421226]] [[ 3.98023701 12.94516945 3.38579082]] [[ 3.98221302 12.95065308 3.38721204]] [[ 3.98399162 12.95558739 3.38849092]] [[ 3.98559284 12.96002769 3.389642 ]] [[ 3.98703313 12.96402645 3.39067769]] [[ 3.98832989 12.96762276 3.39161015]] [[ 3.98949695 12.97086239 3.3924489 ]] [[ 3.99054718 12.97377396 3.39320397]] [[ 3.99149251 12.97639656 3.39388347]] [[ 3.99234343 12.97875881 3.39449525]] [[ 3.99310899 12.98088169 3.39504552]] [[ 3.99379826 12.98279381 3.39554119]] [[ 3.99441791 12.98451328 3.39598703]] [[ 3.99497652 12.98606205 3.39638829]] [[ 3.99547887 12.98745632 3.3967495 ]] [[ 3.99593067 12.9887104 3.3970747 ]] [[ 3.99633789 12.98983955 3.39736676]] [[ 3.9967041 12.99085426 3.39763045]] [[ 3.9970336 12.99176979 3.3978672 ]] [[ 3.99733019 12.99259186 3.39808059]] [[ 3.99759698 12.99333382 3.39827251]] [[ 3.99783754 12.99399948 3.39844513]] [[ 3.99805379 12.9946003 3.39860058]] [[ 3.9982481 12.99513912 3.39874077]] [[ 3.99842334 12.9956255 3.39886642]] [[ 3.99858141 12.99606323 3.3989799 ]] [[ 3.99872303 12.99645615 3.39908195]] [[ 3.99885058 12.99681091 3.39917397]] [[ 3.9989655 12.99713039 3.39925623]] [[ 3.99906921 12.9974165 3.39933085]] [[ 3.9991622 12.9976759 3.39939761]] [[ 3.99924588 12.99790955 3.39945793]] [[ 3.99932098 12.99811745 3.39951205]] [[ 3.99938893 12.99830532 3.39956093]] [[ 3.99945021 12.99847507 3.3996048 ]] [[ 3.99950504 12.99862862 3.39964414]] [[ 3.99955463 12.99876404 3.3996799 ]] [[ 3.99959898 12.99888802 3.39971185]] [[ 3.99963951 12.9989996 3.3997407 ]] [[ 3.99967527 12.99909973 3.39976645]] [[ 3.99970794 12.99919033 3.39979005]] [[ 3.99973702 12.99927139 3.39981103]] [[ 3.99976349 12.99934387 3.39982986]] [[ 3.99978709 12.99940872 3.39984679]] [[ 3.99980807 12.9994688 3.39986205]] [[ 3.99982715 12.99952126 3.39987588]] [[ 3.99984479 12.99956989 3.39988852]] [[ 3.99985981 12.99961281 3.39989972]] [[ 3.99987388 12.99965 3.39990973]]
以上のように,学習を繰り返す(結合重みをあるアルゴリズムに従って反復して修正する)ことで,設定した正解出力に近づいていることがわかりました。
にしてもChainerは非常に使いやすいですね,こういったフレームワークの良さを実感しました。
誤差逆伝播法の詳細については後日まとめて,次からは深層学習に入りたいと思います。
Windows10設定 (PowerShell)
PowerShell
PowerShellの設定まとめ
設定ファイルパスの確認
下記コマンドによりパスを確認します.
> echo $Profile
パス確認後,設定ファイルがそのパスに存在しない場合は作成し,下記コマンドにより真っ新な設定ファイルを読み込みます.
> . $Profile
「このシステムではスクリプトの実行が無効になっているためファイル (スクリプトファイル) を読み込むことができません。…」云々のエラーが出た場合は,実行ポリシーが原因です.
拡張子ps1のファイルを実行するかどうかは、PowerShellの「実行ポリシー(Execution Policy)」で制御されており,デフォルトではRestrictedに設定されているので,スクリプトの実行ができません.実行ポリシーの詳細説明は下記サイトに譲ります.ちなみに,実行ポリシーは下記コマンドで確認可能です.
Tech TIPS:WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する - @IT
> Get-ExecutionPolicy
さて,下記にしたがってスクリプトの実行を可能にしていきます.具体的には,実行ポリシーをRemoteSignedに変更します.変更の際はPowerShellを管理者として起動し,下記コマンドを実行してください.権限を本当に変更するかメッセージが出ますが許可します.なお,RemoteSignedのポリシーを確認したうえで変更することをお勧めします.
> Set-ExecutionPolicy RemoteSigned
実行ポリシーが変更されたことの確認は上述したコマンドで可能です.
これで設定ファイルの中身を読み込む準備ができたので,次は実際に設定ファイルの中身を作っていきます.
設定ファイルの編集
基本的に,自分の好きなように設定することが可能ですが,簡単な例を次に示します.
<# Settings for PowerShell #> <#-------------------------------#> <#--- Settings for PowerShell ---#> <#-----------2015 by. Torippe ---#> <#--- cddでデスクトップに移動する ---#> function cdd(){cd "$home\desktop"} <#--- 空cdでホームディレクトリに移動する ---#> <# 1. cdのエイリアスを削除 2. function cd()を定義 3. 引数がある場合とない場合で条件分岐 (有:そこへ移動,無:ホームディレクトリへ移動) #> <# 1. #> if (test-path alias:cd){ rm alias:cd echo "alias:cd is removed. function cd() is created." } else { echo "alias:cd does not exist. function cd() is created." } <# 2. and 3. #> function cd(){ if ($args.length -gt 0){ set-location $args[0] } else { set-location $home } } <#------------------------------------------#>
上記は,cddでデスクトップに,cdを空打ちするとホームディレクトリに移動する設定ファイルです.
なお,設定ファイルではエイリアスのcdを削除して,新たにfunction cd()を作成しています.
この他にも,設定ファイルには様々な設定を書いておくことが可能です.