You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

training.py 3.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import tensorflow as tf
  2. from matplotlib import pyplot as plt
  3. import numpy as np
  4. from Model import MyModel
  5. import optuna
  6. def objectif(trial) :
  7. LEN_SEQ = trial.suggest_int('len_seq', 64,256)
  8. PRED = 0.1
  9. HIDDEN = trial.suggest_int('hidden',32,256)
  10. model = MyModel(HIDDEN)
  11. dataset = np.load('dataset.npy')
  12. scale = (np.max(dataset) - np.min(dataset))
  13. data = dataset/scale
  14. shift = np.min(data)
  15. data = data - shift
  16. annee = np.array(list(range(len(data))))/365
  17. annee = annee - annee[-1]
  18. start_pred = int(len(data)*(1-PRED))
  19. #print(len(data))
  20. #print(start_pred)
  21. plt.figure(1)
  22. plt.plot(annee[:start_pred],data[:start_pred], label="apprentissage")
  23. plt.plot(annee[start_pred:],data[start_pred:], label="validation")
  24. plt.legend()
  25. #plt.show()
  26. X_train_tot = [data[0:start_pred-1]]
  27. Y_train_tot = [data[1:start_pred]]
  28. X_train_tot = np.expand_dims(np.array(X_train_tot),2)
  29. Y_train_tot = np.expand_dims(np.array(Y_train_tot),2)
  30. X_train = X_train_tot[:,:LEN_SEQ,:]
  31. Y_train = Y_train_tot[:,:LEN_SEQ,:]
  32. for i in range(len(X_train_tot[0]) - LEN_SEQ) :
  33. X_train = np.concatenate((X_train, X_train_tot[:,i:i+LEN_SEQ,:]),0)
  34. Y_train = np.concatenate((Y_train, Y_train_tot[:,i:i+LEN_SEQ,:]),0)
  35. #print(X_train_tot.shape)
  36. #print(X_train.shape)
  37. model.compile(optimizer='adam',
  38. loss='binary_crossentropy',
  39. metrics=['binary_crossentropy','mse'])
  40. import os
  41. os.system("rm -rf log_dir")
  42. model.fit(x=X_train, y=Y_train, batch_size=16, epochs=5, shuffle=True)
  43. Pred = X_train_tot.copy()
  44. while len(Pred[0]) < len(data)+500 :
  45. print(len(data) - len(Pred[0]))
  46. Pred = np.concatenate((Pred, np.array([[model.predict(Pred)[0][-1]]])),1)
  47. Pred = Pred + shift
  48. Pred = Pred * scale
  49. data_Pred = np.squeeze(Pred)
  50. plt.figure(2)
  51. plt.clf()
  52. plt.plot(annee[:start_pred],dataset[:start_pred], label="apprentissage")
  53. plt.plot(annee[start_pred:],dataset[start_pred:], label="validation")
  54. plt.plot(annee[start_pred:], data_Pred[start_pred:len(annee)], label="prediction")
  55. plt.legend()
  56. plt.savefig(f"images/{LEN_SEQ}_{HIDDEN}_fig2.png")
  57. plt.figure(3)
  58. plt.clf()
  59. fig, axs = plt.subplots(2)
  60. axs[0].plot(annee[:start_pred],dataset[:start_pred], label="apprentissage")
  61. axs[0].plot(annee[start_pred:],dataset[start_pred:], label="validation")
  62. axs[1].plot(annee[:start_pred],dataset[:start_pred], label="données")
  63. axs[1].plot(annee[start_pred:], data_Pred[start_pred:len(annee)], label="prediction")
  64. plt.legend()
  65. plt.savefig(f"images/{LEN_SEQ}_{HIDDEN}_fig3.png")
  66. annee_ex = np.array(list(range(len(data_Pred))))/365
  67. annee_ex = annee_ex + annee[0]
  68. plt.figure(4)
  69. plt.clf()
  70. plt.plot(annee[:start_pred],dataset[:start_pred], label="données")
  71. plt.plot(annee_ex[start_pred:], data_Pred[start_pred:], label="prediction")
  72. plt.legend()
  73. plt.savefig(f"images/{LEN_SEQ}_{HIDDEN}_fig4.png")
  74. loss = np.linalg.norm(dataset[start_pred:] - data_Pred[start_pred:len(dataset)])/(np.max(data_Pred[start_pred:]) - np.min(data_Pred[start_pred:]))
  75. print(loss*100)
  76. return loss
  77. #plt.show()
  78. study = optuna.create_study()
  79. study.optimize(objectif, n_trials=10)