6

Yeni tercih ettiğim Keras'ı kullanma hakkında bir sorum var. Sonuçlarını çıktımı üreten standart bir perceptron katmanına besleyen bir konvolüsyonel sinir ağı kullanıyorum. Bu CNN bir dizi görüntü ile besleniyor. Bu şimdiye kadar oldukça normal.Keras: Doğrudan sinir ağının diğer gizli katmanlarına girdi nasıl girilir?

Artık tüm CNN katmanlarından göndermeden kısa bir görüntü olmayan giriş vektörünü doğrudan son perceptron katmanına iletmeyi seviyorum. Keras'ta bu nasıl yapılabilir?

Benim kod şöyle görünür:

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

Herhangi cevaplar büyük takdir, teşekkürler!

cevap

3

aşağıdakileri yapabilirsiniz, sizin keras en arka uç Theano olması şartıyla:

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

teşekkürler. Bence şimdi kavramı anlıyorum. –

5

Sen kullandığınız modelin hangi tür göstermedi, ama sıralı olarak modelinizi başlatıldı varsayarak yaşıyorum . Sıralı bir modelde sadece bir katmanı birbiri ardına istifleyebilirsiniz - böylece "kısa yol" bağlantısı eklemek mümkün değildir. Bu nedenle Keras'ın yazarları "grafik" modelleri oluşturma seçeneğini ekledi. Bu durumda hesaplarınızın bir grafiğini (DAG) oluşturabilirsiniz. Bir yığın katmanı tasarlamaktan daha karmaşık ama yine de oldukça kolay. dokümantasyon sitesi Daha fazla detay için aramaya

Kontrol: http://keras.io/models/#using-the-graph-model

+0

Oh, anlıyorum. Evet, gerçekten 'sıralı' bir kurulum kullandım. Yardımınız ve bağlantınız için teşekkürler! –

0

cevap here eser daha yüksek düzeyde olduğu ve tensorflow arka uç için de çalışır: Yardımlarınız, Serj için

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)