ProgrammingLab

プログラミングに役立つ情報を更新!

ディープラーニングの流れをさらっと再確認しよう!!

ディープラーニングの理解がいまいちだったため、整理するために全体の流れをまとめます。
かるく勉強したことある人を対象としているので、理論・用語・ライブラリなどの説明は省きます。
サンプルでは簡単な画像分類の学習を載せています。
ライブラリはKerasを使っています。

サンプルを動かす条件

最後にサンプルを載せていますが、実行できるようにするためには以下の準備が必要です。
Python環境の構築
②必要ライブラリのインストール

①については以前に書いた以下の記事をご参照ください。
programming-lab.hatenadiary.com ②については①で構築した環境で以下のようにダウンロードしてください。

>conda install jupyter
>conda install tensorflow
>conda install keras

コーディングにはJupyterNotebookを使っています。
初めての方は以下の記事を参照してください。
programming-lab.hatenadiary.com 以上がそろえばサンプルコードが実行できる状態になります。

ディープラーニングの流れ

ディープラーニング全体の流れとしては以下のようになります。
1.データの前処理
2.ニューラルネットワークの作成
3.学習の設定
4.学習の実行
5.推論の実行

データの前処理

ニューラルネットワークに渡すデータの取得・加工を行う工程です。
〇やること
・学習用データの取得
・データの変形

ニューラルネットワークの作成

学習に使用するニューラルネットワークを作成します。
〇やること
・入力、中間、出力層の設定
・活性化関数の設定

学習の設定

学習する際に使う関数の設定などを行います。
〇やること
・損失関数(誤差関数)の設定
・最適化アルゴリズムの設定

学習の実行

作成したネットワークで学習を開始します。
〇やること
・バッチサイズ、エポック数等の設定

推論の実行

テストデータを使って学習がうまく進んでいるかをテストします。

サンプルコード

サンプルコードの全容を載せておきます。

#===================================
#インポート
#===================================
#数値演算用ライブラリ
import numpy as np

#Keras
from keras.layers import Input, Flatten, Dense
from keras.models import Model
from keras.optimizers import Adam
from keras.utils import to_categorical

#今回の学習データ取得に必要
from keras.datasets import cifar10

#===================================
#データの前処理
#===================================
#分類数
NUM_CLASSES = 10

#データ取得
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

#0~255のデータを0~1のfloat32型のデータに変形
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0

//正解ラベルデータをOnHot表現に変換
y_train = to_categorical(y_train, NUM_CLASSES)
y_test = to_categorical(y_test, NUM_CLASSES)

#OnHot表現とは
#5種類のデータがある場合で2番目が正解だった場合
#通常1というデータが入っているが、OnHot表現に直すと
#(0,1,0,0,0)というベクトルになる

#===================================
#ニューラルネットワークのモデル作成
#===================================
#入力層
input_layer = Input((32,32,3))

#入力データを平坦化
x = Flatten()(input_layer)

#全結合層を2つ重ねる
#活性化関数はReLU
x = Dense(200, activation = 'relu')(x)
x = Dense(150, activation = 'relu')(x)

#出力数が分類の数になるように最後の層を設定
#活性化関数は出力を確率にするためソフトマックス関数
output_layer = Dense(NUM_CLASSES, activation = 'softmax')(x)

#モデルを作成
model = Model(input_layer, output_layer)

#===================================
#学習の設定
#===================================
#最適化アルゴリズムにAdamを使用。
opt = Adam(lr=0.0005)
#損失関数は交差エントロピー
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

#===================================
#学習
#===================================
model.fit(x_train
          , y_train
          , batch_size=32
          , epochs=10
          , shuffle=True)#データをシャッフルする

#===================================
#推論
#===================================
model.evaluate(x_test, y_test)

まとめ

ディープラーニングの流れをさらっと一通り見ていきました。
今回載せているサンプルはすべて全結合層を使った簡単な実装です。
3エポック学習した結果、正答率は50%程度でした。
画像解析の場合はCNNを使うとさらに正答率が上がりますが、今回はシンプルさを重視しました。

WebブラウザでPythonプログラムを作成!!JupyterNotebookの導入から使い方まで

プログラムを書く時にはコーディングや実行を行う環境が必要です。
今回はWebブラウザでコーディングから実行まで行うことができる、「JupyterNotebook」の導入と使い方を書いていきます。
読み方は「ジュピターノートブック」です。
JupyterNotebookはPython以外の言語でも使えます。

前提条件

今回はAnaconda環境で説明していきます。
使いたい仮想環境をアクティベートした状態で以下の設定を進めていってください。
何のこと?という方は以下の記事を見ながら設定をしてもらえればと思います。
programming-lab.hatenadiary.com

JupyterNotebookのインストール方法

AnacondaPromptを開いて以下のコマンドを実行します。

>conda install jupyter

いろいろ文字が出てきた後に

Proceed([y]/n)?

と表示されるので「y」を入力して、エンターを押してください。
するとインストールが開始されます。
エラーが出なければインストール成功です。

これでJupyterNotebookを使えるようになりました!

Pythonプログラムを置くフォルダに移動

AnacondaPromptはデフォルトでカレントディレクトリがユーザーフォルダになっているはずです。

カレントディレクトリは下の画像の場所で確認できます。
f:id:programming_lab:20210822095203p:plain
ここをPythonプログラムを置くフォルダに変更します。
これをしないとJupyterNotebookを開いたときにプログラムを作りたいフォルダに作れません。

まだフォルダがないという人は今から作りましょう。
場所はどこでもいいのですが、今回はわかりやすいようにCドライブ直下に作りました。
f:id:programming_lab:20210822095709p:plain

それではAnacondaPromptでこのフォルダまで移動しましょう。
以下のコマンドを実行してください

>cd C:\Python

これでカレントディレクトリが先ほど作ったPythonフォルダに変わったと思います。

JupyterNotebookを起動する

AnacondaPrompt上で以下のコマンドを実行してください

>jupyter notebook

すると以下のような画面が開きます。 f:id:programming_lab:20210822105652p:plain この画面には起動した際のカレントディレクトリのフォルダ内容が表示されます。
先ほど作成したフォルダは何も入っていないので、JupyterNotebook上でも何も表示されません。

Pythonファイルを作成

それではPythonファイルを作成しまししょう。
画像の赤で囲っている部分を順にクリックしてください。 f:id:programming_lab:20210822101729p:plain すると新しい画面が開きます。
f:id:programming_lab:20210822103919p:plain ここにPythonコードを書いていきます。

先ほど作ったPythonフォルダを見てみるとJupyterNotebookで作ったファイルが追加されています。
f:id:programming_lab:20210822102728p:plain 「Untitled.ipynb」というファイルが作ったPythonファイルです。
「.ipynb_checkpoints」はJupyterNotebookの状態を記憶しているファイルです。
セーブファイルのようなもので、今は気にしなくて大丈夫です。

Pythonファイルの名前はデフォルトで「Untitled」になっています。
変更する場合は画像の赤枠の場所をクリックすると変更することができます。
f:id:programming_lab:20210822102115p:plain

プログラムを書いてみる

作成したファイル上のグレーの四角い領域にプログラムを書いていきます。
f:id:programming_lab:20210822103919p:plain プログラムを書く領域をセルと呼び、プログラムを実行する単位となります。
セルは「Alt」+「Enter」または「Shift」+「Enter」で増やすことができます。
また不要なセルは選択した状態で、画面上部のはさみアイコンをクリックすると削除できます。
プログラムはセルごとに実行されるので途中経過を確認したりできます。

それではテストでPythonプログラムを書いてみましょう!
以下の画像のプログラムを書いてみてください。
f:id:programming_lab:20210822103922p:plain 書き終えたら「Shift」+「Enter」または上部のRunボタンを押してみましょう。
f:id:programming_lab:20210822103916p:plain すると1つ目のセルで計算した結果が出力されました!

JupyterNotebookを終了する

プログラムを書き終えて終了するときは、AnacondaPromptに戻り「Ctr」+「C」を押します。
少しするとJupyterNotebookが終了します。
Webブラウザに戻ってリロードすると、ページにアクセスできなくなっています。

再開するときは最初と同じようにコマンドを実行してください。

>jupyter notebook

まとめ

JupyterNotebookの一連の流れを見ていきました。
Pythonを使う場合よく使われる環境なので、知っておくと役立つと思います

強化学習を始めよう!!その1~環境構築編~

