Регрессия Softmax с использованием Keras

Опубликовано: 21 Июля, 2021

Предпосылки: логистическая регрессия

Начало работы с Керасом:
Глубокое обучение - одно из основных направлений фреймворка машинного обучения. Он поддерживается различными библиотеками, такими как Theano, TensorFlow, Caffe, Mxnet и т. Д., Keras - одна из самых мощных и простых в использовании библиотек Python, которая построена на основе популярных библиотек глубокого обучения, таких как TensorFlow, Theano и т. Д., для создания моделей глубокого обучения.
Keras предлагает набор наборов данных, которые можно использовать для обучения и тестирования модели. Набор данных Fashion MNIST является частью доступных наборов данных, представленных в API наборов данных tf.keras. Этот набор данных содержит 70 тысяч изображений модных объектов, которые распределены по 10 категориям, таким как обувь, сумки, футболки и т. Д., С масштабированием до 28 на 28 пикселей в оттенках серого.

Подход:
Итак, подход состоял бы в том, чтобы сначала загрузить набор данных объектов MNIST, а затем мы будем использовать Matplotlib для просмотра примеров, чтобы получить лучшее представление о наборе данных. Затем, наконец, мы классифицируем их с помощью Keras API , построив нейронную сеть. Позже мы протестируем нашу обученную модель на тестовом наборе, чтобы проверить точность нашей модели.
Выполнение:
Код: загрузка данных




mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()

Вызов load_data для этого объекта даст нам два набора из двух списков, это будут значения для обучения и тестирования для графики, содержащей элементы набора данных и их метки.

Код: понимание данных

Выход:

9
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 187 26 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 179 240 237 255 240 139 83 64 43 60 54 0 1]
 [0 0 0 0 0 0 0 0 0 1 0 0 1 0 58 239 222 234 238 246 252 254 255 248 255 187 0 0]
 [0 0 0 0 0 0 0 0 0 0 2 3 0 0 194 239 226 237 235 232 230 234 234 233 249 171 0 0]
 [0 0 0 0 0 0 0 0 0 1 1 0 0 10 255 226 242 239 238 239 240 239 242 238 248 192 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 172 245 229 240 241 240 241 243 243 241 227 250 209 0 0]
 [0 0 0 0 0 0 0 0 0 6 5 0 62 255 230 236 239 241 242 241 242 242 238 238 242 253 0 0]
 [0 0 0 0 0 0 0 0 0 3 0 0 255 235 228 244 241 241 244 243 243 244 243 239 235 255 22 0]
 [0 0 0 0 0 0 0 0 0 0 0 246 228 220 245 243 237 241 242 242 242 243 239 237 235 253 106 0]
 [0 0 3 4 4 2 1 0 0 18 243 228 231 241 243 237 238 242 241 240 240 240 235 237 236 246 234 0]
 [1 0 0 0 0 0 0 0 22 255 238 227 238 239 237 241 241 237 236 238 239 239 239 239 239 237 255 0]
 [0 0 0 0 0 25 83 168 255 225 225 235 228 230 227 225 227 231 232 237 240 236 238 239 239 235 251 62]
 [0 165 225 220 224 255 255 233 229 223 227 228 231 232 235 237 233230 228 230 2332 235 233 234 235 255 58]
 [52 251 221 226 227 225 225 225 226 226 225 227 231 229 232 239 245 250 251 252 254 254 252 254 252 235 255 0]
 [31 208 230 233 233 237 236 236 241 235 241 247 251 254 242 236 233 227 219 202 193 189 186 181 171 165 190 42]
 [77 199 172 188 199 202 218 219 220 229 234 222 213 209 207 210 203 184 152 171 165 162 162 167 168 157 192 78]
 [0 45 101 140 159 174 182 186 185 188 195 197 188 175 133 70 19 0 0 209 231 218 222 224 227 217 229 93]
 [0 0 0 0 0 0 2 24 37 45 32 18 11 0 0 0 0 0 0 72 51 53 37 34 29 31 5 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]


Нормализация:
Обратите внимание, что все значения в числе находятся в диапазоне от 0 до 255. Если мы обучаем нейронную сеть, по разным причинам будет проще, если мы будем рассматривать все значения как от 0 до 1, процесс, называемый «нормализацией» ... и, к счастью, в Python такой список легко нормализовать без зацикливания. Сделать это можно так:

