Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

VSCodeでNeural Network Console付属のPythonを利用する。

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)