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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

Q&A

解決済

1回答

8643閲覧

ValueError: num must be 1 <= num <= 121, not 122 の解決

LenItsuki

総合スコア89

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

0グッド

0クリップ

投稿2018/09/05 01:39

前提・実現したいこと

以下のページのソースを利用して
https://recruit.gmo.jp/engineer/jisedai/blog/deep-learning-keras/

tensorflow kerasで、下のソースを実行中に、以下のエラーが出ます。
Matplotlibでのsubplotを利用したグラフ作成のところかと思いますが、
解決法をご教示頂けますと助かります。

発生している問題・エラーメッセージ

ValueError Traceback (most recent call last)
<ipython-input-8-849bb41a5d35> in <module>()
8 for ind, val in enumerate(test_wrong):
9 plt.subplots_adjust(left=0, right=1, top=1, bottom=0)
---> 10 plt.subplot(11, 11, ind + 1)
11 # plt.subplot(11, 11, ind)
12 im = 1 - val[0][0]

~\AppData\Local\conda\conda\envs\tensorflow-gpu\lib\site-packages\matplotlib\pyplot.py in subplot(*args, **kwargs)
1070
1071 fig = gcf()
-> 1072 a = fig.add_subplot(*args, **kwargs)
1073 bbox = a.bbox
1074 byebye = []

~\AppData\Local\conda\conda\envs\tensorflow-gpu\lib\site-packages\matplotlib\figure.py in add_subplot(self, *args, **kwargs)
1237 self._axstack.remove(ax)
1238
-> 1239 a = subplot_class_factory(projection_class)(self, *args, **kwargs)
1240 self._axstack.add(key, a)
1241 self.sca(a)

~\AppData\Local\conda\conda\envs\tensorflow-gpu\lib\site-packages\matplotlib\axes_subplots.py in init(self, fig, args, **kwargs)
65 raise ValueError(
66 ("num must be 1 <= num <= {maxn}, not {num}"
---> 67 ).format(maxn=rows
cols, num=num))
68 self._subplotspec = GridSpec(
69 rows, cols, figure=self.figure)[int(num) - 1]

ValueError: num must be 1 <= num <= 121, not 122

該当のソースコード

python

1import os 2import sys 3import numpy as np 4import pandas as pd 5import matplotlib.pyplot as plt 6 7# Kerasで必要なものをimport 8from keras.datasets import mnist 9from keras.models import Sequential 10from keras.layers.core import Dense, Dropout, Activation, Flatten 11from keras.layers.convolutional import Convolution2D, MaxPooling2D 12from keras.utils import np_utils 13 14# データを用意&加工 15size_img = 28 16n_label = 10 17 18(X_train, y_train), (X_test, y_test) = mnist.load_data() 19X_train = X_train.reshape(-1, 1, size_img, size_img).astype('float32') / 255. 20X_test = X_test.reshape(-1, 1, size_img, size_img).astype('float32') / 255. 21Y_train = np_utils.to_categorical(y_train, n_label) 22Y_test = np_utils.to_categorical(y_test, n_label) 23# 試しに、どんなインプットイメージが見てみる 24%matplotlib inline 25import matplotlib.cm as cm 26 27i = 7 28plt.imshow(X_train[i, 0], interpolation='nearest', cmap=cm.binary) 29print("label : ", Y_train[i,:]) 30# CNNモデルの構築 31# 単純なconv1層 x full connect1層モデル 32n_filter = 16 33size_filter = 5 34size_pool = 2 35n_hidden = 100 36 37model = Sequential() 38model.add(Convolution2D(n_filter, size_filter, size_filter, 39 border_mode='same', input_shape = (1, size_img, size_img))) 40model.add(Activation("relu")) 41model.add(MaxPooling2D(pool_size=(size_pool, size_pool))) 42model.add(Dropout(0.2)) 43model.add(Flatten()) 44model.add(Dense(n_hidden)) 45model.add(Dropout(0.2)) 46model.add(Dense(n_label)) 47model.add(Activation('softmax')) 48 49model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy']) 50# 学習 51model.fit(X_train, Y_train, batch_size=50, nb_epoch=10, 52 verbose=1, validation_split=0.1) 53vs = model.evaluate(X_test, Y_test) 54print("\nTest classification rate %0.05f" % vs[1]) 55# ~99%と高い正解率 56# 正誤表 57print('Cross tabulation') 58y_pred = model.predict_classes(X_test) 59pd.crosstab(y_pred, y_test) 60# そこで実際に、間違いの数字を見る。 61# 青ラベル:実際の数字;赤ラベル:間違えて予測した数字 62test_wrong = [im for im in zip(X_test, y_pred, y_test) 63 if im[1] != im[2]] 64print(len(test_wrong)) 65 66plt.figure(figsize=(15, 15)) 67for ind, val in enumerate(test_wrong): 68 plt.subplots_adjust(left=0, right=1, top=1, bottom=0) 69 plt.subplot(11, 11, ind + 1) 70# plt.subplot(11, 11, ind) 71 im = 1 - val[0][0] 72 plt.axis("off") 73 plt.imshow(im, cmap='gray') 74 plt.text(8, 0, val[1], fontsize=14, color='red') 75 plt.text(0, 0, val[2], fontsize=14, color='blue') 76# break

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

plt.subplot(11, 11, ind + 1)の第3引数が大きすぎるからだと思います.

公式ドキュメントによると「第3引数は1から第1引数×第2引数まで」つまり121が最大値です.
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html)
エラーメッセージからもそう見受けられます.

len(test_wrong)が121を超えているようならば第1引数,第2引数の値を大きくしてみてください.

投稿2018/09/09 03:59

hiroCSJT

総合スコア93

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

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

LenItsuki

2018/09/09 18:55

解決できました.どうもありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問