はい!今やってます!

Work Pertly, Live Idly

メールアドレスのドメイン毎に件数を集計する

select SUBSTRING(email,LOCATE('@',email)) as domain , count(*) as count from user group by domain;

活性化関数、ReLUについて

活性化関数ReLU関数について

活性化関数、伝達関数と呼ばれる関数、中でも現代のニューラルネットワークでは最も一般的に利用されるReLUについて、 わかりやすく説明したい。

パーセプトロンニューラルネットワークの違い

一般的に言われる「単純パーセプトロン」は、単層のネットワークで、活性化関数にステップ関数(閾値を境に出力が切り替わる関数)を利用したモデルです。 一方で、多層でシグモイド関数などの滑らかな活性化関数を使用するネットワークを「多層パーセプトロン」と呼び、これがニューラルネットワークとなります。

パーセプトロンについて

パーセプトロンの誕生については1957年まで遡ります。視覚と脳の機能をモデル化し学習能力を持つものを言います。1960年代に爆発的なニューラルネットワークブームを巻き起こすも、1969年に線形分離可能なものしか学習できない事が指摘され下火となりました。

いくつかある活性化関数

ステップ関数

前述の通り、閾値を境に出力が変わる関数

シグモイド関数

こちらもニューラルネットワークでよく用いられる活性化関数のひとつ


\displaystyle h(X) = \frac{1}{1+exp(-x)}

exp(-x)は
\displaystyle {e}^{-x}
を意味する

シグモイド関数とステップ関数の違いは滑らかさであり、入力に対して、連続的に出力が変化するのが特徴です。 つまりステップ関数が0か1のどちらかの値しか返さないのに対して、シグモイド関数は実数を返す。0.***という感じで。 ただし、ステップ関数もシグモイド関数もいずれも、どんな値も0~1の間に押し込める点、非線形な関数であるという点は共通しています。

ReLU(ランプ)関数について

ReLU関数は非常にシンプルで、入力が0を超えていれば入力をそのまま出力し、0未満であれば0を返します。 現代のニューラルネットワークにおいては、一般的にReLU関数が活性化関数として使われています。

DockerのCentOSイメージを取得して、Railsアプリを動かすまで

新しいものを作りたくなったので、Docker上で動くRailsのプロジェクトを作成。 ハマり所としては、MariaDBを使いたかったのだが、mysql2がサポートしていなかった為使えなかった。

最新版のcentOSイメージを取得する(7.3)

docker pull centos:latest

dockerコンテナ起動

docker run --privileged -d -i -t --name=rails -v $HOME/work/workspace:/var/www -p 8080:80 centos:latest /sbin/init

mysqlをインストール(5.7)

yum remove mariadb-libs
rm -rf /var/lib/mysql/
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum -y install mysql-community-server mysql-devel

rubyをインストール(2.4.0)

yum remove ruby
yum install -y git
yum install -y libxslt-devel libxml++-devel libxml2-devel

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
cd ~/.rbenv/plugins/ruby-build
./install.sh
rbenv -v
rbenv install -l
yum install -y bzip2 gcc openssl-devel readline-devel make
rbenv install 2.4.0
rbenv rehash
rbenv global 2.4.0
ruby -v

railsをインストール(5.1.1)

yum -y install gem
gem install rails

プロジェクト作成

rails new new_project -J -T -d mysql

その他

以下のようなものを参考にDocker Fileを作ってみてもいいかも http://qiita.com/togana/items/30b22fc39fe6f7a188ec

系にyumでMariaDBをインストールする

MariaDBのRepository Generatorへアクセス

https://downloads.mariadb.org/mariadb/repositories/#mirror=yamagata-university

yumリポジトリを追加

vi /etc/yum.repos.d/MariaDB.repo

設定ファイルを記述

# MariaDB 10.2 CentOS repository list - created 2017-06-02 14:39 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

yumMariaDB-server, MariaDB-clientをインストー

sudo yum install MariaDB-server MariaDB-client

