自分の頭で考えない人 ― 2020年01月13日 20:55
「自分の頭で考えない人」、周りにいませんか?
俗にいう「指示待ちの人」も当てはまると思います。
以前に投稿した”ルーチンワークな人”もそうですね。
指示待ちの人は、指示された仕事の意味や目的を自分で考えていないから”指示されたこと”しかやらない。
相手が何を期待しているか考えない。
単に与えられた作業をやっているだけ。
下手をするとアルバイトやパートの人から指示されてたりする。
これでは、何年たっても成長しない。
それでいて、”給料が安い”なんて言っているのだから手に負えない。
「自分の頭で考える」とは
”自分の頭で考える”人は常に疑問を持っている。
自分の頭で考える=「疑問を持てる」&「疑問を解決できる」
自分の頭で考える人は、仕事を自分で進められるということ。
単に自分勝手に仕事を進めるということではなく、仕事の目的をしっかり理解してそれを達成するための最善のやり方で進めるということ。
要するに”仕事ができる”と評される人。
”自分の頭で考える”人は、適切な解を導き出す力がある。
仕事を進めていく過程では、さまざまな難題にぶち当たる。
それは単純に解決できるようなものではなく、気の遠くなるような調整作業や前提を組み替えまくることにより、少しずつ少しずつ前に進めなければならないことが多い。
普通の人は、「こんなのオレにはどうしようもないや」と投げ出し、誰かに責任転嫁したり、逃げたりする。
「すぐあきらめる」というのは、思考体力がない人(考えない人)の特徴のひとつ。
「自分の頭で考える」人は、そんなことはしない。
わからなくなった時点で、過去の議論を見直し、整理し、知見がある人に聞き、いったいどこがポイントなのか明確に理解しようとする。
どこがボトルネックなのか明確化した後は、それを解決するために全力を尽くす。
日々の仕事の中で、上司から難しい仕事を振られるなどして、粘り強く解を出していく力は鍛えらるが、「疑問を持つこと」は実は難しい。
いちいち疑問を持たなくても仕事は進むし、疑問を持つこと(=考えること)は疲れる。
下手な聞き方をしたら、上司や同僚から不評を買うかもしれない。
しかし、本当の意味で考える仕事をしたいのであれば、「疑問を持つ」ということがファーストステップになる。
自分の仕事の目的が何なのか、一番良いやり方なのか。
まずは、これらの疑問を持つように心掛けたい。
ディープラーニング【システム構築の準備編・・・その2】 ― 2020年01月12日 21:05
年末に手配しておいたパソコンが年明けに届きました。
グラボ(GPU)搭載のPCです。
ディープラーニングの学習はCPUだと時間が物凄くかかるのでGPUは必須です。
半自作PCでもよかったのですが、面倒だったのでDELLのXPS タワー スペシャルエディションにしました。
会社で使うものなので、なるべく手間をかけず確実なものにしたつもりです。
HP製パソコンでもよかったかもしれないけど、XPSはカッコいい!

