2017-11-09 2 views
1

int32 또는 64b 대신 float 입력을 사용하여 포함 테이블을 구현하고 싶습니다. 그 이유는 간단한 RNN과 같은 단어 대신에 백분율을 사용하고 싶습니다. 예를 들어 조리법의 경우; 나는 1000 개 또는 3000 개의 재료를 가질 수 있습니다. 하지만 모든 조리법에서 나는 최대 80을 가질 수 있습니다. 성분은 %로 표시됩니다. 예 : 성분 1 = 0.2 성분 2 = 0.8 ... 등tf.nn.embedding_lookup with float input?

제 문제는 tensorflow가 정수 테이블 :

형식 오류는 : INT32 INT64

어떤 제안을 : 값 데이터 형식이 아닌 허용 된 값의 목록에 float32있다 '인덱스'매개 변수에 전달? 나는 당신의 의견을 보내 주셔서 감사합니다 , 찾아 내장의

예 :

inputs = tf.placeholder(tf.float32, shape=[None, ninp], name=“x”) 
n_vocab = len(int_to_vocab) 
n_embedding = 200 # Number of embedding features 
with train_graph.as_default(): 
    embedding = tf.Variable(tf.random_uniform((n_vocab, n_embedding), -1, 1)) 
    embed = tf.nn.embedding_lookup(embedding, inputs) 

가 오류가 나는 루프를 사용하여 작업 할 수있는 알고리즘의 생각

inputs = tf.placeholder(**tf.float32,** shape=[None, ninp], name=“x”) 

에 의해 발생합니다. 그러나 더 직접적인 해결책이 있는지 궁금합니다.

감사합니다.

답변

1

tf.nn.embedding_lookup은이 함수의 요점은에 지정된 에 삽입을 선택하기 때문에 부동 입력을 허용 할 수 없습니다.

예 :

embed-lookup

여기 5 워드 5 개 매립 차원 벡터가 있으며, 동작 (0 인덱싱) 3 번째 행을 반환한다. 이 tensorflow에서이 행과 같습니다 :

embed = tf.nn.embedding_lookup(embed_matrix, [3]) 

당신은 아마도 부동 소수점 인덱스를 찾아 볼 수없는 등 0.2 또는 0.8, 매트릭스에는 0.20.8 행 인덱스가 없기 때문입니다. word2vec에 대해 this post by Chris McCormick을 적극 권장합니다.

당신이 묘사하는 것은 대상 클래스에 대한 확률 분포를 출력하는 softmax 손실 함수와 비슷하게 들립니다.

+0

안녕하세요. Maxim, 좋은 설명 = 주셔서 감사합니다.) 필자는 embeeding_lookup이 행을 선택하는 것임을 알고 있습니다. 필자의 모델에서 불필요한 곱셈을 피하기 위해이 방법을 사용하고자했습니다. 예를 들어 첫 번째 두 개를 제외한 모든 요소가 0 인 요소가 1000 개있는 경우 작은 행렬을 만들고 행렬의 처음 두 요소와 행렬의 처음 두 행 사이에 matmul을 수행 할 수 있습니다. 나는 이런 종류의 논리를 발전시킬 수 있다고 믿는다. 나는 tensorflow가 상자에서 무엇인가를 제공하는지 궁금해하고있었습니다. –