強化学習を使ったゲームのデバッグをやってみたいので強化学習を勉強し始めました。
自分の覚書もかねてやり方などを書いていきたいと思います。
最終的にはUEで強化学習するところまで行く予定です。
1回目は環境構築をやっていきます!
使う言語はPythonなのでAnacondaを使ってPythonの環境構築をしていきたいと思います。
ちなみに環境とはpythonのバージョン、ライブラリの種類・バージョンなどの状態の総称です。

Anacondaとは?

Pythonを使って開発を進めていく場合、多くのライブラリをインストールします。
また開発に応じて環境を作り、必要なライブラリだけをインストールした状態の環境を作ります。
こういった作業はめんどくさく、初めての人にとっては難しい作業です。
Anacondaはそうした環境構築の手助けをしてくれるサービスです。
機械学習やデータサイエンスなどの分野では定番でよく使われているようです。

環境構築の流れ

以下の3つを行うと開発できる状態に持っていくことができます。
1. Anacondaのインストール
2. 仮想環境の構築
3. 必要なライブラリのインストール
ちなみに仮想環境とは1つのパソコンの中に複数の環境を用意して、
ある環境を使うときにはまるでその1つの環境しかないように思わせることです。

最初はめんどくさく感じますが、慣れれば簡単です!
それでは順に説明していきたいと思います。

Anacondaのインストール

インストールは以下のサイトからできます
www.anaconda.com ダウンロードしたファイルを実行してデフォルトの設定のままインストールします。

注意点としては、ユーザー名に日本語が入っている場合はエラーが出る可能性があります。
デフォルトではユーザーフォルダにインストールされるので、日本語が入っている人はインストール場所を変更しましょう。
その場合はCドライブ直下とかにインストールするといいと思います。
f:id:programming_lab:20210813183259p:plain
ユーザー名が英数字の場合はデフォルトままでOKです!

インストールが完了し「finish」ボタンを押すと、Webのチュートリアルページが開きます。
興味のない人はそっと閉じましょう。

仮想環境の構築

次に仮想環境を作っていきましょう。
まずは「Anaconda Prompt」というファイルを開きましょう。
Anacondaのインストールしたときに一緒にインストールされています。
コマンドプロンプトと同様な黒いコンソールウィンドウが出てくると思います。 f:id:programming_lab:20210813185409p:plain
この画面上でAnaconda環境を整えていきます。
(通常のコマンドプロンプトでもPathを通していたらできますが、公式が非推奨にしています)

それではさっそく新しい仮想環境を作ってみたいと思います。

conda create -n 【環境名】 python=【Pythonバージョン】

【環境名】には作成したい仮想環境の名前を入れます。
私は強化学習用の環境なので「rl_env」にしました。
Pythonバージョン】にはバージョンの数値を入れます。
私は「3.7」で作成しました。
エンターを押すと仮想環境の作成が開始します。
少しすると確認が出てくるので「y」キーを押してエンターで続行します。
f:id:programming_lab:20210813191541p:plain
エラーがでなければ仮想環境の作成成功です!

仮想環境を切り替える

先ほど作成した仮想環境にライブラリをインストールしたいため、環境を切り替える必要があります。
現状は最初からある環境(Root環境)になっているので、作成した仮想環境に切り替えます。
以下のコマンドで切り替えることができます。

conda activate 【環境名】

すると以下のように先頭のカッコ内が切り替えた環境名に代わります。 f:id:programming_lab:20210813192306p:plain これで環境の切り替えが完了しました。

ちなみに環境を削除したい場合は以下のコマンドで削除できます。

conda remove --name 【環境名】 --all

必要なライブラリのインストール

それではライブラリインストールしていきたいと思います。
今回は環境構築編なので、強化学習で必要なライブラリのインストールは次回以降に回します。
今回はJupyterNotebookというライブラリだけインストールしたいと思います。
JupyterNotebookはWebブラウザPythonを実装・実行できるライブラリです。

以下のコマンドでライブラリをインストールすることができます。

pip install 【ライブラリ名】

今回の場合は以下のようなコマンドを入れます。

pip install jupyter

エラーが出なければインストール成功です!

ライブラリの確認

現在インストールされているライブラリを確認しておきましょう。
以下のコマンドで現在インストールしているライブラリを確認できます。

conda list

先ほど入れたJupyterNotebook以外にも初期からいくつかのライブラリが入っています。
赤で囲っているJupyter関連のライブラリが確認できればOKです!
f:id:programming_lab:20210813222714p:plain

