在tensorflow中分配行期间获取ValueError

时间:2017-10-24 19:40:39

标签: tensorflow

我有以下代码:

norm_embed = tf.sqrt(tf.reduce_sum(tf.multiply(embeddings, embeddings), 1))
comparison = tf.greater(norm_embed, tf.constant(1.))
cond_assignment = tf.assign(embeddings, tf.where(comparison, embeddings/norm_embed, embeddings))

我尝试做的是我有一个embeddings形状的[V, 1]矩阵。我想规范化行的规范大于1的那些行。

但是,我得到了ValueError:

  

ValueError:尺寸必须相等,但为2和11202   ' truediv_1' (op:' RealDiv')输入形状:[11202,2],[11202]。

我理解矩阵norm_embed具有[V]形状,但在分段[V, k]矩阵中,矢量[V]应该广播后者[V, 1]。我不明白为什么它没有发生。我也尝试将矢量重塑为then形状,但它没有帮助。

为什么我在规范化期间收到ValueError?当超过值时,可能有其他方法来规范化行?

1 个答案:

答案 0 :(得分: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)