Kerasでライブラリを書こうとした際によく忘れる演算について,備忘録も兼ねてnumpyと比較しつつまとめてみました.
◇加算
- keras.layers.add で加算ができます.
- keras.model.addだと層を重ねる演算となるので注意.
numpy
import numpy as np
np.asarray([1,2,3]) + np.asarray([4,5,6])
# array([5, 7, 9])
Keras
import numpy as np
import keras
input1 = keras.layers.Input(shape=(None,))
input2 = keras.layers.Input(shape=(None,))
out = keras.layers.add([input1, input2])
model = keras.models.Model(inputs=[input1, input2], outputs=out)
model.predict([np.asarray([[1,2,3]]), np.asarray([[4,5,6]])])
# array([[ 5., 7., 9.]], dtype=float32)
◇減算
- keras.layers.subtractがないので,一手間必要です.
numpy
import numpy as np
np.asarray([1,2,3]) - np.asarray([4,5,6])
# array([-3, -3, -3])
Keras
import numpy as np
import keras
input1 = keras.layers.Input(shape=(None,))
input2 = keras.layers.Input(shape=(None,))
minus_input2 = keras.layers.Lambda(lambda x: -x)(input2)
out = keras.layers.add([input1, minus_input2])
model = keras.models.Model(inputs=[input1, input2], outputs=out)
model.predict([np.asarray([[1,2,3]]), np.asarray([[4,5,6]])])
# array([[-3., -3., -3.]], dtype=float32)
◇アダマール積
- アダマール$\odot$の関数名ってなんだっけという謎の忘れ方をしたときに.
numpy
import numpy as np
np.multiply(np.asarray([1,2,3]), np.asarray([4,5,6]))
# array([ 4, 10, 18])
Keras
import numpy as np
import keras
input1 = keras.layers.Input(shape=(None,))
input2 = keras.layers.Input(shape=(None,))
out = keras.layers.multiply([input1, input2])
model = keras.models.Model(inputs=[input1, input2], outputs=out)
model.predict([np.asarray([[1,2,3]]), np.asarray([[4,5,6]])])
# array([[ 4., 10., 18.]], dtype=float32)
◇リストの連結
- 多分忘れないはずですが,念のため.
numpy
import numpy as np
a, b = np.asarray([1,2,3]), np.asarray([4,5,6])
np.concatenate((a, b), axis=0)
# array([1, 2, 3, 4, 5, 6])
Keras
import numpy as np
import keras
input1 = keras.layers.Input(shape=(None,))
input2 = keras.layers.Input(shape=(None,))
out = keras.layers.concatenate([input1, input2])
model = keras.models.Model(inputs=[input1, input2], outputs=out)
model.predict([np.asarray([[1,2,3]]), np.asarray([[4,5,6]])])
# array([[ 1., 2., 3., 4., 5., 6.]], dtype=float32)
References
- Keras, François, 2015
- How do I take the squared difference of two Keras tensors?