JupyterNotebookを開いてみる

それではインストールしたJupyterNotebookを起動してみましょう。
以下のコマンドを実行してみてください

jupyter notebook

すると以下のようなWebブラウザが開かれると思います。
f:id:programming_lab:20210813230453p:plain このページでPythonプログラムを作成していきます。
詳しい使い方などは次回以降に説明していきたいと思います。

JupyterNotebookを起動している間はほかのAnaconda上でほかの操作をすることができません。
ブラウザを閉じただけでは終了できず、AnacondaPromptで「Ctr」+「C」を押す必要があります。

まとめ

今回は環境構築編ということでAnacondaを使った開発環境の構築方法を書いてみました。
次回以降は実際に強化学習をやっていきたいと思います。
自分も勉強中なので投稿は遅くなるとは思いますが、一緒に勉強していきましょう!
ツイッターに途中経過などを投稿するので是非見てくださいね!

環境構築なし!!Web上で手軽にPythonを実装&実行できる「TryJupyter」を使ってみた

通常Pythonを使う場合は自分のPC上に環境を構築しなければなりません。

しかし、初心者の方の場合環境構築でつまずくことや、難しいと感じることが多いと思います。

そこで、とりあえずPythonを体験したいという人にお勧めなのがTryJupyterというサービスです。

TryJupyterとは

TryJupyterとは一言でいえば、Web上でプログラムを実装・実行できるサービスです。

巷にはJupyterNotebookというPythonなどのプログラム言語を便利に実装できるサービスがあります。

それと同じものをWeb上で使えるのがTryJupyterとなっています。

サクッとお試しでPythonを体験したときなどにはピッタリのサービスですね。

TryJupyterの使い方

TryJupyterのページを開く

以下のリンクからTryJupyterのページに飛べます。

jupyter.org

JupyterNotebookを開く

「TryClassicNotebook」をクリックするとJupyterNotebookが開きます

f:id:programming_lab:20210727025021p:plain

新規ファイルの作成

JupyterNotebookが開いたのでPythonコードを記述するための、新規ファイルを作成します。

左上の「File」>「NewNotebook」>「Python3」をクリック。

すると新しいページが開き、ファイルが作成される。

f:id:programming_lab:20210727030121p:plain

プログラムを書き込む

作成したファイル上のグレーの四角い領域にプログラムを書いていきます。

この領域をセルと呼び、プログラムを実行する単位となります。

セルは「Alt」+「Enter」または「Shift」+「Enter」で増やすことができます。

また不要なセルは選択した状態で、画面上部のはさみアイコンをクリックすると削除できます。

セルごとに実行されるのでプログラムの途中経過を確認したりできます。

f:id:programming_lab:20210727030722p:plain

Pythonプログラムを書いてみる

それではテストでPythonプログラムを書いてみましょう!

以下の画像のプログラムを書いてみてください

f:id:programming_lab:20210727033245p:plain

書き終えたら「Shift」+「Enter」または上部のRunボタンを押してみましょう。

f:id:programming_lab:20210727033443p:plain

すると1つ目のセルで計算した結果が出力されました!

プログラムを保存

先ほど作成したコードを保存しましょう。

ファイルの名前を変える

上部の「Untitled」と書いてある部分をクリックします。

f:id:programming_lab:20210727034514p:plain

すると以下のような画面が表示されますので、ボックス内の名前を変えましょう。

今回は「PythonTest」にしました。

右下のRenameボタンを押すとファイル名の変更が完了します。

f:id:programming_lab:20210727034517p:plain

ファイルをダウンロード

上部の「ファイル」>「Download as」>「Noteboook(.ipynb)」を選択します。

すると先ほどつけた名前のファイルが保存されます。

f:id:programming_lab:20210727035446p:plain

保存したファイルを読み込む

画面左上の「Jupyter」のロゴの部分をクリックします。

f:id:programming_lab:20210727040012p:plain

すると以下のような画面が開きます。

これがホーム画面でここに先ほどダウンロードしたものをアップロードします。

右上のUploadボタンを押すとエクスプローラーが開くので、先ほど保存したファイルを選択します。

f:id:programming_lab:20210727041246p:plain

すると、選択したファイル名が出てくるので右側のUploadボタンを押しましょう。

