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

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

新規登録して質問してみよう
ただいま回答率
85.49%
機械学習

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

Python

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

Q&A

解決済

1回答

794閲覧

機械学習で、ファイルを3つ以上読み込むとエラーが起きる

nifeP

総合スコア1

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/07/05 04:33

編集2020/07/05 07:03

機械学習で、画像認識をやろうと思っているのですが、画像が入ったファイルが2個までならできるのですが、3つ以上にするとエラーが起こってしまいます。

python

1!pip install icrawler

python

1# from icrawler.builtin import GoogleImageCrawler 2# もつ煮の画像を100枚取得 3# crawler = GoogleImageCrawler(storage={"root_dir": "moosuni"}) 4# crawler.crawl(keyword="もつ煮", max_num=100) 5from icrawler.builtin import BingImageCrawler 6 7# もつ煮の画像を100枚取得 8crawler = BingImageCrawler(storage={"root_dir": "motsuni"}) 9crawler.crawl(keyword="もつ煮", max_num=100)

python

1# ナポリタンの画像を100枚取得 2# crawler = GoogleImageCrawler(storage={"root_dir": "naporitan"}) 3# crawler.crawl(keyword="ナポリタン", max_num=100) 4from icrawler.builtin import BingImageCrawler 5 6# ナポリタンの画像を100枚取得 7crawler = BingImageCrawler(storage={"root_dir": "naporitan"}) 8crawler.crawl(keyword="ナポリタン", max_num=100)

python

1# ラーメンの画像を100枚取得 2# crawler = GoogleImageCrawler(storage={"root_dir": "ra-men"}) 3# crawler.crawl(keyword="ラーメン", max_num=100) 4from icrawler.builtin import BingImageCrawler 5 6# ラーメンの画像を100枚取得 7crawler = BingImageCrawler(storage={"root_dir": "ra-men"}) 8crawler.crawl(keyword="醤油ラーメン", max_num=100)

python

1from PIL import Image 2import os, glob 3import numpy as np 4from PIL import ImageFile 5# IOError: image file is truncated (0 bytes not processed)回避のため 6ImageFile.LOAD_TRUNCATED_IMAGES = True 7 8classes = ["motsuni", "naporitan", "ra-men"] 9num_classes = len(classes) 10image_size = 64 11num_testdata = 25 12 13X_train = [] 14X_test = [] 15y_train = [] 16y_test = [] 17 18for index, classlabel in enumerate(classes): 19 photos_dir = "./" + classlabel 20 files = glob.glob(photos_dir + "/*.jpg") 21 for i, file in enumerate(files): 22 image = Image.open(file) 23 image = image.convert("RGB") 24 image = image.resize((image_size, image_size)) 25 data = np.asarray(image) 26 if i < num_testdata: 27 X_test.append(data) 28 y_test.append(index) 29 else: 30 31 for angle in range(-20, 20, 5): 32 33 img_r = image.rotate(angle) 34 data = np.asarray(img_r) 35 X_train.append(data) 36 y_train.append(index) 37 38 img_trains = img_r.transpose(Image.FLIP_LEFT_RIGHT) 39 data = np.asarray(img_trains) 40 X_train.append(data) 41 y_train.append(index) 42 43X_train = np.array(X_train) 44X_test = np.array(X_test) 45y_train = np.array(y_train) 46y_test = np.array(y_test) 47 48xy = (X_train, X_test, y_train, y_test) 49np.save("./ryouri.npy", xy)

python

