View difference between Paste ID: 9GxLuugY and yt0L3uEH
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