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

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

新規登録して質問してみよう
ただいま回答率
85.46%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1118閲覧

【ゼロから作るDeep Learning】CNNの学習をMNIST以外のデータセットで実装

RayU

総合スコア8

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/08/30 07:58

編集2020/08/30 08:14

本書の「7.5 CNNの実装」でCNNの精度を確認するため(ch7/train_convnet.pyのソースコード)にMNISTを使っているのですが、そのMNISTのデータを動物のBGR画像データに変えて実行したところ、エラーが出てしまいました。
これを何とか学習することは出来るのでしょうか?

画像データは

x_train : サイズ(1000,3,50,50), 型 Array of uint8
t_train : サイズ(1000,), 型 Array of int32 (犬は1、猫は2、など…)
x_test : サイズ(500,3,50,50), 型 Array of uint8
t_test : サイズ(500,), 型 Array of int32 (上と同様)

です。

##エラーメッセージ

python

1Reloaded modules: simple_convnet, common, common.layers, common.functions, common.util, common.gradient, common.trainer, common.optimizer 2Traceback (most recent call last): 3 4 File "C:\Users\hatae.spyder-py3\タイトル無し1.py", line 92, in <module> 5 trainer.train() 6 7 File "..\common\trainer.py", line 71, in train 8 self.train_step() 9 10 File "..\common\trainer.py", line 44, in train_step 11 grads = self.network.gradient(x_batch, t_batch) 12 13 File "C:\Users\hatae\OneDrive\デスクトップ\deep-learning-from-scratch\ch07\simple_convnet.py", line 126, in gradient 14 self.loss(x, t) 15 16 File "C:\Users\hatae\OneDrive\デスクトップ\deep-learning-from-scratch\ch07\simple_convnet.py", line 72, in loss 17 return self.last_layer.forward(y, t) 18 19 File "..\common\layers.py", line 79, in forward 20 self.loss = cross_entropy_error(self.y, self.t) 21 22 File "..\common\functions.py", line 57, in cross_entropy_error 23 return -np.sum(np.log(y[np.arange(batch_size), t] + 1e-7)) / batch_size 24 25IndexError: index 10 is out of bounds for axis 1 with size 10

最後の「index 10 is out of ~」のindex後の数字は実行したときによって違います。

##コード

python

1import sys, os 2sys.path.append(os.pardir) # 親ディレクトリのファイルをインポートするための設定 3import numpy as np 4import matplotlib.pyplot as plt 5os.chdir(r"C:/Users/hatae/OneDrive/デスクトップ/deep-learning-from-scratch/ch07") 6from simple_convnet import SimpleConvNet 7from common.trainer import Trainer 8 9max_epochs = 20 10 11network = SimpleConvNet(input_dim=(3,50,50), 12 conv_param = {'filter_num': 30, 'filter_size': 5, 'pad': 0, 'stride': 1}, 13 hidden_size=100, output_size=10, weight_init_std=0.01) 14 15trainer = Trainer(network, x_train, t_train, x_test, t_test, 16 epochs=max_epochs, mini_batch_size=100, 17 optimizer='Adam', optimizer_param={'lr': 0.001}, 18 evaluate_sample_num_per_epoch=1000) 19trainer.train() 20 21# パラメータの保存 22network.save_params("params.pkl") 23print("Saved Network Parameters!") 24 25# グラフの描画 26markers = {'train': 'o', 'test': 's'} 27x = np.arange(max_epochs) 28plt.plot(x, trainer.train_acc_list, marker='o', label='train', markevery=2) 29plt.plot(x, trainer.test_acc_list, marker='s', label='test', markevery=2) 30plt.xlabel("epochs") 31plt.ylabel("accuracy") 32plt.ylim(0, 1.0) 33plt.legend(loc='lower right') 34plt.show() 35

ご教授頂けると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

IndexError: index 10 is out of bounds for axis 1 with size 10

このエラーメッセージの意味は、y[np.arange(batch_size), t]の部分で、t(=axis 1)の値が0〜9でないといけない(size 10なので)にも関わらず、10(index 10)が指定されている、という意味だと思います。

以下、想像になりますが、

t_train : サイズ(1000,), 型 Array of int32 (犬は1、猫は2、など…)

この値の範囲はMNISTと同じ0〜9でしょうか?ここが10以上になることがあると、このエラーになりそうな気がします。もしMNISTと違うのであれば、それに合わせて出力層のニューロンの数を変えないといけません。SimpleConvNet()output_size=10がその指定になるかと思います。

投稿2020/08/30 09:58

segavvy

総合スコア958

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

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

RayU

2020/08/30 13:12 編集

ありがとうございます、その通りでした。 ただ直したところ、今度は File "..\common\functions.py", line 57, in cross_entropy_error return -np.sum(np.log(y[np.arange(batch_size), t] + 1e-7)) / batch_size IndexError: arrays used as indices must be of integer (or boolean) type というエラーが出てしまいました。 実装の都合上で t をfor文使い t = np.append(t,0(←正解ラベル)) と強引に代入したため型が”Array of float64”になったことが原因だと思うのですが、なんとかfor文を使ってArray of int32を実装できませんか? ↓元の t の実装コード t = np.array([]) for i in range(1000): if i < 200: if i < 400: if i < 600: if i < 800:t = np.append(t,0) else: t = np.append(t,1) else: t = np.append(t,2) else: t = np.append(t,3) else: t = np.append(t,4)
segavvy

2020/08/30 14:39

最初の t = np.array([]) を t = np.array([], dtype='int32') にするか、もしくは、t を作った後に t = t.astype('int32') で変換するかでしょうか。 なお、そのコードだと t には 0 と 4 しか入らないように見えます。不等号の向きが逆かも知れません。
RayU

2020/08/31 12:39

確かにそうでした、色々ありがとうございました。
segavvy

2020/08/31 15:44

いえいえ、お役に立てたようでしたら良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問