Точность обучения не увеличивается при реализации Poin tNet Tensorflow 2.0 для набора данных ModelNet40 - PullRequest
0 голосов
/ 06 марта 2020

Я заново реализую точку tnet, используя тензор потока 2.0, и пытаюсь обучить модель, используя базу данных modelnet40 для классификации. Потеря тренировок будет уменьшаться вместе с увеличением эпох, но точность не меняется, независимо от того, использую я увеличение данных или нет. Может ли кто-нибудь помочь мне проверить, что не так с моей моделью? Некоторые слои я написал неправильно?

Для модели: https://github.com/YoungsonZhao/pointnet-tf2

Обучить модель: pytho train.py

Ниже описан процесс обучения: Точность обучения в эпоху 5: 0.057795971632003784 Точность проверки в эпоху 5: 0.04608013108372688

Точность обучения в эпоху 6: 0.05832040682435036 Точность проверки в эпоху 6: 0.04566596820950508

точность обучения в эпоху 7444,0684: 0484: 04848: 0484844: 04848: 0: 0: 0: 0: 0.

Точность обучения в эпоху 8: 0,05893701687455177 Точность проверки в эпоху 8: 0,046150218695402145

Точность обучения в эпоху 9: 0,0599127858877182 Точность проверки в эпоху 9: 0,04491410776972771 * 101 * Обучение * в 1018 * 101 * 10: 0,06009077653288841 проверки точности в эпоху 10: 0,046672698110342026

точность обучения в эпоху 28: 0.06358383595943451 Проверка точности в эпоху 28: 0.04680650308728218

Обучение точности в эпоху 29: +0,06306575238704681 Действительно Точность измерений в эпоху 29: 0,04655800759792328

Точность обучения в эпоху 30: 0,0629672259092331 Точность проверки в эпоху 30: 0,04646880552172661

Точность обучения в эпоху 31: 0,06284327059984207 306 0683 0683 0683 0683 0683 0683 0683 0683 0683 06830990686868868686868686868160000686816 только на 10-ю ступень оценки

Точность обучения в эпоху 32: 0,06370460987091064 Точность проверки в эпоху 32: 0.046411458402872086

Точность обучения в эпоху 33: 0.0630435049533844 Точность проверки в эпоху 33: 0,04663446918129921

0,6667 в точке 1033 * 0333 в 1033 * 0333 Точность валидации в эпоху 34: 0,04697216674685478

Точность обучения в эпоху 36: 0,06309753656387329 Точность валидации в эпоху 36: 0,04523269459605217

Точность обучения в эпоху 37: 0,063644222915172560 для эхолота: 0,06364422291517258

Точность обучения в эпоху 38: 0.06378089636564255 Точность проверки в эпоху 38: 0.04643694683909416

Точность обучения в эпоху 39: 0.06462635099887848 Точность проверки в эпоху 39: 0.045532163232564926

Точность обучения в эпоху 40: 0.06383810192346573 Точность проверки в эпоху 40: 0.04674915969371796

Точность обучения 0.05 : 0.04612473398447037

Точность обучения в эпоху 42: 0.06479480117559433 Точность проверки в эпоху 42: 0.0459526963531971

1 Ответ

0 голосов
/ 07 марта 2020

После двухдневной отладки я наконец нашел и исправил эту ошибку.

В функции карты набора данных я использую tf.one_hot для генерации метки. Для набора данных ModelNet40 имеется 40 категорий, поэтому при наличии одной метки tf.one_hot будет иметь общий размер вектора [40]. Однако tf.one_hot генерирует двухмерный тензор [1, 40]. После dataset.map метка Tensor имеет вид [batch_size, 1, 40]. Но модель выводится как [batch, 40], что делает точность метри c неправильной.

Поэтому я использую tf.squeeze для создания меток Tensor [batch_size, 40].

...