2017-05-21 1 views
0

TensorFlow에는 종종 여러 가지 방법이 있습니다.여러 작업보다 단일 작업을 사용하는 것이 더 좋습니까?

예를 하나 들어 x+=b 하나가 할 수있는 할 수있는 assign_add, 또는 하나는 add 등을 할 수있는 2 개 작전이의 일을 할 수 비슷한 사례가있다 assign

  • Concat + ExpandDimsStack
  • scatter_nd_update 여러 번, 대업데이트하려는 인덱스 조합을 별도로 사전 계산하여 한꺼번에 업데이트하십시오. N 대
  • add_nadd

은 하나의 작업을 빠르게/더 근본적 있습니까? 또는 편의를 위해 사용 했습니까?

XLA JIT를 사용하여 이것을 변경합니까?

운영 체제는 더 효율적이다 말할 실제로 매우 어려운

+0

tensorflow은 높은 수준에서 5 월의 같은 경우가 아니다 당신은 정말로 결론을 내릴 수 없습니다 ... "그것이 달려 있습니다"는 얻을 수있는 마감입니다. 그 날에 해당 머신에서 구현을 시도하기 만하면됩니다.한 줄의 코드를 추가하거나 제거하고 중요한 코드가 아무리 중요한 성능 변화가 일어나더라도 중요한 알고리즘과 관련이없는 경우에도 사용할 수 있습니다. 기본 컴파일 된 소프트웨어 물건 ... tensorflow이 점에서 특별하지 않습니다. –

답변

0

그 (동기하여 Julia binding의 오버로드를 정의하는 것입니다). 주어진 언어는 어셈블리 코드 IE의 MIPS 작성된 경우 a += b

VS 더 인의 예

...

a = a + b. MIPS의 추가 기능은 그래서 컴파일러 동일

add a, a, b **or** add a, b, a 

로 모두 지정된 동작을 작성 일반적

add save_ref, value_ref1, value_ref2 

이다. TF에서 어떤 것이 더 효율적인지 알아 내려면 문서 또는 소스 코드를보고 O (n) 번에 대해 자세히 설명해야합니다.

scatter_nd_update을 호출하면 메서드 호출에 약간의 한계 비용이 있으므로 스택 공간을 절약 할 수 있으므로 속도가 약간 더 빠를 수도 있습니다. 대부분의 비용은 무시할 정도입니다.

+0

이것은 추측 이외의 것 같지 않고 내가 묻고있는 바로 그 부분을 확장합니다. 나는 이것이 답이라고 확신하지 못한다. 마지막 단락을 제외하고는 기본적으로 추측입니다 (그런 식으로 표현됩니다). –

+0

소스 코드에 대한 액세스 권한이 있거나 설명서에 달리 명시되어 있지 않은 경우 솔직히 알 수있는 것은 없습니다. – Jjoseph

+0

나는 이것을 논박하지 않는다. 하지만 우리는 소스에 액세스 할 수 있습니다.이 사이트는 [github] (https://github.com/tensorflow/tensorflow)에 있습니다. 구현에 익숙한 사람의 답변을 기다리고 있습니다. –

1

일반적으로 TensorFlow에서 가능한 한 단일 작업이 더 효율적입니다. x = x + b은 종종 x + b에 메모리를 할당 한 다음 해제하고 x += b에는 오버 헤드가 없습니다. softmax 손실에 대한 것과 같이 tensorflow에서 많은 융합 된 커널에 대해서도 마찬가지입니다.

우리는 결국 XLA는 간단한 코드가 커널을 최소화 코드로 효율적있는 지점에 도착 희망하지만, 그 것을 항상 2017

+0

참고로, 동기 부여는 다음과 같습니다. https://github.com/malmaud/TensorFlow.jl/issues/221 –