kouya-git
@kouya-git

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

tensorflow model.predict() エラー

解決したいこと

実現したいことは、入力として画像を与えると、学習させた文調のテキストを出力することです。
既に訓練が完了したモデルは2入力,1出力のモデルです。
入力の詳細:input_1:(4096,),input_2:(199,)
の画像特徴量と単語ベクトルです。
自分で調べた結果データの形に問題はなさそうです。
二つの入力の渡し方に問題がある可能性が高いです。
この問題を解決する方法を、どなたか教えてください。

発生している問題・エラー

ソースコードのmodel.predictの箇所でエラーが発生します。

Error when checking input: expected input_1 to have shape (4096,) but got array with shape (1,)

または、問題・エラーが起きている画像をここにドラッグアンドドロップ。

該当するソースコード

def Inference(self, test_image):
        image_feature = self.GetImageFeature(test_image, self.feature_extractor)
        text = "startseq"
        for i in range(self.max_length):
            seq = self.tokenizer.texts_to_sequences([text])[0]
            seq = pad_sequences([seq], maxlen=self.max_length)
            yhat = self.model.predict([image_feature, seq[0]])#ここでエラー
            yhat = argmax(yhat)
            word = self.IDToWord(yhat)#単語token→日本語
            if word is None:
                break
            text += " " + word
            if word == "endseq":
                break
        return text

自分で試したこと

  1. print(image_feature.shape, seq[0].shape)の結果は(4096,),(199,) model.summary()と一致している為、データの形はあっている。
  2. model.predict({'input_1':image_feature,'input_2':seq[0]}) としても、まったく同じエラーをはきました。

補足情報

os:windows10
python: 3.6.8
tensorflow-gpu: 1.14.0

0

1Answer

kerasを使うのが久々なのでうろ覚えですが、kerasでのpredictの入力はバッチのような集まりとなるので、一つ分のデータでもlist化する必要があるのではないですか?

なので、
print(image_feature.shape, seq[0].shape)の結果は(4096,),(199,) ではなく
image_feature.shape, seq[0].shapeで(1,4096),(1,199)と言った感じにする必要があるかと...

# ちなみにですが、np.expand_dimsで次元の追加ができるので、(1,4096)とかにできるはず...
img = (np.expand_dims(image_feature,0))

1Like

Comments

  1. @kouya-git

    Questioner

    回答ありがとうございます。完全に知識不足でした。ご指摘の通りにmodel.predictにデータを入力したら解決しました。本当にありがとうございました。

Your answer might help someone💌