Sony Neural Network Console(以下NNC)の本を読んだ。
基本的にはNNCに付属の日本語マニュアルに記載されていることを、分かりやすく紹介している内容なので、マニュアルで十分なユーザーには不要な解説書なのだけれども、各設定項目の紹介であったり、サンプル・プロジェクトの実行から、その編集、オリジナル・データ作成と、そのプロジェクト実装までの手順が網羅されていて、大変読みやすかった。残念だったのがオリジナル・データを作成するための、いわゆる前処理の章。「数式なし、コーディングなしのディープラーニング」としていることからの制約なのか、RapidMiner Studioを用いたGUIによるデータ編集、整形が取り上げらている。この章だけは著者が変わったのか?やる気が尽きたか?と思わせるかの如く、それまでの懇切丁寧な説明から一転して大雑把なところがあり、出版社の正誤表による訂正も、該当の章に集中していた。
http://www.ric.co.jp/book/error/error1114.html
実際、Pythonを使えば数行でできるものを、というレビューもAmazonに投稿されている。
きっと、読者の考えが及ばない事情があったのだと思う。Pythonを使わせるにしても、その環境構築の説明も必要となるだろうし。加えてコーディング解説も収録するならば「コーディングなし」とは何だったのか?と読者を戸惑わせることになったかもしれない。
とはいえ、NNCの裏ではPythonが動いており、NNCの機械学習はPythonに依存している。「コーディングなし」の前提は置いて、Pythonの環境構築については、むしろNNCのPythonを借りてみる、という選択肢もあったのではないかと思った。
もちろん、迂闊に手を出してpipやcondaでライブラリの整合性が破綻し、NNCが動作しなくなるリスクがあるので、分かっていても採用できない手段ではあると想像するが。
このエントリーでは、あくまで「お遊び」としてNNC付属のPython環境を利用するVisual Studio Code(以下VSCode)環境を構築してみる。
環境の確認
前提としてNNCが次のパスにインストールされているとすると、
c:\nnc120\
Pythonはその下のlibs\Miniconda3フォルダに、condaやpipはさらに下のScriptsに格納されている。環境変数Pathへ、これらのフォルダ・パスを設定する。
C:\nnc120\libs\Miniconda3 C:\nnc120\libs\Miniconda3\Scripts
コマンドプロンプトから次コマンドを実行する。パッケージ一覧のファイル・パスは任意指定。
このエントリー末尾に、それぞれのファイルの出力結果を掲載している。
python -V conda info -e conda list -n "base" > d:\temp\0923\condalist.txt pip list > d:\temp\0923\piplist.txt
Python 3.6.2がインストールされており、例えば次の計算関係のパッケージが導入されているものの、
numpy 1.14.0 py36h4a99626_1 pandas 0.22.0 py36h6538335_0 scipy 1.0.0 py36h1260518_0
PyLintなど、開発者の作業環境に貢献するようなパッケージは含まれていない。
またpipのバージョンが古いと注意されているが、PyLintのインストールにはcondaを使うつもりなので無視する。
ちなみにnnablaは、NNCが利用するSony独自のPythonライブラリで、
nnabla 0.9.9.post6+g8f6ff17 <pip> nnabla-ext-cuda 0.9.9.post1+gd521689.cuda91.cudnn7 <pip>
次のリンクから、必要な情報を入手できる。
nnabla.org
VSCodeの設定
環境確認から得た情報に基づくと、次の作業を実施することで最低限のPython環境を整えられる。
PyLintのインストール
次のコマンドでPyLintをインストールする。
conda install pylint
依存関係のあるパッケージはopensslと証明書を除いては、NNCには含まれていない。
opensslと証明書が更新されるが、問題ないと判断し、インストールを継続する。
インタープリターの設定
VSCodeへのPython拡張インストール手順は省略。Visual Studio marketplaceから次の拡張をインストールすればよい。
marketplace.visualstudio.com
Pythonのテストコード用フォルダを開き、コードを記述する。
def hello(s): print(f"hello {s}") hello("world")
ctrl+shift+pでコマンド・パレットから「Python:インタープリターを選択」を選ぶと、
NNC配下のPythonが表示されるので、選択する。
適当にソースへ誤りを記述して、ファイルを保存すると、PyLintが機能しているのがわかる。
この後、デバッグ実行してみる。ブレークポイントも機能するし、出力も正常。
もしかすると、普通にPython環境を構築するよりも簡単かもしれない。
きっと、これだけでも何とかなると思う。
余談
冒頭で紹介した書籍の増補改訂版が近日、出版されるそうだ。
クラウド版NNCの活用にフォーカスし、演習テーマも拡大しているという。とはいえ、次の文言も併記されている。
「Windows版NNC対応の本書旧版につきましては、単行本(ソフトカバー)完売後も、Kindle版/EPUB版電子書籍の形で販売を継続致しますので、そちらをご利用くださいませ。」
パッケージ一覧
🔎conda list
# packages in environment at C:\nnc120\libs\Miniconda3: # # Name Version Build Channel asn1crypto 0.22.0 py36_0 bokeh 0.12.13 py36h047fa9f_0 boto3 1.5.29 <pip> botocore 1.8.43 <pip> bzip2 1.0.6 vc14_3 [vc14] ca-certificates 2017.08.26 h94faf87_0 cffi 1.10.0 py36_0 click 6.7 py36hec8c647_0 cloudpickle 0.5.2 py36_1 conda 4.4.10 py36_0 conda-env 2.6.0 h36134e3_1 configparser 3.5.0 <pip> console_shortcut 0.1.1 py36_1 contextlib2 0.5.5 <pip> cryptography 1.8.1 py36_0 cycler 0.10.0 py36_0 cycler 0.10.0 <pip> Cython 0.25.2 <pip> dask 0.17.0 py36_0 dask-core 0.17.0 py36_0 decorator 4.1.2 <pip> decorator 4.0.11 py36_0 distributed 1.21.0 py36_0 docutils 0.14 <pip> freetype 2.8 h51f8f2c_1 futures 3.1.1 <pip> h5py 2.7.1 <pip> h5py 2.7.1 py36he54a1c3_0 hdf5 1.10.1 h98b8871_1 heapdict 1.0.0 py36_2 icc_rt 2017.0.4 h97af966_0 icu 57.1 vc14_0 [vc14] idna 2.5 py36_0 imageio 2.2.0 py36had6c2d2_0 intel-openmp 2018.0.0 hd92c6cd_8 jinja2 2.10 py36h292fed1_0 jmespath 0.9.3 <pip> jpeg 9b vc14_0 [vc14] libpng 1.6.34 h79bbb47_0 libtiff 4.0.9 h0f13578_0 locket 0.2.0 py36hfed976d_1 lxml 4.2.1 <pip> markupsafe 1.0 py36h0e26971_1 matplotlib 2.0.2 <pip> matplotlib 2.1.2 py36h016c42a_0 menuinst 1.4.7 py36_0 mkl 2018.0.1 h2108138_4 msgpack-python 0.5.1 py36he980bc4_0 networkx 1.11 <pip> networkx 2.0 <pip> networkx 1.11 py36_0 nnabla 0.9.9.post6+g8f6ff17 <pip> nnabla-ext-cuda 0.9.9.post1+gd521689.cuda91.cudnn7 <pip> numpy 1.14.0 py36h4a99626_1 olefile 0.44 <pip> olefile 0.44 py36_0 openssl 1.0.2n h74b6da3_0 packaging 16.8 py36_0 pandas 0.22.0 py36h6538335_0 partd 0.3.8 py36hc8e763b_0 Pillow 4.2.1 <pip> pillow 4.2.1 py36hdb25ab2_0 pip 9.0.1 py36_1 protobuf 3.4.0 <pip> psutil 5.4.3 py36hfa6e2cd_0 pycosat 0.6.3 py36h413d8a4_0 pycparser 2.17 py36_0 pyopenssl 17.0.0 py36_0 pyparsing 2.1.4 py36_0 pyqt 5.6.0 py36_2 python 3.6.2 0 python-dateutil 2.6.0 py36_0 python-dateutil 2.6.1 <pip> python-pptx 0.6.7 <pip> pytz 2017.2 py36_0 pytz 2017.2 <pip> PyWavelets 0.5.2 <pip> pywavelets 0.5.2 py36hc649158_0 pywin32 220 py36_2 pyyaml 3.12 py36h1d1928f_1 qt 5.6.2 vc14_5 [vc14] requests 2.14.2 py36_0 ruamel_yaml 0.11.14 py36_1 s3transfer 0.1.13 <pip> scikit-image 0.13.1 py36hfa6e2cd_1 scipy 1.0.0 py36h1260518_0 setuptools 36.5.0 <pip> setuptools 27.2.0 py36_1 sip 4.18 py36_0 six 1.11.0 <pip> six 1.10.0 py36_0 sortedcontainers 1.5.9 py36_0 tblib 1.3.2 py36h30f5020_0 tk 8.5.18 vc14_0 [vc14] toolz 0.9.0 py36_0 tornado 4.5.3 py36_0 tqdm 4.17.1 <pip> vc 14 h0510ff6_3 vs2015_runtime 14.0.25123 0 wheel 0.29.0 py36_0 XlsxWriter 1.0.2 <pip> yaml 0.1.7 hc54c509_2 zict 0.1.3 py36h2d8e73e_0 zlib 1.2.11 h8395fce_2
🔎pip list
asn1crypto (0.22.0) bokeh (0.12.13) boto3 (1.5.29) botocore (1.8.43) cffi (1.10.0) click (6.7) cloudpickle (0.5.2) conda (4.4.10) configparser (3.5.0) contextlib2 (0.5.5) cryptography (1.8.1) cycler (0.10.0) Cython (0.25.2) dask (0.17.0) decorator (4.1.2) distributed (1.21.0) docutils (0.14) futures (3.1.1) h5py (2.7.1) heapdict (1.0.0) idna (2.5) imageio (2.2.0) Jinja2 (2.10) jmespath (0.9.3) locket (0.2.0) lxml (4.2.1) MarkupSafe (1.0) matplotlib (2.1.2) menuinst (1.4.7) msgpack-python (0.5.1) networkx (2.0) nnabla (0.9.9.post6+g8f6ff17) nnabla-ext-cuda (0.9.9.post1+gd521689.cuda91.cudnn7) numpy (1.14.0) olefile (0.44) packaging (16.8) pandas (0.22.0) partd (0.3.8) Pillow (4.2.1) pip (9.0.1) protobuf (3.4.0) psutil (5.4.3) pycosat (0.6.3) pycparser (2.17) pyOpenSSL (17.0.0) pyparsing (2.1.4) python-dateutil (2.6.1) python-pptx (0.6.7) pytz (2017.2) PyWavelets (0.5.2) pywin32 (220) PyYAML (3.12) requests (2.14.2) s3transfer (0.1.13) scikit-image (0.13.1) scipy (1.0.0) setuptools (36.5.0) six (1.11.0) sortedcontainers (1.5.9) tblib (1.3.2) toolz (0.9.0) tornado (4.5.3) tqdm (4.17.1) wheel (0.29.0) XlsxWriter (1.0.2) zict (0.1.3)