View difference between Paste ID: dmi8LK6X and YreAXbq0
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