ng-client関連のコマンド覚書[angular][javascript]

バージョン確認

ng --version

[root@f7b43f1c335e front]# ng --version
    _                      _                 ____ _     ___
   / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
  / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
 / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
/_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
               |___/
@angular/cli: 1.0.1
node: 6.10.3
os: linux x64
@angular/common: 4.1.2
@angular/compiler: 4.1.2
@angular/core: 4.1.2
@angular/forms: 4.1.2
@angular/http: 4.1.2
@angular/platform-browser: 4.1.2
@angular/platform-browser-dynamic: 4.1.2
@angular/router: 4.1.2
@angular/cli: 1.0.1
@angular/compiler-cli: 4.1.2

ビルド

ng build

ビルド & ウォッチ

ng build --watch

Macのローカル環境にVisual Studio CodeでGoの開発環境を構築する

phpやhack、go、ruby on rails等ちょくちょく触れる機会があるのですが、
Java出身者としては、eclipseで得たユーザー体験が忘れられず、
goの開発環境を真面目に作ってみることにしました。

各バージョンについて

Mac : OSX(10.11.6 ElCapitan)
Go : go1.8
VSCode : 1.12.1

VSCodeをダウンロード

以下のサイトから最新版のVisual Studio Codeをダウンロードしてインストールします。

Visual Studio Code - Code Editing. Redefined

Atom, intelliJを触っていましたが、どちらもグッと来ず。
今回はVisualStudioCodeで環境構築します。

gvmの設定

ローカルにGoをインストールしていない人はGoをインストールします。
自由にgoのバージョンを切り替えれるので今回はgvmを利用します。
brewでインストール済みの人でも全く問題無いと思います。

gvmのインストール

インストールは以下のコマンド一発です。

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

完了したら以下のコマンドの実行をもとめられるので実行しましょう。

source $HOME/.gvm/scripts/gvm

.bash_profileを編集して、ターミナル起動時にも実行されるようにします。

vi ~/.bash_profile

#以下の一行を追加
[[ -s ~/.gvm/scripts/gvm ]] && . ~/.gvm/scripts/gvm

goのインストール

gvmのインストールが完了したら、gvmを使ってgo言語の最新版をインストールします。(現在は1.8が最新)

gvm listall go1.4
gvm use go1.4
gvm listall go1.8
gvm use go1.8

※僕のローカルでは普通にインストールを出来ないという現象が発生したので、バイナリオプション-Bを設定してバイナリからインストールするようにしました。古いバージョンのgoが入っていないからインストール出来ないという旨のエラーが出る場合は、古いバージョンから順番にインストールしていきましょう。

デフォルトで利用するgoの設定

このままではデフォルトで利用するgoのバージョンが設定されないようなので、自分は.bash_profileに以下の設定を追記しています。

vi ~/.bash_profile

#以下の一行を追記
gvm use go1.8

VSCodeの設定

次にVisual Studio Codeの設定をしていきます。

拡張機能のインストール

画像のようなネズミが目印の拡張機能をインストール、画面の支持に従ってVSCodeを再起動して下さい。

f:id:yuji_ueda:20170505102454p:plain

Go - Visual Studio Marketplace

GOPATH, GOROOTの設定を確認

正常に動いていれば特に必要無い作業ですが、 僕の場合はGOPATH, GOROOTが読み込まれず画像のようなエラーが出続けて少しハマったので、記載しておきます。

f:id:yuji_ueda:20170505103024p:plain ※Cannot find “go” binary. Update PATH or GOROOT appropriately.というエラーが表示され続けた。

ヘルプ→開発者ツールの切り替えからConsoleを立ち上げます。 以下のそれぞれを入力して、値が正常に取れれば大丈夫です。

process.env['GOROOT']
process.env['GOPATH']

正常に値が取れる場合は以下のような表示になります。

f:id:yuji_ueda:20170505102954p:plain

GOROOT, GOPATHがそれぞれ設定されているのに、値が正常に取れない場合は1番から順に試してみましょう。

