import numpy as np from tensorflow.keras.callbacks import EarlyStopping from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Conv1D, MaxPooling1D, Flatten def build_cnn_network(): model = Sequential() model.add(Conv1D(32, kernel_size=5, strides=1, activation='relu', input_shape=(121, 1))) model.add(MaxPooling1D(pool_size=2, strides=2)) model.add(Conv1D(64, 5, activation='relu')) model.add(MaxPooling1D(pool_size=2)) model.add(Flatten()) model.add(Dense(1000, activation='relu')) model.add(Dense(5, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 多类的对数损失 return model def run_cnn_network(train, target, epochs): shuffle_ix = np.random.permutation(np.arange(len(train))) train_r = train[shuffle_ix] target_r = target[shuffle_ix] cnn = build_cnn_network() train_r = np.expand_dims(train_r, axis=2) early_stopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=0, mode='auto') cnn.fit(x=train_r, y=target_r, epochs=epochs, validation_split=0.1, batch_size=128, callbacks=[early_stopping]) return cnn def evaluate_cnn_network(cnn, test, test_target, flag): loss, accuracy = cnn.evaluate(np.expand_dims(test, axis=2), test_target, batch_size=None, verbose=1) # print('[-]( 测试集: ' + flag + ' ) 测试损失为:' + str(loss) + ' 准确度为:' + str(accuracy)) return loss, accuracy