【问题标题】:How to generate CNN model with changing frames in tensorflow?如何在张量流中生成具有变化帧的 CNN 模型?
【发布时间】:2017-05-31 01:05:25
【问题描述】:

我想在 Tensorflow 中构建一个条件 CNN 模型,但遇到了一些麻烦。

假设有一个名为 features 的矩阵,其形状为 [64, ?, 50, 1] 和另一个名为 conditions 的矩阵 形状为 [64, ?, 1, 130]。

第一个dim是batch size,第二个dim表示帧数(两个矩阵这个dim中的值在每个batch中相同,但在不同batch中不同)。第三个是特征维度,最后一个维度是通道数。

我想concat这两个矩阵,也就是说我们可以得到一个形状为[64, ?, 50, 131]的矩阵,然后在tensorflow中做conv2d

但问题是我无法连接这两个矩阵,因为第三个暗淡的差异。然后我做了如下:

    x_shapes = x.get_shape()
    y_shapes = y.get_shape()
    return tf.concat(3, [x, y*tf.ones([x_shapes[0], x_shapes[1], x_shapes[2], y_shapes[3]])])

但它不起作用,因为第二个暗淡是未知的。

不知道有没有办法解决这个问题?

谢谢

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    虽然从您的问题中不清楚,但看起来您想在连接之前在第三维度(称为特征维度)上广播形状为 [64, ?, 1, 130] 的第二个张量。请注意,tf.concat 需要匹配所有维度,除了您要连接的维度。来自tf.concat 的文档:

    输入张量的维数必须匹配,并且所有 除 concat_dim 外的尺寸必须相等。

    要沿特征维度进行广播,使用 tf.tile 而不是像您正在做的那样乘以全为张量要便宜得多。以下是您将如何使用tf.tile

    tf.concat(3, [x, tf.tile(y, [1, 1, x_shapes.as_list()[2], 1])])
    

    在您的情况下,由于y 的第三维是静态已知的,因此上述代码有效。如果不是这种情况,您可以将第二个参数设置为tf.tile,如下所示:

    tf.tile(y, tf.concat(0, [[1], [1], tf.shape(x)[2:3], [1]]))
    

    【讨论】:

    • 因为过年,回复晚了。非常感谢您的友好回复,您的回答非常有效。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2019-01-27
    • 2021-02-17
    相关资源
    最近更新 更多