Решение отредактировано и должно работать. Объяснение в чате.

лизую следующееэтот статья Мухаммеда Хаваи. Он использует следующую архитектуру:

Я изменил некоторый код изВот сделать это.

print 'Compiling two-path model...'
#local pathway
modle_l=Sequential()
modle_l.add(Convolution2D(64,7,7,
border_mode='valid',W_regularizer=l1l2(l1=0.01, l2=0.01), 
input_shape=(4,33,33)))
modle_l.add(Activation('relu'))
modle_l.add(BatchNormalization(mode=0,axis=1))
modle_l.add(MaxPooling2D(pool_size=(2,2),strides=(1,1)))
modle_l.add(Dropout(0.5))
#Add second convolution
modle_l.add(Convolution2D(64,3,3,
border_mode='valid',W_regularizer=l1l2(l1=0.01, l2=0.01), 
input_shape=(4,33,33)))
modle_l.add(BatchNormalization(mode=0,axis=1))
modle_l.add(MaxPooling2D(pool_size=(4,4), strides=(1,1)))
modle_l.add(Dropout(0.5))
#global pathway
modelg = Sequential()
modelg.add(Convolution2D(160,12,12, 
border_mode='valid', W_regularizer=l1l2(l1=0.01, l2=0.01), 
input_shape=(self.n_chan,33,33)))
modelg.add(Activation('relu'))
modelg.add(BatchNormalization(mode=0, axis=1))
modelg.add(MaxPooling2D(pool_size=(2,2), strides=(1,1)))
modelg.add(Dropout(0.5))

# merge local and global pathways
merge= Sequential()
merge.add(Merge([modle_l,modelg], mode='concat',concat_axis=1)) 
merge.add(Convolution2D(5,21,21,
border_mode='valid', 
W_regularizer=l1l2(l1=0.01, l2=0.01),   input_shape=(4,33,33)))

# Flatten output of 5x1x1 to 1x5, perform softmax
merge.add(Flatten())
merge.add(Dense(5)) 
merge.add(Activation('softmax'))
sgd = SGD(lr=0.001, decay=0.01, momentum=0.9)
merge.compile(loss='categorical_crossentropy', optimizer='sgd')

print 'Done'
return merge

Я использовал этот альтернативный подход, так как графовая модель устарела в keras 1.0. Мой вопрос: как мне тренировать модель сейчас? Я использовал это, чтобы тренироваться

merge.fit(X_train, Y_train, batch_size=self.batch_size, nb_epoch=self.n_epoch, validation_split=0.1, show_accuracy=True, verbose=1)

Если мне нужно обучить два слоя по отдельности, а затем объединить, как мне это сделать?