Converg.

ものづくり関係の備忘録

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++FortranObjective-Cコンパイラーを入れています。数値計算等チャレンジしてみたい方は是非Fortranコンパイラ(gfortran)を入れておくと良いかもしれません。



さて,以降ではMinGWがCドライブ直下にインストールされたものとして説明を続けます。
(念のため環境変数の確認から)


環境変数の設定


ここでは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 と呼ばれるものを用いれば可能で,次回は下記を掲載予定です。

 ・bashの設定: .bash_profile 及び .bashrc
 ・Minttyの設定: .minttyrc

Windows10設定(Chocolatey)

パッケージ管理システム Chocolateyの準備

Windowsでのパッケージ管理システムとして,Cholocateyを使用するときの設定をまとめます。

 ・OS XMacports,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は非常に使いやすいですね,こういったフレームワークの良さを実感しました。

誤差逆伝播法の詳細については後日まとめて,次からは深層学習に入りたいと思います。

Gauss-Legendre Quadrature

ガウスルジャンドル求積

{n}を正の整数として,多項式関数 {f(x)} は次式で表すことができます。
{
  \displaystyle\int_{-1}^{-1} f(x) dx = \displaystyle\sum_{i=1}^{n} \omega_{n,i}  f(x_{n,i})
}

ここで,{x_{n,i}}ガウス点,\omega_{n,i} は重み。

上述の式が成り立つのは,
ラグランジュの補間法と異なる {n} 個の根をもつ多項式を用いれば導けます。
詳しいメモは時間のあるときにここに追記します。

Dustbin; 1箱目

チームゴミくず

標題として,始動

自らの自力を養いつつ,その技術を無駄使いしようというプロジェクト

2015/09/06にキックオフミーティングを行った...のか?
以下,覚えてることだけ纏める

技術を結集させたゴミ箱を作ろう

必要な技術を列挙

機械学習(ディープラーニング)
・画像解析
・ハードウェア・ソフトウェア設計(デザイン込)
・移動体の外界センサ情報による3次元環境構築

大分類は以上.
各自,
得意分野もしくは身につけたい分野を探るということで終結.

私は,機械学習・画像解析あたりが興味あるので探っていきます.

ディープラーニングのフレームワーク

・Caffe
・Chainer

OSX上で自作OSあれこれ

OSXで自作OS

使用する予定の環境まとめ

テキストエディタEmacs
バイナリエディタ:0xED
・パッケージ管理システム:Macports
・仮想環境:VirtualBox
アセンブラ:enam
・その他もしかしたら使うかもしれないコンパイラ:gfortran,gccなど

逐次,設定等々の記事も増やしていきます.

GNU assemblerについて

OSXでは使用できるはずです.

Windows10で自作OS

使用する予定の環境まとめ

テキストエディタAtom
バイナリエディタ:みてい
・パッケージ管理システム:とりあえずchocolatey
・仮想環境:VirtualBox
アセンブラ:GAS
・その他もしかしたら使うかもしれないコンパイラ:gfortran,gccなど

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()を作成しています.

この他にも,設定ファイルには様々な設定を書いておくことが可能です.