【问题标题】:reshape tensor between two layers重塑两层之间的张量
【发布时间】:2017-08-30 14:11:39
【问题描述】:

我有一个神经网络,我在其中构建了自己的层,它给出了形状为 A = [10, 5] 的结果。

我想将结果提供给另一个层,该层接受形状为B = [10, 9, 5] 的输入。

输入B是基于之前的结果A,例如从A中选择9个不同的行10次,形成一个形状为[10, 9, 5]的新张量。

有没有办法做到这一点?

【问题讨论】:

    标签: tensorflow reshape tensor


    【解决方案1】:

    for 循环会做:

    a = tf.constant([[1, 2, 7], [3, 4, 8], [5, 6, 9]])
    
    tensor_list = []
    pick_times = 3
    for i in range(pick_times):
        pick_rows = [j  for j in range(pick_times) if i != j]
        tensor_list.append(tf.gather(a, pick_rows))
    
    concated_tensor = tf.concat(tensor_list, 0)
    result = tf.reshape(concated_tensor, [3, 2, 3])
    

    【讨论】:

    • 谢谢!但实际上我需要选择 9 个不同的行十次。例如,我选择除第一行之外的所有行,然后我选择除第二行之外的所有行,依此类推十次,以制作形状为 [10,9,5] 的新矩阵。有没有办法自动完成,而不是一个一个地做,最后使用连接?
    【解决方案2】:

    将张量 A(层的输出)转换为 numpy 数组:

    a=sess.run(A.eval())
    

    为了示例,我将使用:

    a=np.random.uniform(0,5,[10])
    

    然后:

    #choose wich element will be left out
    out = np.random.randint(5, size=[10])
    
    #array of different output layers without one random element
    b=[]
    for i in range(10):
      b.append(np.delete(a,out[i]))
    
    #Stack them all together
    B = tf.stack(b[:])
    

    【讨论】:

    • 非常感谢!你认为有两个课程(一个在这里,另一个用于培训)会有问题吗?此外,我想这应该不会影响反向传播过程,因为这里没有使用权重,对吧?
    • 即使使用了权重(tf.variable),它们也不会受到影响,因为您在这里处于前馈过程中并且您没有更改权重。
    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多