2017-01-16 88 views
1

我想在Tensorflow中建立一个有条件的CNN模型,但是我遇到了一些麻烦。如何用张量流改变帧来生成CNN模型?

假设有一个名为矩阵特征具有形状[64,...,50,1]和命名条件具有形状的另一矩阵[64,...,1,130]。

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

我想Concat的两个矩阵,这意味着我们可以得到一个矩阵形状[64?,50,131],并做conv2d在tensorflow

但问题是,我不能concat这两个矩阵,因为在第三个昏暗的差异。然后我做了如下:

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]])]) 

但它不工作,因为第二个昏暗是未知的。

我不知道有什么办法可以解决这个问题吗?

感谢

回答

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]])) 
+0

对不起,因为中国新的一年的后期答复。非常感谢您的回复,您的回答非常好。再次感谢! –