Получение ужасающей точности с тензорным потоком на простых данных классификации

1

Я начинаю изучать, как использовать shadoworflow. Итак, я начал с самого базового учебника, представленного здесь.

Пример обучает двухпроцессорный персептрон по mnist-данным. Я решил заменить это своими собственными данными. Таким образом, я создал метод, который генерирует двухмерные данные, принадлежащие одному из четырех классов (см. Очень простую реализацию, метод, называемый здесь get_data). Классы довольно четко линейно разделяются (см. Рисунок ниже). Поэтому я ожидаю, что какой-нибудь классификатор выбьет это из парка.

Затем я изменяю образец тензорного потока, чтобы он вместо этого читал мои данные.

И результаты просто ужасны. Похоже, что потеря не коррелирует с точностью вообще, что сильно варьируется в ходе обучения.

Является ли очевидным для всех то, что я могу потерять? Модификации, которые я сделал, действительно просты, и я неоднократно их рассматривал.

Step 1, Minibatch Loss= 2167311.5000, Training Accuracy= 0.250
Step 100, Minibatch Loss= 19227.4277, Training Accuracy= 0.250
Step 200, Minibatch Loss= 5008.3398, Training Accuracy= 0.180
Step 300, Minibatch Loss= 1909.1743, Training Accuracy= 0.461
Step 400, Minibatch Loss= 1811.5497, Training Accuracy= 0.398
Step 500, Minibatch Loss= 2363.8840, Training Accuracy= 0.414
Step 600, Minibatch Loss= 2374.1931, Training Accuracy= 0.195
Step 700, Minibatch Loss= 173.2211, Training Accuracy= 0.352
Step 800, Minibatch Loss= 1286.1042, Training Accuracy= 0.250
Step 900, Minibatch Loss= 560.9091, Training Accuracy= 0.023
Step 1000, Minibatch Loss= 163.1450, Training Accuracy= 0.195
Step 1100, Minibatch Loss= 412.8525, Training Accuracy= 0.023
Step 1200, Minibatch Loss= 155.7486, Training Accuracy= 0.094
Step 1300, Minibatch Loss= 137.8443, Training Accuracy= 0.078
Step 1400, Minibatch Loss= 59.5813, Training Accuracy= 0.062
Step 1500, Minibatch Loss= 74.8706, Training Accuracy= 0.180
Step 1600, Minibatch Loss= 7.7829, Training Accuracy= 0.250
Step 1700, Minibatch Loss= 18.4251, Training Accuracy= 0.250
Step 1800, Minibatch Loss= 76.1630, Training Accuracy= 0.211
Step 1900, Minibatch Loss= 2147.1362, Training Accuracy= 0.250
Step 2000, Minibatch Loss= 8275.0098, Training Accuracy= 0.242
Step 2100, Minibatch Loss= 36986.7539, Training Accuracy= 0.250
Step 2200, Minibatch Loss= 2482.1418, Training Accuracy= 0.164
Step 2300, Minibatch Loss= 8919.1445, Training Accuracy= 0.250
Step 2400, Minibatch Loss= 2694.6621, Training Accuracy= 0.172
Step 2500, Minibatch Loss= 262.8948, Training Accuracy= 0.172
Step 2600, Minibatch Loss= 655.5334, Training Accuracy= 0.148
Step 2700, Minibatch Loss= 278.0427, Training Accuracy= 0.250
Step 2800, Minibatch Loss= 2314.9653, Training Accuracy= 0.242
Step 2900, Minibatch Loss= 570.7736, Training Accuracy= 0.180
Step 3000, Minibatch Loss= 4217.2334, Training Accuracy= 0.250
Step 3100, Minibatch Loss= 1161.3817, Training Accuracy= 0.250
Step 3200, Minibatch Loss= 2473.6438, Training Accuracy= 0.234
Step 3300, Minibatch Loss= 2483.4707, Training Accuracy= 0.250
Step 3400, Minibatch Loss= 720.1823, Training Accuracy= 0.070
Step 3500, Minibatch Loss= 1411.0126, Training Accuracy= 0.188
Step 3600, Minibatch Loss= 1034.0898, Training Accuracy= 0.250
Step 3700, Minibatch Loss= 2143.2910, Training Accuracy= 0.258
Step 3800, Minibatch Loss= 2471.9592, Training Accuracy= 0.242
Step 3900, Minibatch Loss= 932.8969, Training Accuracy= 0.250
Step 4000, Minibatch Loss= 2762.5869, Training Accuracy= 0.180
Step 4100, Minibatch Loss= 2132.0295, Training Accuracy= 0.250
Step 4200, Minibatch Loss= 6322.4692, Training Accuracy= 0.250
Step 4300, Minibatch Loss= 6657.2842, Training Accuracy= 0.242
Step 4400, Minibatch Loss= 343629.0312, Training Accuracy= 0.195
Step 4500, Minibatch Loss= 19370.7188, Training Accuracy= 0.234
Step 4600, Minibatch Loss= 1008.6259, Training Accuracy= 0.227
Step 4700, Minibatch Loss= 952.9269, Training Accuracy= 0.125
Step 4800, Minibatch Loss= 390.7108, Training Accuracy= 0.211
Step 4900, Minibatch Loss= 846.1492, Training Accuracy= 0.188
Step 5000, Minibatch Loss= 218.7473, Training Accuracy= 0.250
Optimization Finished!
Testing Accuracy: 0.3275

Изображение 174551

Теги:
tensorflow
deep-learning
classification
perceptron

1 ответ

1

Ваша скорость обучения довольно велика; общие значения ближе к диапазону 0,001-0,01 (хотя это может варьироваться в зависимости от вашей конкретной задачи). Кроме того, возможно, вы захотите уменьшить скорость обучения с течением времени (так называемый "распад скорости обучения" (больше в замечательной лекции Андрея Карпати).

Кроме того, обучение только 5000 итераций может быть не тем, что вы ищете. Часто что-то вроде "переобучения" мешает вам точно изучать общее представление. Это означает, что вы очень хорошо понимаете (и классифицируете) ранее увиденные данные trianing, но не настолько хороши в классификации невидимых данных.
Для этого хорошей практикой является использование третьего набора данных для проверки (~ размер набора тестов). Этот набор валидации затем используется для того, чтобы увидеть, насколько хорошо обученная модель выполняет отложенные данные. Вы будете оценивать после каждых 100-й итерации или около того, а затем посмотреть, как изменения потерь в этом наборе данных.

Общим методом является "ранняя остановка", что означает, что вы прекратите тренировку, как только ваш алгоритм больше не улучшится в тестовом наборе. В этой статье Stackexchange показана хорошая визуализация с тесно связанным контекстом.

Наконец, 256 нейронов довольно много, и, возможно, даже не понадобится в вашем случае. Я не мог точно рассказать, сколько измерений имеет ваш вход, но в целом вам должно быть удобно около 16 нейронов на слой (возможно, экспериментируйте с ним и посмотрите, насколько хорошо сеть работает с разными размерами).

Многие результаты исходят из знания того, какие параметры установить, так что удачи!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню