dnn_train.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import keras
  2. # -*- encoding:utf-8 -*-
  3. import numpy as np
  4. from keras.models import Sequential
  5. from keras.layers import Dense,Dropout
  6. import random
  7. from keras import regularizers
  8. from keras.models import load_model
  9. from imblearn.over_sampling import RandomOverSampler
  10. def read_data(path):
  11. lines = []
  12. with open(path) as f:
  13. for x in range(30000):
  14. lines.append(eval(f.readline().strip()))
  15. random.shuffle(lines)
  16. print('读取数据完毕')
  17. d=int(0.95*len(lines))
  18. size = len(lines[0])
  19. train_x=[s[:size - 2] for s in lines[0:d]]
  20. train_y=[s[size-1] for s in lines[0:d]]
  21. test_x=[s[:size - 2] for s in lines[d:]]
  22. test_y=[s[size-1] for s in lines[d:]]
  23. print('转换数据完毕')
  24. ros = RandomOverSampler(random_state=0)
  25. X_resampled, y_resampled = ros.fit_sample(np.array(train_x), np.array(train_y))
  26. print('数据重采样完毕')
  27. return X_resampled,y_resampled,np.array(test_x),np.array(test_y)
  28. def train(input_dim=400, result_class=3, file_path="D:\\data\\quantization\\stock6.log", model_name=''):
  29. train_x,train_y,test_x,test_y=read_data(file_path)
  30. model = Sequential()
  31. model.add(Dense(units=120+input_dim, input_dim=input_dim, activation='relu'))
  32. model.add(Dense(units=120+input_dim, activation='relu',kernel_regularizer=regularizers.l2(0.001)))
  33. model.add(Dense(units=120+input_dim, activation='relu'))
  34. model.add(Dropout(0.2))
  35. model.add(Dense(units=60+input_dim, activation='selu'))
  36. model.add(Dropout(0.2))
  37. model.add(Dense(units=60+input_dim, activation='selu'))
  38. # model.add(Dropout(0.2))
  39. model.add(Dense(units=512, activation='relu'))
  40. model.add(Dense(units=result_class, activation='softmax'))
  41. model.compile(loss='categorical_crossentropy', optimizer="adam",metrics=['accuracy'])
  42. print("Starting training ")
  43. model.fit(train_x, train_y, batch_size=32, epochs=56, shuffle=True)
  44. score = model.evaluate(test_x, test_y)
  45. print(score)
  46. print('Test score:', score[0])
  47. print('Test accuracy:', score[1])
  48. model.save(model_name)
  49. model=None
  50. model=load_model(model_name)
  51. result=model.predict(test_x)
  52. print(result)
  53. print(test_y)
  54. if __name__ == '__main__':
  55. train(input_dim=86, result_class=5, file_path="D:\\data\\quantization\\stock6_5.log", model_name='5d_dnn_seq.h5')
  56. # train(input_dim=400, result_class=3, file_path="D:\\data\\quantization\\stock6.log", model_name='15m_dnn_seq.h5')