Как мне установить правильное количество classLabels?

Я пытаюсь обучить нейронную сеть (классификатор) с помощью keras и преобразовать ее в формат coreml. Однако я получаю это сообщение об ошибке: The size of the output layer 'output' in the neural network does not match the number of classes in the classifier. Я дважды проверил свои наборы данных для обучения и проверки с помощью: print train_generator.class_indices print validation_generator.class_indices

Результат:

    Using TensorFlow backend.
Found 2136 images belonging to 2 classes.
Found 60 images belonging to 2 classes.
{'ThumbsDown': 0, 'ThumbsUp': 1}
{'ThumbsDown': 0, 'ThumbsUp': 1}

Вот как я конвертирую свою модель:

ml_model = coremltools.converters.keras.convert(model, input_names = 'img' ,output_names= ['output'],predicted_feature_name ='classLabel',class_labels=['thumbsDown', 'thumbsUp'], image_input_names ='img')

Таким образом, наличие двух меток класса должно быть правильным. Что я делаю неправильно?

Как мне установить правильное количество classLabels?

Я предполагаю, что вы выполняете двоичную классификацию и, вероятно, у вас есть плотный слой с блоком один в качестве последнего слоя, верно? Если это так, то конвертер сбит с толку, поскольку вы присвоили ему две метки класса. Теперь, если вы полностью удалите аргумент class_labels, он все еще работает или это обязательный аргумент?

today 08.09.2018 21:43

Когда я полностью удаляю аргумент class_labels, он работает, но я не получаю прогноза. Также вы правы насчет плотного слоя. Как я могу исправить эту проблему?

Lenny1357 09.09.2018 02:10

К сожалению, я не знаком с CoreML. Я просто догадался об этом по полученной вами ошибке и по предоставленным вами этикеткам. Также должен быть аргумент в пользу преобразования двоичных классификаторов. Я надеюсь, что кто-то, знакомый с CoreML, может вам помочь.

today 09.09.2018 08:46

Поскольку вы знаете, почему возникает ошибка, можете ли вы подумать о возможном обходном пути?

Lenny1357 09.09.2018 14:10

Вы упомянули, что не получали прогнозов. Вы уверены? Вообще ничего? Я не знаю, как выполняется прогнозирование в CoreML, но в Keras, как вы, возможно, знаете, вы можете просто вызвать метод predict(), и вы получите прогнозы. В случае двоичного классификатора прогноз будет одним единственным значением между нулем и единицей, которое соответствует вероятности принадлежности данного образца (ов) к положительному классу (то есть первому классу). Итак, если прогноз> 0,5, то он принадлежит к первому классу; в противном случае (т.е. прогноз <0,5) он будет принадлежать к отрицательному классу (нулевому классу). Таким образом, вы можете найти этикетку вручную.

today 09.09.2018 15:21
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее...
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
В рамках финального проекта Udacity Data Scietist Nanodegree я разработал алгоритм с использованием конволюционных нейронных сетей (CNN) для...
1
5
90
0

Другие вопросы по теме