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

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

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

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

機械学習

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

0回答

750閲覧

画像認識で起きたValue errorが解消できない

Thina

総合スコア1

Keras

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

機械学習

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/10/28 08:24

編集2020/11/04 09:13

下記のサイトを参考に機械学習をしようしていると、以下のようなエラー文が出ました。
https://qiita.com/hiroeorz@github/items/ecb39ed4042ebdc0a957
https://qiita.com/koshian2/items/6742c469e9775d672072
#エラー文

ValueError

1<ipython-input-3-df59987fa493> in <module> 2 84 model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) 3 85 # 学習を実行。10%はテストに使用。 4---> 86 model.fit(image_list, Y, nb_epoch=1500, batch_size=100, validation_split=0.1) 5 87 6 88 # テスト用ディレクトリ(./data/train/)の画像でチェック。正解率を表示する。 7 8~\anaconda3\envs\ban\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs) 9 1152 sample_weight=sample_weight, 10 1153 class_weight=class_weight, 11-> 1154 batch_size=batch_size) 12 1155 13 1156 # Prepare validation data. 14 15~\anaconda3\envs\ban\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size) 16 577 feed_input_shapes, 17 578 check_batch_axis=False, # Don't enforce the batch size. 18--> 579 exception_prefix='input') 19 580 20 581 if y is not None: 21 22~\anaconda3\envs\ban\lib\site-packages\keras\engine\training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 23 133 ': expected ' + names[i] + ' to have ' + 24 134 str(len(shape)) + ' dimensions, but got array ' 25--> 135 'with shape ' + str(data_shape)) 26 136 if not check_batch_axis: 27 137 data_shape = data_shape[1:] 28 29ValueError: Error when checking input: expected input_3 to have 4 dimensions, but got array with shape (40, 1875)

コードは以下のとおりです。
#コード

import

1from keras.layers import Conv2D, BatchNormalization, Activation, AveragePooling2D, GlobalAveragePooling2D, Dense, Dropout, Input, Multiply 2from keras.models import Model 3from keras.optimizers import Adam 4import numpy as np 5from PIL import Image 6import os 7from keras.utils.np_utils import to_categorical 8 9# 学習用のデータを作る. 10image_list = [] 11label_list = [] 12# ./data/train 以下のorange,appleディレクトリ以下の画像を読み込む。 13for dir in os.listdir("data/training"): 14 if dir == ".DS_Store": 15 continue 16 17 dir1 = "data/training/" + dir 18 label = 0 19 20 if dir == "no": # appleはラベル0 21 label = 0 22 elif dir == "ok": # orangeはラベル1 23 label = 1 24 25 for file in os.listdir(dir1): 26 if file != ".DS_Store": 27 # 配列label_listに正解ラベルを追加(りんご:0 オレンジ:1) 28 label_list.append(label) 29 filepath = dir1 + "/" + file 30 # 画像を25x25pixelに変換し、1要素が[R,G,B]3要素を含む配列の25x25の2次元配列として読み込む。 31 # [R,G,B]はそれぞれが0-255の配列。 32 image = np.array(Image.open(filepath).resize((25, 25))) 33 print(filepath) 34 # 配列を変換し、[[Redの配列],[Greenの配列],[Blueの配列]] のような形にする。 35 image = image.transpose(2, 0, 1) 36 # さらにフラットな1次元配列に変換。最初の1/3はRed、次がGreenの、最後がBlueの要素がフラットに並ぶ。 37 image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0] 38 # 出来上がった配列をi image_listに追加。 39 image_list.append(image / 255.) 40# kerasに渡すためにnumpy配列に変換。 41image_list = np.array(image_list) 42# ラベルの配列を1と0からなるラベル配列に変更 43# 0 -> [1,0], 1 -> [0,1] という感じ。 44Y = to_categorical(label_list) 45 46def create_new_conv(input, chs): 47 x = Conv2D(chs, 3, padding="same")(input) 48 x = BatchNormalization()(x) 49 return Activation("relu")(x) 50 51# Squeeze and Excitation 52def se_block(input, channels, r=8): 53 # Squeeze 54 x = GlobalAveragePooling2D()(input) 55 # Excitation 56 x = Dense(channels//r, activation="relu")(x) 57 x = Dense(channels, activation="sigmoid")(x) 58 return Multiply()([input, x]) 59 60def create_new_network(use_se_block): 61 input = Input((32,32,3)) 62 x = input 63 for i in range(3): 64 x = create_new_conv(x, 64) 65 if use_se_block: x = se_block(x, 64) 66 x = AveragePooling2D(2)(x) 67 for i in range(3): 68 x = create_new_conv(x, 128) 69 if use_se_block: x = se_block(x, 128) 70 x = AveragePooling2D(2)(x) 71 for i in range(3): 72 x = create_new_conv(x, 256) 73 if use_se_block: x = se_block(x, 256) 74 x = GlobalAveragePooling2D()(x) 75 x = Dense(10, activation="softmax")(x) 76 77 return Model(input, x) 78 79model = create_new_network(se_block) 80# オプティマイザにAdamを使用 81opt = Adam(lr=0.001) 82# モデルをコンパイル 83model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) 84 # 学習を実行。10%はテストに使用。 85model.fit(image_list, Y, nb_epoch=1500, batch_size=100, validation_split=0.1) 86 87# テスト用ディレクトリ(./data/train/)の画像でチェック。正解率を表示する。 88total = 0. 89ok_count = 0. 90 91for dir in os.listdir("data/training"): 92 if dir == ".DS_Store": 93 continue 94 95 dir1 = "data/validation/" + dir 96 label = 0 97 98 if dir == "no": 99 label = 0 100 elif dir == "ok": 101 label = 1 102 103 for file in os.listdir(dir1): 104 if file != ".DS_Store": 105 label_list.append(label) 106 filepath = dir1 + "/" + file 107 image = np.array(Image.open(filepath).resize((25, 25))) 108 print(filepath) 109 image = image.transpose(2, 0, 1) 110 image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0] 111 result = model.predict_classes(np.array([image / 255.])) 112 print("label:", label, "result:", result[0]) 113 114 total += 1. 115 116 if label == result[0]: 117 ok_count += 1. 118 119print("seikai: ", ok_count / total * 100, "%") 120# モデルの可視化 121from IPython.display import SVG 122from keras.utils.vis_utils import model_to_dot 123 124SVG(model_to_dot(model).create(prog='dot', format='svg'))

エラー文を訳すと「入力チェック時のエラー:input_3は4次元であると予想されましたが、形状のある配列を取得しました(40、1875)」となっており、要は「4次元配列で入力してほしいのにこんな配列(40.1875の二次元)になってるよ」という意味かなと思っています。他のサイトでも似たような症状の方がいらっしゃり、そこで解決した際の手法を試しましたが結局解決に至りません。どこが悪くてどう変更すればいいのか全くわかりません。よろしくお願いします

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/11/08 06:45

恐らく、「要は~」の下りで正解です。 print(image_list.shape)とprint(Y,shape)の結果を教えていただけますか? model.fit()の前であれば機能すると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問