且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在Keras的合并层上进行培训

更新时间:2023-12-02 15:27:22

from keras.layers import *
from keras.models import Model

print 'Compiling two-path model...'

# Input of the model
input_model = Input(shape=(4,33,33))
# Local pathway
#Add first convolution
model_l = Convolution2D(64,7,7,
                            border_mode='valid', 
                            activation='relu', 
                            W_regularizer=l1l2(l1=0.01, l2=0.01))(input_model)
model_l = BatchNormalization(mode=0,axis=1)(model_l)
model_l = MaxPooling2D(pool_size=(2,2),strides=(1,1))(model_l)
model_l = Dropout(0.5)(model_l)
#Add second convolution
model_l = Convolution2D(64,3,3,
                        border_mode='valid',
                        W_regularizer=l1l2(l1=0.01, l2=0.01),
                        input_shape=(4,33,33))(model_l)
model_l = BatchNormalization(mode=0,axis=1)(model_l)
model_l = MaxPooling2D(pool_size=(4,4),strides=(1,1))(model_l)
model_l = Dropout(0.5)(model_l)

#global pathway
model_g = Convolution2D(160,12,12,
                        border_mode='valid', 
                        activation='relu',
                        W_regularizer=l1l2(l1=0.01, l2=0.01))(input_model)
model_g = BatchNormalization(mode=0,axis=1)(model_g)
model_g = MaxPooling2D(pool_size=(2,2), strides=(1,1))(model_g)
model_g = Dropout(0.5)(model_g)

# merge local and global pathways

merge = Merge(mode='concat', concat_axis=1)([model_l,model_g])
merge = Convolution2D(5,21,21,
                      border_mode='valid',
                      W_regularizer=l1l2(l1=0.01, l2=0.01))(merge)
merge = Flatten()(merge)
predictions = Dense(5, activation='softmax')(merge)

model_merged = Model(input=input_model,output=predictions)
sgd = SGD(lr=0.001, decay=0.01, momentum=0.9)
model_merged.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

print('Done')
return model_merged

这与您发布的网络等效,但由 Functional API

this is the equivalent of the network you posted but defined with the Functional API

如您所见,只有1个输入层,使用了两次.然后,您可以像说的那样训练它:

As you can see, there is only 1 Input layer, used twice. You can then train it like you said :

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

有帮助吗?