SHOW:
|
|
- or go back to the newest paste.
| 1 | - | '''Постройте и обучите нейронную сеть. Начните с простого — создайте модель логистической регрессии с десятью классами в Keras. |
| 1 | + | #В конце прошлой темы вы обучили полносвязную сеть для решения задачи классификации одежды. Замените эту сеть на свёрточную со слоями: Conv2D + relu + Flatten + Dense. Примените в свёрточном слое 4 фильтра размером 3x3. |
| 2 | - | Вам понадобится: |
| 2 | + | #Обучать свёрточную сеть не нужно. Вызовите у модели функцию summary(): она напечатает на экране информацию об устройстве сети. |
| 3 | - | Функция активации 'softmax'; |
| 3 | + | |
| 4 | - | Функция потерь 'sparse_categorical_crossentropy' (англ. «разрежённая категориальная кросс-энтропия»). |
| 4 | + | from tensorflow.keras import Sequential |
| 5 | - | Слово sparse говорит о способе кодирования ответов. В задаче требуется просто номер класса, поэтому выбор пал на эту функцию потерь. |
| 5 | + | from tensorflow.keras.layers import Conv2D, Flatten, Dense |
| 6 | - | Когда ответы кодируются One-Hot-Encoding и классу 9 соответствует целый вектор [0, 0, 0, 0, 0, 0, 0, 0, 1], применяют categorical_crossentropy(). |
| 6 | + | |
| 7 | - | Обучите сеть на одной эпохе. Напечатайте прогресс обучения и значения точности на обучающей и тестовой выборках. |
| 7 | + | |
| 8 | - | ''' |
| 8 | + | |
| 9 | ||
| 10 | - | from tensorflow import keras |
| 10 | + | |
| 11 | target_train = np.load('/datasets/fashion_mnist/train_target.npy')
| |
| 12 | features_test = np.load('/datasets/fashion_mnist/test_features.npy')
| |
| 13 | target_test = np.load('/datasets/fashion_mnist/test_target.npy')
| |
| 14 | ||
| 15 | # Меняем размерности изображений и приводим числа к диапазону [0, 1]. | |
| 16 | # При изменении размера одну из размерностей можно указать равной -1, | |
| 17 | # чтобы она вычислялась автоматически | |
| 18 | features_train = features_train.reshape(-1, 28, 28, 1) / 255.0 | |
| 19 | features_test = features_test.reshape(-1, 28, 28, 1) / 255.0 | |
| 20 | - | features_train = features_train.reshape(features_train.shape[0], 28 * 28) |
| 20 | + | |
| 21 | - | features_test = features_test.reshape(features_test.shape[0], 28 * 28) |
| 21 | + | model = Sequential() |
| 22 | ||
| 23 | - | model = keras.models.Sequential() |
| 23 | + | model.add(Conv2D(filters=4, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1))) |
| 24 | - | model.add(keras.layers.Dense(10, activation='softmax', input_dim=features_train.shape[1])) |
| 24 | + | model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd', metrics=['acc']) |
| 25 | ||
| 26 | - | model.compile(loss='sparse_categorical_crossentropy', |
| 26 | + | model.add(Flatten()) |
| 27 | - | optimizer='sgd', |
| 27 | + | model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd', metrics=['acc']) |
| 28 | - | metrics=['acc']) |
| 28 | + | |
| 29 | model.add(Dense(10, activation='softmax',input_dim=features_train.shape[1])) | |
| 30 | - | model.fit(features_train, target_train, epochs=1, verbose=2, |
| 30 | + | model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd', metrics=['acc']) |
| 31 | - | validation_data=(features_test, target_test)) |
| 31 | + | |
| 32 | model.summary() | |
| 33 |