Skip to content

Instantly share code, notes, and snippets.

@3panda
Last active December 27, 2018 09:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 3panda/6dbbc33cb56d1b52feb552649193eff5 to your computer and use it in GitHub Desktop.
Save 3panda/6dbbc33cb56d1b52feb552649193eff5 to your computer and use it in GitHub Desktop.
Kerasをシンプルに理解する (※注意!! 修正中!!!)

Kerasをシンプルに理解する

ネットワーク定義

inputの形式

Conv2D

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

学習済みモデル(weight込み)の保存

h5が拡張子 model.save('XXX.h5')

モデルをJsonで保存する

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.

モデル(ネットワークのみをjsonで保存したもの)を読み込む

model = model_from_json(open('mnist_mlp_model.json').read())

訓練済みのweightを読み込む

h5のweightをう読み込む model.load_weights('weightsXXXXX.h5')

訓練済みのモデル(weight込み)を読み込む

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) 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment