FC2ブログ
06«1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.»08

たまひびとらの絵本の実

読書好きな姉妹と弟と父母の読んだ本

数独ソルバー、DJI Tello 操縦 

1. 数独ソルバー。これは自分で作ろうとしたけど、力不足でできませんでした。ウェブにあるbacktracking のコードを解読したのがせいぜい。バックトラッキングは入れ子構造になっている。リー・シェンロンは自分で作ったっていうもんなー。

2. DJI Ryze Tello を Python で飛ばす。なかなか動かなかった理由が、Tello の firmware の問題。Tello app を使いアップデートした。あとは比較的単純。import socket して、tello と local を設定してつなぐ。そして takeoff, land などのコマンドをsock.sendto でtello に送ればOK.

import socket

tello = ("192.168.10.1", 8889)
local = ("", 9000)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(local)

while True: # continue loop until break because it's True'
try:
msg = input("")
msg = msg.encode(encoding="utf-8")
sent = sock.sendto(msg, tello)
except:
break
スポンサーサイト

category: プログラム

cm 0   tb 0   page top

keras 練習 from 新しい機械学習の教科書 

今年読んだ本で最も書き込みが多かったあたらしい機械学習の教科書。当時はプログラムを読むので四苦八苦だった。Pythonに慣れてきたし、kerasの理解も不足しているので、Chapter 7を再読。

そもそもの作り
入力層: 2次元上の座標X、ダミー(定数用)
中間層入力: B = WX
中間層出力: Z = Sigmoid(B)、ダミー(定数用)
出力層入力: A = VZ
出力層出力: Y = Softmax(A)
機械学習で求めるのはB, Z, A, Y
数値微分または解析微分値でバックプロパゲーションして(損失関数値の最小化を目指して)、W, V の値をチューニング

kerasだとほぼ全部すっ飛ばして計算結果が出る。でもやっぱりブラックボックス。中間層の数はいくつとなるべきなのか、ニューロンの数はいくつとなるべきなのか、まったくわからない。とりあえず教科書プログラムに変更を加えて、中間層ニューロン数の変化による正答率を見てみたら、なんとニューロン数が倍になってもほとんど改善なし。えー。

KerasDec006.jpg
KerasDec0007.jpg
KerasDec0008.jpg
KerasDec0009.jpg
KerasDec0010.jpg


category: プログラム

cm 0   tb 0   page top

【キカガク流】脱ブラックボックス講座の中級編 

【キカガク流】脱ブラックボックス講座の中級編
【キカガク流】脱ブラックボックス講座の中級編

概ね簡単ではあるんだけど、自分がこれまでやっててわかってなかったこととか、sklearnの使い方とかわかってよかった。

category: プログラム

cm 0   tb 0   page top

【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門 

【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門
【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門

これだけベイズの本を読んでいて超恥ずかしいんだけど、本コースでベイズ推定の根本的考えがやっとわかった気がする。ベイズの解説だと、サンプリング手法の説明が多いんだけど、重要なのはサンプリング以前のコンセプトなのだ。ベイズ推定では、想定する分布のパラメータ(たとえば平均、分散)を確率的に求める。事後分布は、尤度関数(知っているもしくは自分が想定する確率密度関数にデータを入れて積をとったもの)と事前分布(わかれば)があれば、計算できる。下の例では、4点のデータを基に、パラメータ(正規分布の平均値)がどこかを区間ずっと調べて行って(b)、どのあたりがよりありそうな値か計算できる(パラメータの分布が見える)。この例では、尤度だけがあって、事前分布がない。しかし、事前分布がわからなければ一様分布(つまり定数)となるので、実質的には何も変わらない。以前に作ったこの②でも同じことをやっている。データが増えれば、尤度関数の値が変わるので、ベイズが更新されることとなる。
normal mu estimate
こうやって、どの点がありそうなのかを調べるんだけど(ありそうな値を1つづつ試すプロセスがサンプリング)、次元数(調べるパラメータの数)が増えると膨大な計算が必要になる。そこで、効率的なサンプリング(どこをどう調べるか)、という考えがでてくる。サンプリング手法として、本コースでは、MH-algo, Gibbs sampler, Hamiltonian MC が説明される。詳細つり合い条件もやっと理解できたし(2つの状態があって、双方から他方へ流れがあるとき、状態の量が増減して、結果的に2つの流れが完全に相殺しあうとき、流れは終わって定常状態になる)、Gibbs sampler では、2個のパラメータのありそうな値を探すのに、1つを固定してもう1つを探すという手続きを交互にやることがわかった。ハミルトニアンの説明もすばらしい。

もう1つ例を作ってみた。表裏の確率が0.7/0.3のコイントス。事前分布は表裏確率0.5の正規分布(分散は適当)。尤度関数は正規分布じゃないのかもしれない(上限下限のある分布を使うべきなのかも)。まあ細かいことは気にせずに、試行回数10回、20回、30回と事後分布が更新されることがわかる。試行回数0回のときは事前分布ということになる。繰り返しになるけど、尤度関数は想定された分布でのデータごとの確率密度(積)。
p(μ|X) ∝ {Πp(xn|μ)} p(μ) ということ。
cointossnoshrink.jpg



category: プログラム

cm 0   tb 0   page top

ゼロから作るニューラルネットワーク 

ゼロから作るニューラルネットワーク
ゼロから作るニューラルネットワーク

これやってみました。この先生の教え方はめちゃくちゃわかりやすい。おすすめ。内容的には、機械学習本のシンプルバージョン。ただし、最後の課題はいきなり難しい。keras でやってみようとしたら失敗。うまく予測してくれない。悔しいのでこちらの本で習った tensorflow session で作ったら一応ワークした。とはいっても、日付データの扱いがわからないのでinstant列で代用、カテゴリデータを別扱いするのかもよくわからなかった。でも苦しんでやってみたことには価値がある(と思う)。学習率の設定とか難しいね。まだ安定しないので以下はうまくいった例。

bikesharing tf 0001
bikesharing tf 0002
bikesharing tf 0003
bikesharing tf 0004

category: プログラム

cm 0   tb 0   page top

訪問者数

カテゴリ

最新記事

最新コメント

最新トラックバック