※この記事は、個人技術ブログ CodeArchPedia.com の技術メモ(要約)です。
KerasやTensorFlowでモデル学習は問題なく終わったのに、いざpredictを叩いたらValueError: Unrecognized data typeが出てハマった。
学習時と予測時で渡すデータの形式が微妙にズレていたのが原因。データサイエンス現場でよく遭遇する、型と形状に関する地味だけど致命的な罠だった。
何が起きたか(課題)
Kerasモデルに対して、学習時と同じようにデータを与えて予測させようとした際に、以下のエラーに遭遇した。
-
ValueError: Unrecognized data typeが頻発した。 - 原因は、予測時に渡すデータがPythonの標準リスト形式(
[n])になっていたこと。 - TensorFlowやKerasは、推論時も学習時と同様にNumPy配列としてデータを受け取ることを期待している。
- データ型(dtype)と形状(shape)の一貫性が崩れたために発生した。
どう解決したか(概要)
根本的な解決策は、予測処理においても学習時と全く同じデータ形式、つまりNumPy配列としてデータをモデルに渡すことだった。
-
入力データの確認: 予測時に渡す単一の値
nを用意する。 -
NumPy配列への変換: この単一の値をNumPy配列に変換する。単一入力の場合、
np.array([n])という形で形状を調整する必要がある。これにより、TensorFlowが期待するテンソル形状に適合する。 -
predict実行: 変換後のNumPy配列を
study_model.predict()に渡す。
以下のような形式で実行することでエラーは解消した。
result = study_model.predict(np.array([n]))[0][0]
このシンプルな変更により、データ型の不一致によるエラーが綺麗さっぱり無くなった。データの一貫性を担保する重要性を再認識した瞬間だった。
効果(Before/After)
| 項目 | Before (エラー発生時) | After (修正後) |
|---|---|---|
| 実行状態 |
ValueErrorにより処理が中断 |
正常に予測が完了 |
| データ形式 | Pythonリスト形式で入力 | NumPy配列形式で入力 |
| 解決難易度 | 原因特定に時間を要した | 単純な変換で解決 |
🚀 詳細な設定とコードはこちら
具体的なWAFのルール設定や、より詳細なログ解析データは元のブログで公開しています。