<主な仕様>
CPU:第9世代インテル® Core™ i7 9700K
GPU:NVIDIA® GeForce RTX™ 2070 SUPER 8GB GDDR6
メモリ:16GB
ストレージ:1TB M.2 PCIe NVME SSD + 2TB SATA 7200RPM HDD
GPU:NVIDIA® GeForce RTX™ 2070 SUPER 8GB GDDR6
メモリ:16GB
ストレージ:1TB M.2 PCIe NVME SSD + 2TB SATA 7200RPM HDD
仕様だけ見るとゲーミングパソコンみたい。。。
でも、これなら何も悩まずにすぐに使えるはず。
とは言ってもPythonやエディタなどは入れないといけない。
問題なのは、Pythonのモジュールをネット経由でインストールできないこと。
会社のLAN経由だと弾かれてサーバに繋がらない。
必要なモジュールをダウンロードしてインストールしなければならない。
ニューラルネットワークコンソール(NNC)はダウンロードしたものをコピーするだけで大丈夫なのでいいけど、Neural Network Libraries(Nnabla)のPythonモジュールはPIPコマンドでインストールしないといけない。
Python関連では、OpenCVやNumPyなども必要。
オンラインだと関連する必要なモジュールも自動でインストールしてくれるので簡単なんだけど手動でインストールする場合は必要なモジュールを調べて個別に入れないといけない。
それでは、始めます。
Pythonのインストールと環境構築
1.Python環境のインストール
Nnablaは64bitでないと動かないのでPythonは64bitバージョンをインストール。
Pythonのインストールについての日本語の情報はあふれるほどありましたが、”python Japan”さんのHPをメインに参照しながら行いました。
Pythonのバージョンは、3.7にしました。
最新バージョンは、3.8みたいでしたが、Nnablaは3.8に対応していないので。。。
まずはオンラインでインストールできる環境でPythonのモジュールをPIPコマンドでインストールして何のモジュールが必要か調べました。 。( ..)φメモメモ
<必要なモジュール>
OpenCV:システムではUSBカメラから直接画像を取り込むので必要
opencv_python-4.1.2.30-cp37-cp37m-win_amd64.whl
numpy-1.18.1-cp37-cp37m-win_amd64.whl
Qt5:UI構築で使用
PyQt5-5.14.1-5.14.0-cp35.cp36.cp37.cp38-none-win_amd64.whl
PyQt5_sip-12.7.0-cp37-cp37m-win_amd64.whl
Pyvisa:デバイスを発光させるための電源をGP-IBで制御するのに必要
PyVISA-1.10.1.tar.gz
Nnabla:SONYさんのディープラーニングライブラリ
nnabla-1.4.0-cp37-cp37m-win_amd64.whl
configparser-4.0.2-py2.py3-none-any.whl
numpy-1.16.6-cp37-cp37m-win_amd64.whl
PyYAML-5.3-cp37-cp37m-win_amd64.whl
contextlib2-0.6.0.post1-py2.py3-none-any.whl
Pillow-7.0.0-cp37-cp37m-win_amd64.whl
tqdm-4.41.1-py2.py3-none-any.whl
h5py-2.10.0-cp37-cp37m-win_amd64.whl
requests-2.22.0-py2.py3-none-any.whl
pywin32-227-cp37-cp37m-win_amd64.whl
boto3-1.10.47-py2.py3-none-any.whl
imageio-2.6.1-py3-none-any.whl
Cython-0.29.14-cp37-cp37m-win_amd64.whl
protobuf-3.11.2-cp37-cp37m-win_amd64.whl
six-1.13.0-py2.py3-none-any.whl
chardet-3.0.4-py2.py3-none-any.whl
certifi-2019.11.28-py2.py3-none-any.whl
idna-2.8-py2.py3-none-any.whl
urllib3-1.25.7-py2.py3-none-any.whl
botocore-1.13.47-py2.py3-none-any.whl
jmespath-0.9.4-py2.py3-none-any.whl
docutils-0.15.2-py3-none-any.whl
それから、NnablaでGPUを使用する場合はGPU対応のモジュールが必要みたいです。
nnabla_ext_cuda-1.0.18-cp37-cp37m-win_amd64.whl
nnabla-1.0.18-cp37-cp37m-win_amd64.whl
ただ、学習はNNCで行うので必須ないかも。推論はGPU無しでも速いから。
必要なモジュールのwhlファイルはPyPIからダウンロードしました。
PyPI · The Python Package Index:https://pypi.org/
Nablaは関連モジュールが多くて少し大変でしたが、バージョンなどに注視して無事にダウンロード完了。
次にダウンロードしたモジュールをオフラインでpip installする。
pip install --no-deps whlファイル名
この時にカレントディレクトリをダウンロードしたファイルのが保存されているディレクトリに移動しておくとファイル名指定が少しだけ楽になります。
pipのオプション:”--no-deps”で、関連ライブラリをインストールせず、指定したライブラリを単体で導入することができます。これにより外部接続をしないでインストールが可能になります。
必要なすべてのモジュールのpip installが完了したところで、Python環境でimportしてエラーが出ないことを確認しました。
NVIDIA GPUを使用できるように、”CUDAツールキッット”と”cuDNN”をNVIDIAのHPからダウンロードしてインストールします。
これも推論でGPUを使わなければ要らないかも。
でも取り敢えず入れておきました。
cuDNNは、bin、includeとlibを"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\V〇〇"にコピーします。
2.エディタのインストール
エディタは、さすがにメモ帳では辛いのでVisual Studio Code(VS Code)をインストールしました。
VS CodeはポータブルモードなんてのもあってUSBメモリで持ち運べるバージョンがあるんですね。
ダウンロードページでWindowsではZIP形式を選択するとポータブルモードのVS Codeがダウンロードできます。
なお、ポータブルモードは自動でアップデートされないのでアップデートするときは手動でダウンロードする必要があります。
ここで問題発生・・・。
会社のNET環境では何故かMicrosoftのHPからダウンロードできない。。。
Windowsのバージョンアップなどはできるので、VSCodeSetup-x64-1.41.1.exeを別のPCでダウンロードしてそれを実行すればインストールできそう。できました!
あとエディタでnotepad++があるとチョコっとした変更を行うときに便利なのでこれも入れておきました。
Visual StudioもPythonをサポートしていますが、それほど大がかりなソフトを作成するわけではないので今はVS Codeで十分。
ブレークポイントを設定してデバックもできるしアップデートも毎月行われています。
これで、とりあえず環境の整備が完了しました。
次回は、NNCでGPUを使用して学習させてみたいと思います。
CPUだと数百個くらいのデータだと2~4時間くらいで学習が終わりますが、データ数が1万個くらいに増やすと8時間以上かかってしまいます。
GPUだとどれくらい速くなるか楽しみです。
途中で投げ出す人 ― 2020年01月08日 23:10
なにかを最後までやりきるのはなかなか困難なこと。
でも、信頼を得るには途中で投げ出さないで最後までやりきることが必要。
些細なことでも途中で投げ出したら信頼はされない。
投げ出す人はやっぱり言い訳が多い。
”だって経験がないから”、”私には難しすぎるから”、・・・
相手にそのように返せば難しいことや面倒なことはやらなくて済むから、無意識に言い訳がましいことを言ってしまうのだろう。
こんな人は信頼を得る前に成長のチャンスさえも失ってしまっている。
あなたの周りにもいませんか。
投げ出さずに一生懸命にやる人には、
周囲のベテランが「こうすればいいよ」などと、手を差し伸べてくれる。
経験がなくても、やり方が分からなくても、自分なりになんとかしようと頑張る。
その投げ出さない姿勢は、周囲の人から大きな信用を得ていく。
仕事をもらうのも、課題を出されるのも、チャンスをもらえるのも、場を提供してもらうのも、
何もかも、相手から大事なものを受け取ったと考える。
そのような考えができる人は、簡単に投げ出すようなことはしない。
そんな「投げ出さない性格」の人は、ものすごく成長の可能性を秘めていて、たくさんの人に愛され信頼されるようになるはず。
”〇〇だからできない”という言葉を使わないように意識するだけで行動が変わり考え方も変わっていく。
”××するにはどうすればよいか”と考えて行動に移す。
それを繰り返して最後までやりきる。
最後までやりきることはすごく大変なこと。
だから、やりきることができれば必ず信頼される。
目標設定が正しくできない人 ― 2020年01月05日 20:20
目標を正しく設定できる人は意外に少ない。
部長や課長が提示した今年度の運営方針をそのまま目標にしてしまっているようなことをよく目にする。
例えば、”不良率半減”、”生産性向上:50%Up”とか。。。
これがそのまま係単位の組織の目標になっている。
ちょっと待ってよ。部長(課長)が言った、”不良率半減”、”生産性向上:50%Up”は方針で目標じゃないよ! ”方針”、”スローガン”でしょ。
目的には成り得るけど、そのまま目標にしてはいけない。
こんな目標設定をやっているといつまでたっても成果が上がらないし成長もしない。
目的と目標はセットで考える。
目標はその目的を意識して考え設定する。
目標が目的になっていることって案外多い。
やっている改善が部分最適化で逆に改悪になっていることってあるよね。
このようにならないために目的はしっかり理解しておく必要がある。
「言語化された目的」と、「計測可能である目標」。この2つを意識することが大切。
”生産性向上:50%Up”を目的にしたら、それを達成するための施策を目標にする。
ここで、”生産性向上:50%Up”は抽象的なので、さらに自分にとっての生産性50%Upは何かを考える。
例えば、「資料作成の質を上げて作成時間の短縮を図りたい」と考えたら
「上司との資料の修正やり取りに6回以上かかっているので3回以内で終わるようにする」というような目標を設定する。(定量化する)
次にこの目標を達成するためにやらなければいけないことを考えてリストアップする。
(計画:アウトラインを考える)
資料作成前に上司に完成イメージを伝えてチェックしてもらう。
先輩たちが作成した資料を見て参考にする。
誤字脱字を減らすために提出前に2回チェックする。
・・・。
など、行動レベルに落とし込む。
リストアップしたことをやって資料の修正回数が改善されているかを確認しながら、もし改善傾向がないようなら”やることリスト”を再度検討する。
要するに、PDCAサイクルを回しながら進める。PDCAサイクルは1回では不十分で2回、3回と回し続けることが重要。
ここで、目標達成の計画(アウトライン)が全く見当がつかないなら目標にしない方がよい。
絶対に達成できないから。できたとしても再現性が極めて低いから。
目的を再確認して目標を細分化するなどして計画(アウトライン)が思いつくレベルに落とし込んでそれを目標にする。
このように目標を設定して取り組むとおおよそのことは達成できる。
仮に達成できなくてもある程度の成果は上がっているはず。また、何が原因で達成できなかったかがわかっているので継続もしやすい。
目標設定が正しくできる人は、成長スピードが格段に速い。
PDCAサイクルを回しながら推進させるから、どんどん状況が好転してくる。
成長が加速していき、成長スピードは確実に上がっていくはず。
しかも成果を出しながら。
まとめ
「言語化された目的」と、「計測可能である目標」。この2つを意識することが大切。
目標を設定する時は目的を意識する。
目標は定量化する。
目標設定時に計画(アウトライン)まで考えておく。
実行時は、”やることリスト”(計画)に沿ってPDCAサイクルを回しながら実施する。
目標設定が正しくできる人は、成長スピードが格段に速くなる。
ディープラーニング【システム構築の準備編・・・その1】 ― 2020年01月03日 13:00
・Neural Network Libraries(nnabla)について
NNCのサポートページ(チュートリアル)を見ると、Neural Network Console(NNC)による学習済みニューラルネットワークのNeural Network Librariesを用いた利用方法は2つの方法があることがわかりました。
一つは「コマンドラインインターフェイスを用いて推論を実行する方法」で、もう一つは「Python APIを用いて推論を実行する方法」
2つの方法ともにPythonが必要で、NNCがインストールしてあれば同梱のPython環境がそのまま利用可能なようです。
1. コマンドラインインターフェイスを用いて推論を実行する方法
”一切のコーディングを行うことなく、最も簡単に推論を実行させることができる”とある。
ただし、毎回Pythonを起動し、学習済みネットワークの構造やパラメータ、認識対象のデータセットの読み込みを行うため、実行速度が遅いという欠点があるようだ。
この方法は実験的に推論を実行させたい用途などに適していて、システムに組み込みで使用するのには向いていないみたいだ。
まずは、Neural Network Librariesが利用できるように環境を準備する。
Neural Network Librariesをインストールする必要があるので、以下のドキュメントをご参照して
インストールします。
インストールが完了したら、CLIコマンドをチュートリアルのとおりに実行すれば推論できます。
チュートリアルではPython環境でCLI.pyを実行するようになっていますが、Windowsのコマンドプロンプトでnnabla_cli.exeを実行しても同様なことが可能です。
チュートリアルに書いてあるようにこのやり方は推論対象のデータセットをCSV形式のファイルで準備しておいて結果も指定したCSVファイルに書き出されます。
確かにシステムに組み込んで使用するには向いていないですが、リアルタイムの必要がなければ十分活用できるかもしれません。
2. Python APIを用いて推論を実行する方法
チュートリアルには、”Neural Network Librariesの豊富な機能を直接利用することができ、外部のプログラムとの連携の容易さや、パフォーマンスにも優れています。”と書いてあります。
求めていたものは、これですかね!
この方法では、Pythonでコードを書く必要がありますが、システムに組み込むには最適な方法です。
しかも、NNCで作成したネットワークや学習済みデータはそのまま流用できるので、ネットワークの検討・作成~学習はNNCで行うことができます。
Neural Network Librariesを使用すればネットワークの作成~学習もコードを書いて実現できますが、せっかくNNCがあるのでこれを利用しないのはもったいない。
SONYさんもこのように運用するためにNNCで作成したネットワークをPythonコードにExportする機能が用意してあり、チュートリアルにも記載されています。
3.C++ ライブラリ
Neural Network LibrariesはC++ライブラリもあるのでC++の開発環境でもシステムを構築できます。
そもそも、Neural Network LibrariesのコアはC++で書かれているそうです。
ただ、現時点でC++ライブラリのドキュメントが整備されていないみたいです。
また、C++のライブラリは自分で構築しないといけないみたい。
なので、かなり敷居が高く感じられました。
組み込み系のバリバリなエンジニアさんなら苦にならないのでしょうが。。。
ここで、ソフト作成をPythonかC++でやるか少し迷ってしまいました。
実は、C++やVBでのソフトは作成した経験はあるのですがPythonは未経験で全く触ったことがありません。
Pythonは非常に人気が高まっていて特にデータサイエンス・機械学習の分野でスタンダードな言語のようです。
言語仕様も習得しやすく、情報も豊富です。
ライブラリ(モジュール)も豊富に存在していて、”やりたいこと”を1から作らなくていいみたい。
プロのプログラマーでない私にとっては開発言語は手段の一つ、そもそも、AI(ディープラーニング)自体が私にとって初めてなこと。
新しいことに触れると”ものの見方”や”考え方”の幅が広がるような気がします。
もし満足できないものしか作れないとわかったらプロの人にお願いすればいい。
得た知識はその時にも役に立つはず、きっと。
ということで、グラフィカルユーザインターフェース(GUI)はどうすればいいの? とかPythonはインタープリタだよね。遅くないの?って疑問は残っていますが、とりあえずPythonで進めようと思います。
使用するパソコンはWindowsなのでPythonのインストールから始めないといけない。
次はPython関係の環境構築に関して調べて整備していきます。
ディープラーニング【システム構築の準備編・・・その2】 へ続く・・・
最近のコメント