【问题标题】:Manually create 3+ rank tensor in tensorflow在 tensorflow 中手动创建 3+ rank tensor
【发布时间】:2016-10-21 00:52:42
【问题描述】:

我想在运行时创建一个 [ ?, ?, n ] 张量。 数据如下:

1) 我检查的每个元素都是 n 个元素的向量(所以 [1,2,...,n])

2) 每个“组”都是未知数量的前一种类型的元素(所以基本上是一个矩阵)

3) 我不知道我会收到多少组。

我手动尝试过,类似这样:

shape3 = [
[ [ .111,.112,.113 ], [ .121,.122,.123 ], [ .131,.132,.133 ] ],
[ [ .211,.212,.213 ], [ .221,.222,.223 ] ]
]

var_shape3 = tf.Variable(shape3, name="var_shape_3")
with tf.Session() as session:
    session.run(init_op)
    print var_shape3.eval()
    print var_shape3.get_shape()

但我收到错误提示

参数必须是密集张量:[[[0.111, 0.112, 0.113], [0.121, 0.122, 0.123], [0.131, 0.132, 0.133]], [[0.211, 0.212, 0.213], [0.221, 0.222 , 0.223]]] - 得到形状 [2],但想要 [2, 3, 3]。

请帮忙看看我做错了什么?

换句话说:我如何将这些数据放入张量中?

谢谢

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    在 TensorFlow 中,您可以使用 dynamic dimensions,由 ? 符号表示。但是这些维度必须在执行期间进行推断,这意味着一旦执行代码,就需要用数字表示。

    在您的示例中(组中的组和元素数量可变),这将不起作用。例如。什么会起作用:

    shape3 = [
    [ [ .111,.112,.113 ], [ .121,.122,.123 ], [ .131,.132,.133 ] ],
    [ [ .211,.212,.213 ], [ .221,.222,.223 ], [ .000,.000,.000 ] ]
    ]
    

    您的两个选择是:

    1. 定义组和组中元素的最大数量,并使用 padding 填充缺失的数据点。您还可以使用 bucketing 对类似大小的示例进行分组(更多信息here)
    2. 更改您的代码/数据结构以使用可变长度序列。这可能需要使用 TensorFlow scan op。请注意,这可能非常慢,所以我不推荐它,除非真的需要,更多信息here

    【讨论】:

    • 谢谢你的回答,这让我想问如何处理可变输入长度?用句子概括地说,例如,您不能填充文本,或通过将输入放入桶中来更改输入...
    • 对于句子,您实际上也会使用相同的想法(填充最常见的想法)。只需添加“填充”词并使用此类信息训练您的模型,您应该能够获得良好的性能。另请参阅 TensorFlow documentation on seq2seq models for sentence translations,其中还提到了填充和分​​桶。
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2021-12-29
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多