2016-10-17 2 views
0

TensorFlow 사이트의 Language Modeling에 대한 자습서를 따르려고합니다. 나는 그것이 실행되고 비용이 내려 가고 위대한 일을하고 있지만 실제로 모델로부터 예측을 얻는 방법이 전혀 없음을 알 수 있습니다. 나는 this answer에 지시에 따라 노력했지만 session.run에서 반환 된 tensors는 0.017842259와 같은 부동 소수점 값이며, 사전은 단어를 정수로 매핑하므로 작동하지 않습니다.TensorFlow에서 "de-embed"단어를 사용하는 방법

텐서 흐름 모델로부터 예측 된 단어를 얻으려면 어떻게해야합니까?

편집 :이 검색 explanation 주위를 검색 한 후,이 예제의 컨텍스트에서 x와 y가 무엇인지 확실하지 않습니다. 그들은 설명에서와 같이이 예제에 대해 동일한 규칙을 사용하는 것 같지 않습니다.

답변

1

당신이 언급하는 텐서는 loss이며 네트워크 훈련 방법을 정의합니다. 예측을 위해서는 다음 단어에 대한 확률을 포함하는 텐서 probabilities에 액세스해야합니다. 이것이 분류 문제라면, 가장 높은 확률을 얻으려면 argmax을 수행하면됩니다. 그러나 또한 확률이 낮은 단어를 생성 할 기회를주기 위해 일종의 샘플링이 종종 사용됩니다.

편집 : 사용하는 코드가 this 인 것으로 가정합니다. 이 경우에, softmax 기능을 적용하여 확률로 변환 할 수있는 148 행 (logits)을 보면 - tensorflow 웹 사이트의 의사 코드에 표시된 것과 같습니다. 희망이 도움이됩니다.

+0

100 % 확신하지 못했습니다. 'session.run'의 결과는 다음과 같은 요소를 갖는 3 요소 목록입니다. cost : 모델의 평균 비용이라고 가정하는 float32, eval_op : 모델을 평가하는 데 사용되는 함수, final_state : 목록 LSTMStateTuples – jbird

+0

그 중 어느 것이 확률을 포함합니까? – jbird

+0

한 가지 더 언급할만한 점은 이러한 LSTMStateTuples에 음수 값이 포함되어있어 확률이 높지 않다고 가정하기 때문입니다 (또한 무언가 어떻게 음의 손실을 가져올 지 확신 할 수 없음) – jbird

0

그래서 비슷한 다른 게시물을 살펴본 후에 나는 이것을 알아 냈습니다. 첫째, 문서에 설명 된 코드는 GitHub 저장소의 코드와 다릅니다. 현재 코드는 진행되는 동안 모델에 데이터를 전달하는 대신 내부의 데이터로 모델을 초기화하여 작동합니다.

기본적으로 내가하려는 일을 성취하기 위해 나는 코드를 9274f5a으로 바꿨습니다 (또한 reader.py도 마찬가지입니다). 그런 다음 this post에서 수행 한 단계를 수행하여 probabilities 텐서를 내 run_epoch 함수로 가져 왔습니다. 또한 vocabularymain 함수로 전달하기 위해 this answer을 추적했습니다. 거기에서 vocabulary = {v: k for k, v in vocabulary.items()}을 사용하여 딕트를 뒤집어 run_epoch으로 전달했습니다.

마지막으로, 우리는 prob는 텐서가 session.run()

에서 반환 current_word = vocabulary[np.argmax(prob, 1)]을 실행하여 run_epoch에 예측 단어를 얻을 수 있습니다

편집 : 같은 코드를 되돌리기 영구적 인 해결책이 될 나는 확실히 @Prophecies 대답을 사용하는 것이 좋습니다 안 위의 그림은 probabilities 텐서입니다. 그러나 단어 매핑을 원한다면 여기에서했던 것처럼 어휘를 전달해야합니다.

관련 문제