NNを実装するために環境整える話。
4月から"今年はDeep Learningを専門的に勉強するぞ"と決心して、そろそろ2ヶ月立つところだが、悲しい事実がある。。。
未だにNN構築環境を整備してない。未だにPythonやNumpyを触っていない。
論文、本に偏りすぎて手を動かしてみることを一度もしていなかった。。。
雑魚キャラです(´・ω・`)
Numpy、Tensorflow、Chainer、Caffeなどいっちょ前に言葉だけは知っているのにどれも触れたことすらありません(´・ω・`)
そんなじゃだめだ!
ということで今月から手を動かすことを意識してみようと思います。
まずはじめにPython環境を整えるところから。
Pythonには主流のバージョンが2つあります。2系と3系です。どちらも互換性はありません。正確に言うと後方互換がないというのが正しいです。3系のコードをPython 2は対応できないポイントがいくつかあります。
今回のNN構築は3系で行うことにすると決めたので、早速3系の環境を整えます。
まずはじめにPythonを利用するにあたって、なういツールがAnacondaディストリビューションです。NN構築のために助けとなるツール、NumpyやMatplotなどが同梱されています。
今回はここまで。
AnacondaをinstallしてPython 3系やNumpyを利用してNNを実装していきたいと思います!
継続的インテグレーションについての話。
継続的インテグレーション、、、どこかで聞いたことある用語。
ソフトウェア開発する際に生産性をあげるための"ナニカ"だろうな〜程度の理解。
そんな僕が今回はより実践に近いソフトウェア開発をやるために、この継続的インテグレーションを自分のプロジェクトに導入してみることにした。
まず、用語の意味について調べた。
継続的インテグレーションを完結に説明すると"ソースコード変更の度にビルド・テストをこまめに行い、実行結果をチェックして評価しようね"ということ。よくCIと呼ばれている。以下CIと呼ぶよ。
うん、普通に簡単な概念。。。
なにか当たり前ことを言っている気がしたので、CIをしない場合を考えてみる。
CIしない場合(継続的でない場合)
ソースコード変更1→ソースコード変更2→ソースコード変更3→久々にソフトウェアを統合してみる。
ここで、エラーやテスト失敗などの問題なく動いてくれればいい。
しかし、問題があった場合、ソースコード変更1〜3のうちに"どの時点"で問題があったかを知ることができない。バージョン管理システムを利用していれば、変更履歴を辿って原因究明することはできるが、"どの地点"が分かれば無駄な作業が減りそうだ。
でも毎回CIするのは煩雑な作業。というか自動化できそうなところ。
そこで登場するのがCIツール。簡単に言うと"ソースコード変更を捕捉して、自動的にCIしてくれるツール"だ。JenkinsやCircle CIがある。
CIはビルドとテスト実行の自動化の役割も担っているが、その作業は世間的に先に?広まっているビルドツールに任せちゃっている。
じゃあCIツールは何してる?
主に以下の2点になると考える。
1.ソースコード変更の捕捉→ビルドツール自動実行
2.ビルドとテストの実行結果を表示
う〜んこの凄いことやってない感。
ただ1によって数秒短縮することになる。または2はフィードバック用としての役割を果たすために時系列で見せたり、GUIベースでUI/UXの工夫がされているので、開発効率は気づかずとも上がっているかもしれない。
まとめ
- CIをすることでソースコード変更による問題の早期発見をしようぜ
- CIツールを使ってCIを自動化しようぜ
- CIツールの内部でビルドやテスト、依存関係解決を自動化する作業をビルドツールに任せちゃってるぜ
#3ここ最近の勉強内容
IoT系のサービスを実現するべく日々色々な知識を蓄えている今日このごろ。
1週間前まではswiftをガリガリ書けてそれなりに情報工学科生としての充実感はあったけどここ最近はIoTサービスのハードウェアまわりの勉強ばっか。楽しいことは楽しいし新鮮なのだが...
swift全然やれてない。
まだまだ勉強の身だったし、swiftは本格的に極めようと思っていたので、時間作れないのに何かもどかしい。
まぁすべては自分の勉強効率の悪さに起因するよね。
毎日少しでもいいからswiftの時間を作ろうっと。
プログラミングまわりの話はここまでにして、ハードウェアまわりの勉強はというと...
かなり充実してる。
とゆーかIoTサービスをやろうとしていたのに全然把握してなかった点が多かった。
特にググりまくったところ
バックアップバッテリーはどうするか?
3G通信をより安くで実装するために必要最低限のモジュールに絞ったり、モジュールを選んだりなどなど、、、というか3G通信まわりのモジュールは全然解決しきれていない。
っとゆーことで電気系の大学の教授にアポ投げました。
今週会ってくれそうです。
まぁそんなこんなで勉強詰めの毎日ですが、充実はしてますね。
ユーザー視点に立ってサービスの本質や根本を見直すのも毎日やらないといけないのでどれだけ一日を濃密にできるかを最近考えています。
少し前まではあせってすべてを高速にこなそうとしていたので、ちょっと経ってみて何も成果が残ってないこと気付きました。
時間という大きなコストを払っているので、しっかりとしたリターンを生むべきですね。
時間のコストパフォーマンスを心がけています。
この時間で学んだことをしっかりと落とし込んで、なるべくまた調べないようにしたり、物事に対してあらゆる側面から思慮深く考える癖がつくまでは意識して頑張ろうと思っています。
よし、休憩終わり。頑張りますか。
ではでは。
#2 最近の時間の使い方
ここ最近はやるべきことも限定されてて、無駄な動きがない日々をすごしているのですが、、、
まだまだ甘いとこあるなぁ。
最大の敵"Youtube"にかなり時間を奉仕している。疲れた時とか時間がちょっと余った時ついつい開いてしまって、2時間、3時間と湯水の様に流れていくよね。
Youtube規制を少しやってみようかな。
やりたいことを探すのも簡単じゃないけど、仮に見つかったとしてもそれに多くの時間を注ぐことってなかなか難しいんだよね。
甘い自分を見直します。
では。
追記 Googleカレンダーの使い方かなりマスターした。