SHOW:
|
|
- or go back to the newest paste.
1 | - | # Сделайте предобработку данных: поделите значения яркости на 255. Для этого передайте специальный аргумент в загрузчик ImageDataGenerator (найдите в документации), в котором будет указано, что делить нужно на 255. |
1 | + | '''Постройте и обучите нейронную сеть на наборе данных с предметами одежды. Для этого создайте в коде три функции: |
2 | - | # Создавать и обучать модель не нужно. На экране напечатайте значения пикселей изображения из первого батча обучающей выборки. |
2 | + | загрузки обучающей выборки load_train(), |
3 | создания модели create_model(), | |
4 | - | from tensorflow.keras.preprocessing.image import ImageDataGenerator |
4 | + | запуска модели train_model(). |
5 | Добейтесь того, чтобы значение accuracy на тестовой выборке было не меньше 85%. | |
6 | - | datagen = ImageDataGenerator(validation_split=0.25, rescale=1/255) |
6 | + | Отправьте ваш код в файле с расширением .py . |
7 | ||
8 | - | train_datagen_flow = datagen.flow_from_directory( |
8 | + | Подсказка |
9 | - | '/datasets/fruits_small/', |
9 | + | |
10 | - | target_size=(150, 150), |
10 | + | Приведите значения пикселей к диапазону [0, 1]. |
11 | - | batch_size=16, |
11 | + | Попробуйте: |
12 | - | class_mode='sparse', |
12 | + | Построить полносвязную сеть с 2 или 3 слоями; |
13 | - | subset='training', |
13 | + | Применить активацию ReLU. |
14 | - | seed=12345) |
14 | + | ''' |
15 | ||
16 | - | val_datagen_flow = datagen.flow_from_directory( |
16 | + | |
17 | - | '/datasets/fruits_small/', |
17 | + | import numpy as np |
18 | - | target_size=(150, 150), |
18 | + | from tensorflow.keras import layers |
19 | - | batch_size=16, |
19 | + | from tensorflow.keras.layers import Conv2D, Flatten, Dense, AvgPool2D, MaxPooling2D |
20 | - | class_mode='sparse', |
20 | + | from tensorflow.keras.models import Sequential |
21 | - | subset='validation', |
21 | + | from tensorflow.keras.optimizers import Adam |
22 | - | seed=12345) |
22 | + | from tensorflow.keras.datasets import fashion_mnist |
23 | ||
24 | - | features, target = train_datagen_flow.next() |
24 | + | |
25 | - | print(features[0]) |
25 | + | def load_train(path): |
26 | features_train = np.load(path + 'train_features.npy') | |
27 | target_train = np.load(path + 'train_target.npy') | |
28 | features_train = features_train.reshape(features_train.shape[0], 28 * 28) / 255. | |
29 | return features_train, target_train | |
30 | ||
31 | ||
32 | def create_model(input_shape): | |
33 | model = Sequential() | |
34 | ||
35 | model.add(Dense(units=500, input_shape=input_shape, activation="relu")) | |
36 | model.add(Dense(units=300, activation="relu")) | |
37 | model.add(Dense(units=10, activation='softmax')) | |
38 | return model | |
39 | ||
40 | ||
41 | def train_model(model, train_data, test_data, batch_size=48, epochs=50, | |
42 | steps_per_epoch=None, validation_steps=None): | |
43 | optimizer = Adam(lr=0.01) | |
44 | model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy', | |
45 | metrics=['acc']) | |
46 | features_train, target_train = train_data | |
47 | features_test, target_test = test_data | |
48 | model.fit(features_train, target_train, | |
49 | validation_data=(features_test, target_test), | |
50 | batch_size=batch_size, epochs=epochs, | |
51 | steps_per_epoch=steps_per_epoch, | |
52 | validation_steps=validation_steps, | |
53 | verbose=2, shuffle=True) | |
54 | ||
55 | return model | |
56 | ||
57 | ||
58 | '''Epoch 50/50 | |
59 | 60000/60000 - 4s - loss: 0.3248 - acc: 0.8857 - val_loss: 0.4960 - val_acc: 0.8511 | |
60 | 10000/10000 - 1s - loss: 0.4960 - acc: 0.8511 | |
61 | ''' | |
62 |