相关疑难解决方法(0)

如何在Tensorflow中进行切片分配

我发现Tensorflow提供了scatter_update()为0维度中的张量切片赋值.例如,如果张量T是三维的,我可以赋值v[1, :, :]T[i, :, :].

a = tf.Variable(tf.zeros([10,36,36]))   
value = np.ones([1,36,36])   
d = tf.scatter_update(a,[0],value)

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    print a.eval()
    sess.run(d)
    print a.eval()
Run Code Online (Sandbox Code Playgroud)

但是如何赋值v[1,1,:]T[i,j,:]

a = tf.Variable(tf.zeros([10,36,36]))   
value1 = np.random.randn(1,1,36)    
e = tf.scatter_update(a,[0],value1) #Error

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    print a.eval()
    sess.rum(e)
    print a.eval()
Run Code Online (Sandbox Code Playgroud)

是否有TF提供的其他功能或简单的方法?

python-2.7 tensorflow

21
推荐指数
2
解决办法
2万
查看次数

在TensorFlow中条件分配张量值

我想复制以下numpy代码tensorflow.例如,我想为0之前具有值的所有张量索引分配一个1.

a = np.array([1, 2, 3, 1])
a[a==1] = 0

# a should be [0, 2, 3, 0]
Run Code Online (Sandbox Code Playgroud)

如果我写相似的代码tensorflow我得到以下错误.

TypeError: 'Tensor' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

方括号中的条件应该是任意的,如a[a<1] = 0.

有没有办法实现这种"条件分配"(缺少一个更好的名字)tensorflow

python numpy tensorflow

15
推荐指数
1
解决办法
1万
查看次数

在Tensorflow中,如何根据索引在Tensor中分配值?

我想根据索引在张量中分配值.

例如,根据池值和tf.nn.max_pool_with_argmax的相应索引输出,我想将这些池值重新放回到具有索引的原始拆分Tensor中.

我发现输出指数tf.nn.max_pool_with_argmax是扁平的.一个问题:如何将它们解开回Tensorflow中的坐标?

另一个问题:如果给出索引,如何将池化张量的每个值分配给Tensorflow中原始解析张量的位置?

非常感谢你.

我试图制作代码来实现这一点,但我可以使用numpy.我不知道如何tf.nn.max_pool_with_argmax在Tensorflow中分配到unpooling张量之后获得平坦的索引.

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 …
Run Code Online (Sandbox Code Playgroud)

python deep-learning tensorflow

10
推荐指数
1
解决办法
2万
查看次数

如何在张量流中为张量的子集赋值?

这个问题的两个部分:

(1)更新张量流中张量子集的最佳方法是什么?我看过几个相关的问题:

在Tensor中调整单值 - TensorFlow 以及 如何在Tensorflow中更新2D张量的子集?

我知道可以使用Variable.assign()(和/或scatter_update等)来分配Variable对象,但是对于我来说,tensorflow没有更直观的方式来更新Tensor的一部分似乎很奇怪宾语.我已经搜索了tensorflow api文档和stackoverflow很长一段时间了,似乎找不到比上面链接中提供的更简单的解决方案.这看起来特别奇怪,特别是考虑到Theano与Tensor.set_subtensor()具有相同的版本.我错过了什么,或者目前通过tensorflow api没有简单的方法吗?

(2)如果有更简单的方法,它是否可以区分?

谢谢!

tensorflow

9
推荐指数
1
解决办法
4114
查看次数

Softmax矩阵到0/1(OneHot)编码矩阵?

假设我有以下张量t作为softmax函数的输出:

t = tf.constant(value=[[0.2,0.8], [0.6, 0.4]])
>> [ 0.2,  0.8]
   [ 0.6,  0.4]
Run Code Online (Sandbox Code Playgroud)

现在我想将此矩阵t转换为类似于OneHot编码矩阵的矩阵:

Y.eval()
>> [   0,    1]
   [   1,    0]
Run Code Online (Sandbox Code Playgroud)

我很熟悉c = tf.argmax(t)那会给我每行的指数t应该是1.但是从那里c开始Y似乎很难.

我已经尝试过转换ttf.SparseTensor使用c然后使用tf.sparse_tensor_to_dense()来获取Y.但是这种转换涉及相当多的步骤并且对于任务来说似乎有点过头了 - 我甚至还没完成它,但我确信它可以工作.

有没有更合适/简单的方法来进行我失踪的转换.

我需要这个的原因是因为我在Python中有一个自定义的OneHot编码器,我可以在其中提供Y.tf.one_hot()不够广泛 - 不允许自定义编码.

相关问题:

python tensorflow softmax

7
推荐指数
1
解决办法
2800
查看次数

如何使用索引更新张量的元素?

我正在寻找一个“更新”功能,发生在张量t1,一些指标和值,并返回一个新的张量t2,这是t1但在相应改变的指标值。

这似乎是最基本的功能,但是我没有在文档中看到它。

我所看到的是tf.scatter_update,它Variable以某种方式更新了:,这正是我想要的。我可以想像构造一个Variablefor t2(这项工作吗?),但是t2不应认为它是有状态的变量,而是用任意初始值填充它。

或者,我可以手动构建一个Python的嵌套列表中添加的每个元素t1t2独立,然后调用tf.convert_to_tensor。我可能是错的,但这似乎效率很低。

python indexing tensorflow

5
推荐指数
1
解决办法
6345
查看次数

如何用索引替换张量中的值?

下面的代码添加一些特定位置的张量内指数(感谢@ mrry的答案在这里)。

indices = [[1, 1]]  # A list of coordinates to update.
values = [1.0]  # A list of values corresponding to the respective
            # coordinate in indices.
shape = [3, 3]  # The shape of the corresponding dense tensor, same as `c`.
delta = tf.SparseTensor(indices, values, shape)
Run Code Online (Sandbox Code Playgroud)

例如,鉴于此 -

c = tf.constant([[0.0, 0.0, 0.0],
             [0.0, 0.0, 0.0],
             [0.0, 0.0, 0.0]])
Run Code Online (Sandbox Code Playgroud)

它会在 [1, 1] 处加 1,结果是

[[0.0, 0.0, 0.0],
[0.0, 1.0, 0.0],
[0.0, 0.0, 0.0]])
Run Code Online (Sandbox Code Playgroud)

问题- …

tensorflow

5
推荐指数
1
解决办法
3689
查看次数

Tensorflow:根据偶数和奇数索引合并两个二维张量

我想检查批次中的偶数和奇数元素,并在需要时交换它们。我设法得到两个我想交织的张量:

def tf_oplu(x, name=None):   


    even = x[:,::2] #slicing into odd and even parts on the batch
    odd = x[:,1::2]

    even_flatten = tf.reshape(even, [-1]) # flatten tensors 
    #in row-major order to apply function across them

    odd_flatten = tf.reshape(odd, [-1])

    compare = tf.to_float(even_flatten<odd_flatten)
    compare_not = tf.to_float(even_flatten>=odd_flatten)

    #def oplu(x,y): # trivial function  
    #    if x<y : # (x<y)==1
    #       return y, x 
    #    else:
    #       return x, y # (x<y)==0

    even_flatten_new = odd_flatten * compare + even_flatten * compare_not
    odd_flatten_new = odd_flatten * …
Run Code Online (Sandbox Code Playgroud)

python tensorflow

5
推荐指数
1
解决办法
2386
查看次数