Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.42 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn.datasets import make_blobs
  4. from sklearn.cluster import DBSCAN
  5. from sklearn.preprocessing import StandardScaler
  6.  
  7. X, y = make_blobs(n_samples = 300, centers=4, cluster_std=0.5, random_state=0)
  8. plt.scatter(X[:,0], X[:,1])
  9. plt.show()
  10.  
  11. scaler = StandardScaler()
  12. dbscan = DBSCAN(eps=0.5)
  13. clusters = dbscan.fit_predict(scaler.fit_transform(X))
  14.  
  15. plt.scatter(X[:,0], X[:,1], c=clusters)
  16. plt.show()
  17.  
  18. #######################################################################################
  19.  
  20. import numpy as np
  21. from matplotlib import pyplot as plt
  22.  
  23. # przewidywanie wyjścia sieci: y_pred = X * W1 * W2
  24. # neuron składa się z sumatora xi*wi oraz (zazwyczaj) funkcji aktywacji
  25. # w tym przypadku nie mamy tych funkcji, natomiast jeśli chcielibyśmy taką dodać,
  26. # to znalazłyby się po każdym zsumowaniu:
  27. #    H = np.dot(X,W1)
  28. #    H = activation(H)
  29. #    y_pred = np.dot(H,W2)
  30. #    y_pred = activation(y_pred)
  31. #    return y_pred
  32. # w tym miejscu również dokonujemy wszelkich zmian związanych ze wzorami zawartymi w poszczególnych sieciach.
  33. # jeśli np na wyjściu sieci mamy suma Wi * e^(xi-xc)/fi, to po prostu na początku robimy sobie jakiegoś temp_X,
  34. # który przyjmuje te egzotyczne wartości, np. temp_X = [math.exp((xi-xc)/fi) for xi in X], a potem już używamy
  35. # zamiast X temp_X.
  36. # wzór podany wyżej jest zupełnie przypadkowy, nie patrzyłem na to, co kmdr Praczyk ma w prezentacji. Przedstawiam
  37. # tu po prostu sposób działania.
  38. def prediction(X,W1,W2):
  39.     H = np.dot(X,W1)
  40.     y_pred = np.dot(H,W2)
  41.     return y_pred
  42.  
  43. # funkcja licząca, jak bardzo sieć się myli w stosunku do rzeczywistego wyniku
  44. def loss(y_true, y_pred):
  45.     return abs(y_pred - y_true)
  46.  
  47. def sim(X,y_true, W1,W2):
  48.     # sumujemy błąd dla wszystkich przewidywań i wszystkich wyjść z aktualnymi wagami
  49.     fi = 0
  50.     for x,y in zip(X,y_true):
  51.         temp = prediction(x,W1,W2)
  52.         fi += loss(y, temp)
  53.  
  54.     print(fi)
  55.  
  56.     for i in range(2000):
  57.         # losujemy nowe wagi
  58.         temp_W1 = np.random.random([2,3])
  59.         temp_W2 = np.random.random([3,1])
  60.  
  61.         # ponownie liczymy błąd, tym razem z nowymi wagami
  62.         fj = 0
  63.         for x,y in zip(X,y_true):
  64.             temp = prediction(x,temp_W1,temp_W2)
  65.             fj += loss(y, temp)
  66.  
  67.         # jeżeli nowe wagi wypadły lepiej, to podmieniamy stare, jeżeli nie to nic nie robimy
  68.         if fj < fi:
  69.             W1 = temp_W1
  70.             W2 = temp_W2
  71.             fi = fj
  72.             print(fi)
  73.    
  74.     return W1,W2
  75.  
  76. # wartości wejścia i oczekiwanego wyjścia
  77. X = np.array([[2, 5],[2, 11], [3, 4], [3, 3], [2, 5], [9, 8], [0, 3], [6, 1], [3, 5], [0, 9], [4, 4], [8, 2], [6, 8], [9, 3], [2, 7], [6, 5], [2, 5], [0, 7], [3, 8], [4, 8], [2, 5], [7, 3], [3, 6], [7, 3], [3, 3], [3, 0],
  78.               [3, 9], [3, 7], [6, 6], [1, 3], [2, 2], [7, 7]])
  79. y_true = np.array([7, 13, 7, 6, 7, 17, 3, 7, 8, 9, 8, 10, 14, 12, 9, 11, 7, 7, 11, 12, 7, 10, 9, 10, 6, 3, 12, 10, 12, 4, 4, 14])
  80.  
  81. #randomowe wartości wag: 2 neurony wejściowe, 3 w warstwie wewnętrznej, jeden na wyjściu
  82. W1 = np.random.random([2,3])
  83. W2 = np.random.random([3,1])
  84.  
  85. # wchodzimy z wagami do funkcji optymalizującej (np. monte carlo, symulowane wyżarzanie)
  86. W1,W2 = sim(X,y_true,W1,W2)
  87.  
  88. osx = [i for i in range(32)]
  89. osy = [prediction(x,W1,W2) for x in X]
  90.  
  91. plt.plot(osx, osy)
  92. plt.plot(osx, y_true, c='r')
  93. plt.show()
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101. #######################################################################################
  102. # jeśli wam się wywala colab to proszę zainstalujcie sobie te biblioteki
  103. # po instalacji Runtime -> Reset runtime
  104. # !pip install tensorflow==1.14.0
  105. # !pip install -U keras
  106.  
  107. import numpy as np
  108. from matplotlib import pyplot as plt
  109. import keras
  110. from keras.models import Sequential
  111. from keras.layers import Dense
  112. from keras.optimizers import RMSprop
  113.  
  114. # wartości wejścia i wyjścia
  115. X = np.array([[2, 5],[2, 11], [3, 4], [3, 3], [2, 5], [9, 8], [0, 3], [6, 1], [3, 5], [0, 9], [4, 4], [8, 2], [6, 8], [9, 3], [2, 7], [6, 5], [2, 5], [0, 7], [3, 8], [4, 8], [2, 5], [7, 3], [3, 6], [7, 3], [3, 3], [3, 0],
  116.               [3, 9], [3, 7], [6, 6], [1, 3], [2, 2], [7, 7]])
  117. y_true = np.array([7, 13, 7, 6, 7, 17, 3, 7, 8, 9, 8, 10, 14, 12, 9, 11, 7, 7, 11, 12, 7, 10, 9, 10, 6, 3, 12, 10, 12, 4, 4, 14])
  118.  
  119. # klasa tworząca pustą sieć
  120. model = Sequential()
  121. # dodawanie kolejnych warstw (poza wejściową, która jest określona w INPUT_SHAPE)
  122. # tutaj dodajemy jedną warstwę ukrytą z 3 neuronami i jedna wyjściową z jednym
  123. # nie dodajemy żadnych funkcji aktywacji ze względu na zakres oczekiwanych wyjść sieci
  124. # ale istnieje taka opcja za pomocą dodania w argumencie activation='relu/softmax/sigmoid/tanh'
  125. model.add(Dense(units=3, input_shape=(2,)))
  126. model.add(Dense(units=1))
  127.  
  128. # podsumowanie sieci
  129. print(model.summary())
  130.  
  131. # kompilacja sieci - określenie przebiegu uczenia
  132. model.compile(optimizer=RMSprop(), loss='binary_crossentropy', metrics=['accuracy'])
  133.  
  134. # batch size - co ile sprawdzana jest dokładność działania sieci
  135. # epochs - liczba iteracji (ile razy przechodzimy przez cały zbiór uczący)
  136. history = model.fit(X,y_true,batch_size=2, epochs=10)
  137.  
  138. # tu możemy wyświetlić informacje na temat argumentów, które uwzględniliśmy przy kompilacji
  139. # tj. loss i accuracy
  140. print(history.history)
  141.  
  142. y_pred = model.predict(X)
  143. osx = [i for i in range(32)]
  144.  
  145. plt.plot(osx, y_pred)
  146. plt.plot(osx, y_true, c='r')
  147. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement