TensorFlowの「in raise_from_not_ok_status raise core._status_to_exception(e) from None # pylint: disable=protected-access」エラーを解消したい
10:00
前回、TensorFlowの例データを使って機械学習に成功した。
今回は自分のデータで学習しようと思ったけど、エラーが出た。
Traceback (most recent call last):
File "/Users/tenna/Desktop/tensorflow/main.py", line 89, in <module>
image_batch, labels_batch = next(iter(normalized_ds))
File "/Users/tenna/Library/Python/3.9/lib/python/site-packages/tensorflow/python/data/ops/iterator_ops.py", line 814, in __next__
return self._next_internal()
File "/Users/tenna/Library/Python/3.9/lib/python/site-packages/tensorflow/python/data/ops/iterator_ops.py", line 777, in _next_internal
ret = gen_dataset_ops.iterator_get_next(
File "/Users/tenna/Library/Python/3.9/lib/python/site-packages/tensorflow/python/ops/gen_dataset_ops.py", line 3028, in iterator_get_next
_ops.raise_from_not_ok_status(e, name)
File "/Users/tenna/Library/Python/3.9/lib/python/site-packages/tensorflow/python/framework/ops.py", line 6656, in raise_from_not_ok_status
raise core._status_to_exception(e) from None # pylint: disable=protected-access
tensorflow.python.framework.errors_impl.InvalidArgumentError: {{function_node __wrapped__IteratorGetNext_output_types_2_device_/job:localhost/replica:0/task:0/device:CPU:0}} Unknown image file format. One of JPEG, PNG, GIF, BMP required.
[[{{node decode_image/DecodeImage}}]] [Op:IteratorGetNext] name:
"Unknown image file format. One of JPEG, PNG, GIF, BMP required."で調べてみて、下記コードを追加してみたけど効果なし。
num_skipped = 0
for folder_name in ("normal_2", "normal_4", "normal_6", "normal_8", "normal_10", "normal_12", "normal_14", "normal_6", "normal_8", "normal_20", "normal_22", "normal_24"):
folder_path = os.path.join(data_dir, folder_name)
for fname in os.listdir(folder_path):
fpath = os.path.join(folder_path, fname)
try:
fobj = open(fpath, "rb")
is_jfif = tf.compat.as_bytes("JFIF") in fobj.peek(10)
finally:
fobj.close()
if not is_jfif:
num_skipped += 1
# Delete corrupted image
os.remove(fpath)
そのエラーの前にこんなのもあるから、これを調べてみる
in raise_from_not_ok_status
raise core._status_to_exception(e) from None # pylint: disable=protected-access
何も出てこない
tensorflowなどを再度インストールしてみた
うまくいかなかったようで、エラーが出た。
tensorflow.python.framework.errors_impl.NotFoundError: dlopen(/Users/tenna/Library/Python/3.9/lib/python/site-packages/tensorflow-plugins/libmetal_plugin.dylib, 0x0006): symbol not found in flat namespace '_TF_GetInputPropertiesList'
Appleのガイドに従ってみる
main.pyを動かしてみると、matplotlibがないと言われた
ModuleNotFoundError: No module named 'matplotlib'
% pip3 install matplotlib
で解決。またmain.pyを動かしてみる。
Traceback (most recent call last):
File "/Users/tenna/Desktop/integro/tensorflow/main.py", line 90, in <module>
image_batch, labels_batch = next(iter(normalized_ds))
File "/Users/tenna/venv-metal/lib/python3.9/site-packages/tensorflow/python/data/ops/iterator_ops.py", line 814, in next
return self._next_internal()
File "/Users/tenna/venv-metal/lib/python3.9/site-packages/tensorflow/python/data/ops/iterator_ops.py", line 777, in _next_internal
ret = gen_dataset_ops.iterator_get_next(
File "/Users/tenna/venv-metal/lib/python3.9/site-packages/tensorflow/python/ops/gen_dataset_ops.py", line 3028, in iterator_get_next
_ops.raise_from_not_ok_status(e, name)
File "/Users/tenna/venv-metal/lib/python3.9/site-packages/tensorflow/python/framework/ops.py", line 6656, in raise_from_not_ok_status
raise core._status_to_exception(e) from None # pylint: disable=protected-access
tensorflow.python.framework.errors_impl.InvalidArgumentError: {{function_node _wrapped__IteratorGetNext_output_types_2_device/job:localhost/replica:0/task:0/device:CPU:0}} Unknown image file format. One of JPEG, PNG, GIF, BMP required.
[[{{node decode_image/DecodeImage}}]] [Op:IteratorGetNext] name:
同じエラー。
12:30
ファイルはfirebase Storageにアップロードしてるから、アップロードしたタイミングで破損したのかもしれない。ローカルファイルで試してみよう。(
上記で破損ファイルにも対応してるつもりだけど念の為)
2回連続でやると、前回のtgzファイルを使ってるっぽくて意味ないから、前回のデータを消したい。Terminalを一回閉じて再度開いた。
Traceback (most recent call last):
File "/Users/tenna/Desktop/tensorflow/main.py", line 17, in <module>
import tensorflow as tf
File "/Users/tenna/Library/Python/3.9/lib/python/site-packages/tensorflow/init.py", line 439, in <module>
_ll.load_library(_plugin_dir)
File "/Users/tenna/Library/Python/3.9/lib/python/site-packages/tensorflow/python/framework/load_library.py", line 151, in load_library
py_tf.TF_LoadLibrary(lib)
tensorflow.python.framework.errors_impl.NotFoundError: dlopen(/Users/tenna/Library/Python/3.9/lib/python/site-packages/tensorflow-plugins/libmetal_plugin.dylib, 0x0006): symbol not found in flat namespace '_TF_GetInputPropertiesList'
なんかさっきも見たエラー。
またこれやる。
main.pyを走らせると、同じエラーに戻った
Traceback (most recent call last):
File "/Users/tenna/Desktop/integro/tensorflow/main.py", line 90, in <module>
image_batch, labels_batch = next(iter(normalized_ds))
File "/Users/tenna/venv-metal/lib/python3.9/site-packages/tensorflow/python/data/ops/iterator_ops.py", line 814, in next
return self._next_internal()
File "/Users/tenna/venv-metal/lib/python3.9/site-packages/tensorflow/python/data/ops/iterator_ops.py", line 777, in _next_internal
ret = gen_dataset_ops.iterator_get_next(
File "/Users/tenna/venv-metal/lib/python3.9/site-packages/tensorflow/python/ops/gen_dataset_ops.py", line 3028, in iterator_get_next
_ops.raise_from_not_ok_status(e, name)
File "/Users/tenna/venv-metal/lib/python3.9/site-packages/tensorflow/python/framework/ops.py", line 6656, in raise_from_not_ok_status
raise core._status_to_exception(e) from None # pylint: disable=protected-access
tensorflow.python.framework.errors_impl.InvalidArgumentError: {{function_node _wrapped__IteratorGetNext_output_types_2_device/job:localhost/replica:0/task:0/device:CPU:0}} Unknown image file format. One of JPEG, PNG, GIF, BMP required.
[[{{node decode_image/DecodeImage}}]] [Op:IteratorGetNext] name:
https://www.reddit.com/r/computervision/comments/q6iuqx/image_processing/?rdt=47339
こんなこと言ってる人がいた。
Try running a script that converts all jpegs to use the "jpg" extension and the problem might just disappear...
面倒だけど他に案もないからやってみよう。。
from PIL import Image
import glob, os
directory = os.path.abspath("./cups")
new_directory = os.path.abspath("./new_cups")
for folder_name in ("normal_2", "normal_4", "normal_6", "normal_8", "normal_10", "normal_12", "normal_14", "normal_6", "normal_8", "normal_20", "normal_22", "normal_24"):
folder_path = os.path.join(directory, folder_name)
new_folder_path = os.path.join(new_directory, folder_name)
for fname in os.listdir(folder_path):
fpath = os.path.join(folder_path, fname)
im = Image.open(fpath)
rgb_im = im.convert("RGB")
new_fpath = os.path.join(new_folder_path, fname).replace('.jpeg', '.jpg')
print("new_fpath",new_fpath)
rgb_im.save(new_fpath)
こんなpyファイルを作って走らせてみた。cups_newをtgzに変換して、またmain.pyを走らせてみる。
また同じエラーが出たけど、また前回のデータを使ってるのが原因だと思うのでTerminalを再起動(他に何かいい方法はあるんだろうけど、、)
でもエラー変わらず。。
行き止まりになってしまったので、githubに投稿して今日は終了
https://github.com/tensorflow/tflite-support/issues/944
次の日
画像フォルダー名のアンダースコアをなくして(多分関係ない)
違う名前でtgzファイルを作って再度トライしたらエラー出なくなった。
何がいかんかったんだ。。
この記事が気に入ったらサポートをしてみませんか?