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