CNNモデルを利用して保存している画像を学習させるという項目を勉強しています。
先にモデルだけ定義した以下のコードをモジュールとして利用すると書いていました。
Python
1import keras 2from keras.models import Sequential 3from keras.layers import Dense, Dropout, Flatten 4from keras.layers import Conv2D, MaxPooling2D 5from keras.optimizers import RMSprop 6 7# CNNのモデルを定義する 8def def_model(in_shape, nb_classes): 9 model = Sequential() 10 model.add(Conv2D(32, 11 kernel_size(3, 3), 12 activation="relu", 13 input_shape=in_shape)) 14 model.add(Conv2D(32, (3, 3), activation="relu")) 15 model.add(MaxPooling2D(pool_size=(2, 2))) 16 model.add(Dropout(0.25)) 17 18 model.add(Conv2D(64, (3, 3), activation="relu")) 19 model.add(Conv2D(64, (3, 3), activation="relu")) 20 model.add(MaxPooling2D(pool_size=(2, 2))) 21 model.add(Dropout(0.25)) 22 23 model.add(Flatten()) 24 model.add(Dense(512, activation="relu")) 25 model.add(Dropout(0.5)) 26 model.add(Dense(nb_classes, activation="softmax")) 27 return model 28 29# コンパイル済みのCNNのモデルを返す 30def get_model(in_shape, nb_classes): 31 model = def_model(in_shape, nb_classes) 32 model.compile( 33 loss="categorical_crossentropy", 34 optimizer=RMSprop(), 35 metrics=["accuracy"]) 36 return model
このモデルを利用して以下のコードを実行する事により(パソコンか、ソフトによる疑似パソコンが?)画像を学習するらしいです。
Python
1import cnn_model 2import keras 3import matplotlib.pyplot as plt 4import numpy as np 5from sklearn.model_selection import train_test_split 6 7# 入力と出力を指定 8im_rows = 32 # 画像の縦ピクセルサイズ 9im_cols = 32 # 画像の横ピクセルサイズ 10im_color = 3 # 画像の色空間 11in_shape = (im_rows, im_cols, im_color) 12nb_classes = 3 13 14# 写真データを読み込み 15photos = np.load("image/photos.npz") 16x = photos["x"] 17y = photos["y"] 18 19# 読み込んだデータを三次元配列に変換 20x = x.reshape(-1, im_rows, im_cols, im_color) 21x = x.astype("float32") / 255 22# ラベルデータを one-hot ベクトルに直す 23y = keras.utils.np_utils.to_categorical(y.astype("int32"), nb_classes) 24 25# 学習用とテスト用に分ける 26x_brain, x_test,y_train, y_test = train_test_split( 27 x, y, train_size=0.8) 28 29# CNNモデルを取得 30model = cnn_model.get_model(in_shape, nb_classes) 31 32# 学習を実行 33hist = model.fit(x_train, y_train, 34 batch_size=32, 35 epochs=20, 36 verbose=1, 37 validation_data=(x_test, y_test)) 38 39# モデルを評価 40score = model.evaluate(x_test, y_test, verbose=1) 41print("正解率=", score[1], "loss=", score[0]) 42 43# 学習の様子をグラフへ描画 44# 正解率を推移をプロット 45plt.plot(hist.history["acc"]) 46plt.plot(hist.history["val_acc"]) 47plt.title("Accuracy") 48plt.legend(["train", "test"], loc="upper left") 49plt.show() 50 51# ロスの推移をプロット 52plt.plot(hist.history["loss"]) 53plt.plot(hist.history["val_loss"]) 54plt.title("Loss") 55plt.legend(["train", "test"], loc="upper left") 56plt.show() 57 58model.save_weights("./image/photos-model-light.hdf5")
実行したところ、上の方のコードの11行目のkernel_sizeが、いわゆる未定義状態のようです。
NameError: name 'kernel_size' is not defined
これは、入門書には書いていないのですがimport kernel_sizeと書く必要があるって事でしょうか?
どうもそうは思えないのです。
全角空白などのイージーミスなどもなく、またkernel_sizeが使用されているのはここだけなのでどうもエラー内容が謎です。
ぜひ助言を頂きたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/22 06:44
2019/05/22 06:54 編集