jpegやpngなど何種類かの拡張子の画像をまとめてTensorflowに流したかったが、decode_jpegやdecode_pngを拡張子に合わせて実装するのは面倒くさい。
decode_imageならbmpでもjpegでもgifでも何でもござれのようなのだが、その後にresize_imagesを使たら表題のエラーが発生してshapeがないと怒られた。
まずは関数を見てみる。
tf.io.decode_image | TensorFlow v2.16.1
Function for decode_bmp, decode_gif, decode_jpeg, and decode_png.
tf.io.decode_image(
contents, channels=None, dtype=tf.dtypes.uint8, name=None,
expand_animations=True
)
expand_animationsって何?
expand_animations
Controls the shape of the returned op’s output. If
True
, the returned op will produce a 3-D tensor for PNG, JPEG, and BMP files; and a 4-D tensor for all GIFs, whether animated or not. If,False
, the returned op will produce a 3-D tensor for all file types and will truncate animated GIFs to the first frame.
読み込ませたファイルはjpegとgifが混ざっており、デフォルトでTrueのexpand_animationが適応されることで3次元テンソルと4次元テンソルがごちゃまぜになったのが原因ではないかと予想。
img = tf.io.read_file(filepath)
img = tf.image.decode_image(img, channels=3, expand_animations=False)
img = tf.image.resize(img, [256,256])
Falseにすることで、その後のリサイズも問題なく処理を行うことが出来た。
エラーは消え、無事にtf.dataを作ることが出来るようになった。
コメント