2017-11-10 1 views
4

TensorFlow에서 신경망을 사용하여 실험을하고 있습니다. 최신 버전의 릴리스 노트에 따르면 DataSet은 앞으로 입력 데이터를 제공하기 위해 권장되는 API입니다.DataSet은 입력 값의 범위를 정규화합니다.

일반적으로 외부 세계에서 숫자 값을 가져 오는 경우 값 범위를 정규화해야합니다. 길이, 질량, 속도, 날짜 또는 시간과 같은 원시 번호를 연결하면 결과로 발생하는 문제가 악화됩니다. 값의 동적 범위를 확인하고 범위 (0,1) 또는 (-1,1)로 정규화해야합니다.

물론 원시 Python으로 처리 할 수 ​​있습니다. 그러나 DataSet은 많은 데이터 변환 기능을 제공하며 결과 코드가 유지 관리가 쉬울뿐만 아니라 더 빨리 실행된다는 이론에 따라 사용을 권장합니다. 이는 정규화를위한 기본 제공 기능이 있어야 함을 의미합니다.

그러나 https://www.tensorflow.org/programmers_guide/datasets에있는 문서를 살펴보면 그런 언급이 없습니다. 내가 놓친 게 있니? 이를 위해 권장되는 방법은 무엇입니까?

+0

전체 데이터 집합이나 각 요소 내에서 정규화하려고합니까? 각 요소 안에는'dataset.map'을 사용하는 것이 쉬워야합니다. 그러나 값이 가질 수있는 최대 값과 최소값을 미리 알지 못한다면 전체 데이터 세트에서 쉽게 할 수있는 방법을 생각할 수 없습니다. – Sunreef

+0

@Sunreef 맞습니다. 실제로 발생하는 모든 값을보기 전에 어떻게해야할지 모를 방법이 없기 때문에 데이터 집합 전체에 걸쳐 있어야합니다. – rwallace

+1

@nwallace Tensorflow 지연로드를 사용하면 전 데이터 세트를 반복하고 최대 및 최소를 추출한 후 전처리 단계를 추가하지 않으면 모든 값에 액세스 할 수 있는지 확신 할 수 없으며 두 번째 단계에서이 정보를 사용합니다 훈련 할 때. 그러나 당신은 정상적인 Numpy를 사용하여 이러한 가치를 얻는 것이 나을 것입니다. – Sunreef

답변

1
주요 아이디어는 tf.data.Dataset 특별히 스트림에 데이터를 더 정확하게 텐서의 매우 많은 양의 설계 되었기 때문에 복잡한 사전 procesing이 직접 적용되지는 것을 알려줍니다 tensorflow 데이터 세트의

나의 이해 :

Dataset을 입력 파이프 라인을 요소 집합 (텐서의 중첩 구조) 및 해당 요소에서 작동하는 변형의 컬렉션 인 으로 나타내는 데 사용할 수 있습니다.

tf.data.Dataset텐서와 동작한다는 사실은 데이터에 대한 임의의 특정 통계를 획득하는 등 min 또는 max 같이 전체 tf.Session 전체 파이프 라인을 통해 적어도 하나 개의 실행을 필요로한다는 것을 의미한다. 다음 샘플 라인 : 첫 번째 일괄가 준비 될 때까지 dataset 책임 인 경우

iterator = dataset.make_one_shot_iterator() 
batch_x, batch_y = iterator.get_next() 

... 빨리 다음 배치를 제공하도록 설계 데이터 집합의 크기에 상관없이, 세상을 중지 할 것 전처리 용. 따라서 "논리적 계획"에는 로컬 변환 만 포함되므로 데이터를 스트리밍 할 수 있고 변환을 수행 할 수 있습니다. in parallel.

이것은 정규화를 tf.data.Dataset으로 구현하는 것은 불가능하지 않다는 것을 의미하지는 않습니다. 그렇다고 결코 그렇게 설계되지 않은 것처럼 느껴지며 결과적으로보기 흉하게 보일 것입니다. (물론 확신 할 수는 없지만) . 그러나 batch-normalization이이 그림에 완벽하게 들어 맞으며 내가 볼 수있는 "멋진"옵션 중 하나입니다. 또 다른 옵션은 numpy에서 간단한 사전 처리를 수행하고 그 결과를 tf.data.Dataset.from_tensor_slices에 입력하는 것입니다. 이것은 파이프 라인을 훨씬 더 복잡하게 만들지는 않지만 tf.data.Dataset을 전혀 사용하지 못하도록 제한하지 않습니다.

관련 문제