prompt-toolkitをアップデートする

こんな感じのエラーがでる


Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a

PyYAMLはdistulits管理下なので、pipはuninstallできないらしい。

https://stackoverflow.com/questions/49911550/how-to-upgrade-disutils-package-pyyaml

pip 8.1.1なら気にせずにPyYAMLをアンインストール→最新版をインストールしてくれるらしい

なので、pipをダウングレードする
https://qiita.com/matsu911/items/72e0bb6224a30d205739


pip install pip==8.1.1

このあと、↓でprompt-toolkit のアップデート完了


pip install PyYAML -U


pip install prompt-toolkit -U

PyTorchでNBA選手の生涯得点を予想してみた

PyTorchを触り始めて、畳み込みニューラルネットワーク(CNN)まで行ったので、振り返りつつまとめ。

Deep Learningの応用分野として、画像処理が手法的に最も進んでいるっぽい。

Githubには上げていないが、試しに画像生成系を試してみると個人でで触るには、マシンパワーの要求がものすごく高い。
MNISTの手書き文字データは、1画像あたり縦*横*色の種類=28*28*1だが、ちょっとキャラの立ち絵なんかを
読み込むと400*1000*3とかが当たり前。
人間が見てわかるレベルに100*250*3にしてもまだ大きくて、30*75*3あたりにすると虫眼鏡が必要になるレベル。
これでも、枚数を揃えると、メモリの必要量が500GB(!!!)とかになって断念しました。
なおかつ、学習時間がかかるので、結構扱いづらいです。


と言うわけで、手に入りやすく、なおかつ件数が充実しているスポーツ関連データで予測できないかなと。
kaggleNBAのデータがあったので、それを使ってみます。


レブロンが移籍したので、記念(?)に予想してみます。
すでに、殿堂入りすることは確実なレブロンですが、
どこまでスタッツ(今回は得点)を伸ばせるか興味があったので、これをネタにすることにしました。


前処理は結構手間
データの穴が結構あります。
→そもそも3Pが始まったのが1980年以降なので、それまでにデビューしている人のデータは使えません。
→親切のために入れたであろう、blankのカラムの邪魔なこと邪魔なこと。結局前処理(という名の地味なデータ加工)に7割ほどの時間を使うことに・・・


さて本題。

レーニングデータは下記の5種類+ラベルとしてその選手の総得点

  1. 得点のみ4層
  2. 全てのスタッツで4層
  3. 全てのスタッツで8層
  4. 全てのスタッツで畳み込みあり、プーリングなし4層
  5. 全てのスタッツで畳み込み、プーリングあり4層

上記のの5種類で予測してみました。

結果まとめ
https://docs.google.com/spreadsheets/d/1TY5ynmPQBLVMFO7uBh3Rui4P0Fwiv6ybYwS-6Zmd5dY/edit?usp=sharing


結果を言うと、レブロンの生涯総得点予想値は34184になりました。
→この成績の通りになるなら、 歴代3位です



表の中で挙げられているレブロン以外の4人は、割と特徴的なスタッツを持つレジェンドです。
スコッティ・ピッペン:オールラウンダーSF → レブロンに似ているタイプ
コービー・ブライアント:スコアラー      → 得点力が一番優れている
ジョン・ストックトン:アシスト、スティール王 → 得点よりもアシスト、スティールに優れる
デニス・ロッドマン:リバウンド王     → 得点よりもリバンウンド、ディフェンススタッツに優れる
ロッドマンの予測値が上振れしていますが、レブロンと似ている(と書くとどこからか批判が来そう)ピッペンでの誤差が少ないので割といい結果かなという印象です。


以下、手法に対する考察みたいなもの

