- 勾配情報を取得したり、特定のレイヤの出力を得たい場合など、色々な場面でKerasプログラムの中でTensorflowレイヤの操作をしたいことが出てくる。そんな時に使うのがバックエンド。
- 多くはドキュメント見れば良いが、良く分からないAPI(functionとか)もあるのでメモを残しておく。
インポート
from keras import backend as K
基本
- variableやplaceholderなどを定義できる。値を見る場合はget_value、足し算や引き算なども可能。
x = K.variable(np.random.rand(2,2))
y = K.variable(np.random.rand(2,2))
K.get_value(x)
K.get_value(y)
K.get_value(x+y)
function(inputs, outputs)
- これがはじめ良くわからなかった。
- まずは引数をしっかり理解する。inputsはplaceholderのリスト、outputsはテンソルのリスト。どっちもリストな点に注意。
- functionはプレスホルダーinputsを入力として、outputsを計算する関数を返してくれる。outputsは当然何かしらのテンソル計算。もし、引数を取らない場合は空リストを与えれば良い。
- 呼び出す(call)する場合は、何かプレースホルダに与えて呼び出すだけ。ただし、ここで注意!!Keras(というかTF)のInputsは0次元目がサンプルサイズになっているようなので、バッチデータじゃなくて単一のデータを渡す場合には、expand_dimsとかで次元を増やすことが必要。
in1 = Input(shape=(2, 2))
x = K.variable(np.random.rand(2,2))
y = K.variable(np.random.rand(2,2))
out1 = in1 + x
out2 = in1 + y
fn = K.function([in1], [out1, out2])
o1, o2 = fn([np.expand_dims(np.random.rand(2, 2), 0)])