Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.90 KB | None | 0 0
  1. # !pip install tensorflow==1.14.0
  2. # !pip install -U keras
  3.  
  4. import numpy as np
  5. import keras
  6. import matplotlib.pyplot as plt
  7. from keras.datasets import mnist
  8. from keras.models import Sequential
  9. from keras.layers import Dense, Activation
  10. from keras.optimizers import RMSprop
  11.  
  12. # ściągamy z mnista dwie tuple danych
  13. (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
  14.  
  15. # sprawdzamy wymiary
  16. print(x_train.shape)
  17. print(y_train.shape)
  18. print(x_test.shape)
  19. print(y_test.shape)
  20.  
  21. # zmiana wymiarów, spłaszczenie obrazów 28x28 na wejście 784 neuronów
  22. x_train = x_train.reshape(60000,28*28)
  23. x_test = x_test.reshape(10000,28*28)
  24.  
  25. # zmiana typu
  26. x_train = x_train.astype('float32')
  27. x_test = x_test.astype('float32')
  28.  
  29. # znormalizowanie do wartości z zakresu [0,1]
  30. x_train /= 255
  31. x_test /= 255
  32.  
  33. # zmiana formy zapisu wyjścia sieci z np. 7 na [0,0,0,0,0,0,0,7,0,0]
  34. y_train = keras.utils.to_categorical(y_train, num_classes=10)
  35. y_test = keras.utils.to_categorical(y_test, num_classes=10)
  36.  
  37. # budowanie sieci
  38. # 1 warstwa wejściowa, 3 warstwy ukryte, 1 wyjściowa z 10 neuronami stanowiącymi klasy
  39. # w środku korzystamy z aktywacji binarnych, jest to przydatne przy problemach binarnych - wtedy
  40. # możemy dać tak również w warstwie wyjściowej
  41. # skoro jednak chcemy klasyfikować, to dajemy softmax
  42. model = Sequential()
  43. model.add(Dense(units=256, activation='sigmoid', input_shape=(28*28,)))
  44. model.add(Dense(units=64, activation='relu'))
  45. model.add(Dense(units=32, activation='tanh'))
  46. model.add(Dense(units=10, activation='softmax'))
  47.  
  48. # zamiast binary(...) dajemy categorical_crossentropy
  49. model.compile(optimizer=RMSprop(), loss='categorical_crossentropy')
  50.  
  51. # wypisujemy podsumowanie sieci, pokaże nam ile mamy parametrów etc.
  52. print(model.summary())
  53.  
  54. # w stosunku do poprzedniej sieci dodany został tu argument validation_data
  55. # sieć po każdej epoce nauczania sprawdza na tych danych, jak dobrze się nauczył odgadywać obrazy,
  56. # których nigdy nie widział
  57. h = model.fit(x_train, y_train, batch_size=30, epochs=20, validation_data=(x_test,y_test))
  58.  
  59. # z historii możemy wyciągnąć wartości funkcji straty po każdej epoce
  60. print(h.history)
  61. plt.plot(h.history['loss'])
  62. plt.plot(h.history['val_loss'], c='r')
  63.  
  64. # a tu na dole mamy wypisywanie w jednej linijce kolejnych obrazków
  65. img_height = 28
  66. img_width = 28
  67. num = 10
  68.  
  69. plt.figure(figsize=(img_height, img_width))
  70.  
  71. predicts = np.empty(10)
  72. for i in range(1, num+1):
  73.     plt.subplot(img_height, img_width, i),
  74.     plt.axis('off')
  75.     img = x_test[i-1].reshape(28,28)
  76.     plt.imshow(img, cmap='Greys')
  77.     # i tu mamy tego reshape'a którego nie jestem w stanie zrozumieć
  78.     predicts[i-1] = model.predict_classes(x_test[i-1].reshape(1,-1))
  79. plt.show()
  80.  
  81. print(predicts)
  82. # Cyprian, nie narzekaj - jak będziesz umiał napisać coś takiego i to wszystko z poprzednich zajęć,
  83. # to jutrzejsze przykłady ogarniesz w 15 minut
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement