gorogoroyasu

福岡の開発会社で働いている。

PyCon Kyushu 2018 実行してきた

2018 年の前半最後となる6/30 に、
LINE Fukuoka さんの会場をお借りしてPyConKyushu 2018 を開催してきました。

なんか、発言が上からですいません。 でも、本当に開催してきたんです。

今回は、登壇者・参加者としての参加ではなく、
実行委員として関わってきました。

きっかけは、去年の秋に福岡で Python Boot Camp in Fukuoka が開催されたことでした。
その懇親会で、@yk さんと @kiyotamanさんと PyCon を福岡で開けたらいいねー みたいな話で盛り上がりました。

ただ、今年はPHPカンファレンス福岡のスタッフに参加しようと思っていたので、 6月頃開催しようと思っている と言われたとき、どうしようか揺らぎました。
揺らいだ理由は、弊社からPHPカンファレンス福岡に登壇する人間は多いのに、
スタッフをする人間が少ないからでした。
しかし、PHPカンファレンスは、何年も実行してきた経験がある団体。
僕一人がいなくてもなんとかなるだろう。
そんな思いで、PyCon Kyushu の実行委員に参加しました。
来年は、PHPカンファレンスのスタッフをやらせていただきたいと思います!

PyFukuoka を主催されている @yujikawa_py さんと @tsurubee3 さんのちからが凄まじく、
すごい勢いでスタッフが増えていったのを覚えています。

スタッフは、

  • 企画
  • 会場
  • 事務
  • 広報

に分類されました。

自分は、広報のしごとをしていました。

多分、一番何をしているかわからないと思われていたんじゃないかなと思いますw

自分の主な仕事は、公式Webサイト の更新と Twitter業でした。
仕事でWeb を触ることはありますが、HTML はあまり触らないので、
新鮮さを感じたりしていました。

Webサイトの感想とかTwitterの感想とかもお待ちしています。

そんなこんなで迎えた当日、他の班の方々が慌ただしくしている中、
自分はずっとPCに向かっていました。
なんか、申し訳ない気持ちでいっぱいでした。

あまり皆さんの発表を見ることができなかったため、
後ほどビデオで復習しようと思います。
質問があったら Twitter などでメンションを飛ばすかもしれません。
その際は、めんどくさくてもニコニコと答えてくださると嬉しいです。

2次回へは行かずに帰っちゃいましたが、
懇親会で @terapyon さんとかとお話できて楽しかったです!

来年は沖縄!
完全に参加者として楽しませていただくつもりです!
楽しみにしています!!!よろしくおねがいします!!!

PHPカンファレンス福岡で平成最後のLTをしてきた!

先日、 2018/06/16 に開催された PHPカンファレンス福岡にて、
5分間のLTスピーカーとして登壇させていただきました。

phpcon.fukuoka.jp

運のいいことに(?)、 LT順が最後!
つまり、来年の4/30 までにPHPカンファレンス福岡2019 が開催されなければ、
平成最後のLTスピーカーということになります。

例年通りだと、PHPカンファレンス福岡は 6月開催なので大丈夫なはず!
ですよね?次期委員長

ということで、簡単に、登壇内容について書かせていただきます。
(スライド上げないので。)

発表内容

タイトル: PHPerが1年間機械学習勉強した
内容:
- TensorFlow というライブラリの紹介
- 機械学習界隈では、驚くような勢いで論文が出ているということの紹介
- TensorFlow.js の紹介 (<- 一番大事!)
- デモ(Reptile)
- デモ(PoseNet)

という流れでした。

デモに関しては、

blog.openai.com

と、

PoseNet - Camera Feed Demo

という2つのWebサイトのものを使わせていただきました。

Reptile に関しては、少しカスタマイズしたものを

github.com

においてます。
まだjQuery 使ってるの? みたいなツッコミお待ちしてます悲

以上が発表内容でした。
ちなみに、応募するときに、 - 45分 - 30分 - 15分 - LT みたいなのを選択する枠(複数選択可)があるのですが、
今回自分は 30 分と 15分と LTにチェックを付けました。
そしたら、ギリギリ LT に滑り込めました。
念の為LTにチェックを付けておくのおすすめです! (これは、 ペパボの @k1LoW さんから習った)

以降、スピーカー・スポンサー・スタッフの前夜祭からFusicという会社で開催されたAfter Hack までの様子を
ちらほら書いていきます。

スピーカー・スポンサー・スタッフの前夜祭

前夜祭

料理がとても美味しかったり、
普段からお付き合いさせていただいている会社の方とじっくり話せたりして、
とても楽しかったです。

エールズ

2次会はいつもどおりエールズでした。
東京でお世話になった方たちにいっぱい会えたり
@youukkariさんからメルチャリ便利話を聞いたりして
大満足でした!
近い内にマグロ食べに行きましょう!

とても楽しい前夜祭でしたが、
特に初めてお会いした方とあまり話せなかった印象です。
自分が人見知りだからでしょうが。。。
ぜひ、積極的に声かけてください!w

一番の成果は、@tanakahisateru さんと初めてお話したことです。たぶん。
全く話したことないのに気軽に話しかけてすいませんでした。

その後、 @kis さんに連れられてもぐおれに行く人々を見送って、
F社の人だけで3次会したのは内緒です。
まー、そこそこ、いや、とても熱い話ができたのでそれはそれで楽しかったです。

当日

当日は、少し遅れて会場入りしました。
実は会社にPC等を置いていたので、
メルチャリで会社に出社して地下鉄でFFG入りというプランを立てていました。
が!!!
残念ながらメルチャリと自分の相性が悪く乗ることができませんでした。

会場についてからは、ブースの方回ったり、色々おしゃべりしたりしていました。
最初のセッション見逃したのは内緒です。

skaffold を使って Kubernetes してみた

見に行きました。
k8s を全く使ったことがなかったのでところどころ難しかったです。
が、Ask The Speaker で聞きに行って、
なんとなく概要を理解することができました。
ATS でディスカッションしたことを先週会社で試してみたのですが、
今の自分達の用途にはうまくマッチしなさそうだったのが少し残念でした。

【プラチナスポンサーセッション】Fusic n本の矢 〜生きた集合知の作り方〜

土星が盛り上がってた印象でした。

【ゴールドスポンサーセッション】「未経験からの挑戦!超速ネイティブアプリ開発

知見がない中、Dartで記述する Flutter というフレームワークを使ってネイティブアプリを開発した話でした。
主な感想は、
- チャレンジャー精神半端ない
- PHP関係ない
でした。
とてもおもしろかったです!

昼休み

天下一品に行きました。
美味しかったです。
あと、ヨーギラス捕まえてました。
進化させるのを忘れてたのだけが心残りです。。。。

SOLIDの原則ってどんなふうに使うの?オープン・クローズドの原則編 拡大版

とても丁寧な解説で、わかりやすかったです!
自分は圧倒的に後輩くん立ち位置なので、
あんな感じの良い質問して先輩を困らせていこうと思いました!w

裏になっちゃった "Event Sourcing, CQRS For PHP" もとても聴きたかったです。
ビデオ上がるの楽しみにしていますw

【プラチナスポンサーセッション】ロリポップ!マネージドクラウドを支えるコンテナ技術のすべて

実はこの発表見てないんですよ。
ただ、僕にとって重大な発表でした。
なぜなら、
自分がやるデモを ロリポップ!マネージドクラウド からホスティングすることを思いついたから!
この発表を聞かなかったら思いついていなかっただろうし、
これより後で思いついても時間の関係で無理だったと思うので、
助かりました!!

Phoenix + Reactで社内システムを密かに作ってる

難しい話でした。
ただ、登壇者の方が淡々と語ってたのが面白かったです。
あと、登壇者の方の左胸に sigfy シールが貼ってあったのが印象的でした。

PHPerのためのよくわかるCPU脆弱性解説

PHP語で語られていたのでわかりやすかったです。 あと、おまけコーナーの CPU の話とかが面白かったです!
ちょっと勉強してみたくなりました!

ちなみに、裏では @rina さんがやらかしてたらしいので、
そのセッションも見たかったです ><
動画上がりますように!w

LT

LT は、"社内SEは(VBAを投げ捨てて)PHPの夢を見るか?初級 - For Beginner" が全てだったように思います。
自分も職を失ったり投げ捨てたりしたらLTするので、そのときは拾ってください泣

懇親会

LT で機械学習の話をしたら、本職の方から声をかけていただきました。
少し業務形態は違いますが、だいぶすごい業務をされていました。
先日あった DLL 1周年記念行事のときに探したけど、見つけられませんでした。
また機会があったらお会いしましょう!

あと、加賀澤さんの悔しそうな顔が脳裏から離れませんw
ちなみに、加賀澤さんの周りで話してた マイクロソフト社の話、めっちゃ面白かったです!

2次会

中洲ハイボールに行きました。
そうだいさんやP山さん、うずらさんとお話しました。
P山さんはじつは去年もお会いしたんだけど、おそらく覚えられてなかったからお話できて嬉しかったです。
そうだいさんは、怖い人かと思ってたけど、あまり怖い人ではなかったです。

エールズ

その後、エールズに行きました。
エールズでの衝撃は、@yui_tang さんとお会いしたことでした。
会ってそうそう当日朝のメルチャリの不満ぶちまけたりしてすいませんでした。
色々なお話が聞けて超楽しかったです。

ラーメン

エールズでうんちしてたらほとんど人がいなくなっていました悲
同じく置いていかれた@hamaco @ichikawa_0829 前田さん(弁護士(嘘)) とラーメン屋を探すたびに出ました。

ここからが大変。
元祖は嫌だとかshinshin は昨日食べたとか言われ海鳴まで歩くも長蛇の列。。。
風び は閉店、大砲ラーメンも閉店と不運が続いて、
結局たどり着いたのは 鳳凛。
4km ぐらい歩いたんじゃないかなー?w

まあでも、一応ご満足いただけたようなので、良かったです。
今思ったけど、一幸舎行けばよかった。

After Hack

11:00 開始だったのに余裕の遅刻を噛ましてしまった。。。
11:30 頃到着。
それから電源ない問題とかをくぐり抜け、ちょっと開発。
@tenkoma さんや @s_kozo さんと CakePHPの話とかしつつ、
皆さんのLT を聞く。

うずらさんの発表では、Swoole という全く聞いたことがない PHP のエクステンションのことを教えてもらいました。
Guzzle との違いとか調べると言っていたので、一応調べました。
ベンチマークとかろくにとったことないので、調べ方が正しいかどうかわかりませんがw

qiita.com

@mao_sum のLT再演なんかもあったりして、超盛り上がりました!
そういや、まだ .phpstorm.meta.php 調べてないので、明日調べます!

そんなこんなで、無事無限ビールを達成して解散。
こうして僕のPHPカンファレンスは無事幕をおろしたのでした。

雑記

以上、僕の PHPカンファレンス福岡 を書かせていただきました。
何文字書いても書ききれないところばかりであります。
お話したのに書けていない方も多くいらっしゃいます。
文句行ってもらえたらラーメン奢るので許してください。

スタッフの方々、今年も開催していただきありがとうございました!
とても楽しかったです!
嬉しいことに来年の開催が発表されたので、
来年は自分もスタッフとして参加させていただこうと思っている所存であります。
スタッフへの応募方法とかわからないけど、たぶん時期が来たら教えてもらえるはず。。。
その際はよろしくおねがいします!

f:id:adiboy:20180624224503j:plain

宣伝

6/30 に PyCon Kyushu 2018 を LINE Fukuoka さんで開催するので、
暇な人はチケット買ってください!
僕の発表より圧倒的に面白い話が聞けます!
また、Python でWeb やってる人の話とかも聞けます!
おすすめです!
応募は こちら から!

DeepLab V3 をADE20K のデータセットでトレーニングする際にハマったこと

DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs を手元で動かしてみました。

実装は、 Tensorflow 公式 に公開されています。

ADE20K のデータセットを使うためのREADME.md はこちら。
github.com

