2017-01-16 3 views
1

Я хочу построить условную модель CNN в Tensorflow, но я встретил некоторые проблемы с ней.Как сгенерировать CNN-модель с изменяющимися кадрами в тензорном потоке?

Предположим, что существует матрица имени функции с формой [64,?, 50, 1], а другая матрица имени условия с формой [64,?, 1, 130].

Fisrt dim - размер партии, а второй dim in означает номер кадра (значение в этой тусклой двух матриц одинаково в каждой партии, но отличается в разных партиях). Третий - это размер функции, а последний тусклый - номер канала.

Я хочу Concat две матрицы, что означает, что мы можем получить матрицу с формой [64,?, 50, 131], и сделать conv2d в tensorflow.

Но проблема в том, что я не могу конкатрировать эти две матрицы из-за разницы в третьем тусклом. Затем я сделал следующее:

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] на 3-е измерение, кого вы называете измерение функции, прежде чем конкатенация. Обратите внимание: 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

Извините за поздний ответ из-за китайский Новый год. Большое спасибо за ваш добрый ответ, и ваш ответ работает очень хорошо. Еще раз спасибо! –

Смежные вопросы