2017-10-30 2 views
0

.txt 개의 파일이 <text>\t<label> 형식의 디렉터리에 있습니다. 나는이 텍스트 기록을 소비하는 TextLineDataset API를 사용하고 있습니다 :Tensorflow - 데이터 집합 API의 문자열 처리

filenames = ["/var/data/file1.txt", "/var/data/file2.txt"] 

dataset = tf.contrib.data.Dataset.from_tensor_slices(filenames) 

dataset = dataset.flat_map(
    lambda filename: (
     tf.contrib.data.TextLineDataset(filename) 
     .map(_parse_data))) 

def _parse_data(line): 
    line_split = tf.string_split([line], '\t') 
    features = {"raw_text": tf.string(line_split.values[0].strip().lower()), 
       "label": tf.string_to_number(line_split.values[1], 
        out_type=tf.int32)} 
    parsed_features = tf.parse_single_example(line, features) 
    return parsed_features["raw_text"], raw_features["label"] 

나는 RAW_TEXT 기능을 일부 문자열 청소/처리를 할 싶습니다. 내가 line_split.values[0].strip().lower()를 실행하려고하면, 나는 다음과 같은 오류가 발생합니다 :

AttributeError: 'Tensor' object has no attribute 'strip'

답변

2

개체 lines_split.values[0]line에서 0 번째 분할을 나타내는 tf.Tensor 개체입니다. 파이썬 문자열이 아니므로 .strip() 또는 .lower() 메서드가 없습니다. 대신 TensorFlow 연산을 텐서에 적용하여 변환을 수행해야합니다.

TensorFlow는 현재 매우 많은 string operations이 없지만 일부 파이썬 a를 tf.Tensor에 코드를 실행하는 tf.py_func() 연산을 사용할 수 있습니다 : 코드에서 다른 문제의 몇 가지가 있다는 것을

def _parse_data(line): 
    line_split = tf.string_split([line], '\t') 

    raw_text = tf.py_func(
     lambda x: x.strip().lower(), line_split.values[0], tf.string) 

    label = tf.string_to_number(line_split.values[1], out_type=tf.int32) 

    return {"raw_text": raw_text, "label": label} 

주 질문 :

  • tf.parse_single_example()을 사용하지 마십시오. 이 op는 tf.train.Example 프로토콜 버퍼 문자열을 구문 분석하는 데만 사용됩니다. 텍스트를 파싱 할 때 텍스트를 사용할 필요가 없으며 추출한 기능을 _parse_data()에서 직접 반환 할 수 있습니다.
  • dataset.flat_map() 대신 dataset.map()을 사용하십시오. 매핑 함수의 결과가 Dataset 개체 일 때 flat_map() 만 사용하면됩니다. 따라서 반환 값은 이 단일 데이터 집합으로으로 병합되어야합니다. 결과가 하나 이상의 tf.Tensor 개체 인 경우 map()을 사용해야합니다.
+0

여기에 약간의 명료성을 제공해 주셔서 감사합니다. 나는'py_func'를 사용하려고했지만 약간의 오류가 발생했습니다. 귀하의 코드는 저에게서 작용합니다. 또한,'.txt' 데이터를'TFRecord' 포맷으로 변환하기로 결정했습니다. 추후 참조를 위해'tensorflow'를 사용하기 전에 데이터를 통합하는 데'python'을 사용해야합니까, 아니면'tf'에서이 모든 것을 수행하기위한 좋은 패턴이 있습니까? 지금 당장은'python'을'VocabularyProcessor'를 사용하여 자체 빌드 된'CategoricalVocabulary'로 초기화했습니다. –

관련 문제