一番驚いたのは、全てのスタッツを入れただけで大幅に精度が改善したことです。
(参考:訓練データとラベル

スタッツ全てを訓練データに入れると得点以外が得意な選手は、そこで活躍して結果的にキャリアが長くなるというところまで学習してくれるかなと思っていたのですが、予想以上でした。
また、層を4->8に増やすと認識精度が上がったので、もう少し層を増やして過学習するかどうかを見てみたいところです。

畳み込みは、隣の配列と密接な関係がある場合に有効というのがよくわかりました。
今回のNBAのデータは、下記のcsvの形式なので、1人の選手のスタッツを2次元に変換すると
年齢軸とスタッツの種類軸になります。
同じ選手で29歳と30歳のときのアシスト(AST)が関連しそうな気はしますが(ゲームメイク担当者はその役割を同水準で求められ続けるetc)、
29歳のアシストとと30歳のときのスティール(STL)が畳み込み処理でするべきかというとかなり疑問だったので、
フィルタサイズをスタッツ軸のみに伸ばして、年齢軸には伸ばさないようにしました。
それでも累積誤差が増えました。

PyTorchで始める深層学習 でハマった

PyTorchで始める深層学習 ――数式なしで基礎から実装まで

PyTorchで始める深層学習 ――数式なしで基礎から実装まで

5/31発売の本なのにインストールモジュールのインスコも正確でないなんてどうなの?
写経くらいノンストレスでさせてくれよー。頼むよー。

エラーその1

大体こんな感じのエラーが出て


import torch
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\Admin\Anaconda3\lib\site-packages\torch_init_.py", line 76,
in
from torch._C import *
ImportError: DLL load failed: The specified procedure could not be found.

↓解決


conda install -c peterjc123 pytorch-cpu


https://github.com/pytorch/pytorch/issues/4518
少しのことにも先達はあらまほしきことなり


エラーその2

mldataのダウンロードでコケる
コマンド


mnist = datasets.fetch_mldata('MNIST original', data_home='./data/')
エラーメッセージ(抜粋)

TimeoutError: [WinError 10060] 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。


https://raw.githubusercontent.com/amplab/datascience-sp14/master/lab7/mldata/mnist-original.mat
ダウンロードできなかったので、↑を↓において
C:\anaconda3\envs\pytlesson\data\mldata


mnist = datasets.fetch_mldata('MNIST original', data_home='C:/anaconda3/envs/pytlesson/data')


畳み込みのところのソースの説明が明らかに不足
↓ブログのほうが参考になる
https://qiita.com/mckeeeen/items/e255b4ac1efba88d0ca1

畳み込みの理論的な説明は、↓が素晴らしい。

日本人が書いているので、変な訳が無いところもgood。

不実な美女か貞淑な醜女か

ロシア語同時通訳者が書く通訳業をネタにした笑えるエッセイ。本文の少なくとも80%は読者を笑わせにかかっているので、それだけでも買う価値はある。
少し真面目なことを書くと、「翻訳者=システム開発者」の図式を当てはめてみると意外と共通点があることに気付かされる。
1.翻訳者は「母国語の文章→外国語の文章」に変換していることは、ITエンジニアが「母国語で表現される機能→プログラミング言語で表現される機能」に変換することに類似している。
2.通訳では、不要な情報を取り除いた後に母国語に変換することで、より的確に伝える事ができる。本文233ページ参照。これは、 ITエンジニアが無駄な仕様を削って必要な機能のみを実装することに類似している。
3.文脈を正確につかむために、通訳は相手国の発言者の専門分野のみならず文化についても調べるところがある。 これは、 ITエンジニアが仕様を必要十分な機能に落としこむ際、業務知識の流れを知ることに類似している。

不実な美女か貞淑な醜女(ブス)か (新潮文庫)

不実な美女か貞淑な醜女(ブス)か (新潮文庫)

補足
大学院での担当教官に研究テーマのアイディアの出し方の1つに、「進んでいる研究分野の手法を別の(相対的にあまり進んでいない)分野に適用してみる」だった。
これを踏まえると、システム開発に比べて遥かに歴史のある翻訳業には学ぶことが多いといえる。

ネイティブアプリ構築時にメモリリークを防ぐ定石

過去に関わったプロジェクトで、リリース間際に問題になったので、同じ轍を踏まないためにメモ。

参考URL
http://www.slideboom.com/presentations/381148

  1. C#, .NET, WPFでアプリを構築するとき、イベントの発行元と受信側でイベントの登録を解除しないで、受信側が勝手に消滅しようとしても発行側から参照されているので、消えられない。 (38-42枚目参照)
  2. ↑の回避のためにMicrosoftはWeak Eventパターンを用意している。しかし、いちいち実装とか説明とかやってられないレベルで面倒(スライド53枚目参照)
  3. Livetを使おう

余談
スライドを眺めてみると、メモリリークは、ステートフル(状態をもつ・持ち続ける)リッチクライアントアプリケーション特有の問題みたいで、
Webアプリでは起こりえない構成になっていると説明されています。

つまり、普段Webアプリケーションばっかり書いている人たちが、リッチクライアントを書いた時にハマる典型的な問題みたいですね。
過去のプロジェクト状況を見るとバッチリ当てはまっています。。。。

volatile修飾子

見るたびに忘れるのでメモ。

その変数を使用している現在のスレッドから変数の値を変更しなくとも、
そのスレッドの外部から何らかの理由によって値が変更される可能性があることを
コンパイラに通知する。

別スレッドやOSからの通知で値が変更される変数につける修飾子

ls -altr  あるディレクトリ下のファイルを更新日時順に詳細表示

インフラチームに配属されましたので、先輩や上司からご教授頂いたテクニックをまとめることにします。

第一回目は、最も使用頻度が高いと思われるlsを取り上げます。

ls -altr
以下、manより引用。
ls - ディレクトリの内容のリストを表示する

  • a ドット (.) で始まるファイルも含めて表示します。
  • l ( ``エル (L)'' の小文字)。ファイルの詳細情報をロングフォーマットで表示します 。端末に

出力している場合、ロングフォーマットの前の行に、全ファイルのサイズの合計値を表示します。

  • t ファイルをアルファベット順に表示する前に、ファイルの最終修正日時の順 (新しいものほど先にくる)

にソートします。

-r 辞書式順序で逆順または時刻の古い順にソートします。

基本に忠実応用も自在ッ