model_keras_base.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # -*- coding: UTF-8 -*-
  2. from keras.layers import Input, Dense, LSTM, concatenate, Conv1D, Conv2D, MaxPooling1D, Reshape, Flatten
  3. from keras.models import Model, load_model
  4. from keras.callbacks import ModelCheckpoint, EarlyStopping
  5. from keras import optimizers
  6. from keras.callbacks import TensorBoard
  7. import matplotlib.pyplot as plt
  8. import numpy as np
  9. from keras.callbacks import TensorBoard, EarlyStopping
  10. # model_history = model.fit_generator(train_generator, epochs=30, validation_data=evaluate_generator,
  11. # callbacks=[early_stopping, tbCallBack])
  12. def get_keras_model(opt):
  13. lstm_input = Input(shape=(opt.Model['time_step'], opt.input_size_lstm))
  14. lstm = lstm_input
  15. for i in range(opt.Model['lstm_layers']):
  16. rs = True
  17. if i == opt.Model['lstm_layers']-1:
  18. rs = False
  19. lstm = LSTM(units=opt.Model['hidden_size'], return_sequences=rs)(lstm)
  20. lstm = Dense(16)(lstm)
  21. # lstm = Flatten()(lstm)
  22. # lstm = concatenate([lstm, cnn])
  23. # lstm = Dense(16)(lstm)
  24. # lstm = Flatten()(lstm)
  25. # output = Dense(opt.output_size)(lstm)
  26. model = Model(lstm_input, lstm)
  27. adam = optimizers.adam(lr=0.01, beta_1=0.9, beta_2=0.999, epsilon=1e-7, amsgrad=True)
  28. model.compile(loss='mse', optimizer='adam')
  29. return model
  30. def train_init(use_cuda=False):
  31. import tensorflow as tf
  32. from keras.backend.tensorflow_backend import set_session
  33. if use_cuda:
  34. # gpu init
  35. sess_config = tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)
  36. sess_config.gpu_options.per_process_gpu_memory_fraction = 0.7 # 最多使用70%GPU内存
  37. sess_config.gpu_options.allow_growth=True # 初始化时不全部占满GPU显存, 按需分配
  38. sess = tf.Session(config=sess_config)
  39. set_session(sess)
  40. else:
  41. session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
  42. tf.set_random_seed(1234)
  43. sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)
  44. set_session(sess)
  45. def train(opt, train_and_valid_data):
  46. train_init(opt.use_cuda)
  47. train_X, train_Y, valid_X, valid_Y = train_and_valid_data
  48. print("----------", np.array(train_X[0]).shape)
  49. print("++++++++++", np.array(train_X[1]).shape)
  50. model = get_keras_model(opt)
  51. model.summary()
  52. weight_lstm_1, bias_lstm_1 = model.get_layer('dense_1').get_weights()
  53. print("weight_lstm_1 = ", weight_lstm_1)
  54. print("bias_lstm_1 = ", bias_lstm_1)
  55. if opt.add_train:
  56. model.load_weights(opt.model_save_path + 'model_kerass.h5')
  57. check_point = ModelCheckpoint(filepath=opt.model_save_path + opt.save_name, monitor='val_loss',
  58. save_best_only=True, mode='auto')
  59. early_stop = EarlyStopping(monitor='val_loss', patience=opt.Model['patience'], mode='auto')
  60. history = model.fit(train_X, train_Y, batch_size=opt.Model['batch_size'], epochs=opt.Model['epoch'], verbose=2,
  61. validation_data=(valid_X, valid_Y), callbacks=[check_point, early_stop])
  62. # acc = history.history['acc']
  63. loss = history.history['loss']
  64. epochs = range(1, len(loss) + 1)
  65. plt.title('Loss')
  66. # plt.plot(epochs, acc, 'red', label='Training acc')
  67. plt.plot(epochs, loss, 'blue', label='Validation loss')
  68. plt.legend()
  69. # plt.show()
  70. def predict(config, test_X):
  71. model = get_keras_model(config)
  72. model.load_weights(config.model_save_path + config.save_name)
  73. result = model.predict(test_X, batch_size=1)
  74. # result = result.reshape((-1, config.output_size))
  75. return result
  76. def predict_cls(config, test_X, df_Y):
  77. results, results1, results2, results3, results4 = [], [], [], [], []
  78. dfy1, dfy2, dfy3, dfy4 = [], [], [],[]
  79. model = get_keras_model(config)
  80. model1 = get_keras_model(config)
  81. for i, X in enumerate(zip(test_X[0], test_X[1])):
  82. X = [np.array([X[0]]), np.array([X[1]])]
  83. # X = np.array([X[1]])
  84. print("label=", df_Y[i]['label'][0])
  85. if df_Y[i]['label'][0] == 1:
  86. model1.load_weights('./checkpoint/model_keras.h5/' + 'model_keras1.h5')
  87. result = model1.predict(X, batch_size=1)
  88. results1.append(result[0])
  89. results.append(result[0])
  90. dfy1.append(df_Y[i])
  91. elif df_Y[i]['label'][0] == 2:
  92. model.load_weights('./checkpoint/model_keras.h5/' + 'model_keras2.h5')
  93. result = model.predict(X, batch_size=1)
  94. results2.append(result[0])
  95. results.append(result[0])
  96. dfy2.append(df_Y[i])
  97. elif df_Y[i]['label'][0] == 3:
  98. model.load_weights('./checkpoint/model_keras.h5/' + 'model_keras3.h5')
  99. result = model.predict(X, batch_size=1)
  100. results3.append(result[0])
  101. results.append(result[0])
  102. dfy3.append(df_Y[i])
  103. elif df_Y[i]['label'][0] == 4:
  104. model.load_weights('./checkpoint/model_keras.h5/' + 'model_keras4.h5')
  105. result = model.predict(X, batch_size=1)
  106. results4.append(result[0])
  107. results.append(result[0])
  108. dfy4.append(df_Y[i])
  109. # result = result.reshape((-1, config.output_size))
  110. return np.array(results), np.array(results1), np.array(results2), np.array(results3), np.array(results4), dfy1, dfy2, dfy3, dfy4