今ある2種類動物の150枚ぐらい画像を用意し、学習させ推測できるように
したいのですが、畳み込み関数の設定の箇所で以下のようなエラーが
出現しこまってます。
お分かりの方居られましたら、ご教示お願いできませんでしょうか?
●エラー内容
ValueError Traceback (most recent call last) <ipython-input-22-763384d09883> in <module>() 70 model = train(X_train, y_train, X_test, y_test) 71 ---> 72 main() 73 ValueError: Input 0 is incompatible with layer conv2d_23: expected ndim=4, found ndim=1
●学習コード
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 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) X_train = X_train.astype("float") / 255 X_test = X_test.astype("float") / 255 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() 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')) opt=keras.optimizers.rmsprop(lr=0.00005, decay=1e-6) model.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy']) model.fit(X, y, batch_size=28, epochs=40) 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()
●データの整調
#取り込んだ犬と猫のデータを調整(回転させるなど) from PIL import Image import os,glob import numpy as np classes=["dogs","cats"] num_classes = len(classes) image_size = 64 num_testdata = 25 X_train = [] Y_train = [] X_test = [] 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).convert("RGB") #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: 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) img_trans = img_r.transpose(Image.FLIP_LEFT_RIGHT) data = np.asarray(img_trans) 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)
input_shapeガおかしいのでしょうが、どう修正すればいいのか??
以上、よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/10 00:23
2019/08/20 02:27 編集