Advertisement
Guest User

Untitled

a guest
May 24th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. from __future__ import print_function
  2.  
  3. import os
  4.  
  5. import ast
  6. import csv
  7.  
  8. from scipy.linalg import lstsq
  9.  
  10. import qml
  11. from qml.fchl import generate_representation
  12. from qml.fchl import get_atomic_local_kernels
  13.  
  14. np.random.seed(667)
  15.  
  16. CSV_FILE = "force_test.csv"
  17.  
  18. TRAINING = 100
  19. TEST = 101
  20.  
  21. CUT_DISTANCE = 1e6
  22. SIGMAS = [2.5]
  23. KERNEL_ARGS = {
  24. "verbose": False,
  25. "cut_distance": CUT_DISTANCE,
  26. "kernel": "gaussian",
  27. "kernel_args": {
  28. "sigma": SIGMAS,
  29. },
  30. }
  31.  
  32.  
  33. def mae(a, b):
  34.  
  35. return np.mean(np.abs(a.flatten() - b.flatten()))
  36.  
  37.  
  38. def csv_to_reps(csv_filename):
  39.  
  40. x = []
  41. e = []
  42.  
  43. with open(csv_filename, 'r') as csvfile:
  44.  
  45. df = csv.reader(csvfile, delimiter=";", quotechar='#')
  46.  
  47. for row in df:
  48.  
  49. coordinates = np.array(ast.literal_eval(row[3]))
  50. nuclear_charges = ast.literal_eval(row[8])
  51. energy = float(row[1])
  52.  
  53. rep = generate_representation(coordinates, nuclear_charges, cut_distance=CUT_DISTANCE)
  54.  
  55. x.append(rep)
  56. e.append(energy)
  57.  
  58. return np.array(x), np.array(e)
  59.  
  60.  
  61. def test_asymmetric():
  62.  
  63. Xall, Eall, = csv_to_reps(CSV_FILE)
  64.  
  65. X = Xall[:TRAINING]
  66. Xs = Xall[-TEST:]
  67.  
  68. E = Eall[:TRAINING]
  69. Es = Eall[-TEST:]
  70.  
  71. K = get_atomic_local_kernels(X, X, **KERNEL_ARGS)
  72. Ks = get_atomic_local_kernels(X, Xs, **KERNEL_ARGS)
  73.  
  74. for i, sigma in enumerate(SIGMAS):
  75.  
  76. alphas, residuals, singular_values, rank = lstsq(K[i].T, E, cond=1e-9, lapack_driver="gelsd")
  77.  
  78. # Test energy prediction
  79. Ess = np.dot(Ks[i].T, alphas)
  80.  
  81. # Training energy predictions
  82. Et = np.dot(K[i].T, alphas)
  83.  
  84. print(mae(Ess, Es))
  85. print(mae(Et, E))
  86.  
  87.  
  88. if __name__ == "__main__":
  89.  
  90. test_asymmetric()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement