2017-10-24 2 views
0

의 행 할당하는 동안 ValueError를 얻기. 행의 규범 그러나 1보다 큰내가 다음 코드 조각을 한 tensorflow

입니다 그리고 그 행을 정상화하려면, 나는 ValueError를 얻을 :

ValueError: Dimensions must be equal, but are 2 and 11202 for 'truediv_1' (op: 'RealDiv') with input shapes: [11202,2], [11202].

나는 매트릭스 norm_embed[V] 모양을 가지고 있지만, 부문 벡터에 의해 [V, k] 매트릭스 중에 이해 [V] 후자가 방송되어야합니다. 나는 그것이 왜 일어나지 않는지 이해하지 못한다. 또한 벡터 모양을 [V, 1] 모양으로 바꿨으나 도움이되지 않았습니다.

정규화 중에 ValueError가 나타나는 이유는 무엇입니까? 행을 값을 초과 할 때 정규화하는 다른 방법이 있습니까?

답변

0

코드에 두 가지 오류가 있습니다.

첫째, 우리는 두 가지 크기를 가질 norm_embed 바꿀 필요

norm_embed = tf.reshape(norm_embed, [V, 1]) 

둘째, 우리는 단지 1 차원이 비교 연산자를 바꿀 필요가있다.

comparison = tf.reshape(comparison, [vocabulary_size]) 

그 코드가 작동 후 :

norm_embed = tf.sqrt(tf.reduce_sum(tf.multiply(embeddings, embeddings), 1)) 
norm_embed = tf.reshape(norm_embed, [V, 1]) 
comparison = tf.greater(norm_embed, tf.constant(1.)) 
comparison = tf.reshape(comparison, [V]) 
replacement = tf.where(comparison, embeddings/norm_embed, embeddings) 
cond_assignment = tf.assign(embeddings, replacement)