keras
モデルにcv2などを使用して入力画像のサイズを変更したいと思います。
ImageGenerator
の使用を見てきましたが、独自のジェネレータを作成し、keras.layers.core.Lambda
を使用して最初のレイヤーの画像のサイズを変更することをお勧めします。
どうすればいいですか?
テンソルフローバックエンドを使用している場合は、tf.image.resize_images()
関数を使用してLambda
レイヤーの画像のサイズを変更できます。
同じことを示す小さな例を次に示します。
import numpy as np
import scipy.ndimage
import matplotlib.pyplot as plt
from keras.layers import Lambda, Input
from keras.models import Model
from keras.backend import tf as ktf
# 3 channel images of arbitrary shape
inp = Input(shape=(None, None, 3))
try:
out = Lambda(lambda image: ktf.image.resize_images(image, (128, 128)))(inp)
except :
# if you have older version of tensorflow
out = Lambda(lambda image: ktf.image.resize_images(image, 128, 128))(inp)
model = Model(input=inp, output=out)
model.summary()
X = scipy.ndimage.imread('test.jpg')
out = model.predict(X[np.newaxis, ...])
fig, Axes = plt.subplots(nrows=1, ncols=2)
Axes[0].imshow(X)
Axes[1].imshow(np.int8(out[0,...]))
plt.show()