Проблема: Определенные мной слои для встраивания Keras имеют неправильный размер, как следует из полученной ошибки.
InvalidArgumentError: indices[19,0] = 99 is not in [0, 31)
Код: Блокнот Kaggle - https://www.kaggle.com/benseto/tf-ffnnregressor Не уверен, нужна ли вам учетная запись для доступа к коду. Если это так, я посмотрю, как экспортировать это извне.
Краткое изложение проблемы:
Я использую старое соревнование Kaggle "Bluebook for Bulldozers" для обучения. Я пытаюсь подготовить прямую нейронную сеть для этого упражнения по регрессии (прогнозирование цены). Поскольку у категориальных функций есть много уникальных особенностей, я выбрал стратегию обучения слоя встраивания Keras для каждой из этих категориальных функций, а не одно горячее кодирование (которое преобразует информационный фрейм в громоздкий размер).
Мне почти удалось заставить это работать, но я думаю, что есть ошибка в размере встраиваемых слоев:
Ошибка при подгонке ():
InvalidArgumentError: indices[19,0] = 99 is not in [0, 31)
В результате поиска в стеке переполнения люди пришли к выводу, что это связано с неправильным размером для слоя Embedding, обычно входное измерение должно быть vocab_size + 1.
Чтобы создать отдельный слой внедрения Keras для каждого категориального объекта, ячейка № 25 связанной записной книжки определяет каждый слой внедрения:
# Build layer to ingest each categorical features vector
def build_embedding_layer(num_categories, inputs, concats, name = 'categorical'):
categories = num_categories + 1 # Per Keras docs, embedding input dim should be input_size + 1
dimensions = min(50, categories // 2 + 1)
input = keras.layers.Input(shape = (1,), name = name)
embedding = keras.layers.Embedding(categories, dimensions, input_length = 1)(input)
embedding = keras.layers.Reshape(target_shape = (dimensions,))(embedding)
inputs.append(input)
concats.append(embedding)
В приведенной выше функции num_categories - это число уникальных записей для каждого вектора объектов, в то время как входы и конкататы представляют собой массивы, содержащие окончательные входные тензоры для каждого объекта.
Что я пробовал: Я пытался вручную incr облегчить размер слоя внедрения до большого числа, но все еще сталкиваюсь с заявленной проблемой при вызове fit ().
На данный момент я застрял, и любые предложения и / или понимание этой проблемы приветствуются .