前提・実現したいこと
現在、145種類の画像認識を行おうとしています。
そこで、2つの画像を2入力を行い、画像認識を行っています。
学習データとして、145種類6000枚の画像
テスト用データとして、145種類2枚の画像
そこでテスト用データを順番にInputしたいと考えています。
(input1 = "1-1.jpg", input2 = "2-1.jpg")
という風に1-1,2-1と後半の数字が同じ数字のものを順番に入れたいです。
しかしfor文で以下のように回してしまうと、以下のエラーになります。
z_test1,z_test2からランダムに要素を抽出し、それをevaluate、その後1度evaluateしたものを削除、
工程を145枚分試したいです。
どのように行えば可能でしょうか?
発生している問題・エラーメッセージ
Error when checking input: expected x_1 to have 4 dimensions, but got array with shape (64, 64, 3)
該当のソースコード
classes = ["1","2","3",...,"145"] x_1 = ["1-1.jpg","1-2.jpg",...,"1-145.jpg"] x_2 = ["2-1.jpg","2-1.jpg",...,"2-145.jpg"] X = [] Y1 = [] for index, classlabel in enumerate(classes): dir = "./" + classlabel files = glob.glob(dir + "/*.jpg") for i, file in enumerate(files): image = Image.open(file) image = image.convert("RGB") image = image.resize((64, 64)) data = np.asarray(image) X.append(data) Y1.append(index) Z1 = [] Z2 = [] Y2 =[] for i, file in enumerate(x_1): image = Image.open(file) image = image.convert("RGB") image = image.resize((64, 64)) data = np.asarray(image) Z1.append(data) Y2.append(i) for i, file in enumerate(x_2): image = Image.open(file) image = image.convert("RGB") image = image.resize((64, 64)) data = np.asarray(image) Z2.append(data) X = np.array(X) Y1 = np.array(Y1) Y2 = np.array(Y2) Z1 = np.array(Z1) Z2 = np.array(Z2) X = X.astype('float32')/255.0 Z1 = Z1.astype('float32')/255.0 Z2 = Z2.astype('float32')/255.0 Y1 = np_utils.to_categorical(Y1, len(classes)) Y2 = np_utils.to_categorical(Y2, len(x_1)) x_train1 = X x_train2 = X y_train = Y1 y_test = Y2 z_test1 = Z1 z_test2 = Z2 input = Input(shape=(64,64,3)) a = Conv2D(32,(3,3), padding="same", activation="relu")(input) a = Conv2D(32,(3,3), padding="same", activation="relu")(a) a = MaxPooling2D(2,2)(a) a = Dropout(0.25)(a) a = Conv2D(64,(3,3), padding="same", activation="relu")(a) a = Conv2D(64,(3,3), padding="same", activation="relu")(a) a = MaxPooling2D(2,2)(a) a = Dropout(0.25)(a) a = Flatten()(a) out = Dense(50, activation="relu")(a) vision_model = Model(input, out) input1 = Input(shape=(64,64,3), name="x_1") input2 = Input(shape=(64,64,3), name="x_2") out_a = vision_model(input1) out_b = vision_model(input2) concatenated = Concatenate(axis=-1)([out_a, out_b]) # 密結合 out = Dense(len(classes), activation='softmax')(concatenated) model = Model([input1, input2], out) # モデルコンパイル opt = keras.optimizers.Adam(lr=0.0005, decay=1e-5) model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) model.summary() hist = model.fit([x_train1,x_train2], y_train, batch_size=2000, epochs=20) print("X_train1 : ", x_train1.shape) print("X_train2 : ", x_train2.shape) print("y_train : ", y_train.shape) print("Z_test1 : ", z_test1.shape) print("Z_test2 : ", z_test2.shape) print("y_test : ", y_test.shape) # ここから先で悩んでいます for _ in range(145): a = random.randint(0,145) if z_test1[a] is None: continue else : score=model.evaluate([z_test1[a], z_test2[a]], y_test) print('Test loss:', score[0]) print('test acc:', score[1])
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。