1from keras.models import Sequential 2from keras.layers import Conv2D, MaxPooling2D 3from keras.layers import Activation, Dropout, Flatten, Dense 4from keras.utils import np_utils 5import keras 6import numpy as np 7 8classes = ["motsuni", "naporitan", "ra-men"] 9num_classes = len(classes) 10image_size = 64 11 12""" 13データを読み込む関数 14""" 15def load_data(): 16 X_train, X_test, y_train, y_test = np.load("./ryouri.npy", allow_pickle=True) 17 # 入力データの各画素値を0-1の範囲で正規化(学習コストを下げるため) 18 X_train = X_train.astype("float") / 255 19 X_test = X_test.astype("float") / 255 20 # to_categorical()にてラベルをone hot vector化 21 y_train = np_utils.to_categorical(y_train, num_classes) 22 y_test = np_utils.to_categorical(y_test, num_classes) 23 24 return X_train, y_train, X_test, y_test 25 26""" 27モデルを学習する関数 28""" 29def train(X, y, X_test, y_test): 30 model = Sequential() 31 32 # Xは(1200, 64, 64, 3) 33 # X.shape[1:]とすることで、(64, 64, 3)となり、入力にすることが可能です。 34 model.add(Conv2D(32,(3,3), padding='same',input_shape=X.shape[1:])) 35 model.add(Activation('relu')) 36 model.add(Conv2D(32,(3,3))) 37 model.add(Activation('relu')) 38 model.add(MaxPooling2D(pool_size=(2,2))) 39 model.add(Dropout(0.1)) 40 41 model.add(Conv2D(64,(3,3), padding='same')) 42 model.add(Activation('relu')) 43 model.add(Conv2D(64,(3,3))) 44 model.add(Activation('relu')) 45 model.add(MaxPooling2D(pool_size=(2,2))) 46 model.add(Dropout(0.25)) 47 48 model.add(Flatten()) 49 model.add(Dense(512)) 50 model.add(Activation('relu')) 51 model.add(Dropout(0.45)) 52 model.add(Dense(2)) 53 model.add(Activation('softmax')) 54 55 # https://keras.io/ja/optimizers/ 56 # 今回は、最適化アルゴリズムにRMSpropを利用 57 opt = keras.optimizers.rmsprop(lr=0.00005, decay=1e-6) 58 # https://keras.io/ja/models/sequential/ 59 model.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy']) 60 model.fit(X, y, batch_size=28, epochs=40) 61 # HDF5ファイルにKerasのモデルを保存 62 model.save('./cnn.h5') 63 64 return model 65 66""" 67メイン関数 68データの読み込みとモデルの学習を行います。 69""" 70def main(): 71 # データの読み込み 72 X_train, y_train, X_test, y_test = load_data() 73 74 # モデルの学習 75 model = train(X_train, y_train, X_test, y_test) 76 77main()

エラー文

Using TensorFlow backend.

ValueError Traceback (most recent call last)
<ipython-input-6-efdca2892d59> in <module>()
75 model = train(X_train, y_train, X_test, y_test)
76
---> 77 main()

4 frames
/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
143 ': expected ' + names[i] + ' to have shape ' +
144 str(shape) + ' but got array with shape ' +
--> 145 str(data_shape))
146 return data
147

ValueError: Error when checking target: expected activation_6 to have shape (2,) but got array with shape (3,)


Google Colab でやっています。

使う画像は、上のコードでウェブから拾ってきています。

3つ以上のファイルを機械学習するためにはどのようにすればいいか、教えていただけると嬉しいです。

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

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

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

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

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

can110

2020/07/05 04:47

ランタイム→すべてのセルを実行 にて、全コードを再実行しても同様にエラーが発生するでしょうか?
nifeP

2020/07/05 05:27

はい。そのように実行しても同じエラーが出ます。
can110

2020/07/05 05:48

なるほど。了解です。画像はryouri.npyに格納されていると思いますが、できましたらryouri.npyを生成するのに必要な画像、コードを質問本文に追加くださると第三者が検証でき回答得られやすくなると思います。
guest

回答1

0

ベストアンサー

3つに分類するので最後はmodel.add(Dense(2))model.add(Dense(3))ではないでしょうか。
当方環境では動作するようになりました。

投稿2020/07/05 11:17

can110

総合スコア38256

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

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

nifeP

2020/07/05 12:26

私も回答してくださったように変更した結果、うまく動作しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問