# fit and evaluate a model def fit_evaluate_model(X_train, y_train, X_test, y_test, n_kernel): 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] # create model model = Sequential() model.add(Conv1D(filters=64, kernel_size=n_kernel, activation='relu', input_shape=(n_timesteps,n_features))) model.add(Conv1D(filters=64, kernel_size=n_kernel, activation='relu')) model.add(Dropout(0.5)) model.add(MaxPooling1D(pool_size=2)) model.add(Flatten()) model.add(Dense(100, activation='relu')) model.add(Dense(n_outputs, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # fit model model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, verbose=verbose) # evaluate model _, accuracy = model.evaluate(X_test, y_test, batch_size=batch_size, verbose=verbose) return accuracy # summarize performance (accuracy, mean, sd) def performance_summary(scores, params): print(scores, params) for score in range(len(scores)): m, s = mean(scores[score]), std(scores[score]) print('Kernel=%d: %.3f%% (+/-%.3f)' % (params[score], m, s)) # boxplot of scores plt.boxplot(scores, labels=params) plt.savefig('cnn_filters.png') # run the trials def run_trials(params, repeats=5): # test each parameter all_scores = list() for param in params: scores = list() for repeat in range(repeats): score = fit_evaluate_model(X_train, y_train, X_test, y_test, param) score = score * 100.0 print('>Kernel=%d #%d: %.3f' % (param, repeat+1, score)) scores.append(score) all_scores.append(scores) performance_summary(all_scores, params) # run n_kernels = [2, 3, 5, 7, 11] run_trials(n_kernels)