1. ホーム
  2. tensorflow

tf.convert_to_tensorを使用したときの値のエラーの解決方法

2022-02-20 12:46:06
<パス

問題の説明

最近、PILを使って画像を読み込んでnumpyの配列として保存し、リストを使って一括でデータを作成する、つまりリストの要素を配列にするtensorflowプログラムを書いたが、このリストをtensorに変換するときに次のような問題が発生した。

.... -got shape [64, 224, 224, 3], but wanted [64].

機能説明

convert_to_tensor(
    value,
    dtype=None,
    name=None,
    preferred_dtype=None
)

この関数の値は、Tensorオブジェクト、numpy配列、Pythonリスト、Pythonスカラーなどの引数を取ります。

探索する

こんな簡単な機能が、どうしてうまくいかないの? 公式マニュアル は、考えられるエラーとして、ランタイムエラーとタイプエラーの両方を挙げていますが、どちらも外れているようです。
つまり、このリストと配列のマッシュアップがうまくテンソルに変換されないと疑えばいいだけだ。先のエラーから、プログラムは、リストの要素が64個だから1次元の [64] が欲しいと思ったが、実際の結果は4次元であることがわかるだろう。

の実験

シェルでテストする

python
>>>import tensorflow as tf
>>>import numpy as np
>>>a=np.numpy([1,2,3])
>>>b=[a]
>>>c=tf.convert_to_tensor(b)

その後、同じエラーが発生しました。

ValueError: Argument must be a dense tensor: [array([1,2,3])]- got shape [1,3], but wanted [1].

解決方法

原因がわかれば、リスト+配列を純粋なリストまたは純粋な配列に変換することで解決できます。
私は後者で、強制的に変換して使っています。

>>>b=np.array(b)
>>>c=tf.convert_to_tensor(b)