首页 文章

将Tensor对象中的实际数值分配给Tensorflow中的numpy数组

提问于
浏览
0

我试图将Tensor对象中的矩阵切割为numpy矩阵,并在一些部分计算中使用它 . 但是从Tensor对象到numpy数组的赋值不起作用如下 .

import tensorflow as tf
import numpy as np

def assignC():
    C_copy = np.zeros((2,2))
    C = tf.matmul(tf.transpose(x), x)
    C_copy[0,0] = C[0,0]
    #C_copy[0,0] = C[0,0].eval() # error saying "You must feed a value for  placeholder tensor 'Placeholder' with dtype float" at line 17
    print(C_copy[0,0])
    return C_copy

sess = tf.InteractiveSession()

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

x = tf.placeholder(tf.float32, [None, 784])

sess.run(tf.initialize_all_variables())
for i in range(1):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    print(sess.run(tf.identity(assignC()), feed_dict={x: batch_xs}))

最终出现错误“ValueError:设置带序列的数组元素” . 第7行 . 有人会告诉我如何在Tensor对象中提取数值并将其分配给非张量流对象吗?

2 回答

  • 0

    您应该避免在TensorFlow图中引入python / numpy代码 .

    如果要切片数组,可以使用tf.slice .

    例如,如果你想获得 C[0, 0]

    C = tf.constant([[1., 2.], [3., 4.]])
    res = tf.slice(C, [0, 0], [1, 1])
    

    你得到的错误来自 C_copy 是一个numpy数组的浮点数,你试图将 C_copy[0, 0] 设置为 tf.Tensor .

  • 0

    TLDR;使用 .eval(feed_dict={x:batch_xs})

    您正在混合“具体的Tensors” - 表示实际值的对象,如numpy数组)和“抽象Tensors” - 表示特定计算的对象,必须在使用前进行评估 .

    当你执行 C[0,0] 时,C是一个抽象的Tensor,并且 C[0,0] 变成了将元素输出所需的 SliceSqueeze 运算的序列,我猜numpy认为它工作是因为numpy期望具体的值,所以它需要得到评估首先,使用 evalsession.run

相关问题