こんな感じで、とても親切にコードとドキュメントを準備いただいているのですが、
一つだけ、致命的ではないですが一つだけ漏れがありました。

それは、

cd /path/to/dataset/ && python build_ade20k_data.py 

を実行すること。
これについての言及が一切ない。

おかげでけっこうハマリました。

ちなみに、

marunouchi-tech.i-studio.co.jp

の記事を参考に VOC2012 のデータセットで試した時は特に問題は置きなかったので、
ADE20K のデータセットを使う時のみ発生する問題なんじゃないかな? と思っています。

実はまだ学習を回せてない(リソースの都合上)ので、正確には解決に至ってはいません。
このやり方で問題なく学習・評価等ができたら、
README 修正のPR でも書こうと思います。

Nim で PHP のExtension を作る

Nim とは?

https://ja.wikipedia.org/wiki/Nim

Nim (旧称はNimrod)とは命令型、マルチパラダイム、コンパイル言語という特徴を持つプログラミング言語であり、   
アンドレアス・ランプフにより設計・開発された。  
Nimは「効率的で表現豊かで優雅」であるように設計されている。  
メタプログラミング、関数型プログラミング、メッセージパッシング、手続き型プログラミング、  
オブジェクト指向プログラミングをサポートしており、 コンパイル時のコード生成、代数的データ型、  
C言語のForeign function interface (FFI)、JavaScriptへのコンパイルなどの機能を提供している。  
Pythonのようなシンプルな構文で書かれるが、C言語並みの高いパフォーマンスを有している。  
Rust、D言語、Goなどの言語としばしば比較される。

らしいです。

公式: https://nim-lang.org/

感想など: https://qiita.com/snowlt23/items/f50ab84afeab9469e422

なぜ Nim なのか?

別に、理由はありません。
http://wolfbash.hateblo.jp/entry/2017/07/30/193412

の記事を見たからです。

今日の昼休みに、 Rust を勉強しようと思って色々見ていたら、
たまたま見つけました。
なんか、早そうだし、やってみるか! ぐらいの勢いです。

Nim のインストールとか

おおよそ、ここを参考にしてインストールしました。
http://howistart.org/posts/nim/1/

koch が何かはよく分かってないですが (たぶんpyenv 的なやつ)、
nimble というやつの設置が簡単でした。 (nimble は、 pipやcomposerと同じ、パッケージマネージャーらしいです。)

環境など

Nim

root@1421f749bd0f:/nim# nim -v

Nim Compiler Version 0.17.2 (2017-09-07) [Linux: amd64]
Copyright (c) 2006-2017 by Andreas Rumpf

Nimble

root@1421f749bd0f:/nim# nimble -v

nimble v0.8.8 compiled at 2018-03-13 13:08:39

PHP

root@1421f749bd0f:/nim# php -v
PHP 7.0.25-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.25-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

その他

ubuntu16.04 の docker 上に環境を構築しました。

PHP の Extension を作る

Extension を作るのは初めてだったので、都合はよく分かっていませんが、
https://github.com/nim-lang/nimble を使うと簡単に作れました (嘘)

とりあえず、上のレポジトリ のREADME をコピペしていきます。
3つファイルを作りました。

その後、コマンドを実行しました。

一応、nimfun.nim ファイルだけ (僅かに) 変更したので貼っておきます。

import nimzend
import math

proc max(a: int, b:int): int =
    if a > b:
        return a
    return b
proc min(a: int, b:int): int =
    if a < b:
        return a
    return b

proc nimFun(a: int, b: int): ZValArray {.phpfunc.} =
  result["add"] = a + b
  result["sub"] = a - b
  result["concat"] = $a & $b
  var arr = zvalArray()
  arr.add a
  arr.add b
  result["array"] = arr

  result["mean"] = (a + b) / 2
  result["max"] = max(a, b)
  result["min"] = min(a, b)
finishExtension("nimfun.so", "0.1")

ハマリどころ

Nimble のインストール

