メモ

記録

AWSアカウント作成からAlexaアプリを作るまでの話

Alexaアプリを作る?

n番煎じではありますが、せっかくAlaxaを持っているのにサザンオールスターズを部屋で流すことにしか使っていなかったので使ってみたいと思います。 ググるとたくさん出て来て、さらにamazonに記載のあるトレーニングでつまるところなくサンプルが動いたので、リンク貼ります。

Alexaスキル開発トレーニングシリーズ 第1回 初めてのスキル開発 : Alexa Blogs

じゃあお前何やんの?

サンプルを動かすところまでは本当に何もせずにできてしまったので、サンプルにオリジナリティを出すということをやろうということにしました。
具体的には、lambdaにアップロードするzipの中身をいじって、挙動を変えたいと思います。
(と言ってもいじったのはサンプルのzipのindex.jsだけ)

サンプルから変更した時に詰まったところ

色々サンプルから変えて、ちょっとググりが必要だったところを恥ずかしいですが、書きます。

変更してzipにしてアップロードしたものが動かない

サンプルのzipを変更し、zipしてlambdaにアップロードする必要があるのですが、それをする際にちょっと詰まりました。
zipのアップロード後にAWSコンソールからlambdaのテストをした際にindex.jsしか変更していないつもりなのに、以下のようなエラーが出ました。

{
    "errorMessage": "Cannot find module '/var/task/index'",
    "errorType": "Error",
    "stackTrace": [
        "Function.Module._load (module.js:276:25)",
        "Module.require (module.js:353:17)",
        "require (internal/module.js:12:17)"
    ]
}

結論を言うと、zipの仕方に問題がありました。
macbookのfinderから右クリックでzipにしていたのですが、そうすると右クリックしたフォルダもzipに含まれてしまうので
lambda_hoeghogeのフォルダの中にterminalで入って

zip -R ../lamnda_hogehoge.zip *

でできたファイルをlambdaにアップロードすることで解決できました。
初歩的と言うか、lambdaにどんなzipを食わせてるのかを考えていなかったことがバレてしまうエラーでした。。。

スキルの呼び出し名を変更しても。反映されない

alexa developer consoleから呼び出し名を変更して、ビルドしても変更されなくて焦りました。
呼び出し名を変更したい場合には、変更後、変更を保存してからビルドしなくてはなりません。
ビルドする際に勝手に保存してくれると思ったのですが、そうではないようです。

今回作ったスキル

公開してみました。(現在審査中です。審査通ったら更新するかも)
なんともないアプリですが、自分が作ったもののアウトプットが音声で返ってくるのは嬉しいものですね。
スキルを一つでも公開するとawsで使えるプロモコードがもらえるようなので、それも嬉しいです。
あとでやってみようと思います。

vggnet 敗れる?

昨日

oichan.hatenablog.com

過学習してしまったcnnの構造をどうにか過学習しないようにしようと、
vggnetを採用し、実行しました。あまりうまく行きませんでした 原因としては、

  • 画像の少なさ
  • cnn設計が浅い

vggnetの論文とかを読んだわけではないので浅いです。
僕の浅い理解では、畳み込み層とプーリング層をめちゃくちゃ積み重ねればめっちゃ学習できそうじゃね?みたいなノリのものだと思ってます。
どんどん細かいところの特徴を学習できそうな気がするので、おかしいことをやっているわけではなさそう
tf_learnのsample codeにあるvggnetでは、(畳み込み+畳み込み+プーリング)を5つしてから全結合をしています。

github.com

ただし、その分計算が増えてしまうので、僕の実行環境でできそうな4つの積み重ね+全結合で実行していきます。 また、DropOutを使ってみたかったので、全結合層の後だけでなく、(畳み込み+畳み込み+プーリング)のあとにDropOutを追加してみました。(これが良くなかったかも?)
数値的には、昨日の値とほとんど変わりませんでした。が、グラフを見る感じ、収束しているように思えなかったので、epochを上げてみようと考えています。
あと、(畳み込み+畳み込み+プーリング)の後のdropoutをなくして実行してみます。
これでうまく行かない感じだと、いよいよ画像の追加が必要になってくる気がする…

cnn過学習 乙

oichan.hatenablog.com cifar-10 tutorialのコードそのままで、入力データだけ変えるという愚行をした結果...
過学習
しました。
グラフは出しませんが(次から出すかも)
Accuracy/Trainだと98%で、
Accuracy/testだと30%でした。
4クラスに分類する問題にしているので、期待値と変わりませんね…

原因は

  • データの少なさ
  • 入力画像の複雑さに対して、入力画像が小さすぎた

があると考えています。
データの少なさはちょっとデータの種類的に増やすのが難しいので、入力画像のresizeをもう少しでかくします。
現在32×32
次 64×64
他はほとんど変えずにどのくらい汎化性能が上がるのか楽しみです。

