Dockerコマンド一覧


Mac内の作業環境をコンテナ化しました。
さようなら、Homebrew。
さようなら、Pyenv。

Dockerのインストール

DockerとVirtualBoxをインストールします。

Docker Community Edition
https://www.docker.com/community-edition

VirtualBox
https://www.virtualbox.org/wiki/Downloads

イメージの操作

イメージの検索

docker search [NAME]

公開されているDockerイメージの中から「amazon」を検索します。
OFFICIALに[OK]がついれば公式のイメージです。

$ docker search amazon
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
amazonlinux Amazon Linux provides a stable, secure, an... 251 [OK]
amazon/amazon-ecs-agent Amazon EC2 Container Service Agent 56
vettl/amazon-linux Amazon Linux Images. Available versions: ... 18
...

イメージのダウンロード

docker pull [NAME]

$ docker pull amazonlinux
Using default tag: latest
latest: Pulling from library/amazonlinux
40280b975f14: Pull complete
Digest: sha256:b852ce504670f604074bb0a0285849c95541453c39da4a6abe19c096695ccfca
Status: Downloaded newer image for amazonlinux:latest

イメージの一覧

docker images

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amazonlinux latest 6133b2c7d7c2 7 weeks ago 165MB

イメージの削除

docker rmi [IMAGE ID]

コンテナの操作

コンテナの作成

docker run -it [REPOSITORY] /bin/bash

$ docker run -it amazonlinux /bin/bash
bash-4.2#

コンテナから一時切断

Ctrl-p Ctrl-q

コンテナの一覧

docker ps

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e178aba66d58 amazonlinux "/bin/bash" 5 seconds ago Up 4 seconds kind_pike

コンテナの一覧(全て)

docker ps -a

コンテナへの接続

docker attach [CONTAINER ID]

$ docker attach e178aba66d58
bash-4.2#

コンテナから切断&停止

exit

コンテナの起動

docker start [CONTAINER ID]

コンテナの停止

docker stop [CONTAINER ID]

コンテナの削除

docker rm -f [CONTAINER ID]

コンテナの一括削除

docker rm -f `docker ps -a -q`

運用方法

イメージからコンテナを作成し、作業環境に変更があった場合はイメージとして保存します。
Docker Hubにイメージを保存しておくことで作業環境のバックアップを行うことができます。便利。

Docker Hubのアカウント作成

https://hub.docker.com/

Docker Hubのリポジトリ作成

自分の作業環境なのでprivateリポジトリを作成します。

Docker Hubへのログイン

docker login

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: kensuketamura
Password:
Login Succeeded

イメージの作成

docker commit -m “(commit message)” [CONTAINER ID] [USER]/[REPOSITORY]

$ docker commit -m "first commit" e178aba66d58 kensuketamura/myworkspace
sha256:660d3e0e0eae484d8c189ba19d005d0aa2ed698308a56193fd547e73960f5b03

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kensuketamura/myworkspace latest 6b51ee3ea95b 6 minutes ago 165MB
amazonlinux latest 6133b2c7d7c2 7 weeks ago 165MB

イメージのプッシュ

docker push [USER]/[REPOSITORY]

$ docker push kensuketamura/myworkspace
The push refers to a repository [docker.io/kensuketamura/myworkspace]
5000e80cdc64: Mounted from library/amazonlinux
latest: digest: sha256:ff157643b586422303f0f77f21a1ef57d637cbccce86550047712931a429e84d size: 529

コンテナの復元

$ docker pull kensuketamura/myworkspace
Using default tag: latest
latest: Pulling from kensuketamura/myworkspace
Digest: sha256:ff157643b586422303f0f77f21a1ef57d637cbccce86550047712931a429e84d
Status: Image is up to date for kensuketamura/myworkspace:latest

$ docker run -it kensuketamura/myworkspace /bin/bash
bash-4.2#

Labellioでかんたん画像認識

Deep Learningによる画像認識をかんたんに行えるプラットフォーム「Labellio」を試してみた。
https://www.labell.io/
labellio

Labellioの設定

ドキュメントの通りモデルを作成する。
ラベルを登録すると自動的に画像を検索して学習データとして扱ってくれる。

今回は「世界の変なEXITマンが認識できるか」を検証する。

学習に使ったラベルは下記の通りである。
「EXIT」exit
「歩行者専用」walker
「トイレマーク」toilet
「工事中」working
「ゴーヤーマン」goyaman

acc-loss
「loss_test」と「loss_0」が低く、精度の高い学習結果となった。

