プログラマーになりたい。

プログラミングや写真や本や読書会のことや、日常のこと。

ニューラルネットワークのプログラムを久しぶりに見て思ったこと

10年ぶりくらいにニューラルネットワークのプログラムを書いている。趣味だけど。

少し前にすごい勢いでディープラーニングが流行ってしまい、うっとおしいような、うらやましいような気分になった。だが、TensorflowやKerasを触ってみると、格段に楽になっている。流行ってすごいな。

なにしろ、2004年に僕が高専の研究室に入ったときは、最初C++で配列とfor文を使って書いていた。単層のパーセプトロンでも、僕はプログラマとしての注意力が決定的に欠けているので、配列の操作でエラーとNaNを出しまくって、わけがわからなくなったものだ。

途中からJavaにしたので若干マシになったが、for文を使うという基本は大して変わらなかった。ぬるぽぬるぽ。たしか、まだイテレーターがなかったか、知らなかった。最後の方でRを知り、やっと内積(ベクトル-ベクトル積)が1行で書けるようになった。

それが、最近Kerasを使ってみたら、今では1層の定義が1行で済むじゃないか。

それから、驚異的なのが学習。tfから入った人には、何のことを言っているかよくわからないかもしれないが、学習(結合負荷の更新)の式は、w(t+1)=w(t)+……みたいな漸化式の形式になっているものを本や論文から写す必要があった。なければ紙とペンで偏微分だ(僕は授業でしかやったことはないが)。

現在は、どうもtfが対応しているタイプの関数なら式の変形(偏微分)をtfの内部で行ってくれるようで、基本的に入出力の式と誤差の式だけ書けばいいみたいだ。すげえ時代。個人的には、tfで書かれたプログラムを初めて見たとき一番驚いたのがこれだった。

個人的には、一応tfの中で何が起きているのか、更新式の存在くらいは知っていたほうがいい気もするんだけど、これは「プログラマならアセンブラを勉強しろ」と言うのに等しい気もするので、難しいところだ。

ヘボコン2018出場記

準備を開始したのは5月25日。はじめた時期だけは、わりと優等生だったのではないか。新橋のタミヤミニ四駆PROを買っただけだが。

(その後に、リアルタイムで書いていった作業状況というか雑記は、twitterからたどれます。)

ちなみに結果は、初戦敗退。あっさり負けましたが…。

作ったマシン

基本コンセプトはコントロールできるミニ四駆だった。行け、マグナム!

続きを読む

ディープラーニングの本を読んだ。

以前にも新書の啓蒙書的なものは呼んだが、今回のはもう少しまともなやつを呼んでみることにした。

続きを読む

前の職場にいたときに貯金を使ってしまって、辞めたら金がない。

前の職場にいたときに貯金を使ってしまって、辞めたら金がない。 そのうちに働き出すだろうから、今のうちにブログを書くような精神の余裕がないときにできないことは済ませておかなければならない。

うっかり買ったFUJIFILM X-E2というカメラ

上記のカメラを中古で3万円ほどで買いました。 まあ、まだ1枚も撮ってないんだけど。

ボディは買っちゃったが、レンズがないのだ。

富士フイルムはレンズも高いんだよな…。キットレンズ(XF18-55mmF2.8-4 R LM OIS)でさえ、中古で3万円もする。

このレンズはレンズの根元に絞りリングがある(型番のRはringのRらしい)。絞り優先AEで使うことを考えると魅力的なのだが、いかんせんそんなお金はない。

どうも「格下」扱いらしいX-A2などにつけることを想定しているらしい、下記のレンズにしておこうと思う(それでも中古で1万5000円くらいするが)。

値段通り後者は一段分くらい暗い。さらにもちろん写りも違うはずだが、俺にはよくわからんと思う。

富士フイルムの商売は、ライカのような路線を目指してるのかな。

躁のときの悪癖

ちょっとばかり躁状態である。

ヤフオクでカメラをうっかり落札してしまった。金もないのに。まあ、払ったけど。

というか、そもそもヤフオクを見るという行動がすでに変なのだ。普段は絶対見ない。

