tfds build 시 에러 AssertionError: Unrecognized instruction format ( 또는 Unrecognized split format )
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 |