【问题标题】:zip like function in Tensorflow? Tensorflow tensor operationTensorflow中的类似zip的功能? Tensorflow张量操作
【发布时间】:2017-11-20 07:23:32
【问题描述】:

我的问题是关于 Tensorflow 中的张量运算。 比方说:

import tensorflow as tf
import numpy as np

a = tf.Variable(np.random.random([10, 3, 3]))
b = tf.Variable(np.random.random([10, 3, 3]))

def some_function(m,n):
    # just as an example
    return tf.add(m, n)

这在 Tensorflow 中有效,但需要提前了解维度。但是,Tensor 的第一个维度很可能是 None。

c = []
for i in range(10):
    c.append(some_function(a[i], b[i]))
c = tf.stack(c)

所以我想知道 Tensorflow 中是否有类似 zip 的功能?然后我们可以这样做:

# TypeError: zip argument #1 must support iteration
c = []
for i, j in zip(a,b):
    c.append(some_function(i,j))
c = tf.stack(c)

也许我们可以使用 tf.map_fn 或 tf.scan 之类的函数?但我不确定。真的谢谢你们。

【问题讨论】:

  • For 循环在 TensorFlow 中很少使用,尤其是在处理张量计算时,因为循环是在 python 中并且与内部 c++ 相比会很慢,TensorFlow 中很可能存在可以为您提供的函数或操作任务更数学上没有循环。

标签: python tensorflow deep-learning


【解决方案1】:

张量对象不可迭代,这就解释了为什么您的第三个代码示例失败了。因此,为了回答您的问题,TensorFlow 中没有类似 zip 的功能。

您确实可以使用tf.map_fn 将函数应用于张量序列。您在示例代码中提出的问题可以通过以下方式解决:

def some_function(tensor):
  return tf.reduce_sum(tensor)

c = tf.stack([a, b], axis=1)
d = tf.map_fn(some_function, c, dtype=tf.float32)

产生一个张量d,其值为[20., 6., 6.]

【讨论】:

    【解决方案2】:

    你可以像这样使用tf.transpose

    >>> a = tf.constant([1, 2, 3])
    >>> b = tf.constant([4, 5, 6])
    >>> tf.transpose([a, b])
    <tf.Tensor: shape=(3, 2), dtype=int32, numpy=
    array([[1, 4],
           [2, 5],
           [3, 6]], dtype=int32)>
    

    【讨论】:

      【解决方案3】:

      对于那些使用 JavsScript 的人,这是 @bachr 在 tensorflow.js(节点)中的回答:

      const a =  tf.tensor([1, 3, 5, 7])
      const b = tf.tensor([2, 4, 6, 8])
      const zip = tf.transpose(tf.stack([a, b]))
      zip.print()
      // Tensor
      //    [[1, 2],
      //     [3, 4],
      //     [5, 6],
      //     [7, 8]]
      
      

      【讨论】:

        猜你喜欢
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        相关资源
        最近更新 更多