def build_3dcnn_model(self, fusion_type, Fusion): if len(Fusion[0]) == 1: input_shape = (32, 32, len(Fusion)) model_in, model = self.cnn_2D(input_shape) else: input_shape = (32, 32, 5, len(Fusion)) model_in, model = self.cnn_3D(input_shape) model = Dropout(0.5)(model) model = Dense(32, activation='relu', name='fc2')(model) model = Dense(self.config.classes, activation='softmax', name='fc3')(model) model = Model(input=model_in, output=model) # 统计参数 # model.summary() plot_model(model, to_file='experiments/img/' + str(Fusion) + fusion_type + r'_model.png', show_shapes=True) print ' Saving model Architecture' adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8) # model.compile(optimizer=adam, loss=self.mycrossentropy, metrics=['accuracy']) #有改善,但不稳定 model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy']) return model
jaw = Dropout(rate=0.2)(jaw) jaw = Flatten()(jaw) jaw = Dense(32, activation='relu')(jaw) jaw = Dense(32, activation='relu')(jaw) jaw = Dense(7, activation='softmax')(jaw) jaw = Model(inputs, jaw)''' import csv import keras if mode == "train": es_callback = keras.callbacks.EarlyStopping(monitor='val_loss', patience=3) #we need only one ytrain and ytest so we must to organise our dataset jaw.compile(loss='categorical_crossentropy', optimizer=keras.optimizers.Adam(lr=0.00001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=1e-6, amsgrad=False), metrics=['acc']) history = jaw.fit(xtrain7, ytrain7, callbacks=[es_callback], validation_data=(xtest7, ytest7), epochs=200, batch_size=16) #on plot les resultats pour vérifier les performances du réseau acc = history.history['acc'] val_acc = history.history['val_acc'] loss = history.history['loss'] val_loss = history.history['val_loss']
)''' print('---------------------{}'.format(xtest5.shape)) print('---------------------{}'.format(xtest7.shape)) #we need only one ytrain and ytest so we must to organise our dataset model.compile(loss='categorical_crossentropy', optimizer=optimizers.RMSprop(lr=1e-4), metrics=['acc']) history1 = model.fit( [xtrain1, xtrain2, xtrain3, xtrain4, xtrain5, xtrain6, xtrain7], ytrain, validation_data=([xtest1, xtest2, xtest3, xtest4, xtest5, xtest6, xtest7], ytest), epochs=2000, batch_size=2) '''mouth.compile(loss='categorical_crossentropy', optimizer=optimizers.RMSprop(lr=1e-4), metrics=['acc']) history1 = mouth.fit_generator(datagen.flow(xtrain5, ytrain5, batch_size=2), epochs=25, validation_data=(xtest5, ytest5), steps_per_epoch=xtrain5.shape[0]//2) jaw.compile(loss='categorical_crossentropy', optimizer=optimizers.RMSprop(lr=1e-4), metrics=['acc']) history2 = jaw.fit_generator(datagen.flow(xtrain7, ytrain7, batch_size=2), epochs=25, validation_data=(xtest7, ytest7), steps_per_epoch=xtrain7.shape[0]//2) ''' '''###########################################Model Final result = jaw*0.6 + mouth*0.4 model_final_dense_1 = Dense(7, activation='softmax')