여러 개의 그래디언트 단계를 거치고 싶은 상당히 큰 배치 크기가 있습니다. 루프 용 파이썬으로이 일을 쉽게 할 수는 있지만 각 반복마다 GPP로 데이터를 전송하는 것을 포함하지 않는보다 효율적인 방법이있을 수 있다고 상상합니다. 나는 기차를 가져 오기 목록에 여러 번 넣으려고 시도했지만 실제로는 두 번 이상 실행되고 있는지 확신하지 못합니다 (런타임은 정확히 동일합니다).train을 tensorflow에서 여러 번 실행하십시오.
답변
앞서를 만들 수 있고, 대신 peristent 텐서를 사용 run
호출 사이에이 데이터를 유지 할 수있다. 장난감 예가 있습니다
t = tf.int32
params = tf.Variable(tf.ones_initializer((), dtype=dt))
data_batches = [[1], [2, 3], [4, 5, 6]]
# op that uploads data to TF and saves it as a persistent Tensor
data_saver_placeholder = tf.placeholder(dt)
tensor_handle_op = tf.get_session_handle(data_saver_placeholder)
data_placeholder, data = tf.get_session_tensor(dt)
train_op = tf.assign_add(params, tf.reduce_prod(data))
init_op = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init_op)
for batch in data_batches:
# upload tensor to TF runtime and save its handle
tensor_handle = sess.run(tensor_handle_op, feed_dict={data_saver_placeholder: batch})
# run train op several times reusing same data
for i in range(3):
sess.run(train_op, feed_dict={data_placeholder: tensor_handle.handle})
assert sess.run(params) == 382
sess.run([myop,myop])
을 실행하면 myop
번만 실행됩니다.
op를 실행하고 그 결과를 파이썬 런타임에 가져 오지 않으려면 컨트롤 종속성을 사용할 수 있습니다. 이 작업을 수행하는 간단한 방법은, 즉, group
영업 이익
sess.run(tf.group(myop))
sess.run(tf.group(myop))
그래프는 실행 호출 사이 group
연산을 구성하여 여분의 오버 헤드를 얻을 수 큰 경우
myop_nooutput = tf.group(myop)
sess.run(myop_nooutput)
sess.run(myop_nooutput)
예제에 피드 dict은 어디에 있습니까? –
sess.run에 추가 인수로'feed_dict'를 전달할 수 있습니다 –
그래서 각 실행마다 feed_dict가 별도로 전달됩니까? (이것은 내가 피하고자했던 것입니다.) –
- 1. 'prop.test'를 여러 번 실행하십시오.
- 2. 하루에 여러 번 서비스를 실행하십시오.
- 3. 여러 쿼리를 한 번 실행하십시오.
- 4. PHP 스크립트를 여러 번 실행하십시오.
- 5. 동일한 cronjob을 여러 번 실행하십시오.
- 6. 에스프레소 테스트를 여러 번 실행하십시오.
- 7. 변수를 기반으로 여러 번 놀람 작업을 여러 번 실행하십시오.
- 8. 다른 매개 변수로 파일을 여러 번 실행하십시오.
- 9. 다른 설정으로 동일한 테스트를 여러 번 실행하십시오.
- 10. 다른 값으로 SQL 쿼리를 여러 번 실행하십시오.
- 11. UnitTest를 여러 번 실행하십시오. 루프를 반복하지 않고
- 12. 인수를 사용하여 rspec을 여러 번 실행하십시오.
- 13. 매크로를 시트 아래로 여러 번 실행하십시오.
- 14. nodejs : 긴 명령을 여러 번 실행하십시오.
- 15. PHP 한 페이지에서 배열을 여러 번 실행하십시오.
- 16. 중지하지 않고 응용 프로그램을 여러 번 실행하십시오.
- 17. 데이터베이스에서 Specflow 테스트를 여러 번 실행하십시오.
- 18. tensorflow에서 여러 임베딩의 조회 포함
- 19. 여러 구성으로 PHPUnit 테스트 스위트를 여러 번 실행하십시오.
- 20. tensorflow에서 두 개의 텐서를 통해 동일한 RNN을 실행하십시오.
- 21. CUDA 커널을 몇 번 실행하십시오.
- 22. 버튼 기능을 한 번 실행하십시오.
- 23. 하루에 한 번 서버를 실행하십시오.
- 24. Makefile을 두 번 이상 실행하십시오.
- 25. 코드를 5 번 병렬로 실행하십시오.
- 26. 래서 피를 두 번 실행하십시오
- 27. 서브 표현식을 한 번 실행하십시오
- 28. 다른 인수를 사용하여 파이썬 함수를 여러 번 실행하십시오.
- 29. 표준 입력에서 주어진 인수를 사용하여 명령을 여러 번 실행하십시오.
- 30. 다른 파일을 입력으로하여 C++ 프로그램을 여러 번 실행하십시오.
이 솔루션을 한동안 사용했지만'get_session_tensor' API가 변경되어 더 이상 작동하지 않습니다. 이제 dtype과 함께 핸들이 필요합니다. –
소스를 보면 핸들은 텐서의 장치를 결정하는 데만 사용됩니다. 따라서 CPU를 사용하는 경우 CPU에 더미 핸들을 만들어 재사용 할 수 있습니다. –
고마워요, Yaroslav,하지만 두 가지 점에 대해서는 혼란 스럽습니다. 우선, CPU에서 GPU 로의 큰 배치의 다중 전송을 피하기 위해 더미 핸들이 CPU가 아닌 GPU에 있어야하지 않습니까? 둘째, 메모리를 비우기 위해'delete_session_tensor'를 호출 할 필요가없는 이유는 무엇입니까? – gmr