如何规范张量流变量的大小

时间:2017-07-26 01:48:47

标签: tensorflow

我正在写一个张量流代码,我想在每次更新后规范化变量向量。以下代码效果很好:

 sess = tf.InteractiveSession()
 y = tf.Variable(tf.random_uniform([2], -0.5, 0.5))
 init = tf.initialize_all_variables()
 sess.run(init)

 a = [2, 3]

loss = tf.reduce_sum(tf.square(a - y))
y = y / tf.sqrt(tf.reduce_sum(tf.square(y)))

optimizer = tf.train.GradientDescentOptimizer(0.05)
train = optimizer.minimize(loss)

for step in range(100):
  sess.run(train)
  temp2= sess.run(y)
  print(temp2)    

并给出所需的答案,即[0.55469805 0.83205169],[2,3]方向的归一化向量

但是,如果我改变

  y = tf.Variable(tf.random_uniform([2], -0.5, 0.5))

  y = tf.Variable(tf.random_uniform([2,2], -0.5, 0.5))

  y = y / tf.sqrt(tf.reduce_sum(tf.square(y)))

  y[0] = y[0] / tf.sqrt(tf.reduce_sum(tf.square(y[0])))

然后我收到错误,上面写着"'变量'对象不支持项目分配"。我还将损失函数改为

  loss = tf.reduce_sum(tf.square(a - y[0]))

有人可以帮助我如何规范化张量流中变量类型y [0]的向量列吗?

1 个答案:

答案 0 :(得分:0)

由于y是张量对象,因此您无法像过程那样将值分配给张量。因此,您应该处理张量数组,然后将值分配如下:

 yArray = y.eval()
 a = [2, 3]

 loss = tf.reduce_sum(tf.square(a - y.eval()[0][:]))
 yArray[0][:] = yArray[0][:] / tf.sqrt(tf.reduce_sum(tf.square(yArray[0][:]))).eval()
 y.assign(yArray)

在上面,使用eval函数获取张量数组。然后,计算损失函数,并yArray归一化。最后,将yArray的值分配到y