ほろ酔い開発日誌スマートフォン用の表示で見るほろ酔い開発日誌AI企業のエンジニアのブログです。機械学習、Web開発の技術的お話、ビジネスチックなお話、日常のお役立ち情報など雑多な内容でお送りします。2017-01-31【Swift3】ニュースアプリ風の横スクロールメニューバーライブラリ3つの検討SwiftTweetニュースアプリのメニューバーを実装したくなったので、ライブラリを検討してみました。イメージとしては以下のGunosyのメニューのようにスライドしてジャンルを切り替えるようなものです。調べた結果良さそうだと感じたものは下記です。PageMenuPagingMenuControllerTabPageViewControllerPageMenugithub.comREADMEにあるデモを見るとわかるのですが、見た目がクールでなかなかよさそうだという印象を最初に持ちました。Swift3に対応されていません。以下、上記のレポジトリをフォークしてSwift3に対応しています。こちらを使えば大丈夫です。github.comこれはこのQiitaの記事に載っていて、このサンプルアプリを作ってみましたがなかなかよい感じでした。(このデモだと初期のメニュー下のアンダーバーがおかしいので少し手は加えましたが。)qiita.com開発がアクティブでないので不安定感はありますが、動作自体はいい感じなので、細かいことを気にしなければこれで十分だと思いました。インスパイアされたらしい。メルカリの人が作っているみたいです。今月中にもコミット&リリースがなされていて、活発に開発されているみたいです。比較的新しいライブラリでSwift3にも完全対応されています。ひとつ残念だったのはメニューをスワイプさせるとページが変わってしまうということです。一気に一番右のスライドに移動が出来なかったです。github.comissueが立っているのでアップデートを期待です。これがあればこれに即採用だったのですが、現段階ではPageMenuのほうを採用したいかなという感じです。TabPageViewControllergithub.comVASILYの方が作成したライブラリです。ブログにも載っています。tech.vasily.jp以下を参考にサンプルを作ってみましたが、第一印象は「最高」って感じでした。hchckeeer.hatenadiary.jpしかし、一点重大な問題があって選択されているタブを画面外にはずして、他のタブをクリックするとフォーカスされたタブが2つになってしまうのです。0.2.3のアップデートからタブが二重にフォーカスされるバグが消えました。いうことになりました。終わりに以上から結局、PageMenuを採択しようと思います。以下の記事を参考にして作業を進めたいと思います。qiita.comx1.inkenkun.comPagingMenuController、TabPageViewControllerのアップデートがあればそちらのほうを使いたいところです。アルゴリズムを実装することになりました。そこで、コードの紹介(github)と参考になったものを載せておきます。SI)は、分権化し自己組織化されたシステムの集合的ふるまいの研究に基づいた人工知能技術である。)群知能はたくさんのエージェントを用意してそれぞれが各々相互作用を起こしながら最適解を探し出す人工知能技術です。それぞれのエージェントを中央管理するわけではなく、それぞれが自発的に行動し、結果的に全体としての創発をもたらすところが特徴にあります。群知能のアルゴリズムは自然界からヒントを得たものが多く、PSOは動物の群れをヒントにしたアルゴリズムですし、ABCは蜂の採餌行動をヒントにしたアルゴリズムになります。アルゴリズムまず実装したコードは以下です。PSOとABCの2つを実装してあります。github.com以下の関数の最小化問題を解けるようになっています。5.0]Javaの実装になっています。本当はPythonでやりたかったのですが(それがダメでもRubyがいい)、Java、C言語、C++のどれかの制限があったので、Javaにしました。C言語はあまりちゃんとしたコードは書いてこなかったのでやめました。Optimization、PSO)とは、群知能の一種。昆虫の大群や魚群において、一匹がよさそうな経路を発見すると(すなわち、食料を発見したとか安全であるという場合)、群れの残りはどこにいても素早くそれに倣うことができる。)まず、アルゴリズムなのですがWikipediaで十分わかりました。Wikipedia具体的なコードとしてPythonで実装してある下記もわかりやすく参考になりました。Wikipeiaのアルゴリズムを見たあとにこちらを見るとすっきりします。qiita.com下記はN-Queens問題をPSOで解いたコードです。アルゴリズム自体は上記の2つを参考にしたのですが、Javaの書き方として参考になりました。ABCアルゴリズムは蜂の採餌行為をもとにした最適化アルゴリズムです、ということですね。(英語版しかなかった)アルゴリズムはまずWikipediaを参考にしました。WikipediaWikipediaだけではちょっと分かりづらかったのですが下記の2つが分かりやすかったです。Page下記はN-Queens問題をABCで解いたコードです。Javaの書き方も参考になりましたし、アルゴリズムも分かりやすかったです。github.com終わりに他の講義の課題でカッコウアルゴリズムやホタルアルゴリズムなども調べたのですが、たくさんのアルゴリズムがあるのですね。自然界から発想を得てアルゴリズムにおこすところはディープラーニングも同じで面白さを感じます。アルゴリズムの発想が詰まったら生命に戻って考える必要があると教授がおっしゃっていたのを思い出しました。LearningTweetディープラーニングをするときは処理速度を上げるためにGPUを使いたいです。GPUを使わないとなれば、大きなデータセットは扱いたくはないです。この前、CPUでやろうとして3日くらいかかった(途中で諦めた笑)やつもGPUだったらどれだけ楽になったことか。inch)を買いました。こいつにはGPUがあるとのことで使う気満々でした。よし、使ってみようひとまず、Tensorflowでやろうと思って調べたら以下のような感じで記事が出てきて、やっぱり出来るんだと嬉しくなりました。qiita.comqiita.comさて、Tensorflowのドキュメントにもご丁寧にMacのGPUのセットアップ方法が書いてあったので指示通りにやりました。ほんとにちゃんとやりました。なんかエラーが出てうまくいかないのです。FAILこんな感じのエラーが出てきます。何度もやり直してもうまくいかなかったです。ProなのにGPUを利用出来ない??それで、重要なことに気づいたのですが、そもそも勘違いもしていました。NVIDIA製じゃない。そもそもまだTensorflowにサポートされていない。この記事を読んでわかりました。ProのモデルのGPUはNVIDIA製でした。Tensorflowにサポートされていないんです。issueはあるみたいなので頑張って欲しいです。github.comGPUの話そもそもGPUをディープラーニングで使うために最低限のことをざっくり書いておきます。(厳密じゃないかもです、ただ僕と同じ現象にぶつかった人が腑に落ちるように)GPUは一般的には画像処理のための演算装置です。単純な計算にはめっぽう強いみたいです。CPUがボスキャラ1体、GPUが雑魚キャラ1000体みたいなものだと思ってます。GPUは単純なことならたくさんの処理を効率よく行ってくれます。それで、画像処理だけじゃなくても使えるんじゃない?といった感じで他の分野にも使うことになりました。GPU)ってやつです。このGPGPUを使う環境を整えてくれているのがNVIDA社のCUDAという環境です。NVIDA社のGPUを使うときはこの環境を使えるので幸せになれるというわけです。それを使えばいいじゃないという話になるんですが、このCUDAというやつは標準化されてなくてNVIDA製のGPUじゃないとダメみたいなんです。GPUが使える標準規格は何かというとOpenCLというやつになります。こいつはGPGPUに特化していないです。いうわけで、ディープラーニングのライブラリ的にはサポートしづらいのではないでしょうか。なると、なんでわざわざAMD製にしたんだという感じですが、既にNVIDIA製に向けて進んでいるみたいです。www.universityherald.comホットな分野はGPGPUが求められますし、割りと大事だと思うんですよね。次のモデルではNVIDIA製に戻るのではないでしょうか。なると、今回のモデルでたまたまNVIDIA製じゃなかったということで少しだけ残念な気もします。外付けのGPUの開発も進んでいるようで期待したいところですね。www.gizmodo.jpこちら参考にしました。Severityというコンペに挑戦しました。www.kaggle.comこのようなコンペははじめてで学びだらけでした。今回の復習をして今後に活かしていきたいと思うところです。