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
!pip install icrawler from icrawler.builtin import BingImageCrawler # 猫の画像を取得 crawler = BingImageCrawler(storage={"root_dir": "cat"}) crawler.crawl(keyword="猫", max_num=10) from icrawler.builtin import BingImageCrawler # 猫の画像を取得 crawler = BingImageCrawler(storage={"root_dir": "dog"}) crawler.crawl(keyword="犬", max_num=10) from PIL import Image import os, glob import numpy as np from PIL import ImageFile # IOError: image file is truncated (0 bytes not processed)回避のため ImageFile.LOAD_TRUNCATED_IMAGES = True classes = ["dog", "cat"] num_classes = len(classes) image_size = 64 num_testdata = 25 X_train = [] X_test = [] y_train = [] y_test = [] for index, classlabel in enumerate(classes): photos_dir = "./" + classlabel files = glob.glob(photos_dir + "/*.jpg") for i, file in enumerate(files): image = Image.open(file) image = image.convert("RGB") image = image.resize((image_size, image_size)) data = np.asarray(image) if i < num_testdata: X_test.append(data) y_test.append(index) else: # angleに代入される値 # -20 # -15 # -10 # -5 # 0 # 5 # 10 # 15 for angle in range(-20, 20, 5): img_r = image.rotate(angle) data = np.asarray(img_r) X_train.append(data) y_train.append(index) # FLIP_LEFT_RIGHT は 左右反転 img_trains = img_r.transpose(Image.FLIP_LEFT_RIGHT) data = np.asarray(img_trains) X_train.append(data) y_train.append(index) X_train = np.array(X_train) X_test = np.array(X_test) y_train = np.array(y_train) y_test = np.array(y_test) xy = (X_train, X_test, y_train, y_test) np.save("./dog_cat.npy", xy) from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Activation, Dropout, Flatten, Dense from keras.utils import np_utils from tensorflow import keras import numpy as np classes = ["dog", "cat"] num_classes = len(classes) image_size = 64 """ データを読み込む関数 """ def load_data(): X_train, X_test, y_train, y_test = np.load("./dog_cat.npy", allow_pickle=True) # 入力データの各画素値を0-1の範囲で正規化(学習コストを下げるため) X_train = X_train.astype("float") / 255 X_test = X_test.astype("float") / 255 # to_categorical()にてラベルをone hot vector化 y_train = np_utils.to_categorical(y_train, num_classes) y_test = np_utils.to_categorical(y_test, num_classes) return X_train, y_train, X_test, y_test """ モデルを学習する関数 """ def train(X, y, X_test, y_test): model = Sequential() # Xは(1200, 64, 64, 3) # X.shape[1:]とすることで、(64, 64, 3)となり、入力にすることが可能です。 model.add(Conv2D(32,(3,3), padding='same',input_shape=X.shape[1:])) model.add(Activation('relu')) model.add(Conv2D(32,(3,3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.1)) model.add(Conv2D(64,(3,3), padding='same')) model.add(Activation('relu')) model.add(Conv2D(64,(3,3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.45)) model.add(Dense(2)) model.add(Activation('softmax')) # https://keras.io/ja/optimizers/ # 今回は、最適化アルゴリズムにRMSpropを利用 opt = keras.optimizers.rmsprop(lr=0.00005, decay=1e-6) # https://keras.io/ja/models/sequential/ model.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy']) model.fit(X, y, batch_size=28, epochs=40) # HDF5ファイルにKerasのモデルを保存 model.save('./cnn.h5') return model """ メイン関数 データの読み込みとモデルの学習を行います。 """ def main(): # データの読み込み X_train, y_train, X_test, y_test = load_data() # モデルの学習 model = train(X_train, y_train, X_test, y_test) main()
まだ回答がついていません
会員登録して回答してみよう