TF learnでお手軽CNN(をこれからします。)

研究室の人たちで今流行りの?ディープラーニングの教科書の輪読を行いました。

深層学習 Deep Learning (監修:人工知能学会)

深層学習 Deep Learning (監修:人工知能学会)

結構盛りだくさんで、後半の応用の部分はなんとなくしかわかりませんでした。 最初の基礎的な部分をわかっておけば大体雰囲気掴めるのかなという感じです。 この教科書は結構輪読に使っている研究室やゼミが多いみたいで、slideshare等でスライドを公開してくれてる人がいます。 そんなこんなでなんとなくわかった気になっている僕は実際に動かしてみたいと思いました。Googleが公開したTensorFlowがだいぶ流行っているみたいですが今回は、そのTensorFlowを簡単に使えるようにしてくれているTF learnを使ってみたいと思います。 TF learn: Getting Started - TFLearn

ディープラーニングといえば、画像認識ということで、cnnをやってみました。 チュートリアルにある単純なcnnをベースに、自分の持っているデータで学習させて、どんどんcnnを改良していきたいと思います。 やっていくコードのmainの部分をいかに更新していく予定です。 github.com

crudataの取得

crudata

CRU TS v. 3.23

上のURLに気温とか降水量とかをオープンデータベースとして公開してある。 詳しくはリンク先を読めば大体分かる。

とりあえず、時系列になってる世界各国の気温とか降水量等のデータが使えるらしい。

ただ、ダウンロードがしにくい。一つの項目(気温とか)に対して290ファイル(気温)とかが別個に置いてあるから右クリックカチカチしてたら終わるころには人類滅亡してる。 クソコードだけど

コード

crudataをダウンロードするためだけに書いたコードだから汎用性はまるで無いゴミコードだけど動いたからokということにする。もう使わないし

中身的にはhtmlファイルとって来て、ダウンロードすべきファイル名を取得して、そのファイルをダウンロードしてるだけです。 世界の温度知りたいとか降水量とかのデータが欲しいという人の役に立てたらうれしく思います。 (特にTKB大院R専攻G演習の人たちに役立ちたいと思って書きました。)

北海道行った

札幌すげえ

羊うめえ

ウイスキーおいしそう

函館夜景すげえ

イカの踊り食いキツい

っていう旅でした. f:id:oichan11:20151005182951j:plain 函館の有名な夜景 撮るの難しかった.
一応リモコン使ったんだけどなー設定がアレですね
久しぶりにDSLR.bot oichan.hatenablog.com で作ったやつ使おうと思って出したけど
半田浮いてて使えなかった…
旅行前日にまさかのハンダ付け
本当はもっときれいにつくれば良いんだろうけどいい感じのケース作るのめんどくさかったし
スマートフォン用リモコンキット買った作った方がコスパいいなって思った.
って調べたらML-L3の代替品がこんなに安く出てて
これでいいじゃんってなった

買うわ

LoL API使った

2015/06/18 追記
champごとの勝率とかban rateは取得できないっぽい
lolking等ではいくつかのサンプルの試合から勝率等を計算してるのかな…

League of Legends

League of Legends
というゲームのAPIを使ってみた

やること

毎週変わるfreechampを取得する
ググれば一瞬で出てくるので本当に実用的ではないけど

API

APIの種類は意外とたくさんあって、champごとの勝率とかban rate(上部に追記しました)とかchampの画像とか結構何でもできちゃいそうな感じがする。
https://developer.riotgames.com/ここからリファレンス見れば全部書いてある。
ただ、apiのkeyはLoLのアカウント持ってないともらえない

コード

https://na.api.pvp.net/api/lol/na/v1.2/champion?api_key=でfreechampのidを割り出して、
https://na.api.pvp.net/api/lol/static-data/na/v1.2/champio/{id}?api_key=
でidから名前を取得した

#coding:utf-8
import os
import requests
import json
 
def lol_api():
    champ_url='https://na.api.pvp.net/api/lol/na/v1.2/champion?api_key=*****************'
    champion_r = requests.get(champ_url)
    for k in champion_r.json()['champions']:
        if k['freeToPlay']==True:
            c=k['id']
            freechamp = requests.get('https://na.api.pvp.net/api/lol/static-data/na/v1.2/champion/'+str(c)+'?api_key=*****************')
            print freechamp.json()['name']
        else:
            pass
if __name__ == '__main__':
    lol_api()

結果

上のコードを実行すると
Akali
Amumu
Blitzcrank
Draven
Irelia
Lissandra
Master Yi
Miss Fortune
Nami
Twisted Fate
と表示されました。 Blitzcrank楽しいですね

これから

データを駆使して隠れOPchampを見つけて少しでもPSをカバーしたいです。
おわり