1.VSCodeを再起動
2.VSCodeをアップデート
3.Macを再起動
4.VSCodeをインストールしなおす
  - VSCodeをアンインストール
  - sudo rm -r /usr/share/code
  - VSCodeを再度インストール

関連パッケージのダウンロード(1)

次に関連パッケージをダウンロードしていきます。 適当な.goファイルを作成して、作業を始めるとサジェスションが表示されるので、サジェストされるままにinstallボタンをクリックしていきます。

f:id:yuji_ueda:20170505104010p:plain ※各パッケージに興味のない人はInstall Allでいいと思います。

ダウンロードしたパッケージの確認

そんな感じで5つ程パーケージがダウンロードされると思います。

github.com/tpng/gopkgs
github.com/nsf/gocode
github.com/rogpeppe/godef
github.com/golang/lint/golint
sourcegraph.com/sqs/goreturns

インストールされたパッケージの一覧は以下のコマンドで確認可能です。

ls $GOPATH/bin

関連パッケージのダウンロード(2)

更に必要なパッケージのダウンロードを行います。 エディタ右下のAnalysis Tool Missingと表示される部分をクリックでダウンロードできます。 f:id:yuji_ueda:20170505104908p:plain すると以下のパッケージも追加でダウンロードされます。

go-outline
go-symbols
guru
gorename
gomodifytags
godef
goreturns
golint
gotests

関連パッケージのダウンロード(3)

デバグ用のパッケージDelveをダウンロードしておくと、F5でデバッグが可能です。

go get -u -v github.com/derekparker/delve/cmd/dlv

統合ターミナルの表示

完全に寄り道ですが、表示→統合ターミナルから統合ターミナルを表示しておくと、実行されるコマンドと結果が見れたりします。 f:id:yuji_ueda:20170505104137p:plain

f:id:yuji_ueda:20170505104236p:plain

以上で基本的な環境構築手順は完了です。 これでcommandボタンを押しながらメソッド名をクリックするとメソッド定義にジャンプできたりします。

MacでローカルにgvmでGoをインストールするとエラー

バージョン一覧

gvm version
Go Version Manager v1.0.22 installed at /Users/uedayuji/.gvm
clang --version
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
system_profiler SPSoftwareDataType | grep 'System Version'
      System Version: OS X 10.11.6 (15G1421) 

エラー内容

gvmでgoをインストールしようとするとエラーが発生。

gvm install go1.4

エラー内容

Installing go1.4...
 * Compiling...
ERROR: Failed to compile. Check the logs at /Users/uedayuji/.gvm/logs/go-go1.4-compile.log
ERROR: Failed to use installed version

エラーログを確認すると以下のようなエラーが。

# Building C bootstrap tool.
cmd/dist

# Building compilers and Go bootstrap tool for host, darwin/amd64.
lib9
libbio
liblink
cmd/cc
cmd/gc
cmd/6l
cmd/6a
cmd/6c
/Users/uedayuji/.gvm/gos/go1.4/src/cmd/6c/txt.c:995:28: error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value]
/Users/uedayuji/.gvm/gos/go1.4/src/cmd/6c/txt.c:1045:28: error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value]
go tool dist: FAILED: clang -Wall -Wstrict-prototypes -Wextra -Wunused -Wno-sign-compare -Wno-missing-braces -Wno-parentheses -Wno-unknown-pragmas -Wno-switch -Wno-comment -Wno-missing-field-initializers -Werror -fno-common -ggdb -pipe -Wuninitialized -O2 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -mmacosx-version-min=10.6 -c -m64 -I /Users/uedayuji/.gvm/gos/go1.4/include -I /Users/uedayuji/.gvm/gos/go1.4/src/cmd/6c -o /Users/uedayuji/.gvm/gos/go1.4/pkg/obj/cmd/6c/txt.o /Users/uedayuji/.gvm/gos/go1.4/src/cmd/6c/txt.c

バイナリオプションをつけて実行

バイナリオプションをつけて再度実行でインストール完了

gvm install go1.4 -B