numpy
数学
Keras

Kerasで忘れる演算とnumpyの比較

More than 1 year has passed since last update.

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

  1. Keras, François, 2015
  2. How do I take the squared difference of two Keras tensors?