で、「どうせこの値段なら落札はないだろう」と油断して入札したら、うっかり即決価格を超えてたわけだ。

釈然としない。

というか、なんで買う気もないのに入札しちゃうんでしょう。オークションの入札は、買い物衝動を緩和するという効果が確かにあるんだけど、不注意で本当に落札してしまうんじゃ、緩和になってない。

結構このパターンは多い。でも、買ったものはわりと使うけどね。

ただ今回のはレンズがないので使えない…。

Node.jsを勉強してみようかな

近年WordPressのテーマ作成くらいしかコードを書いていなかったので、もう一度きちんとプログラミングをやってみようとと思った。

まずWordPress以外にもCakePHPなどをやったことのあるPHPを検討した。 しかし、Laravelというフレームワークの本を半分くらい読んでみたり、Goutteでスクレイピングしてみたりしたが、なんかやっぱり好きになれんなという感じだった。

パッケージ管理についてはComposerがあり、昔触ったときに比べると格段に楽に、安全になっている。 フレームワークを選べばオブジェクト指向もできそう。 だけど、それでもなんか間違った使い方をしそうな(しかも気づかなそうな)部分があって怖い。特にself::と$this->とstatic::。

この点について、マニュアルには、

クラスメソッドから静的でないプロパティにアクセスするには -> (オブジェクト演算子) を使って $this->property のようにします (property のところにプロパティ名を指定します)。 静的なプロパティへのアクセスには :: (ダブルコロン) を使って self::$property のようにします。 静的なプロパティとそうでないプロパティの違いについては、 static キーワード を参照ください。 PHP: プロパティ - Manual

と書かれていて、クラスに属するもの(静的な変数やメソッド)と、インタンスに属する変数やメソッドでそれらを使い分けるらしいのだが、俺の頭では管理できそうな気がしないないのだ。

俺はJava頭なの!

……と、うだうだ言っていないで、別の言語を使ってみることにした。

せっかくなので、触ったことがないものから選ぶことにした。Node.js(JavaScript)である。

そういえばPythonというものもあり、これも触ったことないけど、マルチバイト文字の扱いにコツがあるらしく、めんどくさいなあ、と。数値計算機械学習の分野では、ライブラリがそろっているらしく、なんか名前をよく聞く。

こういうと多分怒られそうだが、俺の学習レベルだとNode.jsはJavaScriptインタープリタである。というか、そのように使える。他のLL言語インタープリタのように、JSの文法で書いたプログラム(プレーンテキスト)をコマンドラインから実行できる。

世間一般には、JavaScriptという言語を使用して、これまで(ブラウザ内)とは異なる、サーバよりの用途のプログラムが書けて、しかも性能上のメリットがあるということで注目されたようだ。 *1

この界隈は固有名詞の数が多く、よく考えてみれば楽なのだが、最初は大変混乱する。

上記の他にも、Node.jsをインストールするにあたって、バージョンによる差異が大きいため、複数のバージョンをインストールしておき、プロジェクトごとにどのバージョンで開発するか設定するツールがある。これがnodebrewとNVM。どちらかをまずインストーラして、それを利用してNodeをインストールする。もちろん、素のNode.jsインストーラで1つだけ導入するなら必要ない。Rubyのrbenv、RVM。

NPMは第三者が書いたライブラリの依存関係を解決し、まとめてインストールをしてくれるそうだ。まあ、今はPHPでさえもComposerがある。

Node.jsの本を買おうかと思ったのだが、なんか、すげー初心者寄りか、JavaScriptが書ける前提のやつしかなく、なんかいいのがなかったので、JavaScriptの本を買って読んでいる。

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発

*1:公式には「Node はスケーラブルなネットワークアプリケーションを構築するために設計された非同期型のイベント駆動の JavaScript 環境」(https://nodejs.org/ja/about/)とされている。本当はサーバとサーバサイドの色々を1つのプログラムとして書いたりするためのものらしい。が、JavaScriptの入門書のCUIプログラムを書いているレベルでは、ブラウザでも動かせるようなリクエストを受け付けないプログラムなので、あんまり関係ないと思う。

Creative Commons License ©2007-2016 IIDA Munenori.