# fit and evaluate a model def fit_evaluate_model(X_train, y_train, X_test, y_test): # build the model verbose, epochs, batch_size = 0, 10, 32 n_timesteps, n_features, n_outputs = X_train.shape[1], X_train.shape[2], y_train.shape[1] # input head 1 inputs1 = Input(shape=(n_timesteps,n_features)) conv1 = Conv1D(filters=256, kernel_size=2, activation='relu')(inputs1) drop1 = Dropout(0.5)(conv1) pool1 = MaxPooling1D(pool_size=2)(drop1) flat1 = Flatten()(pool1) # input head 2 inputs2 = Input(shape=(n_timesteps,n_features)) conv2 = Conv1D(filters=128, kernel_size=3, activation='relu')(inputs2) drop2 = Dropout(0.3)(conv2) pool2 = MaxPooling1D(pool_size=2)(drop2) flat2 = Flatten()(pool2) # input head 3 inputs3 = Input(shape=(n_timesteps,n_features)) conv3 = Conv1D(filters=64, kernel_size=5, activation='relu')(inputs3) drop3 = Dropout(0.1)(conv3) pool3 = MaxPooling1D(pool_size=2)(drop3) flat3 = Flatten()(pool3) # concatenate merged = concatenate([flat1, flat2, flat3]) # interpretation dense1 = Dense(100, activation='relu')(merged) outputs = Dense(n_outputs, activation='softmax')(dense1) model = Model(inputs=[inputs1, inputs2, inputs3], outputs=outputs) # save a plot of the model plot_model(model, show_shapes=True, to_file='multichannel.png') model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # fit network model.fit([X_train,X_train,X_train], y_train, epochs=epochs, batch_size=batch_size, verbose=verbose) # evaluate model _, accuracy = model.evaluate([X_test,X_test,X_test], y_test, batch_size=batch_size, verbose=verbose) return accuracy # summarize performance (accuracy, mean, sd) def performance_summary(scores): print(scores) m, s = mean(scores), std(scores) print('Accuracy: %.3f%% (+/-%.3f)' % (m, s)) # run the trials def run_trials(repeats=5): # repeat experiment scores = list() for repeat in range(repeats): score = fit_evaluate_model(X_train, y_train, X_test, y_test) score = score * 100.0 print('>#%d: %.3f' % (repeat+1, score)) scores.append(score) # performance summary performance_summary(scores) # run run_trials()