おっぱいそん!

pythonを数値計算に使うときのテクニックとかをまとめていきたい。

サンプリング定理とUV cutoff

物理の人が、サンプリング定理をimplicitに使っているよって話。

sampling theoremの主張は、「連続な信号をフーリエ変換した時に、ある波数以上の成分がゼロなら、その信号は適当な間隔以上の離散的なサンプル点だけで表しても、元の連続な信号を再現できる」というものです。

フーリエ空間でcutoffを入れた時に、実空間とフーリエ空間の関係は以下のようになります。

  1. 連続かつ、定義域が非有界の実空間(フーリエ変換する前の空間)をフーリエ変換すると、連続・非有界フーリエ空間に変換されます。
  2. 実空間が離散・非有界な時、フーリエ空間は連続・有界に(UV cutoff)
  3. 実空間が連続・有界な時、フーリエ空間は離散・非有界に(IR cutoff)
  4. 実空間が離散・有界な時、フーリエ空間は離散・有界に(UV+IR cutoff)

上の関係のUV cutoffを入れた場合は、sampling theoremですねって話でした。

山田道夫他 「応用のためのウェーブレット」 を読んだ

ちょくちょく名前を聞くけど、あまりよく分かっていないウェーブレットを勉強しようと思い、「応用のためのウェーブレット」を買って読んだ。
以下、感想など。

名前の通り、ウェーブレットを使うために、ウェーブレットの基本的な数学的事実を勉強したい人が読む本。
「応用のための」ウェーブレットの基本的な内容が載っているが、応用自体はほとんど載っていない。
読むために必要とされる前提知識としては、微積分、線形代数(ベクトル空間の意味が分かる程度)、フーリエ変換(1章はフーリエ変換の解説から始まっているが、フーリエ変換を全く知らない人はあれだけでは理解できないかも知れない)くらい。
複素解析で出てくる事実なども少し使っているが、知らなくてもなんとかなる程度。
想定される読者としては、ウェーブレットの数学的な基本を知りたいが、めんどくさい証明などは追いたくないという人。
証明などは基本的に、デルタ関数を使ったりしており、数学的に厳密さより分かりやすさや簡潔さを優先している。
また、難しい証明や計算がめんどくさそうなところなどは、単に証明できると書かれているだけで、詳細な証明には立ち入っていない。
したがって、ウェーブレットを数学的に厳密に理解したい人は、もっと数学的な教科書を参照したほうがいい。
真面目に証明等は追わずに、ウェーブレットの数学的な事実を手短に知りたい人におすすめできる本でした。

よかったところ

かなりコンパクトにまとまっているので、割りとすぐに読めます。
自分は3章までしか読んでいませんが、2-3日くらいで読めました。
下手な比喩などは使わずに、数学的な事実とその意味が書かれているので、ある程度数学ができる人には分かりやすいと思います。
自分は、フーリエ変換自体は知っていたのですが、変換前の関数の解析性と、変換後の関数の収束性(周波数が大きいところでの)の関係などは知らなかったので、その辺の内容がウェーブレットと絡めて理解できたのは良かったです。
式変形は丁寧で基本行間がない。ペンがなくても読めます。

よくなかったところ

4章の実践的な部分がmathematicaという一般家庭にはないソフトウェアを使っているので、大学に所属していたりしてmathematicaを持っている人でないと試せない。
1-2章が式の意味するところなどを説明しているのに対し、3章の書きっぷりは分かりにくかった。
具体的には、証明や導出等なく式が出て来るのはいいが、その式の意味するところを説明したり、後でその式を使わないものが3章には多々あったので、読んでいて気持ち悪かった(例えば、式(3.96)-(3.104)とか。一部は解釈を説明していしているが)。
あと、スケーリング関数を使ってウェーブレットを構成するモチベーションとかも、よく分からなかった。
これは単に自分があまり応用を知らないからな気がするが。

他の本

  • 「やり直しのための通信数学」という電子書籍のウェーブレット編を買ってみたが、微妙な比喩とか、無駄に具体的な数字を使った計算が出てきたりして自分には無理だった。
  • 「ウェーブレット入門―数学的道具の物語」というウェーブレットの歴史が書かれた本をちらっと眺めたが、自分はウェーブレットの歴史には興味がなかったらしい。

Caffeで学習する時のモデルの設定

Caffeでは、データはblob(Binary Large OBject)というクラスで管理する。
モデルのネットワークはLayerを組み合わせて構成される。
各LayerはBlobを受け取ってBlobを出力する。
モデルの定義は[model_name]_train_test.prototxtみたいな感じのファイルに保存する。
ファイルの中身にはモデルの名前と、各Layerの構成を書く。
例 : caffe/lenet_train_test.prototxt at master · BVLC/caffe · GitHub
モデルとしては学習・評価・Deployの3種類が必要で前者2つは今は共通のファイルに書くことになっている(昔は別だった)。

続きを読む

Caffeの使い方

自分用にCaffeの使い方をメモしておく。
オライリーの本(読みやすいのでおすすめです)を参考に勉強してます。

  • インストール
  • データベースの作成
    • 学習・テストデータをDLしてくる
    • 正解ラベルが書かれたファイルをつくる
    • DBの作成
  • ネットワークを定義するprototxtを作る
  • solverの設定するprototxtを作る
  • 学習を開始する
続きを読む

OpenCV3なのにcv2でimportする件について

OpenCV2でも3でも、importする時は

import cv2

としますが、cv2の"2"はバージョンの番号でないらしいです。
元々、OpenCVはCで実装されていて、その時のAPIを"cv"と表していたのに対して、C++で実装されたAPIを"cv2"と名付けていた経緯があるみたいです。
気になったので調べたまで。

参考:
Why do python bindings for v3 still use package name "cv2"? - OpenCV Q&A Forum
convert toの略だという説が...w

Unix系OSでの基本

Unix系のOSでの基本を自分用にメモしておく。

ホームディレクトリへの移動とか

ログインした時の場所(MACだと/Users/ゆーざーねーむ)に移動するには

cd ~/

のように~で移動できる。
なぜUnix&Linuxではホームディレクトリを「~」文字で表現するのか。 - [モ]Modern Syntax

環境変数pathやエイリアスを書く場所:~/.bashrc or ~./bash_profile

後者はログイン時のみで、前者はbashが起動する度に読み込まれる。
.bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの? - Qiita
本当に正しい .bashrc と .bash_profile の使ひ分け - Qiita
例えばエイリアスを作りたい時は
alias hoge="hogehoge"みたいな感じで。
source .bashrcとかで反映させられる。
Macのターミナルでよく使うコマンドにエイリアスを作りました - Qiita

よく使うコマンド

ls, pwd, mkdir, mv, ln -s,

パッケージ管理

MAC:Homebrew
Red-Hat系:yum
Debian系(Ubuntu含む):apt-get