上に貼った記事通りにやるのが良いと思います。
Nim version 0.15.0 以上は、 Nimble が Nim についてきてるとか。
最初はそのへんが全く分からず闇の中にいました。

PHP のインストール

以外なことに (?) PHP のインストールにハマリました。
apt install php ではなく、apt install php-dev を行う必要があります。

実行結果

とりあえず、実行結果貼ります。

root@1421f749bd0f:/nim# php test.php
Array
(
    [add] => 220
    [sub] => -20
    [concat] => 100120
    [array] => Array
        (
            [0] => 100
            [1] => 120
        )

    [mean] => 110
    [max] => 120
    [min] => 100
)

わお!PHP の配列として扱えてる!

ということで、もう少しNim で遊んでみようと思います。 (情報少ない)

Fusic Advent Calendar 2017 社内で行っているPandas等の勉強会の話

Fusic Advent Calendar 2017 記念すべき1日目の記事です。
昨年は、2日目に甘んじてしまいましたが、
今年は、初っ端からハードルを下げていく感じで行きたいと思います。

qiita.com

概要説明

最近、機械学習が大流行中ということで、
自分もついていこうと、踏ん張っています。

自分は、Deep Learning しか触っていないのですが、
それ以外の方法も、色々勉強していきたいと思い、
時間があったら知識をインプットしています。

ただ、機械学習を始めてすぐ、
もちろん手法は大事だけど、データを上手く扱うことも非常に大事だと気づきました。

データ扱うの難しい。。
pandas とか numpy とか、仲良くなったらいいんでしょうけど、
なかなかとっつきづらい。。。
あと、可視化重要。
可視化しないと、どんなデータかは基本分からない。。。

ということで、社内の興味ある人を集めて、
計4回の勉強会を開催しました。

今日は、 他に書くこともないし時間もないので どんな型式で、どのように勉強会を進めたかを書いていきます。

どんな勉強会?

事前にpandas, numpy 等を使った問題を出し、
週に1回1時間、皆で回答を解説をするという勉強会です。
問題の作成に1~2 時間、 回答に 1~2 時間かかるぐらいのボリュームになればいいなと思ってはじめました。

環境

環境構築の手間が省けるよう、
社内サーバーにjupyter notebook を立て、
誰でもアクセスできるようにしました。
参加者の約半数は、自分が用意した jupyter を使ってくれていたと思います。
ちなみに、そのjupyter は、 docker 上で動かしていたので、壊しても安心な感じにしていました。
(バックアップ とってないけどホストにマウントしてる。 ホストが死んだら終わり。)

第一回

第一回は、 numpyと pandas の入門を行いました。
これから始めようという人がいたら、やってみるといいと思います。

問題はこちら。

第一回 (numpy)

# 問題1
正規分布 に従う、10x10 の行列を作成し、ヒストグラムを描画してください。

# 問題2
平均値10, 標準偏差10 1000 個の値のヒストグラム、
平均値50, 標準偏差10 1000 個の値のヒストグラム を1枚の画像として重ねて出力してください。
ただし、各グラフは透過させてください。

# 問題3 
こんな図を書くこと。 (ヒント:np.sin(), np.cos() )  

問題3の図

f:id:adiboy:20171201230324p:plain

第一回 (pandas)

https://grouplens.org/datasets/movielens/1m/ から取得した zip を解凍し、  
rating.csv をpython で読みこんで、  
user_id 1 の人が評価した映画に対してつけた得点の数を円グラフに描画してください。  
(実際は、解凍したものを準備した)  

csv には、
- rating.csv
  user_id    :ユーザーID
  movie_id   : 映画ID
  rating     : 評価 (1 ~ 5)
  timestamp  : 時刻

のデータが入っています。

第二回

https://grouplens.org/datasets/movielens/1m/ から取得した zip を解凍し、  
users.csv, rating.csv, movies.csv を python で読み込んで、  
以下の課題を行ってください。  
csv にはそれぞれ、  
- users.csv
  user_id    : ユーザーID
  gender     : 性別
  age        : 年齢
  occupation : 職業
  zip        : ZIPコード (不明)

