こんにちは、ヒガシです。
このページでは、KeasのLambda層についての解説および実際のプログラムを使ったデモを行います。
それではさっそくやっていきましょう!
KerasのLambda層についての解説
KerasのLambda層を一言で言ってしまうと、自由な関数組み込み層であると言えます。
要は入力をシンプルに2倍したり2乗して出力する、なんて処理をニューラルネットワーク上で簡単に行えるということです。
意図的にノイズを加えたりする際に使われるみたいですね。
Keras-SequentialモデルでのLambda層の実装
それではLambda層を組み込んだモデルを実際に作ってみましょう。
今回は単純に入力をLambda層に入れ、Lambda層での処理後の結果をそのまま出力するというシンプルなものを作ってみます。
以下がそのサンプルコードです。
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Lambda, InputLayer, Input
import numpy as np
#Sequentialモデルの場合
inout_dim = 22
model = Sequential()
model.add(InputLayer(input_shape=(inout_dim,)))
model.add(Lambda(lambda x: x ** 2))
model.summary()
input_data = np.array([3.,3.])
output_data = model(input_data)
print('input_data=', input_data)
print('input_data=', np.array(output_data))
上記のプログラムだとLambda層に書いてある通り、入力を単純に2乗して出力するというものになっています。
以下が実行結果です。
問題なく入力が2乗されていますね。
Lambda層で複雑な処理を行いたい場合
例えばLambda層の中をこんな感じでlambda x: ([x[0] ** 2, x[1] / 2]) 各要素で処理を分けたいこともあるとおもいます。
このように書き換えて実行してみましょう。
すると以下のような結果が出力されました。
ValueError: All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.
要は今回取り扱っているSequentialモデルではこんな処理はできないからfunctional APIモデルを使ってね、ということだと思います。
残念!
おわりに
ということで今回はKerasのLambda層の解説、実演を行いました。
複雑な処理を行いたい場合はやはりfunctional APIでやる必要がありそうなので、次回はfunctional APIモデルで今回と同じことを実行してみようと思います。
このブログでは、このようなAIスキルを多数紹介しています。
ぜひ他のページもご覧ください。
それではまた!
コメント