如何在张量流中更改帧来生成CNN模型?

时间:2017-01-16 08:33:09

标签: python tensorflow

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

假设有一个名为 要素 的矩阵,其形状为[64,?,50,1],另一个矩阵为 条件 形状[64,?,1,130]。

fisrt dim是批量大小,第二个dim是指帧号(两个矩阵的这个dim中的值在每个批次中是相同的,但在不同批次中是不同的)。第三个是特征维度,最后一个暗淡是通道号。

我想连接两个矩阵,这意味着我们可以得到一个形状为[64,?,50,131]的矩阵,并在张量流中做 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]])])

但它不起作用,因为第二个昏暗不知道。

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

由于

1 个答案:

答案 0 :(得分:0)

虽然您的问题并不清楚,但在连接之前,您似乎想在第三维上广播第二个张量,其形状为[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]]))