sw1227’s diary

Visualization, GIS, Machine Learning, Generative Art, Simulation, Math

MNIST互換の日本語くずし字データセットでCNNやt-SNEを試す

  • 1. くずし字データセットとは
  • 2. ダウンロード
  • 3. データを眺める
  • 4. t-SNEによる次元削減
  • 5. CNN(by Keras)による識別
  • 6. まとめ・今後のこと

1. くずし字データセットとは

以前から公開されていた日本古典籍データセットでは、デジタル化されたくずし字の画像をダウンロードすることが可能でした。

人文学オープンデータ共同利用センターのニュース(2018/12/08)によると、この日本古典籍くずし字データセットを元に、MNISTデータセット互換のくずし字データセット「KMNIST」が公開されたそうです。詳細はGitHubや以下のリンクを参照していただければ良いのですが、おなじみのMNISTデータセットと同様、10クラスに分類できる28x28のグレースケール画像が70,000枚(訓練用60,000・テスト用10,000)提供されています。また、Kuzushiji-49という49クラスの拡張版データセットもあるようです。

codh.rois.ac.jp

この記事では、このKuzushiji-MNISTをダウンロードし、クラスごとの画像の可視化・t-SNEによる次元削減・ベンチマークのCNN(Keras)による識別までを実行してみます。

続きを読む

PFN製の最適化ツール「Optuna」で富士山を登頂する

  • 1. 背景
  • 2. 方法
    • 2.1. 標高タイル
    • 2.2. Optuna
  • 3. 結果
    • 3.1. 実行例
    • 3.2. 登山経路
  • 4. まとめ

1. 背景

Optunaとは、Preferred Networks(以下PFN)の秋葉氏らが開発したハイパーパラメータ自動最適化ツールです。

ハイパーパラメータ自動最適化ツール「Optuna」公開 | Preferred Research

これは勾配法の適用できない(しない)ハイパーパラメータをベイズ最適化アルゴリズムの一種を使って自動で最適化してくれるものですが、Chainerと密結合しているわけではありません。何らかのObjective functionを与えることで簡単に最適化を行ってくれるようになっています*1

★★★

Objective...? 登山にとってそれは標高だ、と多くの人は考えるのではないでしょうか? 標高が唯一の目的ではないにせよ、世界最高峰たるエベレストが登山家を惹きつけ、命を省みない挑戦を生み出してきたことは事実です。

というわけで、この記事ではOptunaを地形に対して適用することで富士山の山頂を目指します。

山巓の岩に坐って一時間。

寂しい — という一つの言葉が粟つぶのように心に浮かんできた。だが私はそれを声にできない。

沈黙は認識ではない。でもそれはわたしを一生歩かせる。歩きつづけ登りつづける他に登山者には答えようがない。

辻まこと北岳にて』

*1:もちろん、問題の性質によっては他の最適化手法を用いるべきです

続きを読む

複素関数のカラフルな可視化をPython・JavaScriptで実装する

これは「日曜数学 Advent Calendar 2018」4日目の記事です。

みなさんレベルが高くて恐縮ですが、この記事では気軽に目で見て楽しめる内容を紹介させていただきます。 adventar.org

なお、複素関数の可視化に関連して、以下のような記事も書いています。 ぜひ併せてご覧ください。

sw1227.hatenablog.com

1. 複素関数の可視化について

初めて複素数を学ぶ高校生が  i の実体を想像できずに苦労するというのはたまに聞く話ですが、複素関数ともなればさらにイメージしにくいのではないでしょうか。「普通の」関数ならグラフを描画して性質を考えることもできますが、複素関数の場合はそうもいきません。

そこで、この記事ではDomain Coloring(定義域の着色*1という手法によって複素関数を可視化してみます。

まずはふつうの実数値関数のグラフを考え、関数の可視化がどのような発想に基づくものであるかを明らかにするところから始めましょう。

*1:日本語だと固有名詞っぽくないので主に英語名で紹介していきます

続きを読む

Calabi-Yau多様体をブラウザ上に可視化する(Three.js)

  • 1. Calabi-Yau多様体とは
  • 2. 可視化の方法
    • 2.1. 方針
    • 2.2. 媒介変数表示
    • 2.3. 3次元への射影
  • 3. 実装
  • 4. ギャラリー
    • n=2
    • n=3
    • n=4
    • n=5
    • n=6
    • n=7
    • n=8
  • 5. まとめ・今後の展望

1. Calabi-Yau多様体とは

砂浜でカップルが追いかけっこをしてイチャついている描写をたまに見かけます。一方、蝶々のオスとメスは平面にとどまらず、 z軸も駆使して3次元的にイチャついています。これが限界である、すなわち空間は3次元である、という風に我々は認識しています。

ところが、「大栗先生超弦理論入門 (ブルーバックス)」という本によると、超弦理論においては空間の次元は9次元(時間も含めると時空間は10次元)に定まるというのです。そうすると当然、残りの6次元の空間はどうなったのかという疑問が生じます。実際、大栗先生の本にも以下のような記述があり、物理学においても重要な問題であったことが分かります。

超弦理論では空間の次元が九次元と一意的に決まりました。しかし素粒子標準模型は三次元の理論なので、超弦理論からそれを導出するには、六つの余剰次元をなんとかしなければならないという問題がありました。

大栗先生の超弦理論入門 (ブルーバックス)

プリンストン大学エドワード・ウィッテンらは、この9次元の空間を6次元のカラビ-ヤウ空間*1によって3次元にコンパクト化するというアイデアを提示しました。綱渡りをするピエロにとって一次元に見える綱も実は二次元的な表面を持っているように、我々が認識できない6次元空間も数学的に「存在する」というのです。

この記事では、そのようなCalabi-Yau多様体をブラウザ上でインタラクティブに操作できるような形式で可視化し、手法と結果を紹介したいと思います。

大栗先生の超弦理論入門 (ブルーバックス)

大栗先生の超弦理論入門 (ブルーバックス)

f:id:sw1227:20181117132205p:plain:w400

*1:栗先生の本ではこの表現が採用されています

続きを読む

緯度経度と平面直角座標の相互変換を実装するための数式

  • 1. はじめに
    • 1.1. 背景
    • 1.2. 平面直角座標系の概要
  • 2. 平面直角座標から経緯度への変換式
    • 2.1. 記号
    • 2.2. 計算詳細
      • 2.2.1. の計算
      • 2.2.2. の計算
      • 2.2.3. の計算
      • 2.2.4. の計算
      • 2.2.5. の計算
      • 2.2.6. 緯度 ・経度 の計算
  • 3. 経緯度から平面直角座標への変換式
    • 3.1. 記号
    • 3.2. 計算詳細
  • 4. 実装
  • 5. まとめ
  • 6. 参考

1. はじめに

1.1. 背景

緯度経度はご存知のように地球上の位置を角度で表現するもので、Google Mapsなど様々なサービスで目にすることも多いでしょう。 しかしながら、角度ではなくメートル単位の x, y座標で地球上の位置を表現したいケースも存在します。そんな時に使えるのが平面直角座標系です。

経緯度と平面直角座標の相互変換式は国土地理院のWebサイトに公開されているのですが、角度の「ラジアン」と「度」に混同があったり変数間の依存関係が見辛かったりする*1ため、この記事で解説したいと思います。 なお、Pythonによる実装は別途Qiitaに投稿しています。

緯度経度と平面直角座標の相互変換をPythonで実装する - Qiita

*1:変換式実装時点

続きを読む

はてなブログのシンタックスハイライトを綺麗にする

  • 1. 背景
  • 2. highlight.jsの導入
    • 2.1. highlight.jsを取得
    • 2.2. 行間の調整
  • 3. 使い方
    • 注意点

f:id:sw1227:20181117115002p:plain

1. 背景

例えばPythonのコードをはてなブログに貼り付けたい場合、

```python

ソースコード

```

と記述することで以下のように表示されます。

@app.route("/lifegame")
def lifegame():
    """ Conway's Game of Life """
    return render_template("lifegame.html")

あまり綺麗ではないしカスタマイズも(たぶん)できなくて萎える...と思いきや、はてなブログJavaScriptを差し込むことができるため、highlight.jsを使ってAtom One Dark風のシンタックスハイライトを実装することができました。他にも185言語・89種類のスタイルが使えるようです。

続きを読む

About

1. やっていきたい分野

カテゴリ

言語・フレームワーク

  • JavaScript
    • d3.js
    • Three.js
    • React
    • Vue.js
    • Deck.gl
    • Kepler.gl
    • Leaflet.js
    • Web Audio API
    • Web MIDI API
  • Python
    • Jupyter Notebook
    • numpy, scipy, pandas, scikit-learn, ...
  • Haskell

2. リンク