LoginSignup
1
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-08

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?
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4