ベスパリブ

ベスパもってないです。バイク買いました。

JDLAのG検定(ジェネラリスト検定)受かった

2018年11月24日開催のJDLA Deep Learning for GENERAL 2018#2に合格しました。

合格者の内訳は以下の通りです。

総受験者数 2,680名

合格者数  1,740名

約65%の合格率です。

合格証のPDFは後日配布だそうです。

勉強の際は以下のサイトを参考にしました。

JDLAのG検定に合格できたのでまとめてみる - エムティーアイ エンジニアブログ

どういう勉強したか

深層学習教科書 ディープラーニング G検定(ジェネラリスト) 公式テキストを2回読みました

上記の公式テキストですが、普通に読み物として良いですし、どのように人工知能研究が進んできたのかという歴史が知れるのでおすすめです。3回くらい読んで頭に叩き込んでれば半分くらいの問題は瞬殺できるのではないでしょうか。私は2回しか読んでないのでうろ覚えのところがありました。次やるなら3回読みますという自戒を込めて書いてます。

人工知能は人間を超えるか (角川EPUB選書)を1回読みました

人工知能は人間を超えるか」は公式の言う参考図書であり、読み物としても良いです。Kindleで1000円しないので買うと良いです。

適当に用語を検索して覚えた

上記の本だけでは本番の出題範囲は網羅できず、適当に用語を調べる必要があります。具体的には上で上げた参考サイト様が書いてあるように、例えばアンサンブル学習のブースティングやバギングって何?というようなものです。あとは簡単なF値の計算や偏微分の計算やプーリング層の計算とかありました。本当に簡単な計算なので、数学苦手な人でも基本的なことを知ってれば解けるはずです。プーリング層の畳み込み計算はパディング、ストライドを知ってる必要があります。本気で数学苦手なら大した問題数出ないので捨てても無問題ですが、デップラの試験受けといて数学から逃げていいのかという本質的な問題は残ります。

毎日はてブの「テクノロジー」の人気エントリーを適当に読んだ

これは別に勉強でやってるわけではなくて日課みたいなものなのですが、振り返ってみれば時事問題を解くのに役立ってました。時事問題は本に情報として残りにくく体系的に書きにくい情報なので、日々ニュースをウォッチするのがベターです(といっても時事問題や訴訟問題は公式テキストにある程度まとめられてあるので、そういう意味でも公式テキストは良かったです)。

その他

公式の参考図書は他にもあり、

などがあります。

これら読んでないのに受かっていいのだろうかという問題はあります。ただ大学時代に人工知能の研究をしてたのと、「ゼロから作るDeep Learning」という本を代わりにやっててその辺の知識も活きていたと思うので、「読まなくても受かった」というわけではなかったと思います。

本番当日のアドバイス

  • 紙とペンを用意する
  • 試験中調べることが可能なので、アプリのKindleで公式テキスト起動しておくと便利
  • 問題数に対して試験時間短いので、「調べすぎて時間足りなかった」に注意
  • 本番は「問題にチェック」という便利な機能があるので、それを使えば後から自信のない問題を見直すことが簡単にできる
  • ログインのテストはしておく
  • 試験開始直前に「あなたの試験一覧」に受験できる試験が表示されるので、当日焦らない(焦った)
  • TruePositive, FalseNegativeのマトリックス表は手元に書いておくと便利(これ頭の中でできないんだけど)
  • トイレにはいっておく

【C++】charからstringへの変換

C++全然わからん。

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main(int argc, char const *argv[]){
    string s = "ABC";
    map<string, int> mp;
    mp["A"] = 0;
    //mp[s[0]]++; // エラー
    mp[{s[0]}]++;
    cout << mp["A"] << endl;
    return 0;
}

char型のものは{}で囲めばstring型になってくれるらしい。

int main(int argc, char const *argv[]){
    char c = 'c';
    string s;
    s = {c};
    s = string({c});
    s = (string){c};
    
    //cout << {c} << endl;  // コンパイルエラー
    cout << string({c}) << endl;
    cout << (string){c} << endl;
    
    return 0;
}

ただし、上記のようにエラーになる場合があるので、string()で囲むのが無難か。

参考URL: http://marycore.jp/prog/cpp/convert-char-to-string/

PS: C++ってリファレンス読むのしんどい。

C++で文字列のスライス

C++全然わからない。

最近C++を使っているのですが、Pythonでいう文字列のスライスが使いたい。

s = "abcdef"
print(s[0:3])  # ==> "abc"

こんなの。

調べてもないっぽいのでそれっぽいものを実装。

#include <iostream>
#include <string>

using namespace std;

string str_slice(string s, int start, int end){
    if(end > s.size()){
        end = s.size();
    }
    if(end-start <= 0){
        return "";
    }
    return s.substr(start, end-start);
}

int main(void){
    string s = "abcdef";
    
    cout << str_slice(s, 0, 3) << endl;  // ==> "abc"
    cout << str_slice(s, 0, s.size()) << endl;  // ==> "abcdef"
    cout << str_slice(s, 0, 100) << endl;  // ==> "abcdef"
    cout << str_slice(s, 1, 0) << endl;  // ==> ""
    return 0;
}

start, endはint型でよいのだろうか。size_t型をよくわかっていない。 なるべくPythonっぽい挙動に似せた。Pythonはマイナス値取るけどあんまり使わないので実装していない。

初めて勉強会で発表してきた話

10/19の話ですが、初めて勉強会で発表をしました。

はんなりPythonという勉強会です。

hannari-python.connpass.com

発表内容はこれ

発表で使用したソースコードこれ

発表の内容云々は置いといて、発表の準備が大変だったので次回に活かすために備忘録を残します。

資料を何で作るか

Googleスライドで作成しました。 ツールの候補としては以下。

ノートPCにはOfficeが入っていたのでそれで発表したかったのです。Googleスライドで作成し、PowerPointにエクスポートする形で発表しました。パワポにエクスポートしてもレイアウトがずれなかったです。

スライドのテーマ

おすすめのGoogle Slideテンプレートを参考にしました。 個人的にテンプレートパークが種類豊富で好き。

スライド中のコード

スライド中にコードを載せたけど、文字が小さいと全く見えない(プロジェクタの関係もあった)。

全てを説明しようとするのではなく、ポイントのみを抽出してざっくり解説くらいでいいと思った。コードはGitHubGistに上げて、興味がある人はそれを参照してもらうようにするで十分な気がする。

準備期間

3日くらいかかった。丸々3日。少し時間かかりすぎかもしれない。 でも余裕を持って、一週間前から準備するのが良いと思った。

あと前日にノートPCの調子が悪くなって突然ブラックアウトするとかあったので、やっぱり余裕を持って行動しよう。

ビジネスマナープログラミングまとめ

命令形は失礼

#define Would
#define you
Would you delete it;

master, slaveは失礼

https://bugs.python.org/issue34605

masterの代わりにleader、slaveの代わりにfollowerなどを使いましょう。

endif, endforを使う

end = endif = endfor = ""
for i in range(10):
    if i%2 == 1:
        print(i, "odd")
    endif
endfor

役職の高いものから順にIPアドレスを割り当てる

役職の偉い順にIPアドレスを自動的に振るにはどうしたらよいでしょうか。 - カレーなる辛口Javaな転職日記

DHCPでの配布をやめると辛いので、役職の高い人のIPアドレスのみ別ネットワークにし固定IPアドレスで管理する方法が無難ではないでしょうか。

まとめ

プログラマ向けビジネスマナー本を作ってPHP研究所に売り込もう。PHPだけに。

「数式の読み方, 大学で学ぶ数学公式」とかいう神PDF

http://www.comp.tmu.ac.jp/yosihiro/teaching/how-to-read.pdf

四則演算から高校数学、大学数学の数式を網羅的に記載されています。 英語での読み方までもが載っていて非常に「へぇ」となります。

f′(x)は英語で「f prime」と読み、「f dash」とは読まないというのはこの資料で知りました。

首都大学東京の名前が変わっても、PDFは変わらず残っていて下さい。

cpythonリポジトリのcソースの場所

cpython/Python/ に大抵の.cソースが置いてあります。

ちなみに cpython/Python/bltinmodule.c が組み込み関数のファイル

cpython/bltinmodule.c at master · python/cpython · GitHub