2次元の畳み込みレイヤー
一番最初に入力の形を指定する Conv2Dにはinput_shapeという引数
input_shape() 例えば128x128 RGB画像では input_shape=(128, 128, 3)
例)画像の分類で使われる例 Numpy配の学習データx_trainがあるとする
x_train.shapeでNumpy配列が配列形式になる 例)50 * 50 * 3 のデータが450個あるとすると (450, 50, 50, 3) となる個数は情報として不要なので
x_train.shape[1:] (50, 50, 3) model.fitで渡す必要なのはこの形式
一番最後に出力形式をしてする model.add(Dense(num_classes))
model.fit https://keras.io/ja/models/sequential/
fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)
modelはネットワークをなんやらかんやらして作っているデータ model.fit(x, y ......) で学習
xは訓練データのNumpy配列 yはラベルのNumpy配列 x[0]とy[0]が一致する事になる model.saveで重みを保存する
model.fit_generator ImageDataGeneratorを使う場合
train_generator = train_datagen.flow_from_directory( train_imgs, target_size=(img_height, img_width), batch_size=batch_size, class_mode='categorical')
class_mode='categorical'で
例えばtrain_imgs='../Images/Train/'の場合 これで カテゴリがClass1、Class2で設定出来る
Images --- Train --- Class1 --- img1_1.jpg
| |- img1_2.jpg
| :
|- Class2 --- img2_1.jpg
h5が拡張子 model.save('XXX.h5')
mnist_mlp_model.jsonとしてモデルを保存
model_json_str = model.to_json() open('mnist_mlp_model.json', 'w').write(model_json_str)
例)
from PIL import Image
file_path = 'xxx.jpg'
img = Image.open(filepath).convert('RGB') ## Gray->L, RGB->RGB
img = img.resize((img_width, img_height))
x = np.array(img, dtype=np.float32)
x = x / 255.
model = model_from_json(open('mnist_mlp_model.json').read())
h5のweightをう読み込む model.load_weights('weightsXXXXX.h5')
model = load_model('modelXXXXX.h5')
# xは先ほどの
pred = model.predict(x, batch_size=1, verbose=0)
# 一番良い確率の値が返る
score = np.max(pred)
# ラベルの中で一番良い確率のindex番号が返る
pred_label = np.argmax(pred)