CNNetwork.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import numpy as np
  2. from tensorflow.keras.callbacks import EarlyStopping
  3. from tensorflow.keras.models import Sequential
  4. from tensorflow.keras.layers import Dense, Conv1D, MaxPooling1D, Flatten
  5. def build_cnn_network():
  6. model = Sequential()
  7. model.add(Conv1D(32, kernel_size=5, strides=1,
  8. activation='relu',
  9. input_shape=(121, 1)))
  10. model.add(MaxPooling1D(pool_size=2, strides=2))
  11. model.add(Conv1D(64, 5, activation='relu'))
  12. model.add(MaxPooling1D(pool_size=2))
  13. model.add(Flatten())
  14. model.add(Dense(1000, activation='relu'))
  15. model.add(Dense(5, activation='softmax'))
  16. model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 多类的对数损失
  17. return model
  18. def run_cnn_network(train, target, epochs):
  19. shuffle_ix = np.random.permutation(np.arange(len(train)))
  20. train_r = train[shuffle_ix]
  21. target_r = target[shuffle_ix]
  22. cnn = build_cnn_network()
  23. train_r = np.expand_dims(train_r, axis=2)
  24. early_stopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=0, mode='auto')
  25. cnn.fit(x=train_r, y=target_r, epochs=epochs, validation_split=0.1, batch_size=128, callbacks=[early_stopping])
  26. return cnn
  27. def evaluate_cnn_network(cnn, test, test_target, flag):
  28. loss, accuracy = cnn.evaluate(np.expand_dims(test, axis=2), test_target, batch_size=None, verbose=1)
  29. # print('[-]( 测试集: ' + flag + ' ) 测试损失为:' + str(loss) + ' 准确度为:' + str(accuracy))
  30. return loss, accuracy