2016-08-11 6 views
0

대학 프로젝트의 경우 위치와 속도가 지정된 공을 칠 수 있도록 시뮬레이트 된 로봇을 훈련하고 싶습니다. 시도해 볼 첫 번째 일은 정책 그라디언트입니다. 파라 메트릭 궤도 생성기가 있습니다. 모든 트레이닝 포지션에서 필자는 네트워크를 통해 포지션을 피드하고 시뮬레이터에 궤적을 보내 보상을받습니다. 나는 이것을 손실로 사용하고, 그라디언트를 샘플링하고, 다시 피드하고, 내 네트워크의 가중치를 업데이트하여 다음에 더 좋게 사용할 수 있습니다.Keras/TensorFlow의 상징적 손실이 없음

그러므로 목표는 위치에서 궤적 가중치로의 매핑을 배우는 것입니다. Theano와 Tensorflow (또는 Keras)와 같은 올스타 계산 그래프 라이브러리를 사용할 때 실제로 그 시스템을 모델링하는 방법을 모르는 문제가 있습니다. 먼저 완전히 표준으로 연결된 레이어를 갖고 싶습니다. 그런 다음 출력은 내 궤도 가중치입니다. 그러나 어떻게 실제로 손실을 계산하여 백 드롭을 사용할 수 있습니까?

커스텀 손실 함수에서 나는 실제 레이블을 지정하지 않고 시뮬레이터를 실행하고 손실을 반환합니다. 그러나 내가 읽은 것에서는 상징적 인 Theano/Tensorflow 함수를 반환해야합니다. 내 손실은 매우 복잡하므로 시뮬레이터에서 네트워크로 옮기고 싶지 않습니다. 어떻게 구현할 수 있습니까? 그런 다음 그 그라디언트를 얻기 위해 표본 추출이 필요할 수 있으므로 그 손실을 구별하는 것이 문제입니다.

+1

TensorFlow에서 모든 텐서를 공급할 수 있습니다. 즉, 더미 손실이있는 네트워크를 만든 다음 'feed_dict'를 사용하여 더미 손실을 외부에서 계산 된 손실/방향으로 바꿀 수 있습니다 –

답변

0

나는 몇 시간 전에 비슷한 문제를 겪었습니다.

최적화 된 C 코드 및 타사 라이브러리에 크게 의존하는 손실 함수가있었습니다. 이것을 테스토 플로우로 이식 할 수 없었습니다.

그러나 우리는 여전히 텐서 흐름 그래프를 훈련하여 현재 설정에서 조정 신호를 생성하려고했습니다.

그래프의 교육 : 여기

수치 및 분석 파생 상품 여기 https://nbviewer.jupyter.org/gist/lhk/5943fa09922693a0fbbbf8dc9d1b05c0

뒤에 아이디어에 대한 자세한 설명은을 혼합하는 방법을 설명하는 ipython 노트북입니다 최적화 문제이므로 손실의 파생물이 반드시 필요합니다. 도전 과제는 tensorflow의 분석 파생물과 손실의 숫자 파생어를 섞는 것입니다.

사항이 설정을

  • 입력 I
  • 출력 P
  • 그래프 G 맵 필요 I에 P, P = G (I)
  • P와 동일한 형상의 정수를 추가 은 P = C * G (I)
  • 손실 함수 L

tensorflow 그래프 훈련 backp 작동 ropagation. 그래프에서 모든 파라미터 X 용 다음 유도체

을 계산

㎗/d 배속 = ㎗/DP * DP/d 배속

그 두 번째 부분은, DP/DX를 바로 위로 설정함으로써, 무료로 제공

tensorflow 그래프. 그러나 우리는 여전히 손실의 파생물이 필요합니다.

이제 트릭이 있습니다.

올바른 기울기를 기반으로 X를 업데이트하려면 tensorflow를 원하지만 tensolflow 그래프가 아니기 때문에 dL/dP를 계산하기 위해 tensorflow를 얻을 수 없습니다.

우리가 대신 P ~ = P * C 사용

,

그의 유도체는 우리가 ㎗/DP에 C를 설정하면 DP는 = DP는 C

그래서, 우리는 /를 ~를 얻을 * DX를 DX를 /입니다 올바른 그라디언트.

간단히 숫자 구배로 C를 계산해야합니다.

알고리즘이다
  • 계산할
  • P 예측을 상수에 대한 상수 C
  • 피드 1 출력을 곱하는 순방향 패스 계산 얻을, 그래프를 설정

      손실 P
    • 숫자의 파생 상품을 P
    • 으로 계산하여 수치 미분을 C로 전달하고 역방향 패스를 계산하고 매개 변수를 업데이트합니다.