ぱたへね!(出張所)

はてなダイアリーはrustの色分けができないのでこっちに来た

rustでマクロ

rust standard library cookbookから。 マクロを使って、簡単な可変長引数を実現する例。 macro_rules! multiply { ( $last:expr ) => { $last }; ( $head:expr, $($tail:expr), + ) => { $head * multiply!($($tail), +) }; } fn main() { let val1 = multi…

Rustでグラフ

ほとんどライブラリの使い方レベルだけど、なんとか動いた。 extern crate petgraph; use std::fs; use std::io::Write; // https://docs.rs/petgraph/0.4.13/petgraph/ use petgraph::Graph; use petgraph::algo; use petgraph::dot::Dot; fn main() { let …

久しぶりにKerasを動かしたときのメモ

import keras しただけでこういうエラーがでる。 ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory libcublasが見つからないだけなので、.bashrcにLD_LIBRARY_PATHを追加する。 export LD_LIBRARY_PATH=$LD_LIBRA…

TVMで使われている最適化の探索手法

TVMとは ペーパーはこちらからダウンロードできます。 https://arxiv.org/abs/1802.04799 TVMは、ASICやAPGAの様な組込様CPU等、様々なバックエンドでDeep Learningを動かすことを目的としたコンパイラです。 グラフレベルや演算子レベルの様々な最適化を行…

Rustで文字列の連結

Rust Standard Library Cookbookを読み始めました。 Amazon CAPTCHA この本ではRustの文字列連結として3つの方法が紹介されています。 moveによる連結 一番標準の方法。わかりやすく効率も良いが、連結後はmoveによりhelloは使えなくなる。 fn by_moving() …

GCPUG in Osaka #8【GCP】〜 Google TPU Day 〜

マーチンのおっかけで、GCPUGへ参加してきました。 https://gcpug-osaka.connpass.com/event/100106/ Tensorflow and modern convnets グーグル Martin Görner さん・吉川さん Google martinによる。最新のコンボリューションネットワークの紹介。CNNの基本…

DevFest Kyoto 2018 & TPU

日曜日にDevFest Kyotoに参加してTPUの情報を集めてきました。 https://gdgkyoto.connpass.com/event/99527/Twitterでは見たことがあるこの図を生で見れたのが良かったです。 TPUで使用されているbfloatフォーマットについて。 よく見ると、指数部を増やして…

TFUG KANSAI Meetup 2018

今回は急な開催となり告知期間が短い中、57名の方に参加していただきました。 平日の微妙な天気の中、ご参加いただきありがとうございました。さくらインターネット様には素敵な会場提供だけでなく、講演者へのお声がけや、懇親会の費用も負担していただき実…

rustを使ってonnxを読み込んで見た

https://cipepser.hatenablog.com/entry/protobuf-read-in-rust を参考にrustを使ってonnxを読み込んでみました。 Cargo.toml protobufを使えるようにする。 [dependencies] protobuf = { version = "~2.0", features = ["with-bytes"] } onnxフォーマットの…

らすと

ここってRustのハイライトできんの? >|rust| use std::collections::HashSet; type Pi = Vec<u32>; fn calc_k(pi:&Pi, i:u32, n:u32) -> u32 { // pi(i) + 1 .. n let g0: HashSet<u32> = (pi[i as usize - 1] + 1.. n + 2).collect(); // pi(1) .. pi(i-1) let g1: H</u32></u32>…

[rust][離散最適化] パス列挙アルゴリズム

組込Deep Learningで、量子化された状態での学習というのは離散最適化問題なのでは?と思い立ち組合せ最適化 第2版を読み始めました。最初のアルゴリズムとして、パス列挙アルゴリズム(path enumeration algorithm)が載っていたので、これまた勉強を始めたRu…

なにわTECH道×TFUG KANSAI Deep Learning フェス2018

土曜日に行われたなにわTECH道×TFUG KANSAI Deep Learning フェス2018のレポートです。今回は発表も無く、当日の僕の役割は司会者の近くに座って何かあったらサポートするというポジションだったので、集中して発表内容を聞くことができました。当日は公演中…

戦略的データサイエンス入門

戦略的データサイエンス入門 ―ビジネスに活かすコンセプトとテクニックを読みました。 どんな本 タイトルにあるようにビジネス側からのデータサイエンスについて書かれた本です。データサイエンスの本は、ともするとアルゴリズムから手法を分類しがちですが…

Writing Compilers and Interpreters まとめ

Writing Compilers and Interpreters A Software Engineering Approach 3rd Editionを5月から読んでました。なかなか面白い本なので紹介します。コンパイラの勉強というとどうしてもパーサーで挫折してしまいがちです。この本は、まずはフロントエンドと、中…

オンライン機械学習

機械学習プロフェッショナルシリーズのオンライン機械学習を読みました。タイトルはオンライン機械学習となっていますが、機械学習の基本的な学習アルゴリズムについて説明されている本です。特にオンラインでしか通用しない話だけでなく、半分くらいは基本…

[compiler]Writing Compilers and Interpreters: その13手強かった11章が終了。 12章 Interpreting Pascal Programsへ

Writing Compilers and Interpreters: その12

定数宣言のパースができるようになった。こういう定数の宣言をパースしてクロスリファレンスをかえると、 CONST epsilon = 10; limit = -epsilon; BEGIN END.こんな感じで、integerということとその値が表示されるところまで来た。 ***Definition.PROGRAM du…

Writing Compilers and Interpreters: その11

chap9は型システム。想像していたより難しい。一歩ずつ行かないと。 PROGRAM Test; CONST epsilon = 1.0e-6; TYPE rec = RECORD a : real; x, y : integer; END;こういうコードに対して、シンボルテーブルをスタックにする。Level 0がInteger等の組込型が定…

Writing Compilers and Interpreters: その10

chap8が終了。 for文などが動くようになった。面白くなってきた。CASE文の処理で caseのラベルをキーにして処理を辞書に入れておくと、caseラベルが増えても一定のコストでジャンプできるハック。その辞書をメモ化するまでがセット。面白いが、いまいち速度…

Writing Compilers and Interpreters: その9

chap6が終了。制御構造とか何にもないけど、変数の代入ができるようになった。 ふと気が付いたんだけど、定数の畳み込みの最適化って、実際にはインタプリタの実装と同じだ。変数のスコープ、演算子の優先順序、型変換等、言語仕様にそって動く物がないと、…

Writing Compilers and Interpreters: その8

手書きパーサー作成中。 BEGIN BEGIN {Temperature conversions.} five := 3; END; END.これのパース結果をxmlで出力できるようになった。こんな単純なのだと良いけど、これから複雑になってきたときにxmlで良いのかは良く分からない。 <COMPOUND line="1"> <COMPOUND line="2"> <ASSIGN line="3"> <VARIABLE id="five" level="0" > <INTEGER_CONSTANT value="3" > </ASSIGN> </COMPOUND> </COMPOUND> あとは…

Writing Compilers and Interpreters: その7

手書きパーサーを作成中。このPascalコードをパースして、 BEGIN BEGIN {Temperature conversions.} five := 3; END; END.fiveを代入先の識別子として認識するところまで来ました。 ====== CROSS-REFERENCE TABLE ====== Identifier Line numbers ----------…

Writing Compilers and Interpreters: その6

シンボルテーブルを作りました。 この本にでてくるのは、スタック型のデータ構造でシンボルを管理しています。ツリーで全部作りきった方が良さそうな気がするのですが、パースしながらネストに沿ってスタックを伸ばしたり縮めたりするようです。ネストの処理…

Writing Compilers and Interpreters: その5

とりあえず3章まで終了してトーカナイザーができた。正直この辺までは僕の人生で10回くらいやってる。 パーサーを突破したのが2回くらい。4章はシンボルテーブル。Cで書くと辛い奴だが、今時の言語なら余裕だと思う。順調だけど油断せずに行こう。

Writing Compilers and Interpreters: A Software Engineering Approach 3rd Edition その4

2章まで終了。 この本の面白いところは、まずはソースコードを入力して、トーカナイザーとパーサーとコードジェネレータを通すフレームワークを先に作る所です。2章が終わった時点でできるのは、このようなPascalのコードを読み込んで、行番号つけて表示する…

Writing Compilers and Interpreters: A Software Engineering Approach 3rd Edition その3

いくつかデザインパターンが出てきました。今まで本を読んでもさっぱり分からなかったのに、コキュートスでやった経験が生きていてなるほどと関心しています。こういうのは実際に苦労しないと身につかないですね。 ファクトリーパターン 起動時のオプション…

Writing Compilers and Interpreters: A Software Engineering Approach 3rd Edition その2

Writing Compilers and Interpretersを読んでる。 Tokenにソース上の位置情報を持たせてあって、あーなるほどーと関心した。 パーサーやスキャナーは抽象クラスを作って、それらを継承して言語固有のパーサーにするという設計が面白い。オブザーバーパターン…

Writing Compilers and Interpreters: A Software Engineering Approach 3rd Edition

手持ちになんちゃってでも良いので、そこそこ動くコンパイラが欲しいので、Writing Compilers and Interpreters: A Software Engineering Approach 3rd Editionを購入して勉強を始めた。ATOMとPlanUMLでUML図を書いている。なかなか思った通りに配置されず、…

courseraのDeep Learning Specialization

全リソースをつっこむくらいの勢いで、Deep Learning Specializationコースを受講中。 https://www.coursera.org/specializations/deep-learning1/3くらいを終えたところ。 一回、ちゃんと授業として受けておくのは良いことだと思う。

CourseraのPractical Time Series Analysis

CourseraのPractical Time Series Analysisを完了しました。修了証 https://www.coursera.org/account/accomplishments/certificate/364U9TKUZXYD 内容 時系列データを扱うときに使うモデル、MA、AR、ARMA、ARIMAについて、基本から順番に説明していきます。…