f:id:programming_lab:20210727041523p:plain
これでアップロード完了です。

クリックすると、先ほどと同じプログラムの画面が出てくると思います。

まとめ

以上がTryJupyterを使ってWeb上でPythonプログラムを作成する方法でした。

ちなみにTryJupyterはブラウザごとにファイルを管理しています。

なので、保存したものを他のブラウザで起動しようとしてもできません。

その場合またアップロードをする手順がいります。

あくまで簡単にPythonを試してみる用途での使用で、バリバリ開発するには向いていません。

しかし、手軽にPythonを体験したい場合にはかなり便利なサービスなのではないでしょうか?

Pythonを触ってみたいという人はまず、TryJupyterを使ってみるのをお勧めします!

【UE4】バージョン管理システムは何を使う?Git・SVN・Perforceを比較!

ゲームを作るとなれば、ほぼ間違いなくバージョン管理を行いますよね。

バージョン管理システムといえばGit・SVNなどいくつかの選択肢がありますが

UE4で使う場合どれが最適なのか調べてみました。

結論

結論から言うと、僕はGitを使うことにしました。

Gitはバイナリファイルの管理に弱いので、GitLFSという機能も併用して使います。

それでは詳しく見ていきましょう。

UE4で使えるバージョン管理システム

まずUE4が対応しているバージョン管理ステムをご紹介します。

Git

現状もっとも使われているであろうバージョン管理システム

分散型でローカルリポジトリがあるため、慣れていれば使いやすい。

バイナリファイルの管理に弱い。

SubversionSVN

集中型なのでローカルリポジトリがないが、直感的で理解しやすい。

リビジョンも連番でわかりやすい。

バイナリを差分で管理できる。

Perforce(P4)

SVNと同じく集中型。

SVNは作業コピーをローカルに持っていますが、P4はデータベース上に保存している。

そのため更新などの速度が段違いで早いらしい。

UE4で使うにはどれがいいの?

それぞれに長所・短所があります。

なので、UEで使う上でのざっくりとしたメリット・デメリットを書いていきます。

僕自身そんなに詳しいわけではないので、個人の見解ということでご覧ください。

Git

 メリット

  • ローカルコミットができる
  • ブランチが作りやすい
  • 利用者が多いので情報が豊富
  • ホスティングサービスが優秀(GitHub、GitLabなど)

デメリット

  • バイナリファイルが差分管理できないので容量がでかくなりがち
  • UEのソースコントロールがまだβ版

SubversionSVN

 メリット

  • バイナリファイルが差分管理なので容量が減る
  • UE4で使っている人が多い(UEのソースコントロールが正式版)

デメリット

  • ローカルコミットができない
  • ブランチに制約が多い
  • ホスティングサービスにいいのが見当たらない(※個人の意見です)

Perforce(P4)

 メリット

  • SVNより高速に処理できるらしい
  • UEで有名な会社ヒストリアさんも使ってる

 メリット

  • 情報がすくない
  • お金がかかる(無料版はいろいろ制限があるらしい)

結局どれを使うか?

Perforceはだいぶプロ仕様っぽかったので今回はパスですね。

正統派で行けばSVNを使うのが妥当なんだと思います。

(バイナリに強い&ソースコントロールも正式版のため)

しかし、自分は

  • チームメンバーとGitで開発経験がある(UEではないが)
  • ローカルリポジトリが欲しい
  • GitHubを使えば無料で人数制限なく無限にプライベートリポジトリを作れる。

という理由からGitを使うことにしました。

ただ、BPなどのuassetがバイナリファイルのため、差分管理できない点が痛いです。

そこで、GitLFSという機能を使うことで回避したいと思います。

GitLFSとは簡単に言うと

「バイナリファイルを別の場所で管理して、Git上ではハッシュ値だけ管理する。

なので、リポジトリの容量は減る」

という機能です。

また、GitLFSを使うと一応ロック機能も使えるようになります。

ロック機能に関してはSVNより制限があります。

ちゃんとルールを決めておかないと普通に競合するので少し使い勝手は悪そうでした。

ですが、Gitの構造上仕方がないことなのでそこはがまんします。

(まぁチームメンバーが少ないので、そこまでロック機能使わないし…)

まとめ

 一応これでGit上でUE4のプロジェクトを管理することができそうです。

もっといい方法を知っている方がいれば、ぜひ教えてください!