두 부분으로 구성된 TensorFlow 그래프를 만듭니다. 인코더와 디코더. 디코더 다음에 최적화가 뒤 따른다. 인코더와 디코더는 모두 가변 길이 입력 및 타겟 시퀀스에 종속적 인 등록을 가진 반복적 인 신경망입니다. 즉, 입력 순서가 5 개의 요소를 가져, 타겟 순서가 6 개의 요소를 가지는 경우, 엔코더는 5 개의 엔트리를 가져, 디코더는 6 개의 엔트리를 가질 필요가 있습니다. 그래도 나는 그래프 위에 두 개의 변수를 작성하여이를 수행 할 수 있습니다 : 나는 세션을 실행할 때가변 반복 섹션이있는 TensorFlow 그래프
graph = tf.Graph()
with graph.as_default():
...
# Encoder
for t in range(len_input):
...
# Decoder
for t in range(len_target):
...
그럼, 적절하게 업데이트 할 것 :
len_input = 1
len_target = 1
및 그래프에 코드가
with sess = tf.Session(graph=graph):
tf.initialize_all_variables().run()
for step in range(num_batches):
input = en_data.pop()
len_input = input.shape[1]
target = fr_data.pop()
len_target = target.shape[1]
그러나 원하는 결과를 얻지는 못합니다. 대신 그래프는 처음 컴파일 될 때와 같이 인코더와 디코더를 한 번만 등록합니다.
등록자들간에 Tensors를 저장할 수 있다고 말하기 전에, 제 경우의 문제는 손실 기능이 인코더의 출력에 종속적 인 디코더의 출력에 의존한다는 것입니다. 즉, 최적화 프로그램은 인코더와 디코더 모두에서 작동하는 모든 가중치를 최적화합니다. 즉, 모두가 하나의 그래프에 있어야합니다. 등록에 가치 Tensors를 저장하려면 인코더와 디코더에 대한 두 개의 개별 그래프를 만들어야합니다. 두 그래프의 등록 수가 동일 할 필요는 없습니다.
나는 이것에 매우 혼란 스럽다. 처음에는 인코더와 디코더의 등록 횟수를 줄이는 자리 표시자가 있다고 생각했지만 자리 표시 자 자체는 Tensor이므로 for 루프의 range
함수에서 사용할 수 없습니다. 내가 뭘 할 수 있는지 전혀 모르겠다. 어떤 제안? 미리 감사드립니다! :)
굉장합니다. 'tf.while_loop'을 시험해보고 어떻게되는지 알려줄 것이지만 정답과 같습니다. –