画像認識の検証

いくつか画像をアップロードして検証してみる。
no-crossing
横断禁止マークは「EXIT」が一番近い結果となった。
色は違うが構図は似ている気がする。
goya
ゴーヤはさすが「ゴーヤーマン」が一番近い結果となった。
色だけでなく形で判断しているようだ。

世界のEXITマン

ここから田村が見つけた世界の少し変なEXITマンで検証していく。
exit-italy
海外でよく見る腕が短いEXITマン
一般的なEXITマンとほぼ同じなので正確に「EXIT」と認識している。

exit-gaudi
スペインのバトリョ邸のEXITマン
バトリョ邸は全て曲線でできていることからEXITマンも円形になっている。
学習させたデータの中で円形は「歩行者専用」のみだったことから結果が間違っている。
色は見てくれなかった。

exit-subway
イタリアのローマの地下鉄で見つけたEXITメン
複数人で走り抜けている標識でも「EXIT」と認識した。

exit-vatican
バチカン市国前の土産屋の地下のトイレ近くにあったEXITマン
袖付きで上品だからか「歩行者専用」の紳士と間違えてしまった。
色も形も違うが、不思議である。

画像認識のまとめ

Labellioでかんたんに画像認識を行うことができた。
精度を上げる為には例外となるデータを繰り返し学習させることが必要である。

バチカンEXITマンのように「なぜその結果になったのか」を追うことができないDeep Learningだが
大量の画像から特徴を学習し判別することから「らしい」「っぽい」といった人の感覚を知ることができる。
好きな画像をいくつか選ぶことで「明文化しにくい直感的な好み」を判別することができるかも知れない。

ニューラルネットワークを学ぶ

Deep Learning(深層学習)に用いられるニューラルネットワークについてのまとめ

  1. 脳の仕組み
  2. ニューラルネットワークの仕組み
    • 3層パーセプトロンとは何か
  3. ニューロンの仕組み
  4. Deep Learningでどう使うのか

脳の仕組み

脳は10%の神経細胞と90%のグリア細胞で構成されている。
グリア細胞は神経細胞を補助する役目であり、主役は神経細胞である。
神経細胞は電気信号によって情報のやりとりを行う。
神経細胞のことをニューロンと呼び、ニューロンのつなぎ目をシナプスと呼ぶ。

ニューラルネットワークの仕組み

脳の仕組みをコンピュータに再現しようとしたものがニューラルネットワークである。
いくつかニューラルネットワークの形があるが、3層パーセプトロンが有名である。

3層パーセプトロンとは何か

ニューロンの役割を果たすノードを種類ごとに分類し、同じ種類のノード同士では情報のやりとりを行わない。
ノードの種類は「入力層」「隠れ層(中間層)」「出力層」の3つに分類される。
隠れ層は複数種類のノード群から構成され、このノード群をユニットと呼ぶ。

ユニットを増やすことでより複雑な事が判別できるようになり
ユニット内のノードを増やすことで1つのことをより正確に判別できるようになる。

neuralnetwork

ニューロンの仕組み

ニューロンの集合体は複雑な処理を行うが、ニューロン単体の仕組みはシンプルである。
ニューロンに対しての入力が6つ(X1~X6)あるとした場合、それぞれの入力に対して重み(W1~W6)が設定されている。
入力の信号は0か1かで判断され、1の場合は重み分の数が加減算される。
最終的な重みの和が閾値を上回った場合はニューロンが「発火」し、次のニューロンに情報が伝達される。

W1(重み) × X1(入力) + W2 × X2 + … + W6 × X6 > 閾値 ?
(-1)×0+3×1+2×0+(-1)×1+1×1+(-2)×0 > 1 ?
3 > 1 ? →発火

閾値の符号を反転し左辺に統合することで右辺が0となり、下記の式で表すことができる。
この符号を反転した閾値は「バイアス」と呼ばれる。
formulaW1(重み) × X1(入力) + W2 × X2 + … + W6 × X6 + b(バイアス) > 0 ?
(-1)×0+3×1+2×0+(-1)×1+1×1+(-2)×0 -1 > 0 ?
2 > 0 ? →発火
neuron

Deep Learningでどう使うのか

ニューロンの仕組みのW(重み)とb(バイアス)を調整することで学習が進む。
膨大な数のニューロン(ノード)が存在するため、大量のデータによって学習を重ねる必要がある。
Wとbを調整するだけであることから、入力と出力の因果関係は得られなくなる。