Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tensorflow中,如何根据索引分配张量值?_Python_Tensorflow_Deep Learning - Fatal编程技术网

Python 在Tensorflow中,如何根据索引分配张量值?

Python 在Tensorflow中,如何根据索引分配张量值?,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我想根据索引在张量中赋值 比如说,, 根据pooling值和相应的索引输出,我想把这些pooling值放回到原始的无冷却张量中 我发现带有argmax的tf.nn.max\u pool\u的输出索引是平坦的。 一个问题:如何将它们分解回Tensorflow中的坐标 另一个问题:在给定索引的情况下,如何将池张量的每个值赋给Tensorflow中原始非池张量的位置 多谢各位 我试图编写代码来实现这一点,但我只能使用numpy。我不知道如何在tf.nn.max\u pool\u和_argmax并分配到

我想根据索引在张量中赋值

比如说,, 根据pooling值和相应的索引输出,我想把这些pooling值放回到原始的无冷却张量中

我发现带有argmax的
tf.nn.max\u pool\u的输出索引是平坦的。
一个问题:如何将它们分解回Tensorflow中的坐标

另一个问题:在给定索引的情况下,如何将池张量的每个值赋给Tensorflow中原始非池张量的位置

多谢各位

我试图编写代码来实现这一点,但我只能使用
numpy
。我不知道如何在
tf.nn.max\u pool\u和_argmax
并分配到Tensorflow中的无冷却张量之后获得平坦的索引

ksize = 3
stride = 1

input_image = tf.placeholder(tf.float32, name='input_image')

#conv1
kernel = tf.Variable(tf.truncated_normal([ksize, ksize, 3, 16],stddev=0.1),
                    name='kernel')
conv = tf.nn.conv2d(input_image, kernel, [1,stride,stride,1], padding='SAME')
biases = tf.Variable(tf.constant(0.0, shape = [16]), name = 'biases')
bias = tf.nn.bias_add(conv, biases)
conv1 = tf.nn.relu(bias, name='conv1')

#pool1
pool1, pool1_indices = tf.nn.max_pool_with_argmax(conv1, ksize=[1, 2, 2, 1], 
                                                  strides=[1, 2, 2, 1], 
                                                  padding='SAME', name='pool1')

#upsample by assigning the values of pool1 to the position in unpooling Tensor according to pool1_indices                                                
indices = pool1_indices
unravel_pool1_indices = np.unravel_index(indices,[4,32,32,16])
unravel_pool1_coordinates = np.array(unravel_pool1_indices)
coor_shape = np.shape(unravel_pool1_coordinates)
unravel_pool1_coordinates = np.reshape(unravel_pool1_coordinates,(coor_shape[0],coor_shape[1]*coor_shape[2]*coor_shape[3]*coor_shape[4]))
unravel_pool1_coordinates = unravel_pool1_coordinates.T

values = pool1
values = np.reshape(values,(np.size(values)))

up1 = tf.constant(0.0, shape = [4,32,32,16])
delta = tf.SparseTensor(unravel_pool1_coordinates, values, shape = [4,32,32,16])

result = up1 + tf.sparse_tensor_to_dense(delta)


with tf.Session() as session:
    session.run(tf.initialize_all_variables())
    test_image = np.random.rand(4,32,32,3)
    sess_outputs = session.run([pool1, pool1_indices],
                               {input_image.name: test_image})

有一个挂起的PR应该修复此问题:


相同的问题列在

谢谢。我检查了那个问题。这是如何用_argmaxop计算max _pool _的梯度。但在这里,我想根据指数在大张量中赋值。我用numpy编写的代码的中间部分,似乎不能用graph构建。如何在Tensorflow中实现这一点?如果您仍在寻找解决方案,可以检查以下内容: