前提・実現したいこと
現在、画像のみを用いて位置推定をしようとしており、
入力で2枚の画像(自分の前後)を使うことで、推定しやすくなるのではないかと思い、
行っているのですが、以下のようなエラーがでてしまいどのようにすればよいかわかりません。
教えていただきたいです。
他にもおかしなところがありましたら、教えていただけると幸いです。
*classesのクラスは適当に変えています。
発生している問題・エラーメッセージ
ValueError: Layer reshape_1 was called with an input that isn't a symbolic tensor. Received type: <class 'builtin_function_or_method'>. Full input: [<built-in function input>]. All inputs to the layer should be tensors.
該当のソースコード
from keras import backend as K from keras.datasets import mnist from keras.layers import Activation, Add, BatchNormalization, Dense, Dropout, Input, Concatenate, Flatten, Reshape from keras.models import Model from keras.utils.np_utils import to_categorical import matplotlib.pyplot as plt import numpy as np import glob from PIL import Image from keras.utils import np_utils from sklearn.model_selection import train_test_split from keras.preprocessing.image import load_img, img_to_array classes = [ "犬","猫","兎" ] X = [] Y = [] 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) Y.append(index) X = np.array(X) Y = np.array(Y) X = X.astype('float32')/255.0 Y = np_utils.to_categorical(Y, len(classes)) x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.10) # 各画像からランダムに2枚切り抜く。 x_train1_img = load_img('1.jpg', target_size=(64,64)) x_train1 = img_to_array(x_train1_img) x_train2_img = load_img('2.jpg', target_size=(64,64)) x_train2 = img_to_array(x_train2_img) # (N, 2, 28, 28) -> (N, 2, 400) にする x_train1 = x_train.reshape(len(x_train1), 2, -1) x_train2 = x_train.reshape(len(x_train2), 2, -1) x_test = x_test.reshape(len(x_test), 2, -1) # one-hot 表現に変換する。 y_train = to_categorical(y_train) y_test = to_categorical(y_test) # モデルを作成する。 input1 = Input(shape=(1,)) hidden1 = Reshape((64, 64, 1), input_shape = (64, 64))(input) input2 = Input(shape=(1,)) hidden2 = Reshape((64, 64, 1), input_shape = (64, 64))(input) # 入力1から結合前まで x = Dense(1, activation="relu")(hidden1) x = Model(inputs=hidden1, outputs=x) # 入力2から結合前まで y = Dense(1, activation="relu")(hidden2) y = Model(inputs=hidden2, outputs=y) # 結合 combined = Concatenate([x.output, y.output],axis=-1) # 密結合 z = Dense(32, activation="relu")(combined) z = Dense(3, activation="softmax")(z) # モデル定義とコンパイル model = Model(inputs=[input1, input2], outputs=z) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc']) model.summary() # 学習する。 history = model.fit([x_train1, x_train2], y_train, epochs=40)
試したこと
上のエラーに対して調べましたが、うまくいきませんでした。
回答1件
あなたの回答
tips
プレビュー