반응형

tfds build시 발생한 AssertionError: Unrecognized instruction format (또는 Unrecognized split format ) 원인과 해결방법입니다. 



2021. 11. 12  최초작성




  File "/home/webnautes/miniconda3/envs/tensorflow/lib/python3.7/site-packages/tensorflow_datasets/core/tfrecords_reader.py", line 519, in _str_to_relative_instruction

    raise AssertionError('Unrecognized instruction format: %s' % spec)

AssertionError: Unrecognized instruction format: test.normal



split 이름에 . 이 포함되어서 발생한 에러였습니다. 

 . 외에도 허용하지 않는 다른 문자가 더 있을 수 있습니다. 




관련 코드는 tfrecords_reader.py의 511번째 줄에 있는 코드입니다. 최신버전의 코드라 에러 메시지 출력하는 부분이  좀 다릅니다.

_SUB_SPEC_RE의 리턴값에 의해서 에러값이 출력될지 여부가 결정됩니다.

 

https://github.com/tensorflow/datasets/blob/master/tensorflow_datasets/core/tfrecords_reader.py



def _str_to_relative_instruction(spec: str) -> 'AbstractSplit':
  """Returns ReadInstruction for given string."""
  # <split_name>[<split_selector>] (e.g. `train[54%:]`)
  res = _SUB_SPEC_RE.match(spec)
  err_msg = (f'Unrecognized split format: {spec!r}. See format at '
            'https://www.tensorflow.org/datasets/splits')
  if not res:
    raise ValueError(err_msg)
  split_name = res.group('split_name')
  split_selector = res.group('split_selector')





.이 포함된 문자열에 _SUB_SPEC_RE의 리턴값을 테스트해보면  None가 출력되는걸 볼 수 있습니다.

 

import re

_SUB_SPEC_RE = re.compile(
    r"""
^
(?P<split>[\w-]+)
(\[
  ((?P<from>-?\d+)
  (?P<from_pct>%)?)?
  :
  ((?P<to>-?\d+)
  (?P<to_pct>%)?)?
\])?
$
""", re.X)


print(_SUB_SPEC_RE.match('test.normal'))
# None


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts