- 投稿日:2019-03-27T19:20:34+09:00
WindowsのJupyter NotebookからKerasが使えるようにする
はじめに
わかってみると同じような記事はいろいろあったのですが、とりあえず現時点で表記のことを行うための手順をメモします。
そもそもなぜこの手順が必要なのか
Jupyter Notebookの前提になっているanacondaには不足モジュールの追加導入の機能があり、本来はこの機能を使うだけで簡単にKerasも使えるようになるはずです。
しかし、現在anacondaで導入されるpython: version 3.7
kerasの前提のpython: version 3.6
となってしまっており、単純な追加導入ではkerasが導入できないのです。
対応手段
anacondaには、仮想環境追加機能があり、ベースとまったく別のpython環境を作ることができます。この方法を使って初期導入環境とは別のpython 3.6環境を別途作ることになります。
前提
"Anaconda 2018.12 for Windows Installer"をダウンロード、インストールした直後の状態を前提とします。この本体の導入手順に関しては他に手順書がいろいろあるので省略します。
手順
それでは、具体的な手順を説明します。
anaconda promptの起動
図のようにWindowsメニューからAnaconda3配下の"Anaconda Prompt"を選択します。
conda コマンドの実行
プロンプトから下記のコマンドを順に実行します。
Yes / Noの確認のプロンプトが表示されたらすべてYで答えるようにします。仮想環境 keras-env の作成
(base) C:\Users\makaishi> conda create -n keras-env python=3.6仮想環境 keras-env の活性化
(base) C:\Users\makaishi>activate keras-env仮想環境に追加モジュールの導入
(keras-env) C:\Users\makaishi>coda install matplotlib
(keras-env) C:\Users\makaishi>coda install jupyter
(keras-env) C:\Users\makaishi>coda install tensorflow
(keras-env) C:\Users\makaishi>coda install kerasAnaconda Navigatorの起動
WindowsメニューからAnaconda3配下の"Anaconda Navigator"を起動します。
下の画面が表示されたら、
①Application onのドロップダウンを"keras-env"に変更②Jupyter Notebookの下の「Launch」ボタンをクリック
します。Notebookの読み込み
これで、Jupyter Notebookが起動されるので、あとはいつものようにipynbファイルを読み込んでnotebookファイルを実行します。
下の図のようにKerasのライブラリが使えるようになっているはずです。Macの場合
Macの場合は普通にターミナルを開いて以下のコマンドを実行します。
$ conda create -n keras-env python=3.6 $ conda activate keras-env正しく実行されると、プロンプトが以下のような表示に変わります。
(keras_env) xxxxx:~ makaishi$Activate後は、Windowsの場合と同じになります。
- 投稿日:2019-03-27T19:20:34+09:00
Windows/MacのJupyter NotebookからKerasが使えるようにする
はじめに
わかってみると同じような記事はいろいろあったのですが、とりあえず現時点で表記のことを行うための手順をメモします。
そもそもなぜこの手順が必要なのか
Jupyter Notebookの前提になっているanacondaには不足モジュールの追加導入の機能があり、本来はこの機能を使うだけで簡単にKerasも使えるようになるはずです。
しかし、現在anacondaで導入されるpython: version 3.7
kerasの前提のpython: version 3.6
となってしまっており、単純な追加導入ではkerasが導入できないのです。
対応手段
anacondaには、仮想環境追加機能があり、ベースとまったく別のpython環境を作ることができます。この方法を使って初期導入環境とは別のpython 3.6環境を別途作ることになります。
前提
"Anaconda 2018.12 for Windows(Mac) Installer"をダウンロード、インストールした直後の状態を前提とします。この本体の導入手順に関しては他に手順書がいろいろあるので省略します。
手順 (Windowsの場合)
それでは、Windowsの場合の具体的な手順を説明します。
anaconda promptの起動
図のようにWindowsメニューからAnaconda3配下の"Anaconda Prompt"を選択します。
conda コマンドの実行
プロンプトから下記のコマンドを順に実行します。
Yes / Noの確認のプロンプトが表示されたらすべてYで答えるようにします。仮想環境 keras-env の作成
(base) C:\Users\makaishi> conda create -n keras-env python=3.6仮想環境 keras-env の活性化
(base) C:\Users\makaishi>activate keras-env仮想環境に追加モジュールの導入
(keras-env) C:\Users\makaishi>conda install matplotlib
(keras-env) C:\Users\makaishi>conda install scikit-learn
(keras-env) C:\Users\makaishi>conda install jupyter
(keras-env) C:\Users\makaishi>conda install tensorflow
(keras-env) C:\Users\makaishi>codna install kerasAnaconda Navigatorの起動
WindowsメニューからAnaconda3配下の"Anaconda Navigator"を起動します。
下の画面が表示されたら、
①Application onのドロップダウンを"keras-env"に変更②Jupyter Notebookの下の「Launch」ボタンをクリック
します。Notebookの読み込み
これで、Jupyter Notebookが起動されるので、あとはいつものようにipynbファイルを読み込んでnotebookファイルを実行します。
下の図のようにKerasのライブラリが使えるようになっているはずです。手順(Macの場合)
Macの場合は普通にターミナルを開いて以下のコマンドを実行します。
$ conda create -n keras-env python=3.6 $ conda activate keras-env正しく実行されると、プロンプトが以下のような表示に変わります。
(keras_env) xxxxx:~ makaishi$Activate後の手順は、Windowsの場合と同じになります。
補足 Macの場合の問題回避策
事前導入済みソフトの状況などに依存するのだと思いますが、私のPC(Mac)では、上の手順だけでKerasのコードがうまく動きませんでした。(Keras自体は動いているようにみえるが、その後でmatplotlibでグラフ描画しようとするとリセットされてしまう)
いろいろ調べて、下記のコマンドをNotebookの冒頭に入れると、問題が回避できることがわかりました。# Macの問題回避 import os import platform if platform.system() == 'Darwin': os.environ['KMP_DUPLICATE_LIB_OK']='True'
- 投稿日:2019-03-27T12:20:34+09:00
YAD2U Unity&C#編
YAD2U C#編
yet another deepmimic to unity !
Other References
Environmental Setting
https://qiita.com/tanakataiki/items/40f54b3851c2ed3e09ecTensorflow Search
https://qiita.com/tanakataiki/items/8655c76b68933905f3eaUnity&C Sharp
https://qiita.com/tanakataiki/items/fbb3a4782add01d73428対象
- Unity(Mocapデータ,Kinematic tree,Animation)
- C#(物理エンジン,幾何学計算)
- mlagent(強化学習SDK)
を使い慣れている方
略語
Additional Task Objective=ATO(完全に非公認です)
Immitation Objective =IO(上に同じ)概要
YAD2U yet another deepmimic to unity deepmimicの理論を用いた非公認プロジェクトです.
Unity Editor側
Scene内のParentから順に説明していきます.
Brainの設定
Stateを以下を参考にvector observationにより設定
https://qiita.com/tanakataiki/items/94c7778341a40438cc99#state
C#での実装は以下両手首は両前腕に固定しているため,Observationは冗長なので,はじきました.
https://github.com/tanakataiki/YAD2U/blob/01cf99dc03ada0a4db80263d3899a403a321101c/UnitySDK/Assets/ML-Agents/Examples/OneArmer/Scripts/OneArmerAgent.cs#L177
Actionは各関節のTargetRotationとしました.ETの実装
OnCollisionEnterの時にAgentをDoneして,終了します.その場合Penaltyとして,SetRewardを0にします.
ETは歩く場合足以外のCollisionに対して,ArmerAgentを動かす際はいりませんね.Mimic Pairについて
AgentとReference Record(IOの時) Goal(ATOの時今回はStrike)のセットになるように作成します.
これをInitialize Academy時に複数Instanciateすると並列分散学習ができるはず!
Agentの作成
作成したAgent赤いのはMaterialエラーです..なるべくMocapのアセットに近い体形にしました.
Agentの設定
Massを以下参考に設定
https://qiita.com/tanakataiki/items/94c7778341a40438cc99#body-parts-info
すべてKinematicsはFalseReferenceの設定
isKinematicはTrue
CollisionもOff
AnimationのKinematicTreeの中にそれぞれのPartsを入れ込む.Mimicの概要
https://qiita.com/tanakataiki/items/94c7778341a40438cc99#immitation-objective
ここに実装しておきました.
https://github.com/tanakataiki/YAD2U/blob/master/UnitySDK/Assets/ML-Agents/Examples/SharedAssets/Scripts/Mimic.csRecordの実装
ここに実装しておきました.
MocapDataや,自分で作成した,ImmitationしたいMotionをRecordし,学習時に読み込むことで,ReferenceMotionを再現することができます.
https://github.com/tanakataiki/YAD2U/blob/master/UnitySDK/Assets/ML-Agents/Examples/SharedAssets/Scripts/Recorder.csRSIの実装
RSIは今回TaskObjectiveも加味して,半分より前の状態すなわちArmerAgentではボールに触りに行く状態から始めています.
https://github.com/tanakataiki/YAD2U/blob/01cf99dc03ada0a4db80263d3899a403a321101c/UnitySDK/Assets/ML-Agents/Examples/SharedAssets/Scripts/Recorder.cs#L115Strikeの実装
https://qiita.com/tanakataiki/items/94c7778341a40438cc99#task-objetive
ここに実装しておきました.
https://github.com/tanakataiki/YAD2U/blob/master/UnitySDK/Assets/ML-Agents/Examples/SharedAssets/Scripts/Strike.csSkill Selector UIの実装
こんな感じでスキルごとのボタンを用意しておきました
つぶやき
うまいなぁと思った点は,Strikeって1度Strikeできたかどうか判定するのに,LSTMやRNNなど,時系列を使うこともできるんだけど,ものすごく複雑になるので,今回はHitしたら,以降Stikeによる報酬は1に設定することで,それ以上無駄なStrikeをしなくなる.(逆にこのようなフラグを設定しないと,いつまでも触り続ける)
微妙だなぁと思った点は,Targetでかいし,芯をとらえていない.
まあ,ただ,芯をとらえるMotivationはImmitationに比べると,あまり大きく無くて,指示通りのこと以上はしてくれない.
確かに,Targetの距離からEndEffector(ここでは右足)が近づけばRewardはExpに比例して(表現あってる?)大きくなるけど,一定の範囲内に来れば1,になるので,Rewardの7割を占めるImmitationを優先し,残り3割のStrike判定ぎりぎりのところを狙って蹴るのはRewardを最大にするうえで,重要で,まあある意味賢い
TaskのRewardの割合を大きくすると,Immitationしなくなるため,やっぱり暴れる...以下はイメージです...
ここら辺の感覚は実装してみるとわかる.
筆者が頑張って追実装していた去年の9月ごろにはDeepmimicのOpenなRepositoryはなかったので,お,これは作るしか!とか思ってたんだけど,今となってはコードはGithubにあるし,詳細が見放題(HyperParameter論文と違くねとか結構思ったけど,試行錯誤の上なのかなあ.)
https://github.com/xbpeng/DeepMimic公式のDeepmimic(windows版)は依存環境が多く,環境構築が鬼めんどいので,結局途中であきらめた.誰か環境構築の記事書いて~~








