Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # !pip install tensorflow==1.14.0
- # !pip install -U keras
- import numpy as np
- import keras
- import matplotlib.pyplot as plt
- from keras.datasets import mnist
- from keras.models import Sequential
- from keras.layers import Dense, Activation
- from keras.optimizers import RMSprop
- # ściągamy z mnista dwie tuple danych
- (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
- # sprawdzamy wymiary
- print(x_train.shape)
- print(y_train.shape)
- print(x_test.shape)
- print(y_test.shape)
- # zmiana wymiarów, spłaszczenie obrazów 28x28 na wejście 784 neuronów
- x_train = x_train.reshape(60000,28*28)
- x_test = x_test.reshape(10000,28*28)
- # zmiana typu
- x_train = x_train.astype('float32')
- x_test = x_test.astype('float32')
- # znormalizowanie do wartości z zakresu [0,1]
- x_train /= 255
- x_test /= 255
- # zmiana formy zapisu wyjścia sieci z np. 7 na [0,0,0,0,0,0,0,7,0,0]
- y_train = keras.utils.to_categorical(y_train, num_classes=10)
- y_test = keras.utils.to_categorical(y_test, num_classes=10)
- # budowanie sieci
- # 1 warstwa wejściowa, 3 warstwy ukryte, 1 wyjściowa z 10 neuronami stanowiącymi klasy
- # w środku korzystamy z aktywacji binarnych, jest to przydatne przy problemach binarnych - wtedy
- # możemy dać tak również w warstwie wyjściowej
- # skoro jednak chcemy klasyfikować, to dajemy softmax
- model = Sequential()
- model.add(Dense(units=256, activation='sigmoid', input_shape=(28*28,)))
- model.add(Dense(units=64, activation='relu'))
- model.add(Dense(units=32, activation='tanh'))
- model.add(Dense(units=10, activation='softmax'))
- # zamiast binary(...) dajemy categorical_crossentropy
- model.compile(optimizer=RMSprop(), loss='categorical_crossentropy')
- # wypisujemy podsumowanie sieci, pokaże nam ile mamy parametrów etc.
- print(model.summary())
- # w stosunku do poprzedniej sieci dodany został tu argument validation_data
- # sieć po każdej epoce nauczania sprawdza na tych danych, jak dobrze się nauczył odgadywać obrazy,
- # których nigdy nie widział
- h = model.fit(x_train, y_train, batch_size=30, epochs=20, validation_data=(x_test,y_test))
- # z historii możemy wyciągnąć wartości funkcji straty po każdej epoce
- print(h.history)
- plt.plot(h.history['loss'])
- plt.plot(h.history['val_loss'], c='r')
- # a tu na dole mamy wypisywanie w jednej linijce kolejnych obrazków
- img_height = 28
- img_width = 28
- num = 10
- plt.figure(figsize=(img_height, img_width))
- predicts = np.empty(10)
- for i in range(1, num+1):
- plt.subplot(img_height, img_width, i),
- plt.axis('off')
- img = x_test[i-1].reshape(28,28)
- plt.imshow(img, cmap='Greys')
- # i tu mamy tego reshape'a którego nie jestem w stanie zrozumieć
- predicts[i-1] = model.predict_classes(x_test[i-1].reshape(1,-1))
- plt.show()
- print(predicts)
- # Cyprian, nie narzekaj - jak będziesz umiał napisać coś takiego i to wszystko z poprzednich zajęć,
- # to jutrzejsze przykłady ogarniesz w 15 minut
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement