質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1704閲覧

CNNモデルで画像を学習させるコードを書いたのですが、エラー内容が把握できないです。

Java_Test2019

総合スコア27

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/22 06:32

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が使用されているのはここだけなのでどうもエラー内容が謎です。

ぜひ助言を頂きたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コピペミスだと思いますが、= が抜けていてキーワード引数として認識されていません。

以下のように = を入れてください。

diff

1- kernel_size(3, 3) 2+ kernel_size=(3, 3)

投稿2019/05/22 06:35

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Java_Test2019

2019/05/22 06:44

ありがとうございます! そして・・・恥ずかしいです。まさにその通りでした。参考書にはちゃんと=となっていました。 コピペではなく一字一句書いたうえでエラーでした。そして記入ミスがないか何度も見返したうえで結局その記入漏れでした。 時間がかかってしまうリスクはありますが質問するくらいならせめて文字通り一字一句見るべきでした。
tiitoi

2019/05/22 06:54 編集

一字一句何度も見返すよりもエラーが出たらその都度対応すればよいと思います。 今回のケースのようにエラー文に = が抜けているという直接的な原因が書かれていない場合もありますが、括弧が対応してないなどエラー文だけ読めば原因がわかるものもあります。 エラーと一緒に行数が出るので、その問題の行及びその前後だけ書籍と比較して、ミスがないか確認するといいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問