120 практических задач. Джейд Картер. Читать онлайн. Newlib. NEWLIB.NET

Автор: Джейд Картер
Издательство: Автор
Серия:
Жанр произведения:
Год издания: 2024
isbn:
Скачать книгу
activation='relu', input_shape=(28 * 28,)))

      model.add(layers.Dense(10, activation='softmax'))

      model.compile(optimizer='sgd',

      loss='sparse_categorical_crossentropy',

      metrics=['accuracy'])

      model.fit(train_images, train_labels, epochs=5, batch_size=128)

      test_loss, test_acc = model.evaluate(test_images, test_labels)

      print(f"Точность на тестовых данных с оптимизатором SGD: {test_acc}")

      ```

      Дополнительные методы предобработки данных и регуляризации

      1. Регуляризация Dropout:

      ```python

      # Модель с Dropout

      model = models.Sequential()

      model.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))

      model.add(layers.Dropout(0.5))

      model.add(layers.Dense(10, activation='softmax'))

      model.compile(optimizer='adam',

      loss='sparse_categorical_crossentropy',

      metrics=['accuracy'])

      model.fit(train_images, train_labels, epochs=5, batch_size=128)

      test_loss, test_acc = model.evaluate(test_images, test_labels)

      print(f"Точность на тестовых данных с Dropout: {test_acc}")

      ```

      2. Стандартизация данных:

      ```python

      from sklearn.preprocessing import StandardScaler

      # Стандартизация данных

      scaler = StandardScaler()

      train_images_scaled = scaler.fit_transform(train_images)

      test_images_scaled = scaler.transform(test_images)

      model = models.Sequential()

      model.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))

      model.add(layers.Dense(10, activation='softmax'))

      model.compile(optimizer='adam',

      loss='sparse_categorical_crossentropy',

      metrics=['accuracy'])

      model.fit(train_images_scaled, train_labels, epochs=5, batch_size=128)

      test_loss, test_acc = model.evaluate(test_images_scaled, test_labels)

      print(f"Точность на тестовых данных со стандартизацией: {test_acc}")

      ```

      Эти дополнительные шаги помогут вам лучше понять поведение модели и улучшить её производительность за счёт оптимизации различных параметров и методов предобработки данных.

      2. Улучшение модели с использованием регуляризации и dropout

      – Задача: Повышение точности классификации.

      Регуляризация и Dropout – это мощные методы, которые помогают улучшить обобщающую способность модели и предотвращают переобучение. Регуляризация добавляет штраф за сложные модели, уменьшая значения весов, а Dropout отключает случайный набор нейронов в процессе обучения, что снижает зависимость между нейронами.

      Регуляризация L2

      Регуляризация L2 добавляет штраф за большие веса к функции потерь, что помогает предотвратить переобучение.

      ```python

      import tensorflow as tf

      from tensorflow.keras import layers, models, regularizers

      import numpy as np

      import matplotlib.pyplot as plt

      # Загрузка и предобработка данных

      (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

      train_images = train_images / 255.0

      test_images = test_images / 255.0

      train_images = train_images.reshape((60000, 28 * 28))

      test_images = test_images.reshape((10000, 28 * 28))

      # Модель с регуляризацией L2

      model = models.Sequential()

      model.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,), kernel_regularizer=regularizers.l2(0.001)))

      model.add(layers.Dense(10, activation='softmax'))

      # Компиляция модели

      model.compile(optimizer='adam',

      loss='sparse_categorical_crossentropy',

      metrics=['accuracy'])

      # Обучение модели

      model.fit(train_images, train_labels, epochs=5, batch_size=128)

      # Оценка модели

      test_loss, test_acc = model.evaluate(test_images, test_labels)

      print(f"Точность на тестовых данных с регуляризацией L2: {test_acc}")

      ```

      Dropout

      Dropout случайным образом отключает нейроны в процессе обучения, что снижает вероятность переобучения.

      ```python

      # Модель с Dropout

      model = models.Sequential()

      model.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))

      model.add(layers.Dropout(0.5)) # Dropout слой с вероятностью 0.5

      model.add(layers.Dense(10, activation='softmax'))

      # Компиляция модели

      model.compile(optimizer='adam',

      loss='sparse_categorical_crossentropy',

      metrics=['accuracy'])

      # Обучение модели

      model.fit(train_images, train_labels, epochs=5, batch_size=128)

      #