6

У меня вопрос об использовании Keras, к которому я отношусь скорее к новым. Я использую сверточную нейронную сеть, которая передает свои результаты в стандартный уровень персептрона, который генерирует мой вывод. Этот CNN снабжается серией изображений. Это довольно нормально.Keras: Как подать вход непосредственно в другие скрытые слои нейронной сети, чем в первом?

Теперь я хотел бы передать короткий входной вектор без изображения непосредственно в последний слой персептрона, не отправив его через все слои CNN. Как это можно сделать в Keras?

Мой код выглядит следующим образом:

# last CNN layer before perceptron layer 
model.add(Convolution2D(200, 2, 2, border_mode='same')) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 
model.add(Dropout(0.25)) 

# perceptron layer 
model.add(Flatten()) 

# here I like to add to the input from the CNN an additional vector directly 

model.add(Dense(1500, W_regularizer=l2(1e-3))) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 

Любые ответы высоко оценили, спасибо!

ответ

3

условия бэкенд вашего Keras является Theano, вы можете сделать следующее:

import theano 
import numpy as np 

d = Dense(1500, W_regularizer=l2(1e-3), activation='relu') # I've joined activation and dense layers, based on assumption you might be interested in post-activation values 
model.add(d) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 

c = theano.function([d.get_input(train=False)], d.get_output(train=False)) 
layer_input_data = np.random.random((1,20000)).astype('float32') # refer to d.input_shape to get proper dimensions of layer's input, in my case it was (None, 20000) 
o = c(layer_input_data) 
+0

Спасибо за вашу помощь, Serj. Думаю, теперь я понимаю концепцию. –

5

Вы не показать, какой вид модели вы используете, но я предполагаю, что вы инициализирована модель, как последовательные , В последовательной модели вы можете складывать только один слой за другим, поэтому добавление «короткого вырезания» соединения невозможно.

По этой причине авторы Keras добавили возможность создания «графических» моделей. В этом случае вы можете построить график (DAG) ваших вычислений. Это сложнее, чем создавать стек слоев, но все же довольно легко.

Проверьте сайт документации искать более подробную информацию: http://keras.io/models/#using-the-graph-model

+0

О, я вижу. Да, я действительно использовал «последовательную» настройку. Спасибо за вашу помощь и ссылку! –

0

Ответ here работы более высокий уровень и работает также для tensorflow бэкэндом:

input_1 = Input(input_shape) 
input_2 = Input(input_shape) 

merge = merge([input_1, input_2], mode="concat") # could also to "sum", "dot", etc. 
hidden = Dense(hidden_dims)(merge) 
classify = Dense(output_dims, activation="softmax")(hidden) 

model = Model(input=[input_1, input_2], output=hidden) 

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

  • Нет связанных вопросов^_^