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

조회수 3492회

안녕하세요.

텐서플로우를 활용하여 이미지로 되어 있는 문자열을 실제 데이터로 학습시키고자 합니다. 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())


  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)