2017-01-16 89 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

對不起,因爲中國新的一年的後期答覆。非常感謝您的回覆,您的回答非常好。再次感謝! –