Ich implementiere folgende this Papier von Mohammad Havaei. Es nutzt folgende Architektur:Training auf der vereinigten Schicht in Keras
ich einige Code von here geändert haben, dies zu tun.
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
Ich habe diesen alternativen Ansatz als Graph Modell in keras 1.0 Meine Frage ist veraltet ist, wie ich trainiere jetzt das Modell? Ich habe diese
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)
Bei trainieren verwende ich brauche separat zwei Schichten zu trainieren und dann verschmelzen, wie kann ich das tun?
Nur eine Verbesserung, die API von Funcional ersetzt die Graph API und ist viel einfacher zu benutzen, speziell für diese Art von Modellen. –
In der Tat würde ich Ihnen auch raten, für die Functional API zu gehen. Es ist viel flexibler. Ansonsten denke ich, dass Sie beide Modelle trainieren sollten. –