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

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

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

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

深層学習

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

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

機械学習

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

Q&A

解決済

1回答

2234閲覧

keras, Conv2DでのValueErrorの解決法がわからない

legend_hero

総合スコア3

Keras

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

深層学習

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

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

機械学習

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

0グッド

0クリップ

投稿2022/01/24 18:03

ValueError: Input 0 of layer "conv2d" is incompatible with the layer: expected min_ndim=4, found ndim=1. Full shape received: (None,)
というエラーが出たのですがどうしたらエラーが出なくなるのかわかりません.
model.add(Conv2D(32,(3,3), padding='same',input_shape=X.shape[1:]))
にエラーが出ているようで,読み込んだデータがうまく変換されていないようなのですがどこを変更すればいいのかわかりません...
エラーの対処法や解決法を教えてください!イメージ説明

Python

1!pip install icrawler 2 3from icrawler.builtin import BingImageCrawler 4 5# 猫の画像を取得 6crawler = BingImageCrawler(storage={"root_dir": "cat"}) 7crawler.crawl(keyword="猫", max_num=10) 8 9from icrawler.builtin import BingImageCrawler 10 11# 猫の画像を取得 12crawler = BingImageCrawler(storage={"root_dir": "dog"}) 13crawler.crawl(keyword="犬", max_num=10) 14 15from PIL import Image 16import os, glob 17import numpy as np 18from PIL import ImageFile 19# IOError: image file is truncated (0 bytes not processed)回避のため 20ImageFile.LOAD_TRUNCATED_IMAGES = True 21 22classes = ["dog", "cat"] 23num_classes = len(classes) 24image_size = 64 25num_testdata = 25 26 27X_train = [] 28X_test = [] 29y_train = [] 30y_test = [] 31 32for index, classlabel in enumerate(classes): 33 photos_dir = "./" + classlabel 34 files = glob.glob(photos_dir + "/*.jpg") 35 for i, file in enumerate(files): 36 image = Image.open(file) 37 image = image.convert("RGB") 38 image = image.resize((image_size, image_size)) 39 data = np.asarray(image) 40 if i < num_testdata: 41 X_test.append(data) 42 y_test.append(index) 43 else: 44 45 # angleに代入される値 46 # -20 47 # -15 48 # -10 49 # -5 50 # 0 51 # 5 52 # 10 53 # 15 54 for angle in range(-20, 20, 5): 55 56 img_r = image.rotate(angle) 57 data = np.asarray(img_r) 58 X_train.append(data) 59 y_train.append(index) 60 # FLIP_LEFT_RIGHT は 左右反転 61 img_trains = img_r.transpose(Image.FLIP_LEFT_RIGHT) 62 data = np.asarray(img_trains) 63 X_train.append(data) 64 y_train.append(index) 65 66X_train = np.array(X_train) 67X_test = np.array(X_test) 68y_train = np.array(y_train) 69y_test = np.array(y_test) 70 71xy = (X_train, X_test, y_train, y_test) 72np.save("./dog_cat.npy", xy) 73 74from keras.models import Sequential 75from keras.layers import Conv2D, MaxPooling2D 76from keras.layers import Activation, Dropout, Flatten, Dense 77from keras.utils import np_utils 78from tensorflow import keras 79import numpy as np 80 81classes = ["dog", "cat"] 82num_classes = len(classes) 83image_size = 64 84 85""" 86データを読み込む関数 87""" 88def load_data(): 89 X_train, X_test, y_train, y_test = np.load("./dog_cat.npy", allow_pickle=True) 90 # 入力データの各画素値を0-1の範囲で正規化(学習コストを下げるため) 91 X_train = X_train.astype("float") / 255 92 X_test = X_test.astype("float") / 255 93 # to_categorical()にてラベルをone hot vector化 94 y_train = np_utils.to_categorical(y_train, num_classes) 95 y_test = np_utils.to_categorical(y_test, num_classes) 96 97 return X_train, y_train, X_test, y_test 98 99""" 100モデルを学習する関数 101""" 102def train(X, y, X_test, y_test): 103 model = Sequential() 104 105 # Xは(1200, 64, 64, 3) 106 # X.shape[1:]とすることで、(64, 64, 3)となり、入力にすることが可能です。 107 model.add(Conv2D(32,(3,3), padding='same',input_shape=X.shape[1:])) 108 model.add(Activation('relu')) 109 model.add(Conv2D(32,(3,3))) 110 model.add(Activation('relu')) 111 model.add(MaxPooling2D(pool_size=(2,2))) 112 model.add(Dropout(0.1)) 113 114 model.add(Conv2D(64,(3,3), padding='same')) 115 model.add(Activation('relu')) 116 model.add(Conv2D(64,(3,3))) 117 model.add(Activation('relu')) 118 model.add(MaxPooling2D(pool_size=(2,2))) 119 model.add(Dropout(0.25)) 120 121 model.add(Flatten()) 122 model.add(Dense(512)) 123 model.add(Activation('relu')) 124 model.add(Dropout(0.45)) 125 model.add(Dense(2)) 126 model.add(Activation('softmax')) 127 128 # https://keras.io/ja/optimizers/ 129 # 今回は、最適化アルゴリズムにRMSpropを利用 130 opt = keras.optimizers.rmsprop(lr=0.00005, decay=1e-6) 131 # https://keras.io/ja/models/sequential/ 132 model.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy']) 133 model.fit(X, y, batch_size=28, epochs=40) 134 # HDF5ファイルにKerasのモデルを保存 135 model.save('./cnn.h5') 136 137 return model 138 139""" 140メイン関数 141データの読み込みとモデルの学習を行います。 142""" 143def main(): 144 # データの読み込み 145 X_train, y_train, X_test, y_test = load_data() 146 147 # モデルの学習 148 model = train(X_train, y_train, X_test, y_test) 149 150main()

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

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

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

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

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

guest

回答1

0

ベストアンサー

このエラーを再現してみました。

モデルへの入力を

python

1X_train = np.array([]) 2X_test = np.array([])

としてみたところ同じ

ValueError: Input 0 of layer "conv2d_5" is incompatible with the layer: expected min_ndim=4, found ndim=1. Full shape received: (None,)

というエラーが出力されました。

つまり、画像が一枚も読み込まれていないということです。

スクレイピングしてきた画像は犬、猫10枚ずつで合計20枚でしたね。

しかし、

python

1num_testdata = 25

に設定されているので、画像が全て X_testの変数に格納されているのです。

このnum_testdataを

python

1num_testdata = 5

などとすればエラーは出ないと思います。

あと、私の環境では

python

1opt = keras.optimizers.rmsprop(lr=0.00005, decay=1e-6)

python

1opt = keras.optimizers.RMSprop(lr=0.00005, decay=1e-6)

にしないとエラーが出たので、一応伝えておきます。

投稿2022/01/25 01:15

編集2022/01/25 01:35
ppin

総合スコア58

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問