我试图将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 回答
您应该避免在TensorFlow图中引入python / numpy代码 .
如果要切片数组,可以使用tf.slice .
例如,如果你想获得
C[0, 0]
:你得到的错误来自
C_copy
是一个numpy数组的浮点数,你试图将C_copy[0, 0]
设置为tf.Tensor
.TLDR;使用
.eval(feed_dict={x:batch_xs})
您正在混合“具体的Tensors” - 表示实际值的对象,如numpy数组)和“抽象Tensors” - 表示特定计算的对象,必须在使用前进行评估 .
当你执行
C[0,0]
时,C是一个抽象的Tensor,并且C[0,0]
变成了将元素输出所需的Slice
和Squeeze
运算的序列,我猜numpy认为它工作是因为numpy期望具体的值,所以它需要得到评估首先,使用eval
或session.run