Код:




training_images = training_images / 255.0
test_images = test_images / 255.0

Код: реализация модели Keras




model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense( 128 , activation = tf.nn.relu),
tf.keras.layers.Dense( 10 , activation = tf.nn.softmax)])
  • Последовательный: определяет ПОСЛЕДОВАТЕЛЬНОСТЬ слоев нейронной сети.
  • Сглаживание: выравнивает изображение и преобразует его в одномерный набор.
  • Плотный: добавляет слой нейронов.
  • Каждому слою нейронов нужна функция активации, чтобы сообщить им, что делать. Вариантов много, но пока воспользуйтесь ими.
  • Relu: Фактически означает: «Если X> 0 вернет X , иначе вернет 0» - то, что он делает, он передает только значения 0 или больше на следующий уровень в сети.
  • Softmax: принимает набор значений и эффективно выбирает самое большое из них, поэтому, например, если выходные данные последнего слоя выглядят как [0,1, 0,1, 0,05, 0,1, 9,5, 0,1, 0,05, 0,05, 0,05] , он избавляет вас от ловли рыбы в поисках наибольшего значения и превращает его в [0, 0, 0, 0, 1, 0, 0, 0, 0] . Цель состоит в том, чтобы сэкономить много кода

Шаг 5: скомпилируйте модель
Следующее, что нужно сделать, когда модель определена, - это построить ее. Вы делаете это, скомпилировав его с помощью оптимизатора и функции потерь, как и раньше, а затем вы обучаете его, вызывая model.fit, запрашивая его, чтобы он соответствовал вашим обучающим данным вашим обучающим меткам, т.е. должен выяснить взаимосвязь между обучающими данными и их фактическими метками , поэтому в будущем, если у вас есть данные, которые выглядят как данные обучения, тогда он может сделать прогноз того, как эти данные будут выглядеть.
Код:




model. compile (optimizer = tf.optimizers.Adam(),
loss = 'sparse_categorical_crossentropy' ,
metrics = [ 'accuracy' ])
model.fit(training_images, training_labels, epochs = 5 )

Выход:

Инструкция по обновлению:
Colocations обрабатываются автоматически россыпью.
Эпоха 1/5
60000/60000 [==============================] - 8 с 130 мкс / образец - потеря: 0,4714 - соответствие: 0,8322
Эпоха 2/5
60000/60000 [==============================] - 8s 137us / образец - потеря: 0,3598 - соответствие: 0,8683
Эпоха 3/5
60000/60000 [==============================] - 9s 142us / образец - потеря: 0,3201 - согласно: 0,8824
Эпоха 4/5
60000/60000 [==============================] - 8s 131us / образец - потеря: 0,2949 - соответствие: 0,8917
Эпоха 5/5
60000/60000 [==============================] - 8 с 140 мкс / образец - потеря: 0,2767 - согласно: 0,9098

После завершения обучения мы должны увидеть значение точности в конце последней эпохи. Это может выглядеть примерно как 0,9098. Это говорит нам о том, что ваша нейронная сеть примерно на 91% правильно классифицирует обучающие данные. т.е. он обнаружил совпадение образца между изображением и этикетками, которое работало в 91% случаев. Неплохо, но неплохо, учитывая, что тренировались всего 5 эпох и сделали довольно быстро.

Шаг 6: Оценка модели

Но как это будет работать с невидимыми данными? Поэтому у нас есть тестовые изображения. Мы можем вызвать model.evaluate и передать два набора, и он сообщит о потерях для каждого.

Код:




model.evaluate(test_images, test_labels)

Выход:

10000/10000 [==============================] - 1 с 60 мкс / образец - потеря: 0,2908 - соответствие: 0,8956

Наконец, мы обучили нашу модель и получили точность 90% на невидимом наборе данных. Это очень хорошо.

Преимущества использования KERAS:
Мы видели, что наши вычисления сократились до 7-8 строк, а не до сотни строк кода. Это потрясающе. В целом это помогает нам экономить время и энергию, а также снижает вероятность ошибки в нашем коде.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.