[Python/Tensorflow] 문자열 학습을 위한 one_hot 방법


안녕하세요.

텐서플로우를 활용하여 이미지로 되어 있는 문자열을 실제 데이터로 학습시키고자 합니다. MNIST의 경우는 하나의 숫자씩만을 학습시키지만, 지금 하고자 하는 경우는 예를 들어 "ABC1357912" 이러한 문자열을 한번에 학습을 시키고자 합니다.

그러다 보니 Label이 String으로 문자열이 되는데, one hot 인코딩을 하는 방식을 알파벳 26+숫자 10개 총 36개로 하여 2차원 배열로 하나의 Label을 변환 후 학습을 시키고 싶습니다.

예를 들어 "G4FDHH639669"라고 한다면 아래와 같이 변환을 하고 싶은 것이지요 (letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

[[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]
 [0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]]

실제 tensorflow 코드레벨로 볼 때 csv label을 읽어들인 다음 어떠한 방식으로 변환을 해야 이를 학습시킬 수 있을까요??

==================================================


letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
test = "G4FDHH639670"
mapping_letters = tf.string_split([letters], delimiter="")
table = tf.contrib.lookup.index_table_from_tensor(mapping=mapping_letters.values, default_value=0)

test_char = tf.string_split([test], delimiter="")

encoded = tf.one_hot(table.lookup(test_char.values), len(letters), dtype=tf.int8)

tf.InteractiveSession().as_default()
tf.tables_initializer().run()
print(encoded.eval())



조회수 117


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close