【问题标题】:Get row from TensorFlow tensor从 TensorFlow 张量中获取行
【发布时间】:2020-08-11 13:54:59
【问题描述】:

我正在尝试在 TensorFlow 中定义一个自定义层,但我正在为数据处理而苦苦挣扎。据我了解,最常见的方法是计算一批输入的输出。这意味着如果输入张量被称为input,则input[n] 是该批次的n-th 训练输入。

现在让我们假设每个示例包含两个向量ab,它们将被区别对待。例如,如果一个训练示例是[[1,2,3],[4,5,6]]a=[1,2,3]b=[4,5,6]

然而,输入包含许多这样的例子,所以它可以是例子

[
    [[1, 2, 3], [4, 5, 6]],
    [[10, 27, 3],[4, 45, 61]]
]

有没有办法选择特定的“行”?

您可以选择带有input[n] 的示例,但我想获得一个张量,它是所有向量a 或所有向量b 的列表。如果您想选择向量a,上面示例的结果将是[[1,2,3],[10,27,13]]

是否有另一种方法可以为单个训练示例定义操作并让 TensorFlow 以有效的方式在批处理的所有示例上执行它?

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    我认为您可能正在寻找 lambda 层:

    import tensorflow as tf
    
    tensor = [[[1, 2, 3], [4, 5, 6]], [[10, 27, 3],[4, 45, 61]]]
    
    ds = tf.data.Dataset.from_tensor_slices(tensor) 
    
    times_2_times_3 = lambda x: (tf.multiply(x[0], 2), tf.multiply(x[1], 3))
    
    layer = tf.keras.layers.Lambda(times_2_times_3)
    
    layer(next(iter(ds)))
    
    (<tf.Tensor: shape=(3,), dtype=int32, numpy=array([2, 4, 6])>,
     <tf.Tensor: shape=(3,), dtype=int32, numpy=array([12, 15, 18])>)
    

    【讨论】:

      【解决方案2】:

      我刚刚解决了。我正在寻找切片操作员。给定输入

      x=[[[1, 2, 3], [4, 5, 6]],
      [[10, 27, 3],[4, 45, 61]]]
      

      你可以通过运行获得 tens[[1,2,3],[10,27,13]] result=x[:,0] 这意味着从第 0 维(“批量维”)中选择所有元素,从第 1 维中选择第一个元素。 恐怕 lambda 层解决方案仅适用于单个训练示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多