- movies.csv
  movie_id   : 映画ID
  title      : タイトル
  genres     : ジャンル

- rating.csv
  user_id    :ユーザーID
  movie_id   : 映画ID
  rating     : 評価 (1 ~ 5)
  timestamp  : 時刻

のデータが入っています。

問題1
最も男女で評価の平均値が分かれた映画の公開年 (title の横に括弧つきで書かれている4桁の数字)は?

問題2
最も男女で評価が分かれた映画 トップ100 について、公開年のヒストグラムを書いてください。

第三回

今回のデータは、実際に使われているサーバーにあったアクセスログです。
実データは、謎の値が入っていたり欠損があったりして、
今まで使っていた加工されたデータより取扱いが難しいです。

が、けっこう面白かったので、ぜひ挑戦してみてください。

問題1
{実際に動かしているApache のアクセスログ} のデータから、
下記の例を示すような条件で ip, datetime, method, code を抽出したDataFrame を作成してください。
なお、datetime カラムには、 datetime 型でデータを入れてください。

例) 0.0.0.0 - - [1/Dec/2017:00:00:00 +0900] "GET / HTTP/1.1" 302 - の場合、

ip: 0.0.0.0
time: 2017-12-01 00:00:00+09:00
method: GET
code: 302
となります。

問題2
method が 'GET' と 'POST' 以外のデータの件数を出力してください。

問題3
上記のDataFrame から、POST と GET の時間毎のアクセス数を表で表し、また、1時間区切りのヒストグラムで重ねて表示してください。  
なお、POST とGETの数の差が大きいので、  
左軸に GET のアクセス数、右軸に POST のアクセス数を記載した、  
2軸グラフが望ましいです。  

第四回 (Confusion Matrix)

問題1

適当に作ったCSV.csv を用いて、confusion matrix を作成してください。  

なお、confusion matrix は、以下の要領で作成することを想定しています。  

confuion matrix の使い方  

適当に作ったCSV.csv の labelカラムと、predict カラムに値が入っている。  
Confusion Matrix は、以下のように作成する。  

||predict 1|redict 0|
|::|::|::|
|label 1| TP|FN|
|label 0| FP|TN|

問題2

適当に作ったCSV.csv より、 accuracy, recall, precision を計算してください。

accuracy = (TP + TN) / (TP + FP + FN + TN)  
recall = TP / (TP + FN)  
precision = TP / (TP + FP)
また、accuracy, recall, precision の意味を調べておいてください。  

問題3

適当に作ったCSV.csv を読み込み、しきい値 0.5 の時のAccuracy を計算してください。  
しきい値が0.5 で、predict が 0.45の時、 predict は 0 と判定されます。  

shikii_chi = 0.5  
answer = 0 if predict >= shikii_chi else 1  
式はこんな感じです。  

上記のような問題を出題しました。
答えは、いつかブログに書きます。(もしくは gist に貼っておきます)
時間がある人は、是非やってみてください。

今後の予定

今は少し休止中 (1ヶ月ぐらい) ですが、
この勉強会自体は継続して行きたいと思います。
上述の通り、今は殆ど機械学習の知識がないので、
この勉強会で、機械学習の手法等のレクチャーもできるようになるといいなと思っています。

実は、問題作成がけっこうめんどくさいので、
こんな問題集的なのあるよ! という人がいたらコメント等でお知らせ頂けたら幸いです。
こんな案件有るよ!? とかでももちろん大丈夫です。

明日は、 @fantasista_21jp が書きます! (といってもあと1時間もない)
ワクワクして待っててくださいませ!!

P.S.

Fusic では、技術が大好きなエンジニアを募集しています。
一緒に、機械学習について勉強しませんか?
いや、機械学習教えてくれませんか?

練習ゼロ体重90kgでもマラソンを走りきった話

マラソンの季節

そろそろ、マラソンの季節ですねー。
福岡でも、福岡マラソンが迫ってきました。
まだ半袖で過ごせる気候なので、今年は辛い戦いになるんじゃないかなー と思っています。

今日は、練習ゼロ、体重90kg でもマラソンを走りきった話をしようかと思います。

一つ、注意です。
このブログの目的はあくまで、
完走することです。
5時間以内に走りたい 等という高い目標は捨ててください。

なぜこの記事を書くの?

理由は、巷に溢れている情報には、練習しないと無理 みたいな情報しかないからです。
いやいや、そりゃ 3 時間で走るのは無理ですよ。
でも、完走ならいけます!
断言できます。
理由は、自分がやったから!
ということで、コツ みたいなことを書いていこうと思います。
時間がない人は、以下のリストだけ読んでください。
詳細は下の方に書きます。

失敗から学んだリスト

  • いい靴を履く
  • トイレには行かない
  • 食べすぎない
  • 飴を持っておく

成功から学んだリスト

  • 鎮痛剤とかいっぱい塗っておく
  • 乳首に絆創膏
  • 朝ごはんはしっかり食べる
  • 携帯とイヤホンを持って行く
  • ペースメーカーの人についていく

その他

  • 完走率は96%以上ということを知っておく

失敗から学んだリスト

いい靴を履く

自分は、2年間ぐらい使ったボロボロの靴を履いていきました (一応ランニングシューズ)
3km ぐらい走ったところで左膝が痛くなりました。
これは、走りきるまでずっと続きました。
いい靴を履いたら痛くならないとは言い切れませんが、
クッション性の高い靴を履くといくらかはましになると思います。

トイレには行かない

これはもう、絶対です。
トイレ行くなら、漏らしたほうがいいと思うレベルです。
自分は20km 手前でトイレの魔力に負けました。
めっちゃ空いてたからついつい。。。
でも、その後足が棒のようになり、走れなくなりました。
特に、 25km 地点以降は、 100m 走って 200m 歩く ような感じになってしまいました。
トイレは、漏らしたほうがいいと思います。
大の方だったら、漏らすのは流石にまずいので、必ず 開始前にトイレに行ってください。

食べすぎない

他のマラソンは分かりませんが、福岡マラソンでは、大量に食べ物が用意されています。
いちごとかトマトとかうどんとか。。。
おいしいのですが、食べ過ぎるとお腹が痛くなります。
自分はうどんが美味しすぎて誘惑に負けてしまいました。
スタッフの方に進められますが、食品を何個も取るのはやめましょう。

飴を持っておく

飴は、とても大事です。
特に、塩味の飴が美味しかったです。
途中で配って下さる人もいますが、自分のペースで食べるためにも自分で持っていくべきでしょう。

成功から学んだリスト

鎮痛剤とかいっぱい塗っておく

当日の朝、痛み止めを飲み、たっぷりと痛みどめを塗り出発しました。
塗ってなかったらどうなってたかは残念ながら検証していないので分かりませんが、
あんだけ塗ったから大丈夫 と、心のどこかで思ってたのを思い出します。
精神安定上、とても大事でした。

乳首に絆創膏

これは、やっといてよかったな と思います。
服にこすれるから。
あるのとないのではぜんぜん違うと思います。
もちろん、絆創膏じゃなくても可ですが、絆創膏が一番入手しやすいかと・・・。

朝ごはんはしっかり食べる

以外かもしれませんが、しっかり食べておいたほうがいいと思います。
理由は、お腹がすくから。
福岡マラソンでは色々な食品を提供してくれますが、
最初の方は果物とかがメインです。
お腹にはあまりたまりません。
お腹が空いて走れなくなるぐらいなら、多少重くなってもいっぱい食べておいたほうがいいと思います。

  • 携帯とイヤホンを持って行く 暇つぶしです。
    去年の今頃はポケモンが流行ってたので、タマゴ孵化させながらマラソン走ってました。
    あと、Runtastic というアプリを使って、自分が何キロ走ったか? を記録していました。

  • ペースメーカーの人についていく 走っていると、 X時間のペース みたいな旗を持った人に出会うと思います。
    その人達についていくと、安定したペースで走れるのでおすすめです。
    僕は、5時間半のペース の人について行っていました。
    15km地点ぐらいでついていけなくなって追いかけるのをやめましたが、
    非常に走りやすかったです。

完走率は96%以上ということを知っておく

大丈夫!ゴールにたどり着けます!!!
www.f-marathon.jp

まとめ

以上が、マラソンを走って得た知見です。
練習してなかったら走れない? -> 大丈夫です。
太ってたら走れない? -> 大丈夫です。
タバコ吸ってたら走れない? -> 大丈夫です。
頑張って完走しましょう!!!

Fukuoka.php Vol.24 で、手書き文字認識のデモをした話

2017/10/21 に、Fusic 社で Fukuoka.php Vol.24 が開催されました。
そこで、 ニューラルネットワークはじめました というタイトルで発表させていただいたので、
発表内容を書いていきます。

なお、発表はデモ型式で行ったため、スライドの公開はしません。
ご了承ください。

発表内容

パート1

機械学習を行うにあたり、
どのようなフレームワーク・データ を利用するのか? という話をしました。

フレームワーク

  1. TensorFlow (Google 製のフレームワーク)
  2. chainer (国産のフレームワーク株式会社Preferred Networks 製)
  3. Theano (2017年末までに v. 1.0 が発表するらしい。詳しくは知らないですごめんなさい)
  4. kears (TensorFlow や Theano など複数のフレームワークをラッパーしてるいいやつ)
  5. caffe (難しい。)
  6. PyTorch (Facebook製? Twitter 見てる感じ、最近流行ってそう)
  7. PHP-ML (PHP製のフレームワーク)

データセット

MNIST (手書き文字データ)
Iris (花の花弁数等のデータ)
CIFAR-10 (画像の10クラス分類)
MovieLens 1M (映画評価データ)

パート2

MNIST のデータセットを使って学習させたネットワークに、実際に手で書いた文字を入れ、
ちゃんと判定できるか? というデモを行いました。
※ こちらのサイトを3項にさせていただきました。
aidiary.hatenablog.com

やったことを列挙していきます。
1. 予め準備したニューラルネット をその場で学習させた
1. iPad Pro の GoodNotes というアプリを使い、 実際に数字を書いた 1. 書いた数字を画像として切り出して、Google Drive に上げた
1. その画像をPC 側から参照し、準備した jupyter notebook にアップロード 1. jupyter 内で画像のパスを指定し、画像を読み込み。
1. その際に、画像サイズを 28 * 28 * 1 にリサイズ
1. 学習した重みを使って、クラスを予測 1. 実際に聴衆の一人に文字を書いてもらい、同じことをもう一度やった

パート3

今回作ったニューラルネット は、 全結合層のみ利用したものだが、
CNNを使うともっと良くなりますよ ということを口頭で説明。
また、今回のニューラルネット は学習がすぐ(5秒程度) 終わったが、
実際はもっと時間がかかるケースがあることを説明 (長いものだと2週間とかかかる的な話。もっとかかるやつもあるだろうけど。)
更に詳しく調べたい人は、 fine tuningでぐぐってくださいと、キーワードを提示

という感じで発表を行いました。

デモを作成するにあたって困ったこと

いくつかハマリポイントがあったが、最も辛かったのは、色の反転に気づけなかったこと。
まじでハマった。
何を言っているかというと、

MNIST の画像は、こんな感じになっている。
f:id:adiboy:20171026194940p:plain

一方、読み取る画像のリサイズ前の状態はこんな感じ。
f:id:adiboy:20171026195035p:plain

これを、28 x 28 x 1 にリサイズ
すると、こんな画像になる。
f:id:adiboy:20171026195228p:plain

そう、白黒が反転している。

これに気づかず結構時間がかかった。
最終的に問題に気づいて、白黒を反転させると
f:id:adiboy:20171026195129p:plain

このような画像ができた。

この画像をニューラルネット に投げると、うまく結果が出力された。

ハマって改めて感じたのは、データを見るのが大事だということ。
ちゃんとデータチェックしましょう。

[豆知識]
白黒反転した画像を入力したときにニューラルネット は、 すべての画像を5 と判定していた。 なぜそうなるのかは分からないが、どんな画像を入れても 5 だった。