SHOW:
|
|
- or go back to the newest paste.
| 1 | - | #В модель из предыдущего урока добавьте MaxPooling размером 2x2 после свёрточных слоёв. Вызовите функцию summary(), чтобы посмотреть на изменение количества параметров сети. |
| 1 | + | '''Постройте архитектуру LeNet, изучив её описание в формате функции summary(): |
| 2 | - | #Убедитесь, что код рабочий. Для этого запустите обучение на одном объекте (уже в прекоде). |
| 2 | + | Model: "sequential" |
| 3 | _________________________________________________________________ | |
| 4 | Layer (type) Output Shape Param # | |
| 5 | - | from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPooling2D |
| 5 | + | ================================================================= |
| 6 | conv2d (Conv2D) (None, 28, 28, 6) 156 | |
| 7 | _________________________________________________________________ | |
| 8 | average_pooling2d (AveragePo (None, 14, 14, 6) 0 | |
| 9 | _________________________________________________________________ | |
| 10 | conv2d_1 (Conv2D) (None, 10, 10, 16) 2416 | |
| 11 | _________________________________________________________________ | |
| 12 | average_pooling2d_1 (Average (None, 5, 5, 16) 0 | |
| 13 | _________________________________________________________________ | |
| 14 | flatten (Flatten) (None, 400) 0 | |
| 15 | _________________________________________________________________ | |
| 16 | dense (Dense) (None, 120) 48120 | |
| 17 | _________________________________________________________________ | |
| 18 | dense_1 (Dense) (None, 84) 10164 | |
| 19 | - | model.add(Conv2D(filters=4, kernel_size=(3, 3), padding='same', |
| 19 | + | _________________________________________________________________ |
| 20 | - | activation="relu", input_shape=(28, 28, 1))) |
| 20 | + | dense_2 (Dense) (None, 10) 850 |
| 21 | - | model.add(Conv2D(filters=4, kernel_size=(3, 3), strides=2, padding='same', |
| 21 | + | ================================================================= |
| 22 | - | activation="relu")) |
| 22 | + | Функция активации во всех слоях, кроме последнего, — гиперболический тангенс (англ. hyperbolic tangent). Сети с такой активацией обучаются лучше сетей с сигмоидой. Превзойти 'tanh' может только ReLU, но на момент разработки LeNet она ещё не применялась. |
| 23 | Вызовите функцию summary(). Запустите обучение на одном объекте, чтобы убедиться в работоспособности кода (уже в прекоде). | |
| 24 | - | model.add(MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid')) |
| 24 | + | ''' |
| 25 | ||
| 26 | from tensorflow.keras import Sequential | |
| 27 | from tensorflow.keras.layers import Conv2D, Flatten, Dense, AvgPool2D | |
| 28 | import matplotlib.pyplot as plt | |
| 29 | import numpy as np | |
| 30 | ||
| 31 | ||
| 32 | features_train = np.load('/datasets/fashion_mnist/train_features.npy')
| |
| 33 | target_train = np.load('/datasets/fashion_mnist/train_target.npy')
| |
| 34 | features_test = np.load('/datasets/fashion_mnist/test_features.npy')
| |
| 35 | target_test = np.load('/datasets/fashion_mnist/test_target.npy')
| |
| 36 | ||
| 37 | ||
| 38 | features_train = features_train.reshape(-1, 28, 28, 1) / 255.0 | |
| 39 | features_test = features_test.reshape(-1, 28, 28, 1) / 255.0 | |
| 40 | ||
| 41 | model = Sequential() | |
| 42 | ||
| 43 | model.add(Conv2D(filters=6, kernel_size=(5, 5), padding='same', activation='tanh', input_shape=(28, 28, 1))) | |
| 44 | model.add(AvgPool2D(pool_size=(2, 2))) | |
| 45 | ||
| 46 | model.add(Conv2D(filters=16, kernel_size=(5, 5), activation='tanh', input_shape=(28, 28, 1))) | |
| 47 | model.add(AvgPool2D(pool_size=(2, 2))) | |
| 48 | ||
| 49 | model.add(Flatten()) | |
| 50 | model.add(Dense(units=120, activation='tanh')) | |
| 51 | model.add(Dense(units=84, activation='tanh')) | |
| 52 | model.add(Dense(units=10, activation='softmax')) | |
| 53 | ||
| 54 | model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd', metrics=['acc']) | |
| 55 | model.summary() | |
| 56 | ||
| 57 | model.fit(features_train, target_train, epochs=1, verbose=1, steps_per_epoch=1, batch_size=1) | |
| 58 |