TensorFlow - 恒等行列で初期化する方法 / How to initialize identity matrix with TensorFlow

TensorFlow - 恒等行列で初期化する方法 / How to initialize matrix as identity matrix with TensorFlow

numpy と違って、すべての変数は Tensor と呼ばれるオブジェクトになってしまう TensorFlow 。慣れないわたしなんかはしょーーーもないところでつまづいてしまいます。
今日も恒等行列で初期化するというたわいもないことで無駄に時の流れに身を委ねてしまいました・・・
そんなつまづきでてこずったので、他にも同じ目に遭う人が出ない様に(いないか)メモを残しておきます。

TensorFlow で 行列 の 初期化 をする方法

要素がすべて0の行列だったら tf.zeros、すべて1の行列だったら tf.ones みたいなのはよく TensorFlow のチュートリアルなんかで見かけます。
また、値が決まっている場合は tf.constant([ ... ]) で初期化する、というのも巷の TensorFlow のこと書いたブログ記事でよく見ますね。

... なんだけど。

恒等行列(対角成分がすべて1、他は0)で初期化するのはどうやるんだろう・・・
お、tf.identity というメソッドがあるじゃん!と思って試してみたら、全く同じ shape・要素の行列をもう一個作ってくれるだけでした・・・orz
gist.github.com

まぁ、わたしがちゃんとヘルプ読めよって話なんですが。

datalove.hatenadiary.jp

TensorFlow で 恒等行列で 初期化 をする方法

ちょこっと調べた程度ですが、結論から言うと直接コールするだけで恒等行列を作ってくれるメソッドは TensorFlow にはないみたいです。
代わりに、tf.diag っていう、対角成分だけを引数に設定して、あとは0っていう行列を作ってくれるメソッドがあったのでそれを使いました。
gist.github.com
上のコードのままですが、tf.ones で、必要なサイズで要素がオール1っていうベクトルを作って、それを